 reserve x,y,z for object,
   i,j,k,l,n,m for Nat,
   D,E for non empty set;
 reserve M for Matrix of D;
 reserve L for Matrix of E;
 reserve k,t,i,j,m,n for Nat,
   D for non empty set;
 reserve V for free Z_Module;
 reserve a for Element of INT.Ring,
   W for Element of V;
 reserve KL1,KL2,KL3 for Linear_Combination of V,
   X for Subset of V;
 reserve V for finite-rank free Z_Module,
   W for Element of V;
 reserve KL1,KL2,KL3 for Linear_Combination of V,
   X for Subset of V;
 reserve s for FinSequence,
   V1,V2,V3 for finite-rank free Z_Module,
   f,f1,f2 for Function of V1,V2,
   g for Function of V2,V3,
   b1 for OrdBasis of V1,
   b2 for OrdBasis of V2,
   b3 for OrdBasis of V3,
   v1,v2 for Vector of V2,
   v,w for Element of V1;
 reserve p2,F for FinSequence of V1,
   p1,d for FinSequence of INT.Ring,
   KL for Linear_Combination of V1;

theorem ThMBF2:
  for V1, V2 being finite-rank free Z_Module,
  b1 being OrdBasis of V1, b2 being OrdBasis of V2, b3 being OrdBasis of V1,
  f being bilinear-Form of V1, V2 st 0 < rank V1 holds
  BilinearM(f, b3, b2) =
    (AutMt(id(V1), b3, b1)) * BilinearM(f, b1, b2)
  proof
    let V1, V2 be finite-rank free Z_Module,
    b1 be OrdBasis of V1,
    b2 be OrdBasis of V2,
    b3 be OrdBasis of V1,
    f be bilinear-Form of V1, V2;
    assume AS: 0 < rank V1;
    set n = len b3;
    A1: len b1 = rank V1 by ThRank1;
    A3: len b3 = rank V1 by ThRank1;
    reconsider IM1 = AutMt(id(V1), b3, b1) as Matrix of n,INT.Ring
      by LMThMBF3,A3;
    reconsider M1 = IM1 as Matrix of n,INT.Ring;
    set M2 = M1 * BilinearM(f, b1, b2);
    B1: len M1 = n & width M1 = n
    & Indices M1 = [:Seg n, Seg n:] by MATRIX_0:24;
    0 < len b1 by AS,ThRank1; then
    B3: len BilinearM(f, b1, b2) = len b1
    & width BilinearM(f, b1, b2) = len b2 by MATRIX_0:23;
    then len M2 = n & width M2 = len b2 by A1,A3,B1,MATRIX_3:def 4;
    then reconsider M2 as Matrix of n,len b2, INT.Ring by A3,AS,MATRIX_0:20;
    set FM1 = M1;
    set FBM = BilinearM(f, b1, b2);
    for i, j being Nat st [i,j] in Indices BilinearM(f, b3, b2)
    holds BilinearM(f, b3, b2)*(i,j) = M2*(i,j)
    proof
      let i, j be Nat;
      assume [i,j] in Indices BilinearM(f, b3, b2); then
      B6: [i,j] in [:Seg len b3,Seg len b2 :] by AS,A3,MATRIX_0:23; then
      i in Seg len b3 & j in Seg len b2 by ZFMISC_1:87;
      then B8: i in dom b3 & j in dom b2 by FINSEQ_1:def 3; then
      B9: (BilinearM(f, b3, b2))*(i,j) = f.(b3/.i, b2/.j) by defBilinearM;
      [i,j] in Indices M2 by AS,A3,B6,MATRIX_0:23; then
      B11: M2*(i,j) = Line(FM1,i) "*" Col(FBM,j) by A1,A3,B1,B3,MATRIX_3:def 4;
      B12: len Line(FM1,i) = len b3 by B1,MATRIX_0:def 7;
      B14: len Col(FBM,j) = len b3 by B3,A1,A3,MATRIX_0:def 8;
      B13:
      now
        let k be Nat;
        assume B131: k in Seg len b1; then
        B132: k in dom FBM by B3,FINSEQ_1:def 3;
        B81: k in dom b1 by FINSEQ_1:def 3,B131;
        thus Col(FBM,j).k = FBM*(k,j) by B132,MATRIX_0:def 8
        .= f.(b1/.k, b2/.j) by B8,B81,defBilinearM;
      end;
      B135: i in Seg n by B6,ZFMISC_1:87; then
      B135A: i in dom M1 by B1,FINSEQ_1:def 3;
      B136: i in dom b3 by B135,FINSEQ_1:def 3;
      B15:
      now
        let k be Nat;
        assume BX131: 1 <= k & k <= len Line(FM1,i); then
        B131: k in Seg len b1 by FINSEQ_1:1,B12,A1,A3;
        [i,k] in Indices M1 by A1,A3,B1,B131,B135,ZFMISC_1:87;
        then consider p be FinSequence of INT.Ring such that
        B133: p = M1.i & M1*(i,k) = p.k by MATRIX_0:def 5;
        X0: Line(FM1,i).k = FM1*(i,k)
        by B1,B12,BX131,FINSEQ_1:1,MATRIX_0:def 7
        .= (AutMt(id(V1),b3,b1))*(i,k);
        M1.i = AutMt(id(V1), b3, b1)/.i by B135A,PARTFUN1:def 6
        .= (id(V1)).(b3/.i) |-- b1 by B136,Def8;
        hence Line(FM1,i).k = ((b3/.i) |-- b1).k by B133,X0;
      end;
      len Line(FM1,i) = len ((b3/.i) |-- b1) by A1,A3,B12,Def7;
      hence thesis by A1,A3,B9,B11,B12,B13,B14,B15,LMThMBF1Y,FINSEQ_1:def 18;
    end;
    hence thesis by MATRIX_0:27;
  end;
