:: INT_2 semantic presentation

definition
let a be integer number ;
:: original: abs
redefine func abs a -> Element of NAT ;
coherence
abs a is Element of NAT
proof end;
end;

theorem :: INT_2:1
canceled;

theorem :: INT_2:2
canceled;

theorem Th3: :: INT_2:3
for a being natural number holds
( 0 divides a iff a = 0 )
proof end;

theorem Th4: :: INT_2:4
for a, b being natural number holds
( ( a = 0 or b = 0 ) iff a lcm b = 0 )
proof end;

theorem :: INT_2:5
for a, b being natural number holds
( ( a = 0 & b = 0 ) iff a hcf b = 0 )
proof end;

theorem :: INT_2:6
for a, b being natural number holds a * b = (a lcm b) * (a hcf b)
proof end;

theorem :: INT_2:7
canceled;

theorem Th8: :: INT_2:8
for n being natural number holds
( - n is Element of NAT iff n = 0 )
proof end;

theorem :: INT_2:9
- 1 is not Element of NAT by Th8;

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

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

theorem Th12: :: INT_2:12
for a, b, c being Integer st a divides b holds
a divides b * c
proof end;

theorem Th13: :: INT_2:13
for a, b, c being Integer st a divides b & b divides c holds
a divides c
proof end;

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

theorem :: INT_2:15
for a, b being Integer st a divides b & b divides a & not a = b holds
a = - b
proof end;

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

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

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

theorem :: INT_2:19
for a, b, c being Integer holds
( a,b are_congruent_mod c iff c divides a - b )
proof end;

theorem :: INT_2:20
for a being Integer holds abs a is Element of NAT ;

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

definition
let a, b be Integer;
canceled;
func a lcm' b -> Integer equals :: INT_2:def 2
(abs a) lcm (abs b);
coherence
(abs a) lcm (abs b) is Integer
;
commutativity
for b1, a, b being Integer st b1 = (abs a) lcm (abs b) holds
b1 = (abs b) lcm (abs a)
;
end;

:: deftheorem INT_2:def 1 :
canceled;

:: deftheorem defines lcm' INT_2:def 2 :
for a, b being Integer holds a lcm' b = (abs a) lcm (abs b);

theorem :: INT_2:22
canceled;

theorem :: INT_2:23
for a, b being Integer holds a lcm' b is Element of NAT ;

theorem :: INT_2:24
canceled;

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

theorem :: INT_2:26
for b, a being Integer holds b divides a lcm' b by Th25;

theorem Th27: :: INT_2:27
for a, b, c being Integer st a divides c & b divides c holds
a lcm' b divides c
proof end;

definition
let a, b be Integer;
func a gcd b -> Integer equals :: INT_2:def 3
(abs a) hcf (abs b);
coherence
(abs a) hcf (abs b) is Integer
;
commutativity
for b1, a, b being Integer st b1 = (abs a) hcf (abs b) holds
b1 = (abs b) hcf (abs a)
;
end;

:: deftheorem defines gcd INT_2:def 3 :
for a, b being Integer holds a gcd b = (abs a) hcf (abs b);

theorem :: INT_2:28
canceled;

theorem :: INT_2:29
for a, b being Integer holds a gcd b is Element of NAT ;

theorem :: INT_2:30
canceled;

theorem Th31: :: INT_2:31
for a, b being Integer holds a gcd b divides a
proof end;

theorem :: INT_2:32
for a, b being Integer holds a gcd b divides b by Th31;

theorem Th33: :: INT_2:33
for a, b, c being Integer st c divides a & c divides b holds
c divides a gcd b
proof end;

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

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

definition
let a, b be Integer;
pred a,b are_relative_prime means :Def4: :: INT_2:def 4
a gcd b = 1;
symmetry
for a, b being Integer st a gcd b = 1 holds
b gcd a = 1
;
end;

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

theorem :: INT_2:36
canceled;

theorem :: INT_2:37
canceled;

theorem :: INT_2:38
for a, b being Integer st ( a <> 0 or b <> 0 ) holds
ex a1, b1 being Integer st
( a = (a gcd b) * a1 & b = (a gcd b) * b1 & a1,b1 are_relative_prime )
proof end;

theorem Th39: :: INT_2:39
for a, b, c being Integer st a,b are_relative_prime holds
( (c * a) gcd (c * b) = abs c & (c * a) gcd (b * c) = abs c & (a * c) gcd (c * b) = abs c & (a * c) gcd (b * c) = abs c )
proof end;

theorem Th40: :: INT_2:40
for c, a, b being Integer st c divides a * b & a,c are_relative_prime holds
c divides b
proof end;

theorem :: INT_2:41
for a, c, b being Integer st a,c are_relative_prime & b,c are_relative_prime holds
a * b,c are_relative_prime
proof end;

definition
let p be natural number ;
attr p is prime means :Def5: :: INT_2:def 5
( p > 1 & ( for n being natural number holds
( not n divides p or n = 1 or n = p ) ) );
end;

:: deftheorem Def5 defines prime INT_2:def 5 :
for p being natural number holds
( p is prime iff ( p > 1 & ( for n being natural number holds
( not n divides p or n = 1 or n = p ) ) ) );

definition
let m, n be natural number ;
pred m,n are_relative_prime means :Def6: :: INT_2:def 6
m hcf n = 1;
symmetry
for m, n being natural number st m hcf n = 1 holds
n hcf m = 1
;
end;

:: deftheorem Def6 defines are_relative_prime INT_2:def 6 :
for m, n being natural number holds
( m,n are_relative_prime iff m hcf n = 1 );

theorem :: INT_2:42
canceled;

theorem :: INT_2:43
canceled;

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

theorem :: INT_2:45
canceled;

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

registration
cluster natural prime set ;
existence
ex b1 being natural number st b1 is prime
by Th44;
cluster non zero natural non prime set ;
existence
ex b1 being natural number st
( not b1 is zero & not b1 is prime )
proof end;
end;

theorem :: INT_2:47
for p, q being natural number st p is prime & q is prime & not p,q are_relative_prime holds
p = q
proof end;

theorem :: INT_2:48
for l being natural number st l >= 2 holds
ex p being Element of NAT st
( p is prime & p divides l )
proof end;