let p, q, n, k1, k2 be Nat; :: thesis: ( p is prime & q is prime & p <> q & n = p * q & k1, Euler n are_relative_prime & (k1 * k2) mod (Euler n) = 1 implies for m being Element of NAT st m < n holds
Crypto (Crypto m,n,k1),n,k2 = m )
assume A1:
( p is prime & q is prime & p <> q & n = p * q & k1, Euler n are_relative_prime & (k1 * k2) mod (Euler n) = 1 )
; :: thesis: for m being Element of NAT st m < n holds
Crypto (Crypto m,n,k1),n,k2 = m
let m be Element of NAT ; :: thesis: ( m < n implies Crypto (Crypto m,n,k1),n,k2 = m )
assume A2:
m < n
; :: thesis: Crypto (Crypto m,n,k1),n,k2 = m
A3:
( p <> 0 & q <> 0 )
by A1, INT_2:def 5;
then reconsider p1 = p - 1, q1 = q - 1 as Element of NAT by Lm3, INT_1:16;
A4:
( p > 1 & q > 1 )
by A1, INT_2:def 5;
A5:
n <> 0
by A1, A3, XCMPLX_1:6;
A6:
( p > 0 & q > 0 )
by A1, INT_2:def 5;
Euler n <> 0
by A5, Th45;
then A7:
Euler n > 0
;
A8: Euler n =
(Euler p) * (Euler q)
by A1, A4, EULER_1:22, INT_2:47
.=
(p - 1) * (Euler q)
by A1, EULER_1:21
.=
(p - 1) * (q - 1)
by A1, EULER_1:21
;
( not p1 = 1 or not q1 = 1 )
by A1;
then A9:
p1 * q1 <> 1
by NAT_1:15;
A10:
k1 <> 0
A11:
k2 <> 0
by A1, NAT_D:26;
A12:
n > 1
by A1, A4, XREAL_1:163;
now per cases
( m = 0 or m = 1 or ( m <> 0 & m <> 1 ) )
;
suppose A13:
m = 0
;
:: thesis: Crypto (Crypto m,n,k1),n,k2 = mthen
m |^ k1 = 0
by A10, NAT_1:14, NEWTON:16;
then
(m |^ k1) mod n = 0
by NAT_D:26;
then
(Crypto m,n,k1) |^ k2 = 0
by A11, NAT_1:14, NEWTON:16;
hence
Crypto (Crypto m,n,k1),
n,
k2 = m
by A13, NAT_D:26;
:: thesis: verum end; suppose A15:
(
m <> 0 &
m <> 1 )
;
:: thesis: Crypto (Crypto m,n,k1),n,k2 = mA16:
for
t being
Element of
NAT holds
(m |^ (((t * p1) * q1) + 1)) mod n = m
proof
let t be
Element of
NAT ;
:: thesis: (m |^ (((t * p1) * q1) + 1)) mod n = m
now
m |^ ((t * p1) * q1) >= 1
by A15, NAT_1:14, PREPOWER:19;
then
(m |^ ((t * p1) * q1)) - 1
>= 1
- 1
by XREAL_1:11;
then reconsider a =
(m |^ ((t * p1) * q1)) - 1 as
Element of
NAT by INT_1:16;
A17:
q divides m * a
proof
now per cases
( m gcd q = 1 or m gcd q <> 1 )
;
suppose
m gcd q = 1
;
:: thesis: q divides m * athen A18:
m,
q are_relative_prime
by INT_2:def 4;
m |^ (t * p1) <> 0
by A15, PREPOWER:12;
then
((m |^ (t * p1)) |^ (q1 + 1)) mod q = (m |^ (t * p1)) mod q
by A1, A15, A18, EULER_2:32, EULER_2:34;
then
(((m |^ (t * p1)) |^ q1) * (m |^ (t * p1))) mod q = (m |^ (t * p1)) mod q
by NEWTON:11;
then
((m |^ (t * p1)) |^ q1) mod q = 1
by A4, A15, A18, Th11, EULER_2:32;
then
(m |^ ((t * p1) * q1)) mod q = 1
by NEWTON:14;
then
m |^ ((t * p1) * q1) = (q * ((m |^ ((t * p1) * q1)) div q)) + 1
by A6, NAT_D:2;
then
q divides a
by NAT_D:def 3;
hence
q divides m * a
by NAT_D:9;
:: thesis: verum end; end; end;
hence
q divides m * a
;
:: thesis: verum
end;
p divides m * a
proof
now per cases
( m gcd p = 1 or m gcd p <> 1 )
;
suppose
m gcd p = 1
;
:: thesis: p divides m * athen A19:
m,
p are_relative_prime
by INT_2:def 4;
m |^ (t * q1) <> 0
by A15, PREPOWER:12;
then
((m |^ (t * q1)) |^ (p1 + 1)) mod p = (m |^ (t * q1)) mod p
by A1, A15, A19, EULER_2:32, EULER_2:34;
then
(((m |^ (t * q1)) |^ p1) * (m |^ (t * q1))) mod p = (m |^ (t * q1)) mod p
by NEWTON:11;
then
((m |^ (t * q1)) |^ p1) mod p = 1
by A4, A15, A19, Th11, EULER_2:32;
then
(m |^ ((t * q1) * p1)) mod p = 1
by NEWTON:14;
then
m |^ ((t * p1) * q1) = (p * ((m |^ ((t * p1) * q1)) div p)) + 1
by A6, NAT_D:2;
then
p divides a
by NAT_D:def 3;
hence
p divides m * a
by NAT_D:9;
:: thesis: verum end; end; end;
hence
p divides m * a
;
:: thesis: verum
end; then
p * q divides m * a
by A1, A17, Th4, INT_2:47;
then consider k being
Nat such that A20:
m * a = (p * q) * k
by NAT_D:def 3;
m * ((m |^ ((t * p1) * q1)) - 1) =
(m * (m |^ ((t * p1) * q1))) - (m * 1)
.=
(m |^ (((t * p1) * q1) + 1)) - m
by NEWTON:11
;
then
(m |^ (((t * p1) * q1) + 1)) - (m - m) = (n * k) + m
by A1, A20, XCMPLX_1:37;
hence
(m |^ (((t * p1) * q1) + 1)) mod n = m
by A2, NAT_D:def 2;
:: thesis: verum end;
hence
(m |^ (((t * p1) * q1) + 1)) mod n = m
;
:: thesis: verum
end; reconsider t =
(k1 * k2) div (Euler n) as
Element of
NAT ;
k1 * k2 =
((p1 * q1) * t) + 1
by A1, A7, A8, NAT_D:2
.=
((t * p1) * q1) + 1
;
then
(m |^ (k1 * k2)) mod n = m
by A16;
then
((m |^ k1) |^ k2) mod n = m
by NEWTON:14;
hence
Crypto (Crypto m,n,k1),
n,
k2 = m
by Th12;
:: thesis: verum end; end; end;
hence
Crypto (Crypto m,n,k1),n,k2 = m
; :: thesis: verum