:: PYTHTRIP semantic presentation

definition
let c1, c2 be Nat;
redefine pred c1,c2 are_relative_prime means :Def1: :: PYTHTRIP:def 1
for b1 being Nat st b1 divides a1 & b1 divides a2 holds
b1 = 1;
compatibility
( c1,c2 are_relative_prime iff for b1 being Nat st b1 divides c1 & b1 divides c2 holds
b1 = 1 )
proof end;
end;

:: deftheorem Def1 defines are_relative_prime PYTHTRIP:def 1 :
for b1, b2 being Nat holds
( b1,b2 are_relative_prime iff for b3 being Nat st b3 divides b1 & b3 divides b2 holds
b3 = 1 );

definition
let c1, c2 be Nat;
redefine pred c1,c2 are_relative_prime means :Def2: :: PYTHTRIP:def 2
for b1 being prime Nat holds
( not b1 divides a1 or not b1 divides a2 );
compatibility
( c1,c2 are_relative_prime iff for b1 being prime Nat holds
( not b1 divides c1 or not b1 divides c2 ) )
proof end;
end;

:: deftheorem Def2 defines are_relative_prime PYTHTRIP:def 2 :
for b1, b2 being Nat holds
( b1,b2 are_relative_prime iff for b3 being prime Nat holds
( not b3 divides b1 or not b3 divides b2 ) );

definition
let c1 be number ;
attr a1 is square means :Def3: :: PYTHTRIP:def 3
ex b1 being Nat st a1 = b1 ^2 ;
end;

:: deftheorem Def3 defines square PYTHTRIP:def 3 :
for b1 being number holds
( b1 is square iff ex b2 being Nat st b1 = b2 ^2 );

registration
cluster square -> natural set ;
coherence
for b1 being number st b1 is square holds
b1 is natural
proof end;
end;

registration
let c1 be Nat;
cluster a1 ^2 -> natural square ;
coherence
c1 ^2 is square
by Def3;
end;

registration
cluster even square Element of NAT ;
existence
ex b1 being Nat st
( b1 is even & b1 is square )
proof end;
end;

registration
cluster odd square Element of NAT ;
existence
ex b1 being Nat st
( not b1 is even & b1 is square )
proof end;
end;

registration
cluster natural even square set ;
existence
ex b1 being number st
( b1 is even & b1 is square )
proof end;
end;

registration
cluster natural odd square set ;
existence
ex b1 being number st
( not b1 is even & b1 is square )
proof end;
end;

registration
let c1, c2 be square number ;
cluster a1 * a2 -> natural square ;
coherence
c1 * c2 is square
proof end;
end;

theorem Th1: :: PYTHTRIP:1
for b1, b2 being Nat st b1 * b2 is square & b1,b2 are_relative_prime holds
( b1 is square & b2 is square )
proof end;

registration
let c1 be even Integer;
cluster a1 ^2 -> even ;
coherence
c1 ^2 is even
;
end;

registration
let c1 be odd Integer;
cluster a1 ^2 -> odd ;
coherence
not c1 ^2 is even
;
end;

theorem Th2: :: PYTHTRIP:2
for b1 being Integer holds
( b1 is even iff b1 ^2 is even )
proof end;

theorem Th3: :: PYTHTRIP:3
for b1 being Integer st b1 is even holds
(b1 ^2 ) mod 4 = 0
proof end;

theorem Th4: :: PYTHTRIP:4
for b1 being Integer st not b1 is even holds
(b1 ^2 ) mod 4 = 1
proof end;

registration
let c1, c2 be odd square number ;
cluster a1 + a2 -> non square ;
coherence
not c1 + c2 is square
proof end;
end;

theorem Th5: :: PYTHTRIP:5
for b1, b2 being Nat st b1 ^2 = b2 ^2 holds
b1 = b2
proof end;

theorem Th6: :: PYTHTRIP:6
for b1, b2 being Nat holds
( b1 divides b2 iff b1 ^2 divides b2 ^2 )
proof end;

theorem Th7: :: PYTHTRIP:7
for b1, b2, b3 being Nat holds
( ( b1 divides b2 or b3 = 0 ) iff b3 * b1 divides b3 * b2 )
proof end;

theorem Th8: :: PYTHTRIP:8
for b1, b2, b3 being Nat holds (b1 * b2) hcf (b1 * b3) = b1 * (b2 hcf b3)
proof end;

theorem Th9: :: PYTHTRIP:9
for b1 being set st ( for b2 being Nat ex b3 being Nat st
( b3 >= b2 & b3 in b1 ) ) holds
not b1 is finite
proof end;

theorem Th10: :: PYTHTRIP:10
for b1, b2 being Nat holds
( not b1,b2 are_relative_prime or not b1 is even or not b2 is even )
proof end;

theorem Th11: :: PYTHTRIP:11
for b1, b2, b3 being Nat st (b1 ^2 ) + (b2 ^2 ) = b3 ^2 & b1,b2 are_relative_prime & not b1 is even holds
ex b4, b5 being Nat st
( b4 <= b5 & b1 = (b5 ^2 ) - (b4 ^2 ) & b2 = (2 * b4) * b5 & b3 = (b5 ^2 ) + (b4 ^2 ) )
proof end;

