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 Th30:
  for V be VectSp of K for F be linear-transformation of V,V, V1
be finite-dimensional Subspace of V, F1 be linear-transformation of V1,V1 st V1
  = ker ((F+(-L)*id V) |^n) & F|V1=F1 ex J be non-empty
  FinSequence_of_Jordan_block of L,K, b1 be OrdBasis of V1 st AutMt(F1,b1,b1) =
  block_diagonal(J,0.K)
proof
  let V be VectSp of K;
  let F be linear-transformation of V,V;
  let V1 be finite-dimensional Subspace of V;
  let F1 be linear-transformation of V1,V1 such that
A1: V1 = ker ((F+(-L)*id V) |^n) and
A2: F|V1=F1;
  set FL=F+(-L)*id V;
  reconsider FLV=FL|V1 as nilpotent linear-transformation of V1,V1 by A1,Th14;
A3: now
    let x be object;
    assume x in dom FLV;
    then reconsider v1=x as Vector of V1 by FUNCT_2:def 1;
    reconsider v=v1 as Vector of V by VECTSP_4:10;
    (id V).v=v by FUNCT_1:18;
    then
A4: (-L)*((id V).v)=(-L)*((id V1).v1) by FUNCT_1:18,VECTSP_4:14;
A5: F.v1=F1.v1 by A2,FUNCT_1:49;
    thus FLV.x = (F+(-L)*id V).v by FUNCT_1:49
      .= F.v + ((-L)*id V).v by MATRLIN:def 3
      .= F.v+(-L)*((id V).v) by MATRLIN:def 4
      .= F1.v1+(-L)*((id V1).v1) by A4,A5,VECTSP_4:13
      .= F1.v1+((-L)*id V1).v1 by MATRLIN:def 4
      .= (F1+(-L)*id V1).x by MATRLIN:def 3;
  end;
  dom FLV = the carrier of V1 by FUNCT_2:def 1
    .= dom (F1+(-L)*(id V1)) by FUNCT_2:def 1;
  then
A6: FLV=F1+(-L)*(id V1) by A3;
  consider J be non-empty FinSequence_of_Jordan_block of 0.K,K, b1 be OrdBasis
  of V1 such that
A7: AutMt(FLV,b1,b1) = block_diagonal(J,0.K) by Th29;
  L+0.K=L by RLVECT_1:def 4;
  then reconsider JM=J (+) mlt(len J|->L,1.(K,Len J)) as
  FinSequence_of_Jordan_block of L,K by Th12;
  now
    let x be object such that
A8: x in dom JM;
    reconsider i=x as Nat by A8;
A9: JM.i = J.i + mlt(len J|->L,1.(K,Len J)).i by A8,MATRIXJ1:def 10;
    dom JM=dom J by MATRIXJ1:def 10;
    then J.i <> {} by A8,FUNCT_1:def 9;
    hence JM.x is non empty by A9,MATRIX_3:def 3;
  end;
  then reconsider JM as non-empty FinSequence_of_Jordan_block of L,K by
FUNCT_1:def 9;
  take JM,b1;
  set Aid=AutMt(id V1,b1,b1);
  set AF1=AutMt(F1,b1,b1);
A10: now
A11: Indices Aid=Indices AF1 by MATRIX_0:26;
    let i,j such that
A12: [i,j] in Indices AF1;
    Indices (AF1+(-L)*Aid)= Indices AF1 by MATRIX_0:26;
    hence (AF1+(-L)*Aid+L*Aid)*(i,j) = (AF1+(-L)*Aid)*(i,j)+(L*Aid)*(i,j) by
A12,MATRIX_3:def 3
      .=(AF1*(i,j)+((-L)*Aid)*(i,j))+(L*Aid)*(i,j) by A12,MATRIX_3:def 3
      .= AF1*(i,j)+(((-L)*Aid)*(i,j) +(L*Aid)*(i,j)) by RLVECT_1:def 3
      .= AF1*(i,j)+((-L)*(Aid*(i,j)) +(L*Aid)*(i,j)) by A12,A11,MATRIX_3:def 5
      .= AF1*(i,j)+((-L)*(Aid*(i,j)) +L*(Aid*(i,j))) by A12,A11,MATRIX_3:def 5
      .= AF1*(i,j)+(-L+L)*(Aid*(i,j)) by VECTSP_1:def 3
      .= AF1*(i,j)+0.K*(Aid*(i,j)) by VECTSP_1:16
      .= AF1*(i,j)+0.K
      .= AF1*(i,j) by RLVECT_1:def 4;
  end;
A13: Len mlt(len J|->L,1.(K,Len J)) = Len 1.(K,Len J) by MATRIXJ1:62
    .= Len J by MATRIXJ1:56;
  dom Len J=dom 1.(K,Len J) by MATRIXJ1:def 8;
  then
A14: len 1.(K,Len J) = len (Len J) by FINSEQ_3:29
    .= len J by CARD_1:def 7;
A15: Sum Len J = len AutMt(FLV,b1,b1) by A7,MATRIXJ1:def 5
    .= len b1 by MATRIX_0:def 2;
A16: Width mlt(len J|->L,1.(K,Len J)) = Width 1.(K,Len J) by MATRIXJ1:62
    .= Len J by MATRIXJ1:56
    .= Width J by MATRIXJ1:46;
  Mx2Tran(AutMt((-L)*(id V1),b1,b1),b1,b1) = (-L)*(id V1) by MATRLIN2:34
    .= (-L)*Mx2Tran(Aid,b1,b1) by MATRLIN2:34
    .= Mx2Tran((-L)*Aid,b1,b1) by MATRLIN2:38;
  then AutMt((-L)*(id V1),b1,b1) = (-L)*Aid by MATRLIN2:39;
  then AutMt(FLV,b1,b1)+L*Aid = AF1+(-L)*Aid+L*Aid by A6,MATRLIN:42
    .= AF1 by A10,MATRIX_0:27;
  hence AF1 = block_diagonal(J,0.K)+L*1.(K,Sum Len J) by A7,A15,MATRLIN2:28
    .= block_diagonal(J,0.K)+L*block_diagonal(1.(K,Len J),0.K) by MATRIXJ1:61
    .= block_diagonal(J,0.K)+ block_diagonal(mlt(len J|->L,1.(K,Len J)),L*0.
  K) by A14,MATRIXJ1:65
    .= block_diagonal(J,0.K)+block_diagonal(mlt(len J|->L,1.(K,Len J)),0.K)
    .= block_diagonal(JM,0.K+0.K) by A13,A16,MATRIXJ1:72
    .= block_diagonal(JM,0.K) by RLVECT_1:def 4;
end;
