
theorem lemBase:
for R being non degenerated commutative Ring, n being Nat
for l being Linear_Combination of Base(R,n)
for v being Tuple of n,the carrier of R
for i being Nat
st v = Sum l & 1 <= i & i <= n holds v.i = l.(i_th_unit_vector(n,R))
proof
let R be non degenerated commutative Ring, n be Nat;
let l be Linear_Combination of Base(R,n);
let v be Tuple of n,the carrier of R, i be Nat;
assume AS: v = Sum l & 1 <= i & i <= n;
set V = R^*n, B = Base(R,n);
consider F being FinSequence of the carrier of V such that
A1: F is one-to-one & rng F = Carrier l & Sum l = Sum(l (#) F)
    by VECTSP_6:def 6;
set H = l (#) F;
A2: len H = len F &
    for i be Nat st i in dom H holds H.i = l.(F/.i) * F/.i by VECTSP_6:def 5;
per cases;
suppose H = {}; then
  B3: F = {} by VECTSP_6:def 5; then
  Carrier l = {} by A1; then
  l = ZeroLC(V) by VECTSP_6:def 3; then
  Sum l = 0.V by VECTSP_6:15 .= n |-> 0.R by DEF; then
  B4: v.i = (Seg n --> 0.R).i by AS,FINSEQ_2:def 2
         .= 0.R by AS,FINSEQ_1:1,FUNCOP_1:7;
  the carrier of V = n-tuples_on (the carrier of R) by DEF;
  hence v.i = l.(i_th_unit_vector(n,R)) by A1,B4,B3,VECTSP_6:2;
  end;
suppose Y1: H <> {}; then
  len H > 0; then
  0 + 1 <= len H by INT_1:7; then
  Y2: 1 in dom F by A2,FINSEQ_3:25;
defpred P[Nat] means
  for v being Tuple of n,the carrier of R st $1 <= len H & v = Sum(H|($1))
  for m being Nat st 1 <= m & m <= n holds
  (m_th_unit_vector(n,R) in rng(F|($1)) & v.m = l.(m_th_unit_vector(n,R)))
  or ((not m_th_unit_vector(n,R) in rng(F|($1))) & v.m = 0.R);
IA: P[1]
    proof
    now let v be Tuple of n,the carrier of R;
    assume C1: 1 <= len H & v = Sum(H|1);
    let m being Nat;
    assume C2: 1 <= m & m <= n;
    C5: dom(H|(Seg 1)) c= dom H by RELAT_1:60;
    C3: H|1 = <* (H|1).1 *> by C1,FINSEQ_1:59,FINSEQ_1:40; then
    dom(H|1) = { 1 } by FINSEQ_1:2,FINSEQ_1:38; then
    C6: 1 in dom(H|1) by TARSKI:def 1; then
    (H|1).1 = (H|1)/.1 by PARTFUN1:def 6; then
    C9: Sum(H|1) = (H|1).1 by C3,RLVECT_1:44
                .= H.1 by C6,FUNCT_1:47
                .= l.(F/.1) * F/.1 by C5,C6,VECTSP_6:def 5;
    rng F c= B by A1,VECTSP_6:def 4; then
    F.1 in B by Y2,FUNCT_1:3; then
    consider i being Nat such that
    C7: F.1 = i_th_unit_vector(n,R) & 1 <= i & i <= n;
    C8: v = l.(F/.1) * (i_th_unit_vector(n,R))
        by C1,C7,C9,Y2,PARTFUN1:def 6,lemBB;
    per cases;
    suppose D1: m = i;
      D2: 1 in Seg 1;
      F/.1 = i_th_unit_vector(n,R) by C7,Y2,PARTFUN1:def 6;
      hence
       (m_th_unit_vector(n,R) in rng(F|1) & v.m = l.(m_th_unit_vector(n,R)))
        or ((not m_th_unit_vector(n,R) in rng(F|1)) & v.m = 0.R)
       by D1,D2,C8,C7,Y2,FUNCT_1:50,lemBA;
      end;
    suppose D0: m <> i; then
      D1: m_th_unit_vector(n,R) <> i_th_unit_vector(n,R) by C2,C7,u2;
      now assume m_th_unit_vector(n,R) in rng(F|1); then
        consider x being object such that
        D2: x in dom(F|1) & (F|1).x = m_th_unit_vector(n,R) by FUNCT_1:def 3;
        D3: (F|1).x = F.x by D2,FUNCT_1:47;
        F|1 = <* (F|1).1 *> by A2,C1,FINSEQ_1:59,FINSEQ_1:40; then
        dom(F|1) = { 1 } by FINSEQ_1:2,FINSEQ_1:38;
        hence contradiction by C7,D1,D2,D3,TARSKI:def 1;
        end;
      hence
       (m_th_unit_vector(n,R) in rng(F|1) & v.m = l.(m_th_unit_vector(n,R)))
        or ((not m_th_unit_vector(n,R) in rng(F|1)) & v.m = 0.R)
       by C2,C7,C8,D0,lemBA;
      end;
    end;
    hence thesis;
    end;
IS: now let k be Element of NAT;
    assume AS: 1 <= k & k < len H;
    assume IV: P[k];
    now let v be Tuple of n,the carrier of R;
    assume C1: k+1 <= len H & v = Sum(H|(k+1));
    let m being Nat;
    assume C2: 1 <= m & m <= n;
    set G1 = H|k;
    reconsider v1 = Sum G1 as Element of n-tuples_on (the carrier of R) by DEF;
    H: 1 <= k + 1 & k <= k + 1 by NAT_1:11; then
    C3: k <= len H by C1,XXREAL_0:2;
    C4: len(H|(k+1)) = k + 1 by C1,FINSEQ_1:59;
    (H|(k+1))|(Seg k) = (H|(k+1))|k
                     .= H|k by NAT_1:11,FINSEQ_1:82; then
    C5: H|(k+1) = G1 ^ <* (H|(k+1)).(k+1) *> by C1,FINSEQ_1:59,FINSEQ_3:55;
    dom(H|(k+1)) = Seg(k+1) by C4,FINSEQ_1:def 3; then
    C6: k+1 in dom(H|(k+1)) by H;
    C7: dom(H|(k+1)) c= dom H by RELAT_1:60;
    (H|(k+1)).(k + 1) = H.(k+1) by C6,FUNCT_1:47
                     .= H/.(k+1) by C6,C7,PARTFUN1:def 6; then
    C8: Sum(H|(k+1)) = Sum G1 + Sum<* H/.(k + 1) *> by C5,RLVECT_1:41
                    .= Sum G1 + H/.(k + 1) by RLVECT_1:44;
    F|k = (F|(k+1))|k by NAT_1:11,FINSEQ_1:82; then
    C9: rng(F|k) c= rng(F|(k+1)) by RELAT_1:70;
    E0: dom F = Seg len H by A2,FINSEQ_1:def 3
             .= dom H by FINSEQ_1:def 3;
    E1: rng F c= B by A1,VECTSP_6:def 4;
    F.(k+1) in B by E1,E0,C6,C7,FUNCT_1:3; then
    consider i being Nat such that
    E2: F.(k+1) = i_th_unit_vector(n,R) & 1 <= i & i <= n;
    E4: H/.(k + 1) = H.(k+1) by C6,C7,PARTFUN1:def 6
          .= l.(F/.(k+1)) * F/.(k+1) by C7,C6,VECTSP_6:def 5
          .= l.(F/.(k+1)) * (i_th_unit_vector(n,R))
             by E0,C6,C7,E2,PARTFUN1:def 6,lemBB;
    E5: v = v1 + l.(F/.(k+1)) * (i_th_unit_vector(n,R)) by C1,C8,E4,lemBC;
    len(F|(k+1)) = k + 1 by A2,C1,FINSEQ_1:59; then
    dom(F|(k+1)) = Seg(k+1) by FINSEQ_1:def 3; then
    E6: k+1 in dom(F|(k+1)) by H;
per cases;
suppose D0: not m_th_unit_vector(n,R) in rng(F|(k+1)); then
not m_th_unit_vector(n,R) in rng(F|k) by C9; then
D1: v1.m = 0.R by C2,C3,IV;
D4: m in Seg n by C2;
now assume D5: m_th_unit_vector(n,R) = i_th_unit_vector(n,R);
  (F|(k+1)).(k+1) = i_th_unit_vector(n,R) by E2,E6,FUNCT_1:47;
  hence contradiction by D0,D5,E6,FUNCT_1:def 3;
  end; then
((i_th_unit_vector(n,R))).m = 0.R by E2,C2,u1; then
(l.(F/.(k+1)) * (i_th_unit_vector(n,R))).m = l.(F/.(k+1)) * 0.R
    by D4,FVSUM_1:51; then
v.m = 0.R + 0.R by E5,D4,D1,FVSUM_1:18 .= 0.R;
hence
  (m_th_unit_vector(n,R) in rng(F|(k+1)) & v.m = l.(m_th_unit_vector(n,R)))
    or ((not m_th_unit_vector(n,R) in rng(F|(k+1))) & v.m = 0.R) by D0;
end;
suppose D0: m_th_unit_vector(n,R) in rng(F|(k+1));
m_th_unit_vector(n,R) in n-tuples_on (the carrier of R); then
F1: dom l = the carrier of R^*n &
    m_th_unit_vector(n,R) in the carrier of R^*n by DEF,FUNCT_2:def 1;
per cases;
suppose D7: m_th_unit_vector(n,R) in rng(F|k); then
D1: v1.m = l.(m_th_unit_vector(n,R)) by C2,C3,IV
        .= l/.(m_th_unit_vector(n,R)) by F1,PARTFUN1:def 6;
D4: m in Seg n by C2;
consider x being object such that
D5: x in dom(F|k) & (F|k).x = m_th_unit_vector(n,R) by D7,FUNCT_1:def 3;
reconsider x as Element of NAT by D5;
len(F|k) = k by AS,A2,FINSEQ_1:59; then
dom(F|k) = Seg k by FINSEQ_1:def 3; then
1 <= x & x <= k by D5,FINSEQ_1:1; then
D8: x + 0 < k + 1 by XREAL_1:8;
D9: dom(F|k) c= dom F by RELAT_1:60;
m_th_unit_vector(n,R) <> i_th_unit_vector(n,R)
  proof
  F.x = m_th_unit_vector(n,R) by D5,FUNCT_1:47;
  hence thesis by E0,E2,C6,C7,D8,D9,D5,A1;
  end; then
((i_th_unit_vector(n,R))).m = 0.R by E2,C2,u1; then
(l.(F/.(k+1)) * (i_th_unit_vector(n,R))).m = l.(F/.(k+1)) * 0.R
    by D4,FVSUM_1:51; then
v.m = l/.(m_th_unit_vector(n,R)) + 0.R by E5,D4,D1,FVSUM_1:18
   .= l.(m_th_unit_vector(n,R)) by F1,PARTFUN1:def 6;
hence
  (m_th_unit_vector(n,R) in rng(F|(k+1)) & v.m = l.(m_th_unit_vector(n,R)))
    or ((not m_th_unit_vector(n,R) in rng(F|(k+1))) & v.m = 0.R) by D0;
end;
suppose D7: not m_th_unit_vector(n,R) in rng(F|k); then
D1: v1.m = 0.R by C2,C3,IV;
D4: m in Seg n by C2;
consider x being object such that
D5: x in dom(F|(k+1)) &
    (F|(k+1)).x = m_th_unit_vector(n,R) by D0,FUNCT_1:def 3;
reconsider x as Element of NAT by D5;
len(F|(k+1)) = k+1 by A2,C1,FINSEQ_1:59; then
D10: dom(F|(k+1)) = Seg(k+1) by FINSEQ_1:def 3; then
D11: 1 <= x & x <= k+1 by D5,FINSEQ_1:1;
D8: now assume x <> k + 1; then
    x < k + 1 by D11,XXREAL_0:1; then
    1 <= x & x <= k by D10,D5,FINSEQ_1:1,INT_1:7; then
    E1: x in Seg k;
    len(F|k) = k by AS,A2,FINSEQ_1:59; then
    E3: x in dom(F|k) by E1,FINSEQ_1:def 3;
    (F|k).x = F.x by E3,FUNCT_1:47 .= (F|(k+1)).x by D5,FUNCT_1:47;
    hence contradiction by E3,D5,D7,FUNCT_1:3;
    end;
D9: dom(F|(k+1)) c= dom F by RELAT_1:60;
F.x = m_th_unit_vector(n,R) by D5,FUNCT_1:47; then
D12: F/.(k+1) = m_th_unit_vector(n,R) by D5,D8,D9,PARTFUN1:def 6;
m_th_unit_vector(n,R) = i_th_unit_vector(n,R) by E2,D8,D5,FUNCT_1:47; then
i_th_unit_vector(n,R).m = 1.R by C2,u1; then
(l.(F/.(k+1)) * (i_th_unit_vector(n,R))).m
    = l.(F/.(k+1)) * 1.R by D4,FVSUM_1:51
   .= l/.(m_th_unit_vector(n,R)) by D12,F1,PARTFUN1:def 6; then
v.m = 0.R + l/.(m_th_unit_vector(n,R)) by E5,D4,D1,FVSUM_1:18
   .= l.(m_th_unit_vector(n,R)) by F1,PARTFUN1:def 6;
hence
  (m_th_unit_vector(n,R) in rng(F|(k+1)) & v.m = l.(m_th_unit_vector(n,R)))
    or ((not m_th_unit_vector(n,R) in rng(F|(k+1))) & v.m = 0.R) by D0;
end;
end;
    end;
    hence P[k+1];
    end;
A3: for k being Element of NAT st 1 <= k & k <= len H holds P[k]
    from INT_1:sch 7(IA,IS);
len H > 0 by Y1; then
A4: 0 + 1 <= len H by INT_1:7;
A5: v = Sum(H|(len H)) by AS,A1,FINSEQ_1:58;
A6: F|(len H) = F by A2,FINSEQ_1:58;
H: the carrier of V = n-tuples_on (the carrier of R) by DEF;
per cases;
suppose i_th_unit_vector(n,R) in Carrier l;
  hence v.i = l.(i_th_unit_vector(n,R)) by AS,A1,A3,A4,A5,A6;
  end;
suppose A7: not i_th_unit_vector(n,R) in Carrier l;
  hence v.i = 0.R by AS,A1,A3,A4,A5,A6 .= l.(i_th_unit_vector(n,R)) by H,A7;
  end;
end;
end;
