:: EULER_2 semantic presentation

Lemma1: for b1, b2 being Nat holds b1 gcd b2 = b1 hcf b2
proof end;

Lemma2: for b1 being Integer holds
( b1 < 1 iff b1 <= 0 )
proof end;

Lemma3: for b1 being Nat st b1 <> 0 holds
b1 - 1 >= 0
proof end;

Lemma4: for b1 being Integer holds 1 gcd b1 = 1
proof end;

theorem Th1: :: EULER_2:1
for b1, b2 being Nat holds
( b1,b2 are_relative_prime iff b1,b2 are_relative_prime )
proof end;

theorem Th2: :: EULER_2:2
for b1 being Nat
for b2 being Integer st b1 > 1 & b1 * b2 >= 1 holds
b2 >= 1
proof end;

Lemma7: for b1 being Nat
for b2 being Integer st b1 > 1 & 1 - b1 <= b2 & b2 <= b1 - 1 & b1 divides b2 holds
b2 = 0
proof end;

Lemma8: for b1 being Nat
for b2 being Integer st b1 > 1 & b1 * b2 >= 0 holds
b2 >= 0
by REAL_2:145;

theorem Th3: :: EULER_2:3
canceled;

theorem Th4: :: EULER_2:4
canceled;

theorem Th5: :: EULER_2:5
for b1, b2, b3 being Nat st b1 <> 0 & b2 <> 0 & b3 <> 0 & b1,b3 are_relative_prime & b2,b3 are_relative_prime holds
b3,(b1 * b2) mod b3 are_relative_prime
proof end;

theorem Th6: :: EULER_2:6
for b1, b2, b3, b4 being Nat st b1 > 1 & b2 <> 0 & b1,b3 are_relative_prime & b4,b1 are_relative_prime & b3 = (b4 * b2) mod b1 holds
b1,b2 are_relative_prime
proof end;

theorem Th7: :: EULER_2:7
for b1, b2 being Nat holds (b1 mod b2) mod b2 = b1 mod b2
proof end;

theorem Th8: :: EULER_2:8
for b1, b2, b3 being Nat holds (b1 + b2) mod b3 = ((b1 mod b3) + (b2 mod b3)) mod b3
proof end;

theorem Th9: :: EULER_2:9
for b1, b2, b3 being Nat holds (b1 * b2) mod b3 = (b1 * (b2 mod b3)) mod b3
proof end;

theorem Th10: :: EULER_2:10
for b1, b2, b3 being Nat holds (b1 * b2) mod b3 = ((b1 mod b3) * b2) mod b3 by Th9;

theorem Th11: :: EULER_2:11
for b1, b2, b3 being Nat holds (b1 * b2) mod b3 = ((b1 mod b3) * (b2 mod b3)) mod b3
proof end;

definition
let c1 be Nat;
let c2 be FinSequence of NAT ;
redefine func * as c1 * c2 -> FinSequence of NAT ;
coherence
c1 * c2 is FinSequence of NAT
proof end;
end;

Lemma14: for b1 being FinSequence of NAT
for b2 being Nat holds Product (b1 ^ <*b2*>) = (Product b1) * b2
by RVSUM_1:126;

Lemma15: for b1, b2 being FinSequence of NAT holds Product (b1 ^ b2) = (Product b1) * (Product b2)
by RVSUM_1:127;

theorem Th12: :: EULER_2:12
canceled;

theorem Th13: :: EULER_2:13
canceled;

theorem Th14: :: EULER_2:14
canceled;

theorem Th15: :: EULER_2:15
canceled;

theorem Th16: :: EULER_2:16
canceled;

theorem Th17: :: EULER_2:17
canceled;

theorem Th18: :: EULER_2:18
canceled;

theorem Th19: :: EULER_2:19
canceled;

theorem Th20: :: EULER_2:20
canceled;

theorem Th21: :: EULER_2:21
canceled;

theorem Th22: :: EULER_2:22
canceled;

theorem Th23: :: EULER_2:23
canceled;

theorem Th24: :: EULER_2:24
canceled;

theorem Th25: :: EULER_2:25
for b1, b2 being FinSequence of NAT st b1,b2 are_fiberwise_equipotent holds
Product b1 = Product b2
proof end;

definition
let c1 be FinSequence of NAT ;
let c2 be Nat;
func c1 mod c2 -> FinSequence of NAT means :Def1: :: EULER_2:def 1
( len a3 = len a1 & ( for b1 being Nat st b1 in dom a1 holds
a3 . b1 = (a1 . b1) mod a2 ) );
existence
ex b1 being FinSequence of NAT st
( len b1 = len c1 & ( for b2 being Nat st b2 in dom c1 holds
b1 . b2 = (c1 . b2) mod c2 ) )
proof end;
uniqueness
for b1, b2 being FinSequence of NAT st len b1 = len c1 & ( for b3 being Nat st b3 in dom c1 holds
b1 . b3 = (c1 . b3) mod c2 ) & len b2 = len c1 & ( for b3 being Nat st b3 in dom c1 holds
b2 . b3 = (c1 . b3) mod c2 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def1 defines mod EULER_2:def 1 :
for b1 being FinSequence of NAT
for b2 being Nat
for b3 being FinSequence of NAT holds
( b3 = b1 mod b2 iff ( len b3 = len b1 & ( for b4 being Nat st b4 in dom b1 holds
b3 . b4 = (b1 . b4) mod b2 ) ) );

theorem Th26: :: EULER_2:26
for b1 being Nat
for b2 being FinSequence of NAT st b1 <> 0 holds
(Product (b2 mod b1)) mod b1 = (Product b2) mod b1
proof end;

theorem Th27: :: EULER_2:27
for b1, b2, b3 being Nat st b1 <> 0 & b2 > 1 & b3 <> 0 & (b1 * b3) mod b2 = b3 mod b2 & b2,b3 are_relative_prime holds
b1 mod b2 = 1
proof end;

theorem Th28: :: EULER_2:28
for b1 being Nat
for b2 being FinSequence of NAT holds (b2 mod b1) mod b1 = b2 mod b1
proof end;

theorem Th29: :: EULER_2:29
for b1, b2 being Nat
for b3 being FinSequence of NAT holds (b1 * (b3 mod b2)) mod b2 = (b1 * b3) mod b2
proof end;

theorem Th30: :: EULER_2:30
for b1 being Nat
for b2, b3 being FinSequence of NAT holds (b2 ^ b3) mod b1 = (b2 mod b1) ^ (b3 mod b1)
proof end;

theorem Th31: :: EULER_2:31
for b1, b2 being Nat
for b3, b4 being FinSequence of NAT holds (b1 * (b3 ^ b4)) mod b2 = ((b1 * b3) mod b2) ^ ((b1 * b4) mod b2)
proof end;

definition
let c1, c2 be Nat;
redefine func |^ as c1 |^ c2 -> Nat;
coherence
c1 |^ c2 is Nat
by NEWTON:99;
end;

theorem Th32: :: EULER_2:32
for b1, b2 being Nat st b1 <> 0 & b2 <> 0 & b1,b2 are_relative_prime holds
for b3 being Nat holds b1 |^ b3,b2 are_relative_prime
proof end;

theorem Th33: :: EULER_2:33
for b1, b2 being Nat st b1 <> 0 & b2 > 1 & b1,b2 are_relative_prime holds
(b1 |^ (Euler b2)) mod b2 = 1
proof end;

theorem Th34: :: EULER_2:34
for b1, b2 being Nat st b1 <> 0 & b2 is prime & b1,b2 are_relative_prime holds
(b1 |^ b2) mod b2 = b1 mod b2
proof end;