:: AMI_4 semantic presentation
theorem Th1: :: AMI_4:1
theorem Th2: :: AMI_4:2
proof
let c
1, c
2 be
Integer;
assume that E3:
c
1 >= 0
and E4:
c
2 >= 0
;
per cases
not ( not c2 > 0 & not c2 = 0 )
by E4;
suppose E5:
c
2 > 0
;
then E6:
( c
1 = abs c
1 & c
2 = abs c
2 )
by E3, ABSVALUE:def 1;
( c
1 mod c
2 >= 0 & c
1 div c
2 >= 0 )
by E3, E5, Th1, NEWTON:78;
then reconsider c
3 = c
1 mod c
2, c
4 = c
1 div c
2 as
Nat by INT_1:16;
E7:
c
3 < c
2
by E5, NEWTON:79;
c
3 = c
1 - (c4 * c2)
by E5, INT_1:def 8;
then
c
1 = (c2 * c4) + c
3
;
hence
(
(abs c1) mod (abs c2) = c
1 mod c
2 &
(abs c1) div (abs c2) = c
1 div c
2 )
by E6, E7, NAT_1:def 1, NAT_1:def 2;
end;
end;
end;
scheme :: AMI_4:sch 1
s1{ F
1(
Nat)
-> Nat, F
2(
Nat)
-> Nat, F
3()
-> Nat, F
4()
-> Nat } :
ex b
1 being
Nat st
( F
1(b
1)
= F
3()
hcf F
4() & F
2(b
1)
= 0 )
provided
E3:
0
< F
4()
and
E4:
F
4()
< F
3()
and
E5:
F
1(0)
= F
3()
and
E6:
F
2(0)
= F
4()
and
E7:
for b
1 being
Nat holds
( F
2(b
1)
> 0 implies ( F
1(
(b1 + 1))
= F
2(b
1) & F
2(
(b1 + 1))
= F
1(b
1)
mod F
2(b
1) ) )
proof
E8:
( 0
< F
4() & F
4()
< F
3() )
by E3, E4;
deffunc H
1(
Nat,
set )
-> M2(
NAT ) =
IFEQ a
2,0,0,F
2(a
1);
consider c
1 being
Function of
NAT ,
NAT such that E9:
c
1 . 0
= F
3()
and E10:
for b
1 being
Nat holds c
1 . (b1 + 1) = H
1(b
1,c
1 . b
1)
from RECDEF_1:sch 4();
deffunc H
2(
Nat)
-> M2(
NAT ) = c
1 . a
1;
c
1 . (0 + 1) =
IFEQ (c1 . 0),0,0,F
2(0)
by E10
.=
F
2(0)
by E4, E9, CQC_LANG:def 1
;
then E11:
( H
2(0)
= F
3() & H
2(1)
= F
4() )
by E6, E9;
E12:
for b
1 being
Nat holds
( c
1 . b
1 > 0 implies c
1 . b
1 = F
1(b
1) )
proof
let c
2 be
Nat;
assume E13:
c
1 . c
2 > 0
;
hence
c
1 . c
2 = F
1(c
2)
;
end;
E13:
for b
1 being
Nat holds H
2(b
1 + 2)
= H
2(b
1)
mod H
2(b
1 + 1)
proof
let c
2 be
Nat;
now
per cases
not ( not c1 . (c2 + 1) <> 0 & not c1 . (c2 + 1) = 0 )
;
case E14:
c
1 . (c2 + 1) <> 0
;
then E15:
F
2(c
2)
> 0
;
E16: c
1 . (c2 + (1 + 1)) =
c
1 . ((c2 + 1) + 1)
.=
IFEQ (c1 . (c2 + 1)),0,0,F
2(
(c2 + 1))
by E10
.=
F
2(
(c2 + 1))
by E14, CQC_LANG:def 1
.=
F
1(c
2)
mod F
2(c
2)
by E7, E15
;
then E18:
c
1 . c
2 > 0
;
c
1 . (c2 + 1) =
IFEQ (c1 . c2),0,0,F
2(c
2)
by E10
.=
F
2(c
2)
by E17, CQC_LANG:def 1
;
hence
c
1 . (c2 + 2) = (c1 . c2) mod (c1 . (c2 + 1))
by E12, E16, E18;
end;
end;
end;
hence
c
1 . (c2 + 2) = (c1 . c2) mod (c1 . (c2 + 1))
;
end;
consider c
2 being
Nat such that E14:
( H
2(c
2)
= F
3()
hcf F
4() & H
2(c
2 + 1)
= 0 )
from NAT_1:sch 8(E8, E11, E13);
take
c
2
;
E15:
F
3()
hcf F
4()
> 0
by E3, NEWTON:71;
hence
F
1(c
2)
= F
3()
hcf F
4()
by E12, E14;
thus F
2(c
2) =
IFEQ (c1 . c2),0,0,F
2(c
2)
by E14, E15, CQC_LANG:def 1
.=
0
by E10, E14
;
end;
set c1 = dl. 0;
set c2 = dl. 1;
set c3 = dl. 2;
:: deftheorem Def1 defines Euclide-Algorithm AMI_4:def 1 :
defpred S1[ State of SCM ] means ( a1 . (il. 0) = (dl. 2) := (dl. 1) & a1 . (il. 1) = Divide (dl. 0),(dl. 1) & a1 . (il. 2) = (dl. 0) := (dl. 2) & a1 . (il. 3) = (dl. 1) >0_goto (il. 0) & a1 halts_at il. 4 );
set c4 = (il. 0) .--> ((dl. 2) := (dl. 1));
set c5 = (il. 1) .--> (Divide (dl. 0),(dl. 1));
set c6 = (il. 2) .--> ((dl. 0) := (dl. 2));
set c7 = (il. 3) .--> ((dl. 1) >0_goto (il. 0));
set c8 = (il. 4) .--> (halt SCM );
set c9 = ((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ));
set c10 = ((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )));
set c11 = ((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))));
set c12 = ((il. 0) .--> ((dl. 2) := (dl. 1))) +* (((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))));
theorem Th3: :: AMI_4:3
canceled;
theorem Th4: :: AMI_4:4
proof
E4:
dom ((il. 0) .--> ((dl. 2) := (dl. 1))) = {(il. 0)}
by CQC_LANG:5;
E5:
dom ((il. 1) .--> (Divide (dl. 0),(dl. 1))) = {(il. 1)}
by CQC_LANG:5;
E6:
dom ((il. 2) .--> ((dl. 0) := (dl. 2))) = {(il. 2)}
by CQC_LANG:5;
E7:
dom ((il. 3) .--> ((dl. 1) >0_goto (il. 0))) = {(il. 3)}
by CQC_LANG:5;
dom ((il. 4) .--> (halt SCM )) = {(il. 4)}
by CQC_LANG:5;
then dom (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))) =
{(il. 3)} \/ {(il. 4)}
by E7, FUNCT_4:def 1
.=
{(il. 3),(il. 4)}
by ENUMSET1:41
;
then dom (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))) =
{(il. 2)} \/ {(il. 3),(il. 4)}
by E6, FUNCT_4:def 1
.=
{(il. 2),(il. 3),(il. 4)}
by ENUMSET1:42
;
then dom (((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))))) =
{(il. 1)} \/ {(il. 2),(il. 3),(il. 4)}
by E5, FUNCT_4:def 1
.=
{(il. 1),(il. 2),(il. 3),(il. 4)}
by ENUMSET1:44
;
then dom (((il. 0) .--> ((dl. 2) := (dl. 1))) +* (((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))))) =
{(il. 0)} \/ {(il. 1),(il. 2),(il. 3),(il. 4)}
by E4, FUNCT_4:def 1
.=
{(il. 0),(il. 1),(il. 2),(il. 3),(il. 4)}
by ENUMSET1:47
;
hence
dom Euclide-Algorithm = {(il. 0),(il. 1),(il. 2),(il. 3),(il. 4)}
;
end;
Lemma4:
for b1 being State of SCM holds
( Euclide-Algorithm c= b1 implies S1[b1] )
proof
let c
13 be
State of
SCM ;
E5:
dom ((il. 1) .--> (Divide (dl. 0),(dl. 1))) = {(il. 1)}
by CQC_LANG:5;
E6:
dom ((il. 2) .--> ((dl. 0) := (dl. 2))) = {(il. 2)}
by CQC_LANG:5;
E7:
dom ((il. 3) .--> ((dl. 1) >0_goto (il. 0))) = {(il. 3)}
by CQC_LANG:5;
E8:
dom ((il. 4) .--> (halt SCM )) = {(il. 4)}
by CQC_LANG:5;
then E9:
dom (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))) =
{(il. 3)} \/ {(il. 4)}
by E7, FUNCT_4:def 1
.=
{(il. 3),(il. 4)}
by ENUMSET1:41
;
then E10:
dom (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))) =
{(il. 2)} \/ {(il. 3),(il. 4)}
by E6, FUNCT_4:def 1
.=
{(il. 2),(il. 3),(il. 4)}
by ENUMSET1:42
;
then E11:
dom (((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))))) =
{(il. 1)} \/ {(il. 2),(il. 3),(il. 4)}
by E5, FUNCT_4:def 1
.=
{(il. 1),(il. 2),(il. 3),(il. 4)}
by ENUMSET1:44
;
assume E12:
Euclide-Algorithm c= c
13
;
E13:
not
il. 0
in dom (((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))))
by E11, ENUMSET1:def 2;
il. 0
in dom (((il. 0) .--> ((dl. 2) := (dl. 1))) +* (((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))))))
by Th4, ENUMSET1:def 3;
hence c
13 . (il. 0) =
(((il. 0) .--> ((dl. 2) := (dl. 1))) +* (((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))))) . (il. 0)
by E12, GRFUNC_1:8
.=
((il. 0) .--> ((dl. 2) := (dl. 1))) . (il. 0)
by E13, FUNCT_4:12
.=
(dl. 2) := (dl. 1)
by CQC_LANG:6
;
((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))) c= ((il. 0) .--> ((dl. 2) := (dl. 1))) +* (((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))))
by FUNCT_4:26;
then E14:
((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))) c= c
13
by E12, XBOOLE_1:1;
E15:
not
il. 1
in dom (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))))
by E10, ENUMSET1:def 1;
il. 1
in dom (((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))))
by E11, ENUMSET1:def 2;
hence c
13 . (il. 1) =
(((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))))) . (il. 1)
by E14, GRFUNC_1:8
.=
((il. 1) .--> (Divide (dl. 0),(dl. 1))) . (il. 1)
by E15, FUNCT_4:12
.=
Divide (dl. 0),
(dl. 1)
by CQC_LANG:6
;
((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))) c= ((il. 1) .--> (Divide (dl. 0),(dl. 1))) +* (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))))
by FUNCT_4:26;
then E16:
((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))) c= c
13
by E14, XBOOLE_1:1;
E17:
not
il. 2
in dom (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))
by E9, TARSKI:def 2;
il. 2
in dom (((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))))
by E10, ENUMSET1:def 1;
hence c
13 . (il. 2) =
(((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))) . (il. 2)
by E16, GRFUNC_1:8
.=
((il. 2) .--> ((dl. 0) := (dl. 2))) . (il. 2)
by E17, FUNCT_4:12
.=
(dl. 0) := (dl. 2)
by CQC_LANG:6
;
((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )) c= ((il. 2) .--> ((dl. 0) := (dl. 2))) +* (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))
by FUNCT_4:26;
then E18:
((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )) c= c
13
by E16, XBOOLE_1:1;
E19:
not
il. 3
in dom ((il. 4) .--> (halt SCM ))
by E8, TARSKI:def 1;
il. 3
in dom (((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM )))
by E9, TARSKI:def 2;
hence c
13 . (il. 3) =
(((il. 3) .--> ((dl. 1) >0_goto (il. 0))) +* ((il. 4) .--> (halt SCM ))) . (il. 3)
by E18, GRFUNC_1:8
.=
((il. 3) .--> ((dl. 1) >0_goto (il. 0))) . (il. 3)
by E19,