reserve i,j,n,n1,n2,m,k,l,u for Nat,
        r,r1,r2 for Real,
        x,y for Integer,
        a,b for non trivial Nat,
        F for XFinSequence,
        cF,cF1,cF2 for complex-valued XFinSequence,
        c,c1,c2 for Complex;

theorem Th15:
  u > n|^k & n >= k implies [\ ((u+1)|^n) / (u|^k) /] mod u = n choose k
proof
  assume
A1: u > n|^k & n >= k;
  set I = (1,u) In_Power n,k1=k+1;
  consider q be FinSequence such that
A2: I = (I|k1) ^ q by FINSEQ_1:80;
  rng I c= NAT by VALUED_0:def 6;
  then reconsider I1=I as FinSequence of NAT by FINSEQ_1:def 4;
  I1 = (I1|k1)^q by A2;
  then reconsider q as FinSequence of NAT by FINSEQ_1:36;
A3:len I1 = n+1 by NEWTON:def 4;
A4:len (I1|k1)=k1 by A1,XREAL_1:7,A3,FINSEQ_1:59;
  1<= k1 by NAT_1:11;
  then k1 in dom I by A3,A1,XREAL_1:7,FINSEQ_3:25;
  then
A5: I1|k1 = (I1|k) ^  <* I1.k1*> by FINSEQ_5:10;
A6:  Sum I1 = Sum (I1|k1) + Sum q by A2,RVSUM_1:75
  .= Sum (I1|k) + (I1.k1) + Sum q by A5,RVSUM_1:74;
  k <= n+1 by A1,NAT_1:13;
  then
A7: I1|k is k -element by A3,FINSEQ_1:59;
  set kI = k |-> ((u|^k)/n);
A8:for i be Nat st i in Seg k holds (I1|k).i < kI.i
  proof
    let i be Nat such that
A9:i in Seg k;
A10: kI.i = (u|^k)/n by A9,FINSEQ_2:57;
A11: 1<=i<=k by A9,FINSEQ_1:1;
    then
A12: (I1|k).i = I1.i by FINSEQ_3:112;
    reconsider i1=i-1 as Nat by A11;
    set ni = n-'i1;
A13: i1+1=i & i <= n by A11,A1,XXREAL_0:2;
    then
A14:i1 < n & i <= n+1 by NAT_1:13;
    then
A15: i in dom I1 by A11,A3,FINSEQ_3:25;
    ni = n-i1 by A14,XREAL_1:233;
    then
A16: I1.i = (n choose i1)*(1|^ni) * (u|^i1) by A15,NEWTON:def 4;
    k>i1 by A13,A11,NAT_1:13;
    hence thesis by Th14,A1,A10,A16,A12;
  end;
  then
A17:for i be Nat st i in Seg k holds (I1|k).i <= kI.i;
  1<=k1 by NAT_1:11;
  then
A18: k1 in dom I1 by A1,XREAL_1:7,A3,FINSEQ_3:25;
  n-k = n-'k & k=k1-1 by A1,XREAL_1:233;
  then
A19: I1.k1 = (n choose k) * (1|^(n-'k))*(u|^k) by A18,NEWTON:def 4;
  defpred P[Nat,object] means $2 in NAT & for i be Nat st i=$2
    holds q.$1 = (u|^k)*u*i;
  len I = k1+len q by A2,A4,FINSEQ_1:22;
  then
A20: n=k+len q by A3;
A21:for j be Nat st j in Seg len q ex x be object st P[j,x]
  proof
    let j be Nat such that
A22: j in Seg len q;
A23: 1<=j <= len q by FINSEQ_1:1,A22;
A24: k1+j-1 = k+j;
A25: n>=k+j by A23,A20,XREAL_1:7;
A26: n-'(k+j) = n-(k+j) by XREAL_1:233,A23,A20,XREAL_1:7;
    1<= k+j+1<= n+1 by NAT_1:11,A25,XREAL_1:7;
    then k1+j in dom I1 by FINSEQ_3:25,A3;
    then
A27: I1.(k1+j) = (n choose (k+j)) * (1|^(n-'(k+j)))*(u|^(k+j))
      by A24,A26,NEWTON:def 4;
    reconsider j1=j-1 as Nat by A23;
A28:  u|^(k+j) = (u|^k)*(u|^(j1+1)) by NEWTON:8
      .= (u|^k)*((u|^j1)*u) by NEWTON:6;
    take U=(n choose (k+j)) * (1|^(n-'(k+j)))* u|^j1;
    thus thesis by A27,A28,A23,FINSEQ_1:65,A2,A4,ORDINAL1:def 12;
  end;
  consider Q be FinSequence such that
A29: dom Q=Seg len q and
A30: for j be Nat st j in Seg len q holds P[j,Q . j] from FINSEQ_1:sch 1(A21);
  rng Q c= NAT
  proof
    let y be object such that
A31:  y in rng Q;
    ex x be object st x in dom Q & Q . x=y by FUNCT_1:def 3,A31;
    hence thesis by A30,A29;
  end;
  then reconsider Q as FinSequence of NAT by FINSEQ_1:def 4;
A32: len Q=len q & len (((u|^k)*u)*Q)=len Q
    by CARD_1:def 7,A29,FINSEQ_1:def 3;
  for i be Nat st 1<= i <= len q holds q.i=(((u|^k)*u)*Q).i
  proof
    let i be Nat;assume 1<= i <= len q;
    then i in dom Q by A29;
    then q.i = (u|^k)*u*(Q.i) by A29,A30;
    hence thesis by VALUED_1:6;
  end;
  then
  q=((u|^k)*u)*Q by A32,FINSEQ_1:14;
  then
A33: Sum q = (u|^k)*u*Sum Q by RVSUM_1:87;
A34: [\ (Sum I1) / (u|^k) /] = (n choose k) + u*Sum Q
  proof
    per cases by NAT_1:14;
    suppose k=0;
      then Sum(I1|k)=0;
      then 1* Sum I1= (u|^k) *((n choose k)+u*Sum Q) by A33,A19,A6;
      then (Sum I1)/(u|^k) = ((n choose k)+u*Sum Q)/1 by A1,XCMPLX_1:94;
      hence thesis;
    end;
    suppose
A35:    k >=1;
      then
A36:    k in Seg k;
      then
A37:    (I1|k).k < kI.k by A8;
A38:    Sum kI = k*((u|^k)/n) by RVSUM_1:80
      .= (u|^k)* (k/n) by XCMPLX_1:75;
      Sum (I1|k) < (u|^k)* (k/n) by A37,A36,A7,A17,RVSUM_1:83,A38;
      then
A39:    Sum (I1|k)+((I1.k1)+Sum q) < (u|^k)* (k/n) + ((I1.k1)+Sum q)
        by XREAL_1:8;
      (u|^k)* (k/n) + ((I1.k1)+Sum q) = (u|^k)*((k/n)+ (n choose k) + u*Sum Q)
        by A33,A19; then
A40:    (Sum I1) / (u|^k)< ((k/n)+ (n choose k) + u*Sum Q)
        by A1,A39,A6,XREAL_1:83;
      k/n <=n/n & n/n = 1 by A35,XREAL_1:72,A1,XCMPLX_1:60;
      then (k/n)+ ((n choose k) + u*Sum Q) <=1 +((n choose k) + u*Sum Q)
        by XREAL_1:7;
      then (Sum I1) / (u|^k) < 1 +((n choose k) + u*Sum Q) by A40,XXREAL_0:2;
      then
A41:    (Sum I1) / (u|^k) -1 < (n choose k) + u*Sum Q by XREAL_1:19;
A42:    0 +((I1.k1)+Sum q) <= Sum (I1|k)+((I1.k1)+Sum q) by XREAL_1:7;
      (I1.k1)+Sum q = (u|^k)*((n choose k) + u*Sum Q) by A33,A19;
      then (Sum I1) / (u|^k) >= (n choose k) + u*Sum Q by A1,A42,A6,XREAL_1:77;
      hence thesis by A41,INT_1:def 6;
    end;
  end;
A43: Sum I1 = (1+u)|^n by NEWTON:30;
  n choose k <= n|^k by Th13,A1;
  then n choose k < u by A1,XXREAL_0:2;
  then (n choose k) mod u = n choose k by NAT_D:24;
  hence thesis by A34,A43,NAT_D:21;
end;
