:: INT_2 semantic presentation

definition
let c1 be integer number ;
redefine func abs as abs c1 -> Nat;
coherence
abs c1 is Nat
proof end;
end;

theorem Th1: :: INT_2:1
canceled;

theorem Th2: :: INT_2:2
canceled;

theorem Th3: :: INT_2:3
for b1 being Nat holds
( 0 divides b1 iff b1 = 0 )
proof end;

theorem Th4: :: INT_2:4
for b1, b2 being Nat holds
( ( b1 = 0 or b2 = 0 ) iff b1 lcm b2 = 0 )
proof end;

theorem Th5: :: INT_2:5
for b1, b2 being Nat holds
( ( b1 = 0 & b2 = 0 ) iff b1 hcf b2 = 0 )
proof end;

theorem Th6: :: INT_2:6
for b1, b2 being Nat holds b1 * b2 = (b1 lcm b2) * (b1 hcf b2)
proof end;

theorem Th7: :: INT_2:7
canceled;

theorem Th8: :: INT_2:8
for b1 being Nat holds
( - b1 is Nat iff b1 = 0 )
proof end;

theorem Th9: :: INT_2:9
- 1 is not Nat by Th8;

theorem Th10: :: INT_2:10
for b1 being Integer holds
( 0 divides b1 iff b1 = 0 )
proof end;

theorem Th11: :: INT_2:11
for b1 being Integer holds
( b1 divides - b1 & - b1 divides b1 )
proof end;

theorem Th12: :: INT_2:12
for b1, b2, b3 being Integer st b1 divides b2 holds
b1 divides b2 * b3
proof end;

theorem Th13: :: INT_2:13
for b1, b2, b3 being Integer st b1 divides b2 & b2 divides b3 holds
b1 divides b3
proof end;

theorem Th14: :: INT_2:14
for b1, b2 being Integer holds
( ( b1 divides b2 implies b1 divides - b2 ) & ( b1 divides - b2 implies b1 divides b2 ) & ( b1 divides b2 implies - b1 divides b2 ) & ( - b1 divides b2 implies b1 divides b2 ) & ( b1 divides b2 implies - b1 divides - b2 ) & ( - b1 divides - b2 implies b1 divides b2 ) & ( b1 divides - b2 implies - b1 divides b2 ) & ( - b1 divides b2 implies b1 divides - b2 ) )
proof end;

theorem Th15: :: INT_2:15
for b1, b2 being Integer st b1 divides b2 & b2 divides b1 & not b1 = b2 holds
b1 = - b2
proof end;

theorem Th16: :: INT_2:16
for b1 being Integer holds
( b1 divides 0 & 1 divides b1 & - 1 divides b1 )
proof end;

theorem Th17: :: INT_2:17
for b1 being Integer holds
( ( not b1 divides 1 & not b1 divides - 1 ) or b1 = 1 or b1 = - 1 )
proof end;

theorem Th18: :: INT_2:18
for b1 being Integer st ( b1 = 1 or b1 = - 1 ) holds
( b1 divides 1 & b1 divides - 1 ) by Th16;

theorem Th19: :: INT_2:19
for b1, b2, b3 being Integer holds
( b1,b2 are_congruent_mod b3 iff b3 divides b1 - b2 )
proof end;

theorem Th20: :: INT_2:20
for b1 being Integer holds abs b1 is Nat ;

theorem Th21: :: INT_2:21
for b1, b2 being Integer holds
( b1 divides b2 iff abs b1 divides abs b2 )
proof end;

definition
let c1, c2 be Integer;
canceled;
func c1 lcm' c2 -> Integer equals :: INT_2:def 2
(abs a1) lcm (abs a2);
coherence
(abs c1) lcm (abs c2) is Integer
;
commutativity
for b1, b2, b3 being Integer st b1 = (abs b2) lcm (abs b3) holds
b1 = (abs b3) lcm (abs b2)
;
end;

:: deftheorem Def1 INT_2:def 1 :
canceled;

:: deftheorem Def2 defines lcm' INT_2:def 2 :
for b1, b2 being Integer holds b1 lcm' b2 = (abs b1) lcm (abs b2);

theorem Th22: :: INT_2:22
canceled;

theorem Th23: :: INT_2:23
for b1, b2 being Integer holds b1 lcm' b2 is Nat ;

theorem Th24: :: INT_2:24
canceled;

theorem Th25: :: INT_2:25
for b1, b2 being Integer holds b1 divides b1 lcm' b2
proof end;

theorem Th26: :: INT_2:26
for b1, b2 being Integer holds b1 divides b2 lcm' b1 by Th25;

theorem Th27: :: INT_2:27
for b1, b2, b3 being Integer st b1 divides b3 & b2 divides b3 holds
b1 lcm' b2 divides b3
proof end;

definition
let c1, c2 be Integer;
func c1 gcd c2 -> Integer equals :: INT_2:def 3
(abs a1) hcf (abs a2);
coherence
(abs c1) hcf (abs c2) is Integer
;
commutativity
for b1, b2, b3 being Integer st b1 = (abs b2) hcf (abs b3) holds
b1 = (abs b3) hcf (abs b2)
;
end;