theorem Th12: :: PYTHTRIP:12
for b1, b2, b3, b4, b5 being Nat st b1 = (b2 ^2 ) - (b3 ^2 ) & b4 = (2 * b3) * b2 & b5 = (b2 ^2 ) + (b3 ^2 ) holds
(b1 ^2 ) + (b4 ^2 ) = b5 ^2 ;

definition
mode Pythagorean_triple -> Subset of NAT means :Def4: :: PYTHTRIP:def 4
ex b1, b2, b3 being Nat st
( (b1 ^2 ) + (b2 ^2 ) = b3 ^2 & a1 = {b1,b2,b3} );
existence
ex b1 being Subset of NAT ex b2, b3, b4 being Nat st
( (b2 ^2 ) + (b3 ^2 ) = b4 ^2 & b1 = {b2,b3,b4} )
proof end;
end;

:: deftheorem Def4 defines Pythagorean_triple PYTHTRIP:def 4 :
for b1 being Subset of NAT holds
( b1 is Pythagorean_triple iff ex b2, b3, b4 being Nat st
( (b2 ^2 ) + (b3 ^2 ) = b4 ^2 & b1 = {b2,b3,b4} ) );

registration
cluster -> finite Pythagorean_triple ;
coherence
for b1 being Pythagorean_triple holds b1 is finite
proof end;
end;

definition
redefine mode Pythagorean_triple -> Subset of NAT means :Def5: :: PYTHTRIP:def 5
ex b1, b2, b3 being Nat st
( b2 <= b3 & a1 = {(b1 * ((b3 ^2 ) - (b2 ^2 ))),(b1 * ((2 * b2) * b3)),(b1 * ((b3 ^2 ) + (b2 ^2 )))} );
compatibility
for b1 being Subset of NAT holds
( b1 is Pythagorean_triple iff ex b2, b3, b4 being Nat st
( b3 <= b4 & b1 = {(b2 * ((b4 ^2 ) - (b3 ^2 ))),(b2 * ((2 * b3) * b4)),(b2 * ((b4 ^2 ) + (b3 ^2 )))} ) )
proof end;
end;

:: deftheorem Def5 defines Pythagorean_triple PYTHTRIP:def 5 :
for b1 being Subset of NAT holds
( b1 is Pythagorean_triple iff ex b2, b3, b4 being Nat st
( b3 <= b4 & b1 = {(b2 * ((b4 ^2 ) - (b3 ^2 ))),(b2 * ((2 * b3) * b4)),(b2 * ((b4 ^2 ) + (b3 ^2 )))} ) );

definition
let c1 be Pythagorean_triple ;
attr a1 is degenerate means :Def6: :: PYTHTRIP:def 6
0 in a1;
end;

:: deftheorem Def6 defines degenerate PYTHTRIP:def 6 :
for b1 being Pythagorean_triple holds
( b1 is degenerate iff 0 in b1 );

theorem Th13: :: PYTHTRIP:13
for b1 being Nat st b1 > 2 holds
ex b2 being Pythagorean_triple st
( not b2 is degenerate & b1 in b2 )
proof end;

definition
let c1 be Pythagorean_triple ;
attr a1 is simplified means :Def7: :: PYTHTRIP:def 7
for b1 being Nat st ( for b2 being Nat st b2 in a1 holds
b1 divides b2 ) holds
b1 = 1;
end;

:: deftheorem Def7 defines simplified PYTHTRIP:def 7 :
for b1 being Pythagorean_triple holds
( b1 is simplified iff for b2 being Nat st ( for b3 being Nat st b3 in b1 holds
b2 divides b3 ) holds
b2 = 1 );

definition
let c1 be Pythagorean_triple ;
redefine attr a1 is simplified means :Def8: :: PYTHTRIP:def 8
ex b1, b2 being Nat st
( b1 in a1 & b2 in a1 & b1,b2 are_relative_prime );
compatibility
( c1 is simplified iff ex b1, b2 being Nat st
( b1 in c1 & b2 in c1 & b1,b2 are_relative_prime ) )
proof end;
end;

:: deftheorem Def8 defines simplified PYTHTRIP:def 8 :
for b1 being Pythagorean_triple holds
( b1 is simplified iff ex b2, b3 being Nat st
( b2 in b1 & b3 in b1 & b2,b3 are_relative_prime ) );

theorem Th14: :: PYTHTRIP:14
for b1 being Nat st b1 > 0 holds
ex b2 being Pythagorean_triple st
( not b2 is degenerate & b2 is simplified & 4 * b1 in b2 )
proof end;

registration
cluster finite non degenerate simplified Pythagorean_triple ;
existence
ex b1 being Pythagorean_triple st
( not b1 is degenerate & b1 is simplified )
proof end;
end;

theorem Th15: :: PYTHTRIP:15
{3,4,5} is non degenerate simplified Pythagorean_triple
proof end;

theorem Th16: :: PYTHTRIP:16
not { b1 where B is Pythagorean_triple : ( not b1 is degenerate & b1 is simplified ) } is finite
proof end;