reserve D for non empty set,
  f for FinSequence of D,
  p, p1, p2, p3, q for Element of D,
  i, j, k, l, n for Nat;

theorem Th32:
  1 <= i & i <= len f & 1 <= j & j <= len f implies Replace(Swap(f
  , i, j), i, p) = Swap(Replace(f, j, p), i, j)
proof
  assume that
A1: 1 <= i and
A2: i <= len f and
A3: 1 <= j and
A4: j <= len f;
A5: i in dom f by A1,A2,FINSEQ_3:25;
  per cases by XXREAL_0:1;
  suppose
A6: i = j;
    then Replace(Swap(f,i,j),i,p) = Replace(f,i,p) by Th19;
    hence thesis by A6,Th19;
  end;
  suppose
A7: i < j;
    set N = <*f/.j*>;
    set M = (f|(i-'1));
    set F = Swap(f,i,j);
    set P = M^N;
A8: F = P^(f/^i)|(j-'i-'1)^<*f/.i*>^(f/^j) by A1,A4,A7,Th27
      .= P^(f/^i)|(j-'i-'1)^(<*f/.i*>^(f/^j)) by FINSEQ_1:32
      .= P^((f/^i)|(j-'i-'1)^(<*f/.i*>^(f/^j))) by FINSEQ_1:32;
    set F1 = Replace(f,j,p);
    i <= len F1 by A2,FUNCT_7:97;
    then
A9: i in dom F1 by A1,FINSEQ_3:25;
A10: f.i = F1.i by A7,FUNCT_7:32
      .= F1/.i by A9,PARTFUN1:def 6;
A11: j <= len F1 by A4,FUNCT_7:97;
    then
A12: j in dom F1 by A3,FINSEQ_3:25;
    set G1 = (f|(j -'1));
A13: j -'1 <= j by NAT_D:35;
A14: i-'1 < j-'1 by A1,A7,NAT_D:56;
    then
A15: i -'1 <= len G1 by A4,A13,FINSEQ_1:59,XXREAL_0:2;
    set H1 = <*p*>;
    set Q = (f/^i)|(j-'i-'1)^(<*f/.i*>^(f/^j));
A16: i -'1 <= i by NAT_D:35;
A17: i <= len F by A2,Th18;
    len P = len M + len N by FINSEQ_1:22
      .= len M + 1 by FINSEQ_1:39
      .= i -'1 + 1 by A2,A16,FINSEQ_1:59,XXREAL_0:2
      .= i by A1,XREAL_1:235;
    then
A18: Replace(F,i,p) = (F|(i-'1))^<*p*>^(F/^len P) by A1,A17,Def1
      .= (F|(i-'1))^<*p*>^Q by A8,FINSEQ_5:37
      .= ((M^(N^Q))|(i-'1))^<*p*>^Q by A8,FINSEQ_1:32
      .= ((M^(N^Q))|len M)^<*p*>^Q by A2,A16,FINSEQ_1:59,XXREAL_0:2
      .= M^<*p*>^Q by FINSEQ_5:23;
A19: len (G1^H1) = len G1 + len H1 by FINSEQ_1:22
      .= len G1 + 1 by FINSEQ_1:39
      .= j -'1 + 1 by A4,A13,FINSEQ_1:59,XXREAL_0:2
      .= j by A3,XREAL_1:235;
A20: (F1/^i)|(j-'i-'1) = (F1/^i)|(j-'(i+1)) by NAT_2:30
      .= (F1/^i)|(j-'1-'i) by NAT_2:30
      .= (F1|(j-'1))/^i by FINSEQ_5:80
      .= ((G1^H1^(f/^j))|(j-'1))/^i by A3,A4,Def1
      .= ((G1^(H1^(f/^j)))|(j-'1))/^i by FINSEQ_1:32
      .= ((G1^(H1^(f/^j)))|len G1)/^i by A4,A13,FINSEQ_1:59,XXREAL_0:2
      .= G1/^i by FINSEQ_5:23
      .= (f/^i)|((j-'1)-'i) by FINSEQ_5:80
      .= (f/^i)|(j-'(1+i)) by NAT_2:30
      .= (f/^i)|(j-'i-'1) by NAT_2:30;
A21: p = F1.j by A3,A4,Lm2
      .= F1/.j by A12,PARTFUN1:def 6;
A22: F1|(i-'1) = (G1^H1^(f/^j))|(i-'1) by A3,A4,Def1
      .= (G1^(H1^(f/^j)))|(i-'1) by FINSEQ_1:32
      .= G1|(i-'1) by A15,FINSEQ_5:22
      .= f|(i-'1) by A14,FINSEQ_5:77;
A23: F1/^j = (G1^H1^(f/^j))/^j by A3,A4,Def1
      .= (f/^j) by A19,FINSEQ_5:37;
    Swap(F1,i,j) = (F1|(i-'1))^<*F1/.j*>^(F1/^i)|(j-'i-'1)^<*F1/.i*>^(F1
    /^j) by A1,A7,A11,Th27
      .= M^<*p*>^(f/^i)|(j-'i-'1)^(<*f.i*>^(f/^j)) by A23,A22,A20,A10,A21,
FINSEQ_1:32
      .= M^<*p*>^(f/^i)|(j-'i-'1)^(<*f/.i*>^(f/^j)) by A5,PARTFUN1:def 6
      .= M^<*p*>^((f/^i)|(j-'i-'1)^(<*f/.i*>^(f/^j))) by FINSEQ_1:32;
    hence thesis by A18;
  end;
  suppose
A24: i > j;
    then consider k be Nat such that
A25: i = j + k by NAT_1:10;
    reconsider i,j,k as Element of NAT by ORDINAL1:def 12;
A26: i - j > j - j by A24,XREAL_1:9;
    then
A27: k = i -'j by A25,XREAL_0:def 2;
    set X = f/^i;
    set W = <*f/.j*>;
    set V = (f/^j)|(i-'j-'1);
    set N = <*f/.i*>;
    set M = (f|(j-'1));
    set F = Swap(f,j,i);
    set P = M^N;
A28: F = P^V^W^X by A2,A3,A24,Th27
      .= P^V^(W^X) by FINSEQ_1:32
      .= P^(V^(W^X)) by FINSEQ_1:32
      .= P^(V^W^X) by FINSEQ_1:32;
A29: j - 1 >= 1 - 1 by A3,XREAL_1:9;
A30: k+j-'1 = k+j-1 by A25,A26,NAT_1:14,NAT_D:37
      .= k+(j-1)
      .= k+(j-'1) by A29,XREAL_0:def 2;
A31: k = 1+(k-'1) by A25,A26,NAT_1:14,XREAL_1:235;
    set Q = V^W^X;
A32: j -'1 <= j by NAT_D:35;
    set F1 = Replace(f,j,p);
    set G1 = (f|(j -'1));
A33: j -'1 <= j by NAT_D:35;
    set H1 = <*p*>;
    j <= len F1 by A4,FUNCT_7:97;
    then
A34: j in dom F1 by A3,FINSEQ_3:25;
A35: len (G1^H1) = len G1 + len H1 by FINSEQ_1:22
      .= len G1 + 1 by FINSEQ_1:39
      .= j -'1 + 1 by A4,A33,FINSEQ_1:59,XXREAL_0:2
      .= j by A3,XREAL_1:235;
    then
A36: F1/^i = ((G1^H1)^(f/^j))/^(len (G1^H1)+k) by A3,A4,A25,Def1
      .= f/^j/^k by FINSEQ_5:36
      .= f/^i by A25,FINSEQ_6:81;
    k >= 1 by A25,A26,NAT_1:14;
    then
A37: k - 1 >= 1 - 1 by XREAL_1:9;
A38: j+k-'1 = j+k-1 by A3,NAT_D:37
      .= j+(k-1)
      .= j+(k-'1) by A37,XREAL_0:def 2;
A39: i <= len F1 by A2,FUNCT_7:97;
    then
A40: i in dom F1 by A1,FINSEQ_3:25;
A41: (F1/^j)|(i-'j-'1) = (F1/^j)|(i-'(j+1)) by NAT_2:30
      .= (F1/^j)|(i-'1-'j) by NAT_2:30
      .= (F1|(i-'1))/^j by FINSEQ_5:80
      .= (((G1^H1)^(f/^j))|(j+(k-'1)))/^j by A3,A4,A25,A38,Def1
      .= ((G1^H1)^((f/^j)|(k-'1)))/^len (G1^H1) by A35,GENEALG1:2
      .= (f/^j)|(i-'j-'1) by A27,FINSEQ_5:37;
A42: F1|(j-'1) = (G1^H1^(f/^j))|(j-'1) by A3,A4,Def1
      .= (G1^(H1^(f/^j)))|(j-'1) by FINSEQ_1:32
      .= (G1^(H1^(f/^j)))|len G1 by A4,A33,FINSEQ_1:59,XXREAL_0:2
      .= G1 by FINSEQ_5:23;
A43: p = F1.j by A3,A4,Lm2
      .= F1/.j by A34,PARTFUN1:def 6;
A44: f.i = F1.i by A24,FUNCT_7:32
      .= F1/.i by A40,PARTFUN1:def 6;
A45: Swap(F1,i,j) = Swap(F1,j,i) by Th21
      .= (F1|(j-'1))^<*F1/.i*>^(F1/^j)|(i-'j-'1)^<*F1/.j*>^(F1/^i) by A3,A24
,A39,Th27
      .= (f|(j-'1))^<*f/.i*>^(f/^j)|(i-'j-'1)^<*p*>^(f/^i) by A5,A36,A42,A41
,A44,A43,PARTFUN1:def 6;
A46: i-'j <> 0 by A26,XREAL_0:def 2;
    i -'1 <= i by NAT_D:35;
    then i -'1 <= len f by A2,XXREAL_0:2;
    then i -'1-'j <= len f -'j by NAT_D:42;
    then i -'1-'j <= len (f/^j) by RFINSEQ:29;
    then i -'(1+j) <= len (f/^j) by NAT_2:30;
    then
A47: i-'j-'1 <= len (f/^j) by NAT_2:30;
    then
A48: len V = k-'1 by A27,FINSEQ_1:59;
A49: len P = len M + len N by FINSEQ_1:22
      .= len M + 1 by FINSEQ_1:39
      .= j -'1 + 1 by A4,A32,FINSEQ_1:59,XXREAL_0:2
      .= j by A3,XREAL_1:235;
A50: i <= len F by A2,Th18;
A51: len (V^W) = len V + len W by FINSEQ_1:22
      .= len V + 1 by FINSEQ_1:39
      .= i-'j-'1 + 1 by A47,FINSEQ_1:59
      .= i-'j by A46,NAT_1:14,XREAL_1:235;
    Replace(Swap(f,i,j),i,p) = Replace(F,i,p) by Th21
      .= (F|(i-'1))^<*p*>^((P^Q)/^(j+k)) by A1,A25,A28,A50,Def1
      .= (F|(i-'1))^<*p*>^(((V^W)^X)/^len (V^W)) by A27,A49,A51,FINSEQ_5:36
      .= (F|(k+(j-'1)))^<*p*>^X by A25,A30,FINSEQ_5:37
      .= ((M^(N^Q))|((j-'1)+k))^<*p*>^X by A28,FINSEQ_1:32
      .= ((M^(N^Q))|(len M +k))^<*p*>^X by A4,A32,FINSEQ_1:59,XXREAL_0:2
      .= (M^((N^Q)|k))^<*p*>^X by GENEALG1:2
      .= (M^((N^Q)|(len N+(k-'1))))^<*p*>^X by A31,FINSEQ_1:39
      .= (M^(N^(Q|(k-'1))))^<*p*>^X by GENEALG1:2
      .= (M^(N^((V^(W^X))|(k-'1))))^<*p*>^X by FINSEQ_1:32
      .= (M^(N^V))^<*p*>^X by A48,FINSEQ_5:23
      .= (M^N^V)^<*p*>^X by FINSEQ_1:32;
    hence thesis by A45;
  end;
end;
