reserve x,y,z for set;
reserve f,f1,f2,f3 for FinSequence,
  p,p1,p2,p3 for set,
  i,k for Nat;
reserve D for non empty set,
  p,p1,p2,p3 for Element of D,
  f,f1,f2 for FinSequence of D;
reserve D for non empty set;

theorem
  for f being FinSequence, k1,k2 being Nat
    holds len mid(f,k1,k2)<=len f
proof
  let f be FinSequence;
  let k1, k2 be Nat;
  per cases;
  suppose k1 <= k2;
    then A1: mid(f,k1,k2) = (f/^(k1-'1))|(k2-'k1+1) by Def3;
    per cases;
    suppose len (f/^(k1-'1)) <= (k2-'k1+1);
      then A2: mid(f,k1,k2) = f/^(k1-'1) by A1, FINSEQ_1:58;
      per cases;
      suppose A3: k1-'1 <= len f;
        len f - (k1-'1) <= len f - 0 by XREAL_1:10;
        hence len mid(f,k1,k2) <= len f by A2, A3, RFINSEQ:def 1;
      end;
      suppose not (k1-'1 <= len f);
        then f/^(k1-'1) = {} by RFINSEQ:def 1;
        hence len mid(f,k1,k2) <= len f by A2;
      end;
    end;
    suppose len (f/^(k1-'1)) > (k2-'k1+1);
      then A5: len mid(f,k1,k2) <= len (f/^(k1-'1)) by A1, FINSEQ_1:59;
      per cases;
      suppose k1-'1 <= len f;
        then A6: len mid(f,k1,k2) <= len f - (k1-'1) by A5, RFINSEQ:def 1;
        len f - (k1-'1) <= len f - 0 by XREAL_1:10;
        hence thesis by A6, XXREAL_0:2;
      end;
      suppose not (k1-'1 <= len f);
        then f/^(k1-'1) = {} by RFINSEQ:def 1;
        hence thesis by A5;
      end;
    end;
  end;
  suppose k1 > k2;
    then A7: mid(f,k1,k2) = Rev ((f/^(k2-'1))|(k1-'k2+1)) by Def3;
    set m = (f/^(k2-'1))|(k1-'k2+1);
    len m <= len f
    proof
      per cases;
      suppose len (f/^(k2-'1)) <= (k1-'k2+1);
        then A8: m = f/^(k2-'1) by FINSEQ_1:58;
        per cases;
        suppose A9: k2-'1 <= len f;
          len f - (k2-'1) <= len f - 0 by XREAL_1:10;
          hence thesis by A8, A9, RFINSEQ:def 1;
        end;
        suppose not (k2-'1 <= len f);
          then f/^(k2-'1) = {} by RFINSEQ:def 1;
          hence thesis;
        end;
      end;
      suppose len (f/^(k2-'1)) > (k1-'k2+1);
        then A11: len m <= len (f/^(k2-'1)) by FINSEQ_1:59;
        per cases;
        suppose k2-'1 <= len f;
          then A12: len m <= len f - (k2-'1) by A11, RFINSEQ:def 1;
          len f - (k2-'1) <= len f - 0 by XREAL_1:10;
          hence thesis by A12, XXREAL_0:2;
        end;
        suppose not (k2-'1 <= len f);
          then f/^(k2-'1) = {} by RFINSEQ:def 1;
          hence thesis;
        end;
      end;
    end;
    hence thesis by A7, FINSEQ_5:def 3;
  end;
end;
