let n be natural number ; :: thesis: ( n is prime iff ( (((n -' 1) ! ) + 1) mod n = 0 & n > 1 ) )
thus ( n is prime implies ( (((n -' 1) ! ) + 1) mod n = 0 & n > 1 ) ) :: thesis: ( (((n -' 1) ! ) + 1) mod n = 0 & n > 1 implies n is prime )
proof
assume A1: n is prime ; :: thesis: ( (((n -' 1) ! ) + 1) mod n = 0 & n > 1 )
per cases ( n < 2 or n >= 2 ) ;
suppose n < 2 ; :: thesis: ( (((n -' 1) ! ) + 1) mod n = 0 & n > 1 )
then n < 1 + 1 ;
then n <= 1 by NAT_1:13;
hence ( (((n -' 1) ! ) + 1) mod n = 0 & n > 1 ) by A1, INT_2:def 5; :: thesis: verum
end;
suppose n >= 2 ; :: thesis: ( (((n -' 1) ! ) + 1) mod n = 0 & n > 1 )
then A2: n - 2 >= 2 - 2 by XREAL_1:11;
A3: (n - 2) + 1 >= 0 + 1 by A2, XREAL_1:8;
set l = n -' 2;
A4: n -' 2 = n - 2 by A2, XREAL_0:def 2;
A5: (n -' 2) + 1 = n - 1 by A4
.= n -' 1 by A3, XREAL_0:def 2 ;
A6: 2 + (n -' 2) > 1 + (n -' 2) by XREAL_1:8;
A7: (n -' 2) ! = Product (Sgm (Seg (n -' 2))) by FINSEQ_3:54;
set f = Sgm (Seg (n -' 2));
A8: rng (Sgm (Seg (n -' 2))) c= Seg (n -' 2) by FINSEQ_1:def 13;
A9: for l' being natural number st l' in rng (Sgm (Seg (n -' 2))) & l' <> 1 holds
ex k' being natural number st
( k' in rng (Sgm (Seg (n -' 2))) & k' <> 1 & k' <> l' & (l' * k') mod ((n -' 2) + 2) = 1 )
proof
let l' be natural number ; :: thesis: ( l' in rng (Sgm (Seg (n -' 2))) & l' <> 1 implies ex k' being natural number st
( k' in rng (Sgm (Seg (n -' 2))) & k' <> 1 & k' <> l' & (l' * k') mod ((n -' 2) + 2) = 1 ) )

assume l' in rng (Sgm (Seg (n -' 2))) ; :: thesis: ( not l' <> 1 or ex k' being natural number st
( k' in rng (Sgm (Seg (n -' 2))) & k' <> 1 & k' <> l' & (l' * k') mod ((n -' 2) + 2) = 1 ) )

then A10: l' in Seg (n -' 2) by FINSEQ_1:def 13;
assume A11: l' <> 1 ; :: thesis: ex k' being natural number st
( k' in rng (Sgm (Seg (n -' 2))) & k' <> 1 & k' <> l' & (l' * k') mod ((n -' 2) + 2) = 1 )

consider k' being natural number such that
A12: ( k' in Seg (n -' 2) & k' <> 1 & k' <> l' & (l' * k') mod ((n -' 2) + 2) = 1 ) by A10, A11, A1, A4, Lm9;
take k' ; :: thesis: ( k' in rng (Sgm (Seg (n -' 2))) & k' <> 1 & k' <> l' & (l' * k') mod ((n -' 2) + 2) = 1 )
thus ( k' in rng (Sgm (Seg (n -' 2))) & k' <> 1 & k' <> l' & (l' * k') mod ((n -' 2) + 2) = 1 ) by A12, FINSEQ_1:def 13; :: thesis: verum
end;
A13: ((n -' 2) ! ) mod ((n -' 2) + 2) = 1 by A4, A1, A7, A8, FINSEQ_3:99, A9, Lm10;
A14: (((n -' 2) + 1) ! ) mod ((n -' 2) + 2) = (((n -' 2) + 1) * ((n -' 2) ! )) mod ((n -' 2) + 2) by NEWTON:21
.= (((n -' 2) + 1) * 1) mod ((n -' 2) + 2) by A13, EULER_2:9
.= (n -' 2) + 1 by A6, NAT_D:24 ;
(n * 1) mod n = 0 by NAT_D:13;
then (((((n -' 2) + 1) ! ) mod ((n -' 2) + 2)) + 1) mod ((n -' 2) + 2) = 0 by A4, A14;
hence ( (((n -' 1) ! ) + 1) mod n = 0 & n > 1 ) by A4, A5, NAT_D:22, A1, INT_2:def 5; :: thesis: verum
end;
end;
end;
thus ( (((n -' 1) ! ) + 1) mod n = 0 & n > 1 implies n is prime ) :: thesis: verum
proof
assume A15: ( (((n -' 1) ! ) + 1) mod n = 0 & n > 1 ) ; :: thesis: n is prime
assume A16: not n is prime ; :: thesis: contradiction
n >= 1 + 1 by A15, NAT_1:13;
then consider k being Element of NAT such that
A17: ( k is prime & k divides n ) by INT_2:48;
consider i being Nat such that
A18: n = k * i by A17, NAT_D:def 3;
(((n -' 1) ! ) + 1) mod n = (((n -' 1) ! ) + 1) mod k by A15, A17, A18, PEPIN:9;
then A19: k divides ((n -' 1) ! ) + 1 by A15, A17, PEPIN:6;
( k <> 1 & k <> 0 ) by A17, INT_2:def 5;
then A20: k > n -' 1 by A19, NEWTON:55;
k > n - 1 by A20, XREAL_0:def 2;
then k + 1 > (n - 1) + 1 by XREAL_1:8;
then k >= n by NAT_1:13;
then k / k >= (k * i) / k by A18, XREAL_1:74;
then 1 >= (k * i) / k by A17, XCMPLX_1:60;
then 1 >= i * (k / k) by XCMPLX_1:75;
then A21: 1 >= i * 1 by A17, XCMPLX_1:60;
i <> 0 by A15, A18;
then i >= 0 + 1 by NAT_1:13;
then i = 1 by A21, XXREAL_0:1;
hence contradiction by A16, A17, A18; :: thesis: verum
end;