:: Euclide Algorithm
:: by Andrzej Trybulec and Yatsuka Nakamura
::
:: Received October 8, 1993
:: Copyright (c) 1993 Association of Mizar Users
set a = dl. 0 ;
set b = dl. 1;
set c = dl. 2;
Lm1:
( dl. 0 <> dl. 1 & dl. 1 <> dl. 2 & dl. 2 <> dl. 0 )
by AMI_3:52;
:: deftheorem defines Euclide-Algorithm AMI_4:def 1 :
defpred S1[ State of SCM ] means ( $1 . 0 = (dl. 2) := (dl. 1) & $1 . 1 = Divide (dl. 0 ),(dl. 1) & $1 . 2 = (dl. 0 ) := (dl. 2) & $1 . 3 = (dl. 1) >0_goto (il. 0 ) & $1 halts_at 4 );
set IN0 = 0 .--> ((dl. 2) := (dl. 1));
set IN1 = 1 .--> (Divide (dl. 0 ),(dl. 1));
set IN2 = 2 .--> ((dl. 0 ) := (dl. 2));
set IN3 = 3 .--> ((dl. 1) >0_goto (il. 0 ));
set IN4 = 4 .--> (halt SCM );
set EA3 = (3 .--> ((dl. 1) >0_goto (il. 0 ))) +* (4 .--> (halt SCM ));
set EA2 = (2 .--> ((dl. 0 ) := (dl. 2))) +* ((3 .--> ((dl. 1) >0_goto (il. 0 ))) +* (4 .--> (halt SCM )));
set EA1 = (1 .--> (Divide (dl. 0 ),(dl. 1))) +* ((2 .--> ((dl. 0 ) := (dl. 2))) +* ((3 .--> ((dl. 1) >0_goto (il. 0 ))) +* (4 .--> (halt SCM ))));
set EA0 = (0 .--> ((dl. 2) := (dl. 1))) +* ((1 .--> (Divide (dl. 0 ),(dl. 1))) +* ((2 .--> ((dl. 0 ) := (dl. 2))) +* ((3 .--> ((dl. 1) >0_goto (il. 0 ))) +* (4 .--> (halt SCM )))));
theorem :: AMI_4:1
canceled;
theorem :: AMI_4:2
canceled;
theorem :: AMI_4:3
canceled;
theorem Th4: :: AMI_4:4
Lm2:
for s being State of SCM st Euclide-Algorithm c= s holds
S1[s]
theorem Th5: :: AMI_4:5
theorem Th6: :: AMI_4:6
for
s being
State of
SCM st
Euclide-Algorithm c= s holds
for
k being
Element of
NAT st
IC (Computation s,k) = 1 holds
(
IC (Computation s,(k + 1)) = 2 &
(Computation s,(k + 1)) . (dl. 0 ) = ((Computation s,k) . (dl. 0 )) div ((Computation s,k) . (dl. 1)) &
(Computation s,(k + 1)) . (dl. 1) = ((Computation s,k) . (dl. 0 )) mod ((Computation s,k) . (dl. 1)) &
(Computation s,(k + 1)) . (dl. 2) = (Computation s,k) . (dl. 2) )
theorem Th7: :: AMI_4:7
theorem Th8: :: AMI_4:8
theorem Th9: :: AMI_4:9
Lm3:
for k being Element of NAT
for s being State of SCM st s starts_at 0 & Euclide-Algorithm c= s & s . (dl. 0 ) > 0 & s . (dl. 1) > 0 holds
( (Computation s,(4 * k)) . (dl. 0 ) > 0 & ( ( (Computation s,(4 * k)) . (dl. 1) > 0 & IC (Computation s,(4 * k)) = 0 ) or ( (Computation s,(4 * k)) . (dl. 1) = 0 & IC (Computation s,(4 * k)) = 4 ) ) )
Lm4:
for k being Element of NAT
for s being State of SCM st s starts_at 0 & Euclide-Algorithm c= s & s . (dl. 0 ) > 0 & s . (dl. 1) > 0 & (Computation s,(4 * k)) . (dl. 1) > 0 holds
( (Computation s,(4 * (k + 1))) . (dl. 0 ) = (Computation s,(4 * k)) . (dl. 1) & (Computation s,(4 * (k + 1))) . (dl. 1) = ((Computation s,(4 * k)) . (dl. 0 )) mod ((Computation s,(4 * k)) . (dl. 1)) )
Lm5:
for s being State of SCM st s starts_at 0 & Euclide-Algorithm c= s holds
for x, y being Integer st s . (dl. 0 ) = x & s . (dl. 1) = y & x > y & y > 0 holds
( (Result s) . (dl. 0 ) = x gcd y & ex k being Element of NAT st s halts_at IC (Computation s,k) )
theorem Th10: :: AMI_4:10
definition
func Euclide-Function -> PartFunc of
FinPartSt SCM ,
FinPartSt SCM means :
Def2:
:: AMI_4:def 2
for
p,
q being
FinPartState of
SCM holds
(
[p,q] in it iff ex
x,
y being
Integer st
(
x > 0 &
y > 0 &
p = (dl. 0 ),
(dl. 1) --> x,
y &
q = (dl. 0 ) .--> (x gcd y) ) );
existence
ex b1 being PartFunc of FinPartSt SCM , FinPartSt SCM st
for p, q being FinPartState of SCM holds
( [p,q] in b1 iff ex x, y being Integer st
( x > 0 & y > 0 & p = (dl. 0 ),(dl. 1) --> x,y & q = (dl. 0 ) .--> (x gcd y) ) )
uniqueness
for b1, b2 being PartFunc of FinPartSt SCM , FinPartSt SCM st ( for p, q being FinPartState of SCM holds
( [p,q] in b1 iff ex x, y being Integer st
( x > 0 & y > 0 & p = (dl. 0 ),(dl. 1) --> x,y & q = (dl. 0 ) .--> (x gcd y) ) ) ) & ( for p, q being FinPartState of SCM holds
( [p,q] in b2 iff ex x, y being Integer st
( x > 0 & y > 0 & p = (dl. 0 ),(dl. 1) --> x,y & q = (dl. 0 ) .--> (x gcd y) ) ) ) holds
b1 = b2
end;
:: deftheorem Def2 defines Euclide-Function AMI_4:def 2 :
theorem Th11: :: AMI_4:11
theorem Th12: :: AMI_4:12
theorem :: AMI_4:13