reserve i,j,m,n,k for Nat,
  x,y for set,
  K for Field,
  a,L for Element of K;
reserve V1,V2 for finite-dimensional VectSp of K,
  W1,W2 for Subspace of V1,
  U1 ,U2 for Subspace of V2,
  b1 for OrdBasis of V1,
  B1 for FinSequence of V1,
  b2 for OrdBasis of V2,
  B2 for FinSequence of V2,
  bw1 for OrdBasis of W1,
  bw2 for OrdBasis of W2,
  Bu1 for FinSequence of U1,
  Bu2 for FinSequence of U2;

theorem Th28:
  for V1,V2,b1,b2,L st len b1 = len b2 for F be
linear-transformation of V1,V2 st for i st i in dom b1 holds F.(b1/.i) = L * (
b2/.i) or i+1 in dom b1 & F.(b1/.i) = L * (b2/.i) +b2/.(i+1) ex J be non-empty
  FinSequence_of_Jordan_block of L,K st AutMt(F,b1,b2) = block_diagonal(J,0.K)
proof
  defpred P[Nat] means for V1,V2,b1,b2,L st len b1 = len b2 for F be
  linear-transformation of V1,V2 st $1= card {i where i is Element of NAT: i in
dom b1 & F.(b1/.i) = L * (b2/.i)} & for i st i in dom b1 holds F.(b1/.i) = L *
  (b2/.i) or (i+1 in dom b1 & F.(b1/.i) = L * (b2/.i) +b2/.(i+1)) ex J be
non-empty FinSequence_of_Jordan_block of L,K st AutMt(F,b1,b2) = block_diagonal
  (J,0.K);
A1: P[0]
  proof
    let V1,V2,b1,b2,L such that
    len b1 = len b2;
    set Lb=len b1;
    reconsider J={} as FinSequence_of_Jordan_block of L,K by Th10;
    let F be linear-transformation of V1,V2 such that
A2: 0 = card {i where i is Element of NAT: i in dom b1 & F.(b1/.i) = L
    * (b2/.i)} and
A3: for i st i in dom b1 holds F.(b1/.i) = L * (b2/.i) or i+1 in dom
    b1 & F.(b1/.i) = L * (b2/.i) +b2/.(i+1);
    reconsider J as non-empty FinSequence_of_Jordan_block of L,K;
    take J;
    Lb=0
    proof
      assume Lb<>0;
      then
A4:   Lb in Seg Lb by FINSEQ_1:3;
A5:   dom b1=Seg Lb by FINSEQ_1:def 3;
      per cases by A3,A4,A5;
      suppose
        F.(b1/.Lb)= L * (b2/.Lb);
        then
        Lb in {i where i is Element of NAT: i in dom b1 & F.(b1/.i) = L *
        (b2/.i)} by A4,A5;
        hence thesis by A2;
      end;
      suppose
        Lb+1 in dom b1 & F.(b1/.Lb) = L *(b2/.Lb)+b2/.(Lb+1);
        then Lb+1<=Lb by FINSEQ_3:25;
        hence thesis by NAT_1:13;
      end;
    end;
    then len AutMt(F,b1,b2)=0 by MATRIX_0:def 2;
    then AutMt(F,b1,b2)={};
    hence thesis by MATRIXJ1:22;
  end;
A6: for n st P[n] holds P[n+1]
  proof
    let n such that
A7: P[n];
    set n1=n+1;
    let V1,V2,b1,b2,L such that
A8: len b1 = len b2;
A9: dom b1=dom b2 by A8,FINSEQ_3:29;
    set Lb=len b1;
    let F be linear-transformation of V1,V2 such that
A10: n1 = card {i where i is Element of NAT: i in dom b1 & F.(b1/.i) =
    L * (b2/.i)} and
A11: for i st i in dom b1 holds F.(b1/.i) = L * (b2/.i) or i+1 in dom
    b1 & F.(b1/.i) = L * (b2/.i) +b2/.(i+1);
    set FF={i where i is Element of NAT: i in dom b1 & F.(b1/.i) = L * (b2/.i)
    };
    reconsider FF as finite set by A10;
    consider x being object such that
A12: x in FF by A10,CARD_1:27,XBOOLE_0:def 1;
 ex ii be Element of NAT st ii=x & ii in dom b1 & F.(b1 /.ii) = L * (b2
    /.ii) by A12;
    then
  dom b1 <> {};
    then
 Seg Lb <> {} by FINSEQ_1:def 3;
    then
A13: Lb<>0;
A14: dom b1=Seg Lb by FINSEQ_1:def 3;
    then
A15: not Lb+1 in dom b1 by FINSEQ_3:8;
A16: Lb in dom b1 by A14,A13,FINSEQ_1:3;
    then F.(b1/.Lb)= L * (b2/.Lb) by A11,A15;
    then
A17: Lb in FF by A16;
    per cases;
    suppose
A18:  n=0;
      set J=Jordan_block(L,Lb);
      reconsider JJ=<*J*> as FinSequence_of_Jordan_block of L,K by Th11;
      now
A19:    dom JJ ={1} by FINSEQ_1:2,def 8;
        let x be object;
        assume x in dom JJ;
        then JJ.1=J & x=1 by A19,TARSKI:def 1;
        hence JJ.x is non empty by A13,Def1;
      end;
      then reconsider JJ as non-empty FinSequence_of_Jordan_block of L,K by
FUNCT_1:def 9;
      reconsider F9=F as Function of V1,V2;
      reconsider BB=block_diagonal(JJ,0.K) as Matrix of len b1,len b2,K by A8,
MATRIXJ1:34;
      set T=Mx2Tran(BB,b1,b2);
A20:  block_diagonal(JJ,0.K)=J by MATRIXJ1:34;
A21:  now
        let y be object such that
A22:    y in dom b1;
        reconsider j=y as Element of NAT by A22;
A23:    (T*b1).y=T.(b1.y) by A22,FUNCT_1:13;
A24:    b1/.j=b1.j by A22,PARTFUN1:def 6;
A25:    (F9*b1).y=F.(b1.y) by A22,FUNCT_1:13;
        now
          per cases;
          suppose
A26:        j = Lb;
            hence (T*b1).y = L*(b2/.Lb) by A20,A22,A23,A24,Th23
              .= (F9*b1).y by A11,A16,A15,A25,A24,A26;
          end;
          suppose
A27:        j <> Lb;
            ex z be object st FF={z} by A10,A18,CARD_2:42;
            then FF={Lb} by A17,TARSKI:def 1;
            then not j in FF by A27,TARSKI:def 1;
            then
A28:        F.(b1/.j) <> L * (b2/.j) by A22;
            (T*b1).y = L*(b2/.j)+ b2/.(j+1) by A20,A22,A23,A24,A27,Th23;
            hence (T*b1).y=(F9*b1).y by A11,A22,A25,A24,A28;
          end;
        end;
        hence (F9*b1).y = (T*b1).y;
      end;
      take JJ;
