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;
