let A be Euclidean preIfWhileAlgebra; :: thesis: for X being non empty countable set
for b being Element of X
for g being Euclidean ExecutionFunction of A, Funcs X,INT ,(Funcs X,INT ) \ b,0
for x, y, z being Variable of g st ex d being Function st
( d . b = 0 & d . x = 1 & d . y = 2 & d . z = 3 ) holds
while (y gt 0 ),((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) is_terminating_wrt g,{ s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
let X be non empty countable set ; :: thesis: for b being Element of X
for g being Euclidean ExecutionFunction of A, Funcs X,INT ,(Funcs X,INT ) \ b,0
for x, y, z being Variable of g st ex d being Function st
( d . b = 0 & d . x = 1 & d . y = 2 & d . z = 3 ) holds
while (y gt 0 ),((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) is_terminating_wrt g,{ s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
let b be Element of X; :: thesis: for g being Euclidean ExecutionFunction of A, Funcs X,INT ,(Funcs X,INT ) \ b,0
for x, y, z being Variable of g st ex d being Function st
( d . b = 0 & d . x = 1 & d . y = 2 & d . z = 3 ) holds
while (y gt 0 ),((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) is_terminating_wrt g,{ s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
let g be Euclidean ExecutionFunction of A, Funcs X,INT ,(Funcs X,INT ) \ b,0 ; :: thesis: for x, y, z being Variable of g st ex d being Function st
( d . b = 0 & d . x = 1 & d . y = 2 & d . z = 3 ) holds
while (y gt 0 ),((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) is_terminating_wrt g,{ s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
set S = Funcs X,INT ;
set T = (Funcs X,INT ) \ b,0 ;
let x, y, z be Variable of g; :: thesis: ( ex d being Function st
( d . b = 0 & d . x = 1 & d . y = 2 & d . z = 3 ) implies while (y gt 0 ),((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) is_terminating_wrt g,{ s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) } )
set P = { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) } ;
given d being Function such that 00:
( d . b = 0 & d . x = 1 & d . y = 2 & d . z = 3 )
; :: thesis: while (y gt 0 ),((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) is_terminating_wrt g,{ s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
set C = y gt 0 ;
set I = (((z := x) \; (z %= y)) \; (x := y)) \; (y := z);
01:
{ s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) } is_invariant_wrt y gt 0 ,g
proof
let s be
Element of
Funcs X,
INT ;
:: according to AOFA_000:def 39 :: thesis: ( not s in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) } or g . s,(y gt 0 ) in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) } )
assume
s in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
;
:: thesis: g . s,(y gt 0 ) in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
then A0:
ex
s' being
Element of
Funcs X,
INT st
(
s' = s &
s' . x > s' . y &
s' . y >= 0 )
;
set s1 =
g . s,
(y gt 0 );
(
(g . s,(y gt 0 )) . x = s . x &
(g . s,(y gt 0 )) . y = s . y )
by 00, Th015;
hence
g . s,
(y gt 0 ) in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
by A0;
:: thesis: verum
end;
02:
( y gt 0 is_terminating_wrt g & (((z := x) \; (z %= y)) \; (x := y)) \; (y := z) is_terminating_wrt g,{ s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) } )
by AOFA_000:104, AOFA_000:107;
03:
now let s be
Element of
Funcs X,
INT ;
:: thesis: ( s in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) } & g . (g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z))),(y gt 0 ) in (Funcs X,INT ) \ b,0 implies g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) } )assume
s in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
;
:: thesis: ( g . (g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z))),(y gt 0 ) in (Funcs X,INT ) \ b,0 implies g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) } )then
ex
s' being
Element of
Funcs X,
INT st
(
s' = s &
s' . x > s' . y &
s' . y >= 0 )
;
then reconsider n =
s . x,
m =
s . y as
Element of
NAT by INT_1:16;
assume
g . (g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z))),
(y gt 0 ) in (Funcs X,INT ) \ b,
0
;
:: thesis: g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) } then A2:
(
(g . (g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z))),(y gt 0 )) . b <> 0 &
(g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z))) . y = (s . x) mod (s . y) &
(g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z))) . x = s . y )
by 00, LemTS, LemEAterm;
then A1:
(g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z))) . y > 0
by Th015;
then
m <> 0
by A2, INT_1:def 8;
then
m > 0
;
then
(g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z))) . x > (g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z))) . y
by A2, NEWTON:79;
hence
g . s,
((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
by A1;
:: thesis: verum end;
now let s be
Element of
Funcs X,
INT ;
:: thesis: ( g . s,(y gt 0 ) in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) } implies g iteration_terminates_for ((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) \; (y gt 0 ),g . s,(y gt 0 ) )set s1 =
g . s,
(y gt 0 );
assume
g . s,
(y gt 0 ) in { s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
;
:: thesis: g iteration_terminates_for ((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) \; (y gt 0 ),g . s,(y gt 0 )then A0:
ex
s' being
Element of
Funcs X,
INT st
(
s' = g . s,
(y gt 0 ) &
s' . x > s' . y &
s' . y >= 0 )
;
then reconsider n =
(g . s,(y gt 0 )) . x,
m =
(g . s,(y gt 0 )) . y as
Element of
NAT by INT_1:16;
(
(g . s,(y gt 0 )) . x = s . x &
(g . s,(y gt 0 )) . y = s . y & (
s . y > 0 implies
(g . s,(y gt 0 )) . b = 1 ) & (
s . y <= 0 implies
(g . s,(y gt 0 )) . b = 0 ) )
by 00, Th015;
then
(
n > m & (
g . s,
(y gt 0 ) in (Funcs X,INT ) \ b,
0 implies
m > 0 ) & (
m > 0 implies
g . s,
(y gt 0 ) in (Funcs X,INT ) \ b,
0 ) )
by A0, LemTS;
hence
g iteration_terminates_for ((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) \; (y gt 0 ),
g . s,
(y gt 0 )
by 00, LemEAterm;
:: thesis: verum end;
hence
while (y gt 0 ),((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) is_terminating_wrt g,{ s where s is Element of Funcs X,INT : ( s . x > s . y & s . y >= 0 ) }
by 01, 02, 03, AOFA_000:118; :: thesis: verum