A29:  rng b1 c= [#]V1 by FINSEQ_1:def 4;
      dom T=[#]V1 by FUNCT_2:def 1;
      then
A30:  dom (T*b1)=dom b1 by A29,RELAT_1:27;
      dom F=[#]V1 by FUNCT_2:def 1;
      then dom (F9*b1)=dom b1 by A29,RELAT_1:27;
      then F=T by A13,A30,A21,FUNCT_1:2,MATRLIN:22;
      hence thesis by MATRLIN2:36;
    end;
    suppose
A31:  n<>0;
      defpred Q[Nat] means $1 in FF & $1 < Lb;
A32:  ex k st Q[k]
      proof
        card FF<>1 by A10,A31;
        then FF <> {Lb} by CARD_2:42;
        then consider y being object such that
A33:    y in FF and
A34:    y <> Lb by A17,ZFMISC_1:35;
        consider j be Element of NAT such that
A35:    j=y and
A36:    j in dom b1 and
        F.(b1/.j) = L * (b2/.j) by A33;
        take j;
        j<=Lb by A36,FINSEQ_3:25;
        hence thesis by A33,A34,A35,XXREAL_0:1;
      end;
A37:  for k st Q[k] holds k <= Lb;
      consider m such that
A38:  Q[m] and
A39:  for k st Q[k] holds k<= m from NAT_1:sch 6(A37,A32);
      set b1m=b1|m;
A40:  len b1m=m by A38,FINSEQ_1:59;
      set JB=Jordan_block(L,Lb-'m);
      reconsider JJ=<*JB*> as FinSequence_of_Jordan_block of L,K by Th11;
      set b19m=b1/^m;
A41:  len b19m =Lb-m by A38,RFINSEQ:def 1;
      set b29m=b2/^m;
A42:  len b29m=Lb-m by A8,A38,RFINSEQ:def 1;
      set b2m=b2|m;
A43:  len b2m=m by A8,A38,FINSEQ_1:59;
      reconsider Rb2=rng b2m, Rb29=rng b29m as linearly-independent Subset of
      V2 by MATRLIN2:22,23;
      reconsider Rb1=rng b1m, Rb19=rng b19m as linearly-independent Subset of
      V1 by MATRLIN2:22,23;
      set Lb1=Lin Rb1;
      set Lb2=Lin Rb2;
      set Lb19=Lin Rb19;
      set Lb29=Lin Rb29;
      set FRb1=F.:Rb1;
A44:  rng (F|Lb1) = F.:(the carrier of Lb1) by RELAT_1:115;
      reconsider b2m as OrdBasis of Lb2 by MATRLIN2:22;
      reconsider b1m as OrdBasis of Lb1 by MATRLIN2:22;
A45:  dom b1m = dom b2m by A40,A43,FINSEQ_3:29;
      reconsider b19m as OrdBasis of Lb19 by MATRLIN2:23;
      reconsider b29m as OrdBasis of Lb29 by MATRLIN2:23;
A46:  b2=b2m^b29m by RFINSEQ:8;
A47:  b1=b1m^b19m by RFINSEQ:8;
      then
A48:  dom b1m c= dom b1 by FINSEQ_1:26;
A49:  for i st i in dom b1m holds (F|Lb1).(b1m/.i) = L * (b2m/.i) or i+1
      in dom b1m & (F|Lb1).(b1m/.i) = L * (b2m/.i) +b2m/.(i+1)
      proof
        let i such that
A50:    i in dom b1m;
A51:    b1m.i=b1m/.i by A50,PARTFUN1:def 6;
        set i1=i+1;
A52:    F.(b1m/.i)=(F|Lb1).(b1m/.i) by FUNCT_1:49;
A53:    b2/.i=b2.i & b2.i=b2m.i by A9,A46,A48,A45,A50,FINSEQ_1:def 7
,PARTFUN1:def 6;
A54:    b1/.i=b1.i & b1.i=b1m.i by A47,A48,A50,FINSEQ_1:def 7,PARTFUN1:def 6;
        per cases by A11,A48,A50;
        suppose
          F.(b1/.i) = L * (b2/.i);
          hence thesis by A45,A50,A53,A54,A51,A52,PARTFUN1:def 6,VECTSP_4:14;
        end;
        suppose
A55:      i1 in dom b1 & F.(b1/.i) = L * (b2/.i) +b2/.i1;
          reconsider rngb2=rng b2 as Basis of V2 by MATRLIN:def 2;
A56:      i1<=m
          proof
            assume i1>m;
            then
A57:        i>=m by NAT_1:13;
            i<=m by A40,A50,FINSEQ_3:25;
            then
A58:        i=m by A57,XXREAL_0:1;
            ex ii be Element of NAT st m=ii & ii in dom b1 & F.(b1/.ii) =
            L * (b2/. ii) by A38;
            then F.(b1/.i)=L*(b2/.i)+0.V2 by A58,RLVECT_1:def 4;
            then
A59:        b2/.i1=0.V2 by A55,RLVECT_1:8;
A60:        rngb2 is linearly-independent by VECTSP_7:def 3;
            b2/.i1=b2.i1 & b2.i1 in rngb2 by A9,A55,FUNCT_1:def 3
,PARTFUN1:def 6;
            hence thesis by A59,A60,VECTSP_7:2;
          end;
A61:      1<=i1 by NAT_1:11;
          then
A62:      i1 in dom b1m by A40,A56,FINSEQ_3:25;
          then
A63:      b2m.i1=b2m/.i1 by A45,PARTFUN1:def 6;
A64:      L*(b2/.i)=L*(b2m/.i) by A45,A50,A53,PARTFUN1:def 6,VECTSP_4:14;
          b2/.i1=b2.i1 & b2.i1=b2m.i1 by A9,A46,A48,A45,A62,FINSEQ_1:def 7
,PARTFUN1:def 6;
          hence thesis by A40,A54,A51,A52,A55,A56,A61,A63,A64,FINSEQ_3:25
,VECTSP_4:13;
        end;
      end;
      FRb1 c= the carrier of Lb2
      proof
        let y be object;
        assume y in FRb1;
        then consider x being object such that
        x in dom F and
A65:    x in Rb1 and
A66:    F.x=y by FUNCT_1:def 6;
        consider i be object such that
A67:    i in dom b1m and
A68:    b1m.i=x by A65,FUNCT_1:def 3;
        reconsider i as Element of NAT by A67;
        b1m/.i=b1m.i by A67,PARTFUN1:def 6;
        then (F|Lb1).(b1m/.i)=y by A66,A68,FUNCT_1:49;
        then y=L * (b2m/.i) or y=L * (b2m/.i)+b2m/.(i+1) by A49,A67;
        hence thesis;
      end;
      then the carrier of Lin(FRb1) = F.:(the carrier of Lb1) & Lin(FRb1) is
      Subspace of Lb2 by VECTSP11:42,VECTSP_9:16;
      then F.:(the carrier of Lb1) c= the carrier of Lb2 by VECTSP_4:def 2;
      then reconsider FL=F|Lb1 as linear-transformation of Lb1,Lb2 by A44,Lm4,
FUNCT_2:6;
A69:  for i st i in dom b1m holds FL.(b1m/.i) = L * (b2m/.i) or i+1 in
      dom b1m & FL.(b1m/.i) = L * (b2m/.i) +b2m/.(i+1) by A49;
      set FF1={i where i is Element of NAT: i in dom b1m & FL.(b1m/.i) = L * (
      b2m/.i)};
A70:  FF\{Lb} c= FF1
      proof
        let x be object such that
A71:    x in FF\{Lb};
A72:    x <> Lb by A71,ZFMISC_1:56;
        x in FF by A71;
        then consider j be Element of NAT such that
A73:    j=x and
A74:    j in dom b1 and
A75:    F.(b1/.j) = L * (b2/.j);
        j<=Lb by A74,FINSEQ_3:25;
        then j <Lb by A72,A73,XXREAL_0:1;
        then
A76:    j<=m by A39,A71,A73;
        1<=j by A74,FINSEQ_3:25;
        then
A77:    j in dom b1m by A40,A76,FINSEQ_3:25;
        then
A78:    b1m/.j=b1m.j & b1m.j=b1.j by A47,FINSEQ_1:def 7,PARTFUN1:def 6;
A79:    FL.(b1m/.j)=F.(b1m/.j) & b1/.j=b1.j by A48,A77,FUNCT_1:49
,PARTFUN1:def 6;
        b2m.j=b2.j & b2/.j=b2.j by A9,A46,A48,A45,A77,FINSEQ_1:def 7
,PARTFUN1:def 6;
        then FL.(b1m/.j)=L * (b2m/.j) by A45,A75,A77,A78,A79,PARTFUN1:def 6
,VECTSP_4:14;
        hence thesis by A73,A77;
      end;
      FF1 c= FF\{Lb}
      proof
        let x be object;
        assume x in FF1;
        then consider j be Element of NAT such that
A80:    x=j and
A81:    j in dom b1m and
A82:    FL.(b1m/.j) = L * (b2m/.j);
A83:    b1m/.j=b1m.j & b1m.j=b1.j by A47,A81,FINSEQ_1:def 7,PARTFUN1:def 6;
A84:    FL.(b1m/.j)=F.(b1m/.j) & b1/.j=b1.j by A48,A81,FUNCT_1:49
,PARTFUN1:def 6;
        b2m.j=b2.j & b2/.j=b2.j by A9,A46,A48,A45,A81,FINSEQ_1:def 7
,PARTFUN1:def 6;
        then F.(b1/.j)=L * (b2/.j) by A45,A81,A82,A83,A84,PARTFUN1:def 6
,VECTSP_4:14;
        then
A85:    j in FF by A48,A81;
        j<=m by A40,A81,FINSEQ_3:25;
        hence thesis by A38,A80,A85,ZFMISC_1:56;
      end;
      then FF1=FF\{Lb} by A70,XBOOLE_0:def 10;
      then card FF1=n by A10,A17,STIRL2_1:55;
      then consider
      J be non-empty FinSequence_of_Jordan_block of L,K such that
A86:  AutMt(FL,b1m,b2m) = block_diagonal(J,0.K) by A7,A40,A43,A69;
      set JJJ=J^JJ;
A87:  Lb-m=Lb-'m by A38,XREAL_1:233;
A88:  now
        let x be object such that
A89:    x in dom JJJ;
        reconsider i=x as Nat by A89;
        per cases by A89,FINSEQ_1:25;
        suppose
A90:      i in dom J;
          then J.i is non empty by FUNCT_1:def 9;
          hence JJJ.x is non empty by A90,FINSEQ_1:def 7;
        end;
        suppose
A91:      ex j st j in dom JJ & i=len J + j;
          len JB=Lb-'m by Def1;
          then
A92:      len JB<>0 by A38,A87;
          consider j such that
A93:      j in dom JJ and
A94:      i=len J+j by A91;
          dom JJ=Seg 1 by FINSEQ_1:38;
          then j=1 by A93,FINSEQ_1:2,TARSKI:def 1;
          then JJJ.i=JJ.1 by A93,A94,FINSEQ_1:def 7;
          hence JJJ.x is non empty by A92;
        end;
      end;
      len b19m = len b29m by A8,A38,A41,RFINSEQ:def 1;
      then reconsider JB as Matrix of len b19m,len b29m,K by A41,A87;
A95:  width JB = len b19m by A41,A42,MATRIX_0:24;
      reconsider JJJ as non-empty FinSequence_of_Jordan_block of L,K by A88,
FUNCT_1:def 9;
      take JJJ;
      reconsider F9=F as Function of V1,V2;
      reconsider B=block_diagonal(J,0.K) as Matrix of len b1m,len b2m,K by A86;
A96:  width B=len b1m by A40,A43,MATRIX_0:24;
A97:  Sum Len <*B,JB*> = len B + len JB & Sum Width <*B,JB*> = width B +
      width JB by MATRIXJ1:16,20;
      set BB = block_diagonal(<*B,JB*>,0.K);
A98:    len B=len b1m by A40,A43,MATRIX_0:24;
A99:    Sum Len <*B,JB*> = len b1
      by A40,A41,A42,A97,A96,A95,A98,MATRIX_0:24;
      Sum Width <*B,JB*> = len b2
      by A8,A40,A41,A97,A96,A95;
      then reconsider BB as Matrix of len b1,len b2,K
      by A99;
      set T=Mx2Tran(BB,b1,b2);
A100: dom b19m = dom b29m by A41,A42,FINSEQ_3:29;
A101: now
        let x be object such that
A102:   x in dom b1;
        reconsider I=x as Element of NAT by A102;
A103:   (T*b1).x=T.(b1.I) by A102,FUNCT_1:13;
A104:   b1.I=b1/.I by A102,PARTFUN1:def 6;
A105:   (F9*b1).x=F.(b1.I) by A102,FUNCT_1:13;
        now
          per cases by A47,A102,FINSEQ_1:25;
          suppose
A106:       I in dom b1m;
            then
A107:       b1m/.I = b1m.I & b1.I=b1m.I by A47,FINSEQ_1:def 7,PARTFUN1:def 6;
A108:       FL.(b1m/.I) =F.(b1m/.I) by FUNCT_1:49;
            thus (T*b1).x = Mx2Tran(B,b1m,b2m).(b1m/.I) by A40,A43,A41,A42,A47
,A46,A96,A95,A103,A104,A106,Th19
              .= FL.(b1m/.I) by A86,MATRLIN2:34
              .= (F9*b1).x by A102,A108,A107,FUNCT_1:13;
          end;
          suppose
            ex j st j in dom b19m & I=len b1m + j;
            then consider j such that
A109:       j in dom b19m and
A110:       I=len b1m + j;
            now
              per cases;
              suppose
A111:           j=len b19m;
A112:           b2.I = b29m.j & b2/.I=b2.I by A9,A40,A43,A46,A100,A102,A109,
A110
,FINSEQ_1:def 7,PARTFUN1:def 6;
                thus (F9*b1).x = L*(b2/.I) by A11,A16,A15,A40,A41,A105,A104
,A110,A111
                  .= L*(b29m/.j) by A100,A109,A112,PARTFUN1:def 6,VECTSP_4:14
                  .= Mx2Tran(JB,b19m,b29m).(b19m/.j) by A109,A111,Th23;
              end;
              suppose
A113:           j<>len b19m;
A114:           (F9*b1).x = L*(b2/.I) + b2/.(I+1)
                proof
                  assume (F9*b1).x <> L*(b2/.I) + b2/.(I+1);
                  then F.(b1/.I)=L*(b2/.I) by A11,A102,A105,A104;
                  then
A115:             I in FF by A102;
                  I<>Lb & I<=Lb by A40,A41,A102,A110,A113,FINSEQ_3:25;
                  then I < Lb by XXREAL_0:1;
                  then len b1m + j<=len b1m+0 by A39,A40,A110,A115;
                  then j<=0 by XREAL_1:6;
                  hence thesis by A109,FINSEQ_3:25;
                end;
                j<=len b19m by A109,FINSEQ_3:25;
                then j<len b19m by A113,XXREAL_0:1;
                then 1<=j+1 & j+1<=len b19m by NAT_1:11,13;
                then
A116:           j+1 in dom b19m by FINSEQ_3:25;
                then b29m/.(j+1)=b29m.(j+1) & b2.(len b1m+(j+1))=b29m.(j+1)
                by A40,A43,A46,A100,FINSEQ_1:def 7,PARTFUN1:def 6;
                then
A117:           b29m/.(j+1)=b2/.(I+1) by A9,A47,A110,A116,FINSEQ_1:28
,PARTFUN1:def 6;
                b2.I = b29m.j & b2/.I=b2.I by A9,A40,A43,A46,A100,A102,A109,
A110
,FINSEQ_1:def 7,PARTFUN1:def 6;
                then L*(b29m/.j) = L*(b2/.I) by A100,A109,PARTFUN1:def 6
,VECTSP_4:14;
                then L*(b2/.I) + b2/.(I+1) = L*(b29m/.j) + b29m/.(j+1) by A117,
VECTSP_4:13
                  .= Mx2Tran(JB,b19m,b29m).(b19m/.j) by A109,A113,Th23;
                hence (F9*b1).x=Mx2Tran(JB,b19m,b29m).(b19m/.j) by A114;
              end;
            end;
            hence
            (F9*b1).x=(T*b1).x by A40,A43,A41,A42,A47,A46,A96,A95,A103,A104
,A109,A110,Th19;
          end;
        end;
        hence (F9*b1).x=(T*b1).x;
      end;
A118: rng b1 c= [#]V1 by FINSEQ_1:def 4;
      dom T=[#]V1 by FUNCT_2:def 1;
      then
A119: dom (T*b1)=dom b1 by A118,RELAT_1:27;
      dom F=[#]V1 by FUNCT_2:def 1;
      then dom (F9*b1)=dom b1 by A118,RELAT_1:27;
      then block_diagonal(JJJ,0.K)=block_diagonal(<*B,JB*>,0.K) & F=T by A13
,A119,A101,FUNCT_1:2,MATRIXJ1:35,MATRLIN:22;
      hence thesis by MATRLIN2:36;
    end;
  end;
  let V1,V2,b1,b2,L such that
A120: len b1 = len b2;
  let F be linear-transformation of V1,V2 such that
A121: for i st i in dom b1 holds F.(b1/.i) = L * (b2/.i) or i+1 in dom
  b1 & F.(b1/.i) = L * (b2/.i) +b2/.(i+1);
  set FF={i where i is Element of NAT: i in dom b1 & F.(b1/.i) = L * (b2/.i)};
  FF c= dom b1
  proof
    let x be object;
    assume x in FF;
    then ex i be Element of NAT st x=i & i in dom b1 & F.(b1/.i) = L * (b2/.i
    );
    hence thesis;
  end;
  then reconsider FF as finite set;
  for n holds P[n] from NAT_1:sch 2(A1,A6);
  then P[card FF];
  hence thesis by A120,A121;
end;
