let m, n be Nat; ( ( m > 0 or n > 0 ) implies ex i, i1 being Integer st (i * m) + (i1 * n) = m gcd n )
defpred S1[ Nat] means ( $1 > 0 & ex i, i1 being Integer st (i * m) + (i1 * n) = $1 );
assume A1:
( m > 0 or n > 0 )
; ex i, i1 being Integer st (i * m) + (i1 * n) = m gcd n
A2:
ex p being Nat st S1[p]
ex p being Nat st
( S1[p] & ( for n being Nat st S1[n] holds
p <= n ) )
from NAT_1:sch 5(A2);
then consider p being Nat such that
A5:
p > 0
and
A6:
ex i, i0 being Integer st (i * m) + (i0 * n) = p
and
A7:
for k being Nat st k > 0 & ex i1, i2 being Integer st (i1 * m) + (i2 * n) = k holds
p <= k
;
consider i, i0 being Integer such that
A8:
(i * m) + (i0 * n) = p
by A6;
A9:
for k being Nat st ex i1, i2 being Integer st (i1 * m) + (i2 * n) = k holds
p divides k
A14:
for s being Nat st s divides m & s divides n holds
s divides p
(0 * m) + (1 * n) = n
;
then A19:
p divides n
by A9;
(1 * m) + (0 * n) = m
;
then
p divides m
by A9;
then
p = m gcd n
by A19, A14, NAT_D:def 5;
hence
ex i, i1 being Integer st (i * m) + (i1 * n) = m gcd n
by A6; verum