reserve n for Nat,
        i,j,i1,i2,i3,i4,i5,i6 for Element of n,
        p,q,r for n-element XFinSequence of NAT;
reserve i,j,n,n1,n2,m,k,l,u,e,p,t for Nat,
        a,b for non trivial Nat,
        x,y for Integer,
        r,q for Real;

theorem Th29:
  for f,k be positive Nat holds f=k! iff
    ex j,h,w be Nat, n,p,q,z be positive Nat st
       q= w*z+h+j & z = f*(h+j) +h &
       (2*k) |^3 *(2*k+2)*(n+1) |^2+1 is square &
       p=(n+1) |^k & q=(p+1) |^n & z=p|^(k+1)
proof
  let f,k be positive Nat;
  set k2=2*k;
A1: k>=1 by NAT_1:14;
  then
A2: k2 >= 1*2 & k2 >= 1*1 by XREAL_1:66;
  thus f=k! implies ex j,h,w be Nat, n,p,q,z be positive Nat st
    q= w*z+h+j & z = f*(h+j) +h &
        (2*k) |^3*(k2+2)*(n+1) |^2+1 is square &
        p=(n+1) |^k & q=(p+1) |^n & z=p|^(k+1)
  proof
    assume
A3:   f=k!;
    consider n,i such that
A4:   10 divides n+1 & k2^2 *(k2 *(k2+2))*(n+1)^2 +1 = i^2 by A2,Th6;
    set p=(n+1) |^k,q=(p+1) |^n,   z=p|^(k+1);
    set w = q div z;
A5: k2 |^k <=n
    proof
A6:     k2-'2 = k2-2 by A2,XREAL_1:233;
A7:     k2 -1 +k2 |^(k2-'2) <=n by A2,A4,Th5;
      per cases by A1,XXREAL_0:1;
      suppose k=1;
        then k2 |^(k2-'2) = 1 & (k2) |^k = k2 by NEWTON:4,A6;
        hence thesis by A7;
      end;
      suppose k>1;
        then k>=1+1 by NAT_1:13;
        then k+k >= k+2 by XREAL_1:6;
        then k2 |^ (k2-'2) >= k2 |^ k by NAT_6:1,A6,XREAL_1:19;
        then k2 |^ (k2-'2) +(k2 -1) >= k2 |^ k + 0 by XREAL_1:7;
        hence thesis by A7,XXREAL_0:2;
      end;
    end;
    n>0
    proof
      assume n<=0;
      then n=0;
      hence thesis by A4,INT_2:13;
    end;
    then reconsider n as positive Nat;
    n < n+1 by NAT_1:13;
    then
A8:   n|^k < p by PREPOWER:10,NAT_1:14;
A9:   (q mod z) >0 by A8,A5,Th11;
    p * p|^k = z by NEWTON:6;
    then k! < z / ( q mod z) < k!+1 by A8,A5,Th11;
    then
A10:  f * ( q mod z) < z < (f+1)*( q mod z) by A3,A9,XREAL_1:77,79;
    then reconsider h = z- f*(q mod z) as Element of NAT by NAT_1:21;
    reconsider h as positive Nat by A10,XREAL_1:50;
    set j = (q mod z) -h;
    0< (f+1)*( q mod z) - z by A10,XREAL_1:50;
    then reconsider j as positive Nat;
A11:  k2-1 +k2 |^(k2-'2) > k2-1 by XREAL_1:29;
    w>0
    proof
A12:    p>=1 by NAT_1:14;
      k2-1 +k2 |^(k2-'2) <= n by A2,A4,Th5;
      then k2-1 <n by A11,XXREAL_0:2;
      then k2-1+1 <=n by INT_1:7;
      then 1+k <= k+k & k+k <=n by A1,XREAL_1:7;
      then 1+k <=n & p < p+1 by XXREAL_0:2,NAT_1:13;
      then p to_power (k+1) <= p to_power n &
      p to_power n < (p+1) to_power n by A12,PRE_FF:8,POWER:37;
      then
A13:    z < q by XXREAL_0:2;
      assume w<=0;
      then q div z=0;
      hence thesis by A13,NAT_2:12;
    end;
    then reconsider w as positive Nat;
    take j,h,w,n,p,q,z;
    (k2^2 *k2) *(k2+2)*((n+1) |^2) +1 is square by A4,NEWTON:81;
    then (k2|^2 *k2) *(k2+2)*((n+1) |^2) +1 is square by NEWTON:81;
    then
A14:  (k2|^(2+1)) *(k2+2)*((n+1) |^2) +1 is square by NEWTON:6;
    q= (q div z) * z +(q mod z) by NAT_D:2;
    then q= w*z+h+j;
    hence thesis by A14;
  end;
  given j,h,w be Nat,n,p,q,z be positive Nat such that
A15:  q= w*z+h+j and
A16:  z = f*(h+j) +h and
A17:  (2*k) |^3*(k2+2)*(n+1) |^2+1 is square and
A18:  p=(n+1) |^k and
A19:  q=(p+1) |^n and
A20:  z=p|^(k+1);
A21:  k2 |^k <=n
  proof
A22: k2-'2 = k2-2 by A2,XREAL_1:233;
    (k2) |^(2+1)*(k2+2)*(n+1) |^2+1 =
      (k2) |^2*k2*(k2+2)*(n+1) |^2+1 by NEWTON:6
      .= (k2) ^2 *k2*(k2+2)*(n+1) |^2+1 by NEWTON:81
      .= (k2) ^2 *k2*(k2+2)*(n+1) ^2+1 by NEWTON:81;
    then ex i st (k2) ^2 *(k2*(k2+2))*(n+1) ^2+1 = i^2 by A17,PYTHTRIP:def 3;
    then
A23:  k2-1 + k2|^(k2-'2)<=n by A2,Th5;
    per cases by A1,XXREAL_0:1;
    suppose  k=1;
      then k2 |^(k2-'2) = 1 & (k2) |^k = k2 by NEWTON:4,A22;
      hence thesis by A23;
    end;
    suppose k>1;
      then k>=1+1 by NAT_1:13;
      then k+k >= k+2 by XREAL_1:6;
      then k2 |^ (k2-'2) >= k2 |^ k by A22,NAT_6:1,XREAL_1:19;
      then k2 |^ (k2-'2) +(k2 -1) >= k2 |^ k + 0 by XREAL_1:7;
      hence thesis by A23,XXREAL_0:2;
    end;
  end;
  j <= h+j & 1*(h+j) <= f*(h+j) by XREAL_1:64,NAT_1:11,14;
  then j <=f*(h+j) by XXREAL_0:2;
  then
A24: h+j<=z by A16,XREAL_1:6;
  n < n+1 by NAT_1:13;
  then
A25:n|^k < p by PREPOWER:10,NAT_1:14,A18;
A26: p * p|^k = z by NEWTON:6,A20;
  h+j<>z
  proof
    assume h+j=z;
    then q =z*(w+1) by A15;
    then q mod z=0 by NAT_D:13;
    hence thesis by A25,A21,Th11,A19,A20;
  end;
  then
A27: h+j <z by A24,XXREAL_0:1;
A28: w*z mod z=0 by NAT_D:13;
  q= w*z+(h+j) & z<>0 by A15;
  then q mod z = h+j by A27,A28,NAT_D:16;
  then
A29: k! < z / (h+j) < k!+ 1 by A26,A25,A21,Th11,A18,A19,A20;
  z <= z+j by NAT_1:11;
  then
A30: z <= (f+1)*(h+j) by A16;
  h+j=0 or h+j>0;
  then z / (h+j) <=f+1 by XREAL_1:79,A30;
  then k! < f+1 by A29,XXREAL_0:2;
  then
A31: k! <=f by NAT_1:13;
  h+j<>0 by A16;
  then f <= z/(h+j) by XREAL_1:77,A16,NAT_1:11;
  then f  <k!+1 by A29,XXREAL_0:2;
  then f <=k! by NAT_1:13;
  hence thesis by A31,XXREAL_0:1;
end;