:: deftheorem Def3 defines gcd INT_2:def 3 :
for b1, b2 being Integer holds b1 gcd b2 = (abs b1) hcf (abs b2);

theorem Th28: :: INT_2:28
canceled;

theorem Th29: :: INT_2:29
for b1, b2 being Integer holds b1 gcd b2 is Nat ;

theorem Th30: :: INT_2:30
canceled;

theorem Th31: :: INT_2:31
for b1, b2 being Integer holds b1 gcd b2 divides b1
proof end;

theorem Th32: :: INT_2:32
for b1, b2 being Integer holds b1 gcd b2 divides b2 by Th31;

theorem Th33: :: INT_2:33
for b1, b2, b3 being Integer st b3 divides b1 & b3 divides b2 holds
b3 divides b1 gcd b2
proof end;

theorem Th34: :: INT_2:34
for b1, b2 being Integer holds
( ( b1 = 0 or b2 = 0 ) iff b1 lcm' b2 = 0 )
proof end;

theorem Th35: :: INT_2:35
for b1, b2 being Integer holds
( ( b1 = 0 & b2 = 0 ) iff b1 gcd b2 = 0 )
proof end;

definition
let c1, c2 be Integer;
pred c1,c2 are_relative_prime means :Def4: :: INT_2:def 4
a1 gcd a2 = 1;
symmetry
for b1, b2 being Integer st b1 gcd b2 = 1 holds
b2 gcd b1 = 1
;
end;

:: deftheorem Def4 defines are_relative_prime INT_2:def 4 :
for b1, b2 being Integer holds
( b1,b2 are_relative_prime iff b1 gcd b2 = 1 );

theorem Th36: :: INT_2:36
canceled;

theorem Th37: :: INT_2:37
canceled;

theorem Th38: :: INT_2:38
for b1, b2 being Integer st ( b1 <> 0 or b2 <> 0 ) holds
ex b3, b4 being Integer st
( b1 = (b1 gcd b2) * b3 & b2 = (b1 gcd b2) * b4 & b3,b4 are_relative_prime )
proof end;

theorem Th39: :: INT_2:39
for b1, b2, b3 being Integer st b1,b2 are_relative_prime holds
( (b3 * b1) gcd (b3 * b2) = abs b3 & (b3 * b1) gcd (b2 * b3) = abs b3 & (b1 * b3) gcd (b3 * b2) = abs b3 & (b1 * b3) gcd (b2 * b3) = abs b3 )
proof end;

theorem Th40: :: INT_2:40
for b1, b2, b3 being Integer st b1 divides b2 * b3 & b2,b1 are_relative_prime holds
b1 divides b3
proof end;

theorem Th41: :: INT_2:41
for b1, b2, b3 being Integer st b1,b2 are_relative_prime & b3,b2 are_relative_prime holds
b1 * b3,b2 are_relative_prime
proof end;

definition
let c1 be Nat;
attr a1 is prime means :Def5: :: INT_2:def 5
( a1 > 1 & ( for b1 being Nat holds
( not b1 divides a1 or b1 = 1 or b1 = a1 ) ) );
end;

:: deftheorem Def5 defines prime INT_2:def 5 :
for b1 being Nat holds
( b1 is prime iff ( b1 > 1 & ( for b2 being Nat holds
( not b2 divides b1 or b2 = 1 or b2 = b1 ) ) ) );

definition
let c1, c2 be Nat;
pred c1,c2 are_relative_prime means :Def6: :: INT_2:def 6
a1 hcf a2 = 1;
symmetry
for b1, b2 being Nat st b1 hcf b2 = 1 holds
b2 hcf b1 = 1
;
end;

:: deftheorem Def6 defines are_relative_prime INT_2:def 6 :
for b1, b2 being Nat holds
( b1,b2 are_relative_prime iff b1 hcf b2 = 1 );

theorem Th42: :: INT_2:42
canceled;

theorem Th43: :: INT_2:43
canceled;

theorem Th44: :: INT_2:44
2 is prime
proof end;

theorem Th45: :: INT_2:45
canceled;

theorem Th46: :: INT_2:46
not 4 is prime
proof end;

theorem Th47: :: INT_2:47
for b1, b2 being Nat st b1 is prime & b2 is prime & not b1,b2 are_relative_prime holds
b1 = b2
proof end;

scheme :: INT_2:sch 1
s1{ F1() -> Nat, P1[ Nat] } :
for b1 being Nat st b1 >= F1() holds
P1[b1]
provided
E23: P1[F1()] and
E24: for b1 being Nat st b1 >= F1() & P1[b1] holds
P1[b1 + 1]
proof end;

scheme :: INT_2:sch 2
s2{ F1() -> Nat, P1[ Nat] } :
for b1 being Nat st b1 >= F1() holds
P1[b1]
provided
E23: for b1 being Nat st b1 >= F1() & ( for b2 being Nat st b2 >= F1() & b2 < b1 holds
P1[b2] ) holds
P1[b1]
proof end;

theorem Th48: :: INT_2:48
for b1 being Nat st b1 >= 2 holds
ex b2 being Nat st
( b2 is prime & b2 divides b1 )
proof end;