
theorem ThGM2:
  for L being non trivial RATional positive-definite Z_Lattice,
  b being OrdBasis of L holds
  Det GramMatrix(b) <> 0.F_Real
  proof
    let L be non trivial RATional positive-definite Z_Lattice,
    b be OrdBasis of L;
    reconsider M = GramMatrix(b) as Matrix of rank(L),F_Rat by ThGM1;
    assume Det GramMatrix(b) = 0.F_Real; then
    AS: Det M = 0.F_Rat by LmSign1A;
    A1: len M = rank L by MATRIX_0:def 2;
    A2: the_rank_of M <> rank L by AS,MATRIX13:83;
    B3: dom M = Seg (len M) by FINSEQ_1:def 3
    .= Seg (rank L) by MATRIX_0:def 2;
    B4: dom M = Seg (len b) by B3,ZMATRLIN:49
    .= dom b by FINSEQ_1:def 3;
    dom b = Seg (rank L) & rank L is Element of NAT
    by B3,B4,ORDINAL1:def 12;
    then len b = rank L by FINSEQ_1:def 3; then
    C4:Indices (BilinearM(InnerProduct(L),b,b))
    = [:Seg (rank L),Seg (rank L):] by MATRIX_0:24;
    OTO2: M is one-to-one
    proof
      assume not M is one-to-one;
      then consider m1,m2 be object such that
      B1: m1 in dom M & m2 in dom M &
      M.m1 = M.m2 & m1 <> m2;
      B3: dom M = Seg (len GramMatrix(b)) by FINSEQ_1:def 3
      .= Seg (rank L) by MATRIX_0:def 2;
      B4: dom M = Seg (len b) by B3,ZMATRLIN:49
      .= dom b by FINSEQ_1:def 3;
      reconsider m1, m2 as Nat by B1;
      B5: for n being Nat st n in dom b holds
      <; b/.n, b/.m1 ;> = <; b/.n, b/.m2 ;>
      proof
        let n be Nat such that
        C1: n in dom b;
        C3: [m1,n] in Indices (BilinearM(InnerProduct(L),b,b))
        by C1,B1,B3,B4,C4,ZFMISC_1:87;
        C6: [m2,n] in Indices (BilinearM(InnerProduct(L),b,b))
        by C4,C1,B1,B3,B4,ZFMISC_1:87;
        X1: ex p being FinSequence of F_Real
        st p = (BilinearM(InnerProduct(L),b,b)).m1
        & (BilinearM(InnerProduct(L),b,b))*(m1,n) = p.n
        by MATRIX_0:def 5,C3;
        thus <; b/.n, b/.m1 ;> = <; b/.m1, b/.n ;> by ZMODLAT1:def 3
        .= (InnerProduct(L)).(b/.m1, b/.n)
        .= (BilinearM(InnerProduct(L),b,b))*(m1,n)
        by B1,B4,C1,ZMODLAT1:def 32
        .= (BilinearM(InnerProduct(L),b,b))*(m2,n) by B1,C6,X1,MATRIX_0:def 5
        .= (InnerProduct(L)).(b/.m2, b/.n)
        by B1,B4,C1,ZMODLAT1:def 32
        .= <; b/.m2, b/.n ;>
        .= <; b/.n, b/.m2 ;> by ZMODLAT1:def 3;
      end;
      b.m1 = b/.m1 by B1,B4,PARTFUN1:def 6
      .= b/.m2 by B5,ZL2ThSc1
      .= b.m2 by B1,B4,PARTFUN1:def 6;
      then not b is one-to-one by B1,B4;
      hence contradiction by ZMATRLIN:def 5;
    end; then
    AA1: lines M is linearly-dependent by A2,MATRIX13:121;
    lines M c= the carrier of (rank L)-VectSp_over F_Rat;
    then reconsider M1 = M as FinSequence of (rank L)-VectSp_over F_Rat
    by FINSEQ_1:def 4;
    consider r be FinSequence of F_Rat,
    rM1 be FinSequence of (rank L)-VectSp_over F_Rat such that
    Z1:len r = (rank L) & len rM1 = (rank L) &
    (for i being Nat st i in dom rM1
    holds rM1.i = r/.i * M1/.i) &
    Sum (rM1) = 0.((rank L)-VectSp_over F_Rat) &
    r <> Seg (len r) --> 0.F_Rat by A1,AA1,OTO2,LMBASE2;
    consider K be Integer,Kr be FinSequence of INT.Ring such that
    Z2: K <> 0 & len Kr = (rank L)
    & for i being Nat st i in dom Kr holds Kr.i = K*r/.i by Z1,LMThGM23;
    reconsider K1 = K as Element of F_Rat by INT_1:def 2,NUMBERS:14;
    defpred P[Nat,object] means
    ex rM1i being Element of (rank L)-VectSp_over F_Rat
    st rM1i = rM1.$1 & $2 = K1 * rM1i;
    KRM10: for k being Nat st k in Seg (rank L)
    ex x being Element of the carrier of (rank L)-VectSp_over F_Rat st P[k,x]
    proof
      let k be Nat;
      assume KRM12: k in Seg (rank L);
      dom rM1 = Seg (rank L) by Z1,FINSEQ_1:def 3;
      then rM1.k = rM1/.k by KRM12,PARTFUN1:def 6;
      then reconsider rM1i = rM1.k as Element of (rank L)-VectSp_over F_Rat;
      K1 * rM1i is Element of the carrier of (rank L)-VectSp_over F_Rat;
      hence thesis;
    end;
    consider KrM1 be FinSequence of the carrier of (rank L)-VectSp_over F_Rat
    such that
    KRM11: dom KrM1 = Seg (rank L) &
    for k being Nat st k in Seg (rank L) holds P[k,KrM1.k]
    from FINSEQ_1:sch 5(KRM10);
    KRM1Z: rank L is Element of NAT by ORDINAL1:def 12; then
    KRM1: len KrM1 = rank L by FINSEQ_1:def 3,KRM11;
    Z3: for i being Nat st i in dom KrM1 holds
    ex M1i being Element of (rank L)-VectSp_over F_Rat,
    Kri being Element of F_Rat
    st M1i = M1.i & Kri = Kr.i & KrM1.i = Kri * M1i
    proof
      let i be Nat;
      assume Z300: i in dom KrM1;
      then consider rM1i be Element of (rank L)-VectSp_over F_Rat such that
      Z301: rM1i = rM1.i & KrM1.i = K1 * rM1i by KRM11;
      Z303: i in dom rM1 by Z1,Z300,KRM11,FINSEQ_1:def 3;
      Z305: i in dom Kr by Z2,Z300,KRM11,FINSEQ_1:def 3;
      Z307: dom M1 = Seg (rank L) by A1,FINSEQ_1:def 3;
      then M1/.i = M1.i by KRM11,Z300,PARTFUN1:def 6;
      then reconsider M1i = M1.i as Element of (rank L)-VectSp_over F_Rat;
      Kr.i = Kr/.i by PARTFUN1:def 6,Z305;
      then reconsider Kri = Kr.i as Element of F_Rat by NUMBERS:14;
      take M1i,Kri;
      thus M1i = M1.i & Kri = Kr.i;
      thus KrM1.i = K1 * (r/.i * M1/.i) by Z1,Z301,Z303
      .= K1 * (r/.i * M1i) by Z300,Z307,KRM11,PARTFUN1:def 6
      .= (K1*r/.i) * M1i by VECTSP_1:def 16
      .= Kri * M1i by Z2,Z305;
    end;
    for k being Nat for v being Element of (rank L)-VectSp_over F_Rat
    st k in dom KrM1 & v = rM1.k holds KrM1.k = K1 * v
    proof
      let k be Nat;
      let v be Element of (rank L)-VectSp_over F_Rat;
      assume Z41: k in dom KrM1 & v = rM1.k;
      then consider rM1i be Element of (rank L)-VectSp_over F_Rat such that
      Z42: rM1i = rM1.k & KrM1.k = K1 * rM1i by KRM11;
      thus thesis by Z42,Z41;
    end;
    then
    Z4A: Sum (KrM1) = K1*Sum(rM1) by KRM1,Z1,RLVECT_2:66
    .= 0.((rank L)-VectSp_over F_Rat) by Z1,VECTSP_1:15;
    Z4B: Kr <> Seg (len Kr) --> 0.(INT.Ring)
    proof
      set f = Seg (len Kr) --> 0.(INT.Ring);
      set g = Seg (len r) --> 0.F_Rat;
      dom r = Seg len r by FINSEQ_1:def 3
      .= dom g by FUNCT_2:def 1;
      then consider i be object such that
      R1: i in dom r & r.i <> g.i by Z1;
      R2: i in Seg len r by FINSEQ_1:def 3,R1;
      reconsider i as Nat by R1;
      r.i <> 0.F_Rat by R1,R2,FUNCOP_1:7; then
      R3: r/.i <> 0.(INT.Ring) by R1,PARTFUN1:def 6;
      R9: i in Seg len Kr by R1,Z1,Z2,FINSEQ_1:def 3;
      then i in dom Kr by FINSEQ_1:def 3;
      then Kr.i = K1 * r/.i by Z2;
      hence thesis by R3,R9,Z2,FUNCOP_1:7;
    end;
    set SKrM1 = Sum (KrM1);
    Z5: for n being Nat st n in dom b
    holds SKrM1.n = 0.(INT.Ring)
    proof
      let n be Nat;
      assume Z55: n in dom b;
      Z51: the addLoopStr of (rank L)-VectSp_over F_Rat
      = (rank L) -Group_over F_Rat by PRVECT_1:def 5;
      (rank L) -Group_over F_Rat
      = addLoopStr(# (rank L)-tuples_on the carrier of F_Rat,
      product(the addF of F_Rat,(rank L)), ((rank L) |-> 0.F_Rat)
      qua Element of (rank L)-tuples_on the carrier of F_Rat #)
      by PRVECT_1:def 3;
      hence SKrM1.n = 0.(INT.Ring) by B3,B4,Z4A,Z51,Z55,FUNCOP_1:7;
    end;
    defpred Q[Nat,object] means $2 = (Kr/.$1) * (b/.$1);
    Z510: for k being Nat st k in Seg (rank L)
    ex x being Element of the carrier of L st Q[k,x];
    consider Krb be FinSequence of the carrier of L such that
    Z511: dom Krb = Seg (rank L) &
    for k being Nat st k in Seg (rank L) holds Q[k,Krb.k]
    from FINSEQ_1:sch 5(Z510);
    Z51Z: rank L is Element of NAT by ORDINAL1:def 12;
    then
    Z51: len Krb = rank L by FINSEQ_1:def 3,Z511;
    Z6: for n be Nat st n in dom b holds SKrM1.n = <; Sum (Krb), b/.n ;>
    proof
      let n be Nat;
      assume Z61: n in dom b;
      then consider SKrM1n be FinSequence of F_Rat such that
      Z62: len SKrM1n = len KrM1
      & SKrM1.n = Sum(SKrM1n)
      & for k being Nat st k in dom SKrM1n
      holds SKrM1n.k = (KrM1/.k).n by B3,B4,LMSUM1;
      Z63: len Krb = rank L by Z511,Z51Z,FINSEQ_1:def 3
      .= len SKrM1n by Z62,KRM11,KRM1Z,FINSEQ_1:def 3;
      for k being Nat st k in dom SKrM1n holds SKrM1n.k = <; Krb/.k, b/.n ;>
      proof
        let k be Nat;
        assume X0: k in dom SKrM1n;
        then XX11: k in Seg len Krb by Z63,FINSEQ_1:def 3; then
        XX1: k in dom Krb by FINSEQ_1:def 3; then
        Z65: Krb/.k = Krb.k by PARTFUN1:def 6
        .= Kr/.k * b/.k by Z511,XX1;
        KrM1/.k in the carrier of (rank L)-VectSp_over F_Rat;
        then KrM1/.k in (rank L) -tuples_on the carrier of F_Rat
          by MATRIX13:102;
        then consider KrM1k be Element of (the carrier of F_Rat)* such that
        T660: KrM1/.k = KrM1k & len KrM1k = rank L;
        T66: KrM1k = KrM1.k & SKrM1n.k = KrM1k.n
        by KRM11,XX1,Z511,T660,Z62,X0,PARTFUN1:def 6;
        Z70: k in dom b by XX11,Z511,B3,B4,FINSEQ_1:def 3;
        k in dom KrM1 by KRM1,KRM11,X0,Z62,FINSEQ_1:def 3;
        then consider M1k be Element of (rank L)-VectSp_over F_Rat,
        Krk be Element of F_Rat such that
        Z31: M1k = M1.k & Krk = Kr.k & KrM1.k = Krk * M1k by Z3;
        E10: [k,n] in Indices M by Z70,Z61,B3,B4,C4,ZFMISC_1:87;
        then consider p be FinSequence of F_Rat such that
        W34: p = M.k & M*(k,n) = p.n by MATRIX_0:def 5;
        reconsider MMkn = M*(k,n) as Element of F_Rat;
        E3: k in dom Kr by Z2,Z70,B3,B4,FINSEQ_1:def 3;
        Z90: KrM1k.n= Krk * (M*(k,n)) by T66,W34,Z31,Z61,B3,B4,LMThGM24
        .= Kr/.k * (M*(k,n)) by Z31,E3,PARTFUN1:def 6;
        <; Krb/.k, b/.n ;> = <; b/.n, (Kr/.k) * (b/.k) ;>
        by Z65,ZMODLAT1:def 3
        .= (Kr/.k) * <; b/.n, b/.k ;> by ZMODLAT1:9
        .= Kr/.k * <; b/.k, b/.n ;> by ZMODLAT1:def 3
        .= Kr/.k * (InnerProduct(L)).(b/.k, b/.n)
        .= Kr/.k * ((BilinearM(InnerProduct(L),b,b))*(k,n))
        by ZMODLAT1:def 32,Z61,Z70
        .= Kr/.k * (M*(k,n)) by E10,ZMATRLIN:1
        .= SKrM1n.k by T660,Z62,X0,Z90;
        hence thesis;
      end;
      hence thesis by Z62,Z63,LMThGM21;
    end;
    for n being Nat st n in dom b
    holds <; 0.L, b/.n ;> = <; Sum (Krb), b/.n ;>
    proof
      let n be Nat;
      assume Z71: n in dom b;
      thus <; 0.L, b/.n ;> = 0.(INT.Ring) by ZMODLAT1:12
      .= SKrM1.n by Z5,Z71
      .= <; Sum (Krb), b/.n ;> by Z6,Z71;
    end; then
    Z8: Sum (Krb) = 0.L by ZL2ThSc1X;
    Z9: b is one-to-one by ZMATRLIN:def 5;
    len Kr = len b by B3,B4,Z2,FINSEQ_1:def 3;
    then rng b is linearly-dependent by Z51,Z511,Z4B,Z2,Z8,Z9,LMBASE2;
    then not rng b is base by VECTSP_7:def 3;
    hence contradiction by ZMATRLIN:def 5;
  end;
