defpred S1[ Nat] means for m, n being Element of NAT st $1 gcd m = 1 holds
$1 gcd (m * n) = $1 gcd n;
A1: for k being Nat st ( for a being Nat st a < k holds
S1[a] ) holds
S1[k]
proof
let k be Nat; :: thesis: ( ( for a being Nat st a < k holds
S1[a] ) implies S1[k] )

assume A2: for a being Nat st a < k holds
S1[a] ; :: thesis: S1[k]
per cases ( k = 0 or k = 1 or k > 1 ) by NAT_1:26;
suppose A3: k = 0 ; :: thesis: S1[k]
let m, n be Element of NAT ; :: thesis: ( k gcd m = 1 implies k gcd (m * n) = k gcd n )
assume k gcd m = 1 ; :: thesis: k gcd (m * n) = k gcd n
then 1 = m by A3, NEWTON:65;
hence k gcd (m * n) = k gcd n ; :: thesis: verum
end;
suppose A4: k = 1 ; :: thesis: S1[k]
let m, n be Element of NAT ; :: thesis: ( k gcd m = 1 implies k gcd (m * n) = k gcd n )
assume k gcd m = 1 ; :: thesis: k gcd (m * n) = k gcd n
k gcd (m * n) = 1 by A4, NEWTON:64;
hence k gcd (m * n) = k gcd n by A4, NEWTON:64; :: thesis: verum
end;
suppose A5: k > 1 ; :: thesis: S1[k]
let m, n be Element of NAT ; :: thesis: ( k gcd m = 1 implies k gcd (m * n) = k gcd n )
assume A6: k gcd m = 1 ; :: thesis: k gcd (m * n) = k gcd n
set b = k gcd (m * n);
thus k gcd (m * n) = k gcd n :: thesis: verum
proof
per cases ( k gcd (m * n) = 0 or k gcd (m * n) = 1 or k gcd (m * n) > 1 ) by NAT_1:26;
suppose k gcd (m * n) = 0 ; :: thesis: k gcd (m * n) = k gcd n
then 0 divides k by NAT_D:def 5;
then k = 0 by INT_2:3;
hence k gcd (m * n) = k gcd n by A5; :: thesis: verum
end;
suppose k gcd (m * n) > 1 ; :: thesis: k gcd (m * n) = k gcd n
then k gcd (m * n) >= 1 + 1 by NAT_1:13;
then consider p being Element of NAT such that
A10: p is prime and
A11: p divides k gcd (m * n) by INT_2:48;
A12: p divides k then consider s being Nat such that
A13: k = p * s by NAT_D:def 3;
reconsider s = s as Element of NAT by ORDINAL1:def 13;
A14: s < k A17: not p divides m p divides m * n
proof
k gcd (m * n) divides m * n by NAT_D:def 5;
hence p divides m * n by A11, NAT_D:4; :: thesis: verum
end;
then p divides n by A10, A17, NEWTON:98;
then consider r being Nat such that
A18: n = p * r by NAT_D:def 3;
reconsider r = r as Element of NAT by ORDINAL1:def 13;
A19: s gcd m = 1 A22: k gcd (m * n) = (p * s) gcd (p * (m * r)) by A13, A18
.= p * (s gcd (m * r)) by PYTHTRIP:8 ;
k gcd n = p * (s gcd r) by A13, A18, PYTHTRIP:8;
hence k gcd (m * n) = k gcd n by A2, A14, A19, A22; :: thesis: verum
end;
end;
end;
end;
end;
end;
for k being Nat holds S1[k] from NAT_1:sch 4(A1);
hence for k, m, n being Element of NAT st k gcd m = 1 holds
k gcd (m * n) = k gcd n ; :: thesis: verum