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;
reserve p, q for FinSequence,
  X, Y, x, y for set,
  D for non empty set,
  i, j, k, l, m, n, r for Nat;
reserve a, a1, a2 for TwoValued Alternating FinSequence;
reserve fs, fs1, fs2 for FinSequence of X,
  fss, fss2 for Subset of fs;
reserve F, F1 for FinSequence of INT,
  k, m, n, ma for Nat;
reserve i,j,k,m,n for Nat,
  D for non empty set,
  p for Element of D,
  f for FinSequence of D;
reserve D for non empty set,
  p for Element of D,
  f for FinSequence of D;
reserve f for circular FinSequence of D;
reserve i, i1, i2, j, k for Nat;
reserve D for non empty set,
  f1 for FinSequence of D;

theorem
  for f1 being FinSequence holds mid(f1,i1,i2)=Rev mid(f1,i2,i1)
proof
  let f1 be FinSequence;
  set k1 = i1, k2 = i2;
  now
    per cases;
    case
A1:   k1<=k2;
      then
A2:   mid(f1,k1,k2)=(f1/^(k1-'1))|(k2-'k1+1) by Def3;
      now
        per cases by A1,XXREAL_0:1;
        case
          k1<k2;
          then mid(f1,k2,k1)=Rev mid(f1,k1,k2) by A2,Def3;
          hence thesis;
        end;
        case
A3:       k1=k2;
A4:       k1=0 or 0+1<=k1 by NAT_1:13;
          now
            per cases by A4;
            case
              k1=0;
              then
A5:           mid(f1,k1,k2)=f1|1 by A3,Th16;
              now
                per cases;
                case
                  len f1=0;
                  then f1={};
                  then f1|1={};
                  hence thesis by A3,A5;
                end;
                case
                  len f1<>0;
                  then f1 <> {};
                  then f1|1=<*f1.1*> by FINSEQ_5:20;
                  hence thesis by A3,A5,FINSEQ_5:60;
                end;
              end;
              hence thesis;
            end;
            case
              1<=k1 & k1<= len f1; then
              k1 in dom f1 by FINSEQ_3:25;
              then mid(f1,k1,k1)=<*f1.k1*> by Th15;
              hence thesis by A3,FINSEQ_5:60;
            end;
            case
              len f1<k1;
              then mid(f1,k1,k1)={} by Th17;
              hence thesis by A3;
            end;
          end;
          hence thesis;
        end;
      end;
      hence thesis;
    end;
    case
A6:   k1>k2;
      then mid(f1,k1,k2)=Rev ((f1/^(k2-'1))|(k1-'k2+1)) by Def3;
      hence thesis by A6,Def3;
    end;
  end;
  hence thesis;
end;
