:: Mizar Analysis of Algorithms: Algorithms over Integers
:: by Grzegorz Bancerek
::
:: Received March 18, 2008
:: Copyright (c) 2008 Association of Mizar Users
theorem Lem3: :: AOFA_I00:1
for
x,
y,
z,
a,
b,
c being
set st
a <> b &
b <> c &
c <> a holds
ex
f being
Function st
(
f . a = x &
f . b = y &
f . c = z )
:: deftheorem defines \ AOFA_I00:def 1 :
theorem LemTS: :: AOFA_I00:2
:: deftheorem ELEM defines Variable AOFA_I00:def 2 :
definition
let t1,
t2 be
integer-yielding Function;
func t1 div t2 -> integer-yielding Function means :
DEFdiv:
:: AOFA_I00:def 3
(
dom it = (dom t1) /\ (dom t2) & ( for
s being
set st
s in dom it holds
it . s = (t1 . s) div (t2 . s) ) );
correctness
existence
ex b1 being integer-yielding Function st
( dom b1 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b1 holds
b1 . s = (t1 . s) div (t2 . s) ) );
uniqueness
for b1, b2 being integer-yielding Function st dom b1 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b1 holds
b1 . s = (t1 . s) div (t2 . s) ) & dom b2 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b2 holds
b2 . s = (t1 . s) div (t2 . s) ) holds
b1 = b2;
func t1 mod t2 -> integer-yielding Function means :
DEFmod:
:: AOFA_I00:def 4
(
dom it = (dom t1) /\ (dom t2) & ( for
s being
set st
s in dom it holds
it . s = (t1 . s) mod (t2 . s) ) );
correctness
existence
ex b1 being integer-yielding Function st
( dom b1 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b1 holds
b1 . s = (t1 . s) mod (t2 . s) ) );
uniqueness
for b1, b2 being integer-yielding Function st dom b1 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b1 holds
b1 . s = (t1 . s) mod (t2 . s) ) & dom b2 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b2 holds
b2 . s = (t1 . s) mod (t2 . s) ) holds
b1 = b2;
func leq t1,
t2 -> integer-yielding Function means :
DEFleq:
:: AOFA_I00:def 5
(
dom it = (dom t1) /\ (dom t2) & ( for
s being
set st
s in dom it holds
it . s = IFGT (t1 . s),
(t2 . s),
0 ,1 ) );
correctness
existence
ex b1 being integer-yielding Function st
( dom b1 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b1 holds
b1 . s = IFGT (t1 . s),(t2 . s),0 ,1 ) );
uniqueness
for b1, b2 being integer-yielding Function st dom b1 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b1 holds
b1 . s = IFGT (t1 . s),(t2 . s),0 ,1 ) & dom b2 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b2 holds
b2 . s = IFGT (t1 . s),(t2 . s),0 ,1 ) holds
b1 = b2;
func gt t1,
t2 -> integer-yielding Function means :
DEFgt:
:: AOFA_I00:def 6
(
dom it = (dom t1) /\ (dom t2) & ( for
s being
set st
s in dom it holds
it . s = IFGT (t1 . s),
(t2 . s),1,
0 ) );
correctness
existence
ex b1 being integer-yielding Function st
( dom b1 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b1 holds
b1 . s = IFGT (t1 . s),(t2 . s),1,0 ) );
uniqueness
for b1, b2 being integer-yielding Function st dom b1 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b1 holds
b1 . s = IFGT (t1 . s),(t2 . s),1,0 ) & dom b2 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b2 holds
b2 . s = IFGT (t1 . s),(t2 . s),1,0 ) holds
b1 = b2;
func eq t1,
t2 -> integer-yielding Function means :
DEFeq:
:: AOFA_I00:def 7
(
dom it = (dom t1) /\ (dom t2) & ( for
s being
set st
s in dom it holds
it . s = IFEQ (t1 . s),
(t2 . s),1,
0 ) );
correctness
existence
ex b1 being integer-yielding Function st
( dom b1 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b1 holds
b1 . s = IFEQ (t1 . s),(t2 . s),1,0 ) );
uniqueness
for b1, b2 being integer-yielding Function st dom b1 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b1 holds
b1 . s = IFEQ (t1 . s),(t2 . s),1,0 ) & dom b2 = (dom t1) /\ (dom t2) & ( for s being set st s in dom b2 holds
b2 . s = IFEQ (t1 . s),(t2 . s),1,0 ) holds
b1 = b2;
end;
:: deftheorem DEFdiv defines div AOFA_I00:def 3 :
:: deftheorem DEFmod defines mod AOFA_I00:def 4 :
:: deftheorem DEFleq defines leq AOFA_I00:def 5 :
:: deftheorem DEFgt defines gt AOFA_I00:def 6 :
:: deftheorem DEFeq defines eq AOFA_I00:def 7 :
definition
let X be non
empty set ;
let f be
Function of
X,
INT ;
let x be
integer number ;
:: original: +redefine func f + x -> Function of
X,
INT means :
DEFplus2:
:: AOFA_I00:def 8
for
s being
Element of
X holds
it . s = (f . s) + x;
compatibility
for b1 being Function of X, INT holds
( b1 = x + f iff for s being Element of X holds b1 . s = (f . s) + x )
coherence
x + f is Function of X, INT
:: original: -redefine func f - x -> Function of
X,
INT means :: AOFA_I00:def 9
for
s being
Element of
X holds
it . s = (f . s) - x;
compatibility
for b1 being Function of X, INT holds
( b1 = f - x iff for s being Element of X holds b1 . s = (f . s) - x )
coherence
f - x is Function of X, INT
:: original: *redefine func f * x -> Function of
X,
INT means :
DEFmult2:
:: AOFA_I00:def 10
for
s being
Element of
X holds
it . s = (f . s) * x;
compatibility
for b1 being Function of X, INT holds
( b1 = f * x iff for s being Element of X holds b1 . s = (f . s) * x )
coherence
f * x is Function of X, INT
end;
:: deftheorem DEFplus2 defines + AOFA_I00:def 8 :
:: deftheorem defines - AOFA_I00:def 9 :
:: deftheorem DEFmult2 defines * AOFA_I00:def 10 :
definition
let X be
set ;
let f,
g be
Function of
X,
INT ;
:: original: divredefine func f div g -> Function of
X,
INT ;
coherence
f div g is Function of X, INT
:: original: modredefine func f mod g -> Function of
X,
INT ;
coherence
f mod g is Function of X, INT
:: original: leqredefine func leq f,
g -> Function of
X,
INT ;
coherence
leq f,g is Function of X, INT
:: original: gtredefine func gt f,
g -> Function of
X,
INT ;
coherence
gt f,g is Function of X, INT
:: original: eqredefine func eq f,
g -> Function of
X,
INT ;
coherence
eq f,g is Function of X, INT
end;
:: deftheorem DEFminus3 defines - AOFA_I00:def 11 :
:: deftheorem defines + AOFA_I00:def 12 :
:: deftheorem DSTAR defines ** AOFA_I00:def 13 :
definition
let X,
Y,
Z,
N be non
empty set ;
let v be
Element of
Funcs (Funcs X,Y),
Z;
let f be
Function of
X,
N;
:: original: **redefine func v ** f,
N -> Element of
Funcs (Funcs N,Y),
Z;
coherence
v ** f,N is Element of Funcs (Funcs N,Y),Z
end;
theorem LemR: :: AOFA_I00:3
theorem LemQ: :: AOFA_I00:4
theorem ThDS1: :: AOFA_I00:5
theorem ThNum1: :: AOFA_I00:6
theorem ThNum2: :: AOFA_I00:7
theorem ThNum6: :: AOFA_I00:8
theorem :: AOFA_I00:9
theorem ThNum4: :: AOFA_I00:10
theorem ThNum5: :: AOFA_I00:11
theorem :: AOFA_I00:12
theorem :: AOFA_I00:13
:: deftheorem IA defines is_assignment_wrt AOFA_I00:def 14 :
:: deftheorem FA defines form_assignment_wrt AOFA_I00:def 15 :
:: deftheorem defines INT-Variable AOFA_I00:def 16 :
:: deftheorem defines INT-Expression AOFA_I00:def 17 :
:: deftheorem DEFvarexp1 defines . AOFA_I00:def 18 :
:: deftheorem DEFvarexp defines . AOFA_I00:def 19 :
:: deftheorem defines ^ AOFA_I00:def 20 :
theorem :: AOFA_I00:14
:: deftheorem defines . AOFA_I00:def 21 :
theorem :: AOFA_I00:15
definition
let A be
preIfWhileAlgebra;
let X be non
empty set ;
let T be
Subset of
(Funcs X,INT );
let f be
ExecutionFunction of
A,
Funcs X,
INT ,
T;
attr f is
Euclidean means :
INT'iwa:
:: AOFA_I00:def 22
( ( for
v being
INT-Variable of
A,
f for
t being
INT-Expression of
A,
f holds
v,
t form_assignment_wrt f ) & ( for
i being
integer number holds
. i,
X is
INT-Expression of
A,
f ) & ( for
v being
INT-Variable of
A,
f holds
. v is
INT-Expression of
A,
f ) & ( for
x being
Element of
X holds
^ x is
INT-Variable of
A,
f ) & ex
a being
INT-Array of
X st
(
a | (card X) is
one-to-one & ( for
t being
INT-Expression of
A,
f holds
a * t is
INT-Variable of
A,
f ) ) & ( for
t being
INT-Expression of
A,
f holds
- t is
INT-Expression of
A,
f ) & ( for
t1,
t2 being
INT-Expression of
A,
f holds
(
t1 (#) t2 is
INT-Expression of
A,
f &
t1 + t2 is
INT-Expression of
A,
f &
t1 div t2 is
INT-Expression of
A,
f &
t1 mod t2 is
INT-Expression of
A,
f &
leq t1,
t2 is
INT-Expression of
A,
f &
gt t1,
t2 is
INT-Expression of
A,
f ) ) );
end;
:: deftheorem INT'iwa defines Euclidean AOFA_I00:def 22 :
for
A being
preIfWhileAlgebra for
X being non
empty set for
T being
Subset of
(Funcs X,INT ) for
f being
ExecutionFunction of
A,
Funcs X,
INT ,
T holds
(
f is
Euclidean iff ( ( for
v being
INT-Variable of
A,
f for
t being
INT-Expression of
A,
f holds
v,
t form_assignment_wrt f ) & ( for
i being
integer number holds
. i,
X is
INT-Expression of
A,
f ) & ( for
v being
INT-Variable of
A,
f holds
. v is
INT-Expression of
A,
f ) & ( for
x being
Element of
X holds
^ x is
INT-Variable of
A,
f ) & ex
a being
INT-Array of
X st
(
a | (card X) is
one-to-one & ( for
t being
INT-Expression of
A,
f holds
a * t is
INT-Variable of
A,
f ) ) & ( for
t being
INT-Expression of
A,
f holds
- t is
INT-Expression of
A,
f ) & ( for
t1,
t2 being
INT-Expression of
A,
f holds
(
t1 (#) t2 is
INT-Expression of
A,
f &
t1 + t2 is
INT-Expression of
A,
f &
t1 div t2 is
INT-Expression of
A,
f &
t1 mod t2 is
INT-Expression of
A,
f &
leq t1,
t2 is
INT-Expression of
A,
f &
gt t1,
t2 is
INT-Expression of
A,
f ) ) ) );
:: deftheorem INT'iwa2 defines Euclidean AOFA_I00:def 23 :
definition
func INT-ElemIns -> infinite disjoint_with_NAT set equals :: AOFA_I00:def 24
[:(Funcs (Funcs NAT ,INT ),NAT ),(Funcs (Funcs NAT ,INT ),INT ):];
coherence
[:(Funcs (Funcs NAT ,INT ),NAT ),(Funcs (Funcs NAT ,INT ),INT ):] is infinite disjoint_with_NAT set
;
end;
:: deftheorem defines INT-ElemIns AOFA_I00:def 24 :
definition
mode INT-Exec -> ExecutionFunction of
FreeUnivAlgNSG ECIW-signature ,
INT-ElemIns ,
Funcs NAT ,
INT ,
(Funcs NAT ,INT ) \ 0 ,
0 means :
INTiwaEXEC:
:: AOFA_I00:def 25
for
s being
Element of
Funcs NAT ,
INT for
v being
Element of
Funcs (Funcs NAT ,INT ),
NAT for
e being
Element of
Funcs (Funcs NAT ,INT ),
INT holds
it . s,
(root-tree [v,e]) = s +* (v . s),
(e . s);
existence
ex b1 being ExecutionFunction of FreeUnivAlgNSG ECIW-signature ,INT-ElemIns , Funcs NAT ,INT ,(Funcs NAT ,INT ) \ 0 ,0 st
for s being Element of Funcs NAT ,INT
for v being Element of Funcs (Funcs NAT ,INT ),NAT
for e being Element of Funcs (Funcs NAT ,INT ),INT holds b1 . s,(root-tree [v,e]) = s +* (v . s),(e . s)
end;
:: deftheorem INTiwaEXEC defines INT-Exec AOFA_I00:def 25 :
for
b1 being
ExecutionFunction of
FreeUnivAlgNSG ECIW-signature ,
INT-ElemIns ,
Funcs NAT ,
INT ,
(Funcs NAT ,INT ) \ 0 ,
0 holds
(
b1 is
INT-Exec iff for
s being
Element of
Funcs NAT ,
INT for
v being
Element of
Funcs (Funcs NAT ,INT ),
NAT for
e being
Element of
Funcs (Funcs NAT ,INT ),
INT holds
b1 . s,
(root-tree [v,e]) = s +* (v . s),
(e . s) );
definition
let X be non
empty set ;
func INT-ElemIns X -> infinite disjoint_with_NAT set equals :: AOFA_I00:def 26
[:(Funcs (Funcs X,INT ),X),(Funcs (Funcs X,INT ),INT ):];
coherence
[:(Funcs (Funcs X,INT ),X),(Funcs (Funcs X,INT ),INT ):] is infinite disjoint_with_NAT set
;
end;
:: deftheorem defines INT-ElemIns AOFA_I00:def 26 :
definition
let X be non
empty set ;
let x be
Element of
X;
mode INT-Exec of
x -> ExecutionFunction of
FreeUnivAlgNSG ECIW-signature ,
(INT-ElemIns X),
Funcs X,
INT ,
(Funcs X,INT ) \ x,
0 means :: AOFA_I00:def 27
for
s being
Element of
Funcs X,
INT for
v being
Element of
Funcs (Funcs X,INT ),
X for
e being
Element of
Funcs (Funcs X,INT ),
INT holds
it . s,
(root-tree [v,e]) = s +* (v . s),
(e . s);
existence
ex b1 being ExecutionFunction of FreeUnivAlgNSG ECIW-signature ,(INT-ElemIns X), Funcs X,INT ,(Funcs X,INT ) \ x,0 st
for s being Element of Funcs X,INT
for v being Element of Funcs (Funcs X,INT ),X
for e being Element of Funcs (Funcs X,INT ),INT holds b1 . s,(root-tree [v,e]) = s +* (v . s),(e . s)
end;
:: deftheorem defines INT-Exec AOFA_I00:def 27 :
for
X being non
empty set for
x being
Element of
X for
b3 being
ExecutionFunction of
FreeUnivAlgNSG ECIW-signature ,
(INT-ElemIns X),
Funcs X,
INT ,
(Funcs X,INT ) \ x,
0 holds
(
b3 is
INT-Exec of
x iff for
s being
Element of
Funcs X,
INT for
v being
Element of
Funcs (Funcs X,INT ),
X for
e being
Element of
Funcs (Funcs X,INT ),
INT holds
b3 . s,
(root-tree [v,e]) = s +* (v . s),
(e . s) );
definition
let X be non
empty set ;
let T be
Subset of
(Funcs X,INT );
let c be
Enumeration of
X;
assume A:
rng c c= NAT
;
mode INT-Exec of
c,
T -> ExecutionFunction of
FreeUnivAlgNSG ECIW-signature ,
INT-ElemIns ,
Funcs X,
INT ,
T means :
INTiwaEXECc:
:: AOFA_I00:def 28
for
s being
Element of
Funcs X,
INT for
v being
Element of
Funcs (Funcs X,INT ),
X for
e being
Element of
Funcs (Funcs X,INT ),
INT holds
it . s,
(root-tree [((c * v) ** c,NAT ),(e ** c,NAT )]) = s +* (v . s),
(e . s);
existence
ex b1 being ExecutionFunction of FreeUnivAlgNSG ECIW-signature ,INT-ElemIns , Funcs X,INT ,T st
for s being Element of Funcs X,INT
for v being Element of Funcs (Funcs X,INT ),X
for e being Element of Funcs (Funcs X,INT ),INT holds b1 . s,(root-tree [((c * v) ** c,NAT ),(e ** c,NAT )]) = s +* (v . s),(e . s)
end;
:: deftheorem INTiwaEXECc defines INT-Exec AOFA_I00:def 28 :
for
X being non
empty set for
T being
Subset of
(Funcs X,INT ) for
c being
Enumeration of
X st
rng c c= NAT holds
for
b4 being
ExecutionFunction of
FreeUnivAlgNSG ECIW-signature ,
INT-ElemIns ,
Funcs X,
INT ,
T holds
(
b4 is
INT-Exec of
c,
T iff for
s being
Element of
Funcs X,
INT for
v being
Element of
Funcs (Funcs X,INT ),
X for
e being
Element of
Funcs (Funcs X,INT ),
INT holds
b4 . s,
(root-tree [((c * v) ** c,NAT ),(e ** c,NAT )]) = s +* (v . s),
(e . s) );
theorem II1: :: AOFA_I00:16
theorem II2: :: AOFA_I00:17
theorem II3: :: AOFA_I00:18
theorem cII1: :: AOFA_I00:19
theorem cII2: :: AOFA_I00:20
theorem cII3: :: AOFA_I00:21
definition
let A be
Euclidean preIfWhileAlgebra;
let X be non
empty countable set ;
let T be
Subset of
(Funcs X,INT );
let f be
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T;
let t be
INT-Expression of
A,
f;
let i be
integer number ;
:: original: +redefine func t + i -> INT-Expression of
A,
f;
coherence
i + t is INT-Expression of A,f
:: original: -redefine func t - i -> INT-Expression of
A,
f;
coherence
t - i is INT-Expression of A,f
:: original: *redefine func t * i -> INT-Expression of
A,
f;
coherence
t * i is INT-Expression of A,f
end;
definition
let A be
Euclidean preIfWhileAlgebra;
let X be non
empty countable set ;
let T be
Subset of
(Funcs X,INT );
let f be
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T;
let t1,
t2 be
INT-Expression of
A,
f;
:: original: -redefine func t1 - t2 -> INT-Expression of
A,
f;
coherence
t1 - t2 is INT-Expression of A,f
:: original: +redefine func t1 + t2 -> INT-Expression of
A,
f;
coherence
t1 + t2 is INT-Expression of A,f
by INT'iwa;
:: original: (#)redefine func t1 (#) t2 -> INT-Expression of
A,
f;
coherence
t1 (#) t2 is INT-Expression of A,f
by INT'iwa;
end;
definition
let A be
Euclidean preIfWhileAlgebra;
let X be non
empty countable set ;
let T be
Subset of
(Funcs X,INT );
let f be
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T;
let t1,
t2 be
INT-Expression of
A,
f;
:: original: divredefine func t1 div t2 -> INT-Expression of
A,
f means :
DEFdiv2:
:: AOFA_I00:def 29
for
s being
Element of
Funcs X,
INT holds
it . s = (t1 . s) div (t2 . s);
coherence
t1 div t2 is INT-Expression of A,f
by INT'iwa;
compatibility
for b1 being INT-Expression of A,f holds
( b1 = t1 div t2 iff for s being Element of Funcs X,INT holds b1 . s = (t1 . s) div (t2 . s) )
:: original: modredefine func t1 mod t2 -> INT-Expression of
A,
f means :
DEFmod2:
:: AOFA_I00:def 30
for
s being
Element of
Funcs X,
INT holds
it . s = (t1 . s) mod (t2 . s);
coherence
t1 mod t2 is INT-Expression of A,f
by INT'iwa;
compatibility
for b1 being INT-Expression of A,f holds
( b1 = t1 mod t2 iff for s being Element of Funcs X,INT holds b1 . s = (t1 . s) mod (t2 . s) )
:: original: leqredefine func leq t1,
t2 -> INT-Expression of
A,
f means :
DEFleq2:
:: AOFA_I00:def 31
for
s being
Element of
Funcs X,
INT holds
it . s = IFGT (t1 . s),
(t2 . s),
0 ,1;
compatibility
for b1 being INT-Expression of A,f holds
( b1 = leq t1,t2 iff for s being Element of Funcs X,INT holds b1 . s = IFGT (t1 . s),(t2 . s),0 ,1 )
coherence
leq t1,t2 is INT-Expression of A,f
by INT'iwa;
:: original: gtredefine func gt t1,
t2 -> INT-Expression of
A,
f means :
DEFgt2:
:: AOFA_I00:def 32
for
s being
Element of
Funcs X,
INT holds
it . s = IFGT (t1 . s),
(t2 . s),1,
0 ;
coherence
gt t1,t2 is INT-Expression of A,f
by INT'iwa;
compatibility
for b1 being INT-Expression of A,f holds
( b1 = gt t1,t2 iff for s being Element of Funcs X,INT holds b1 . s = IFGT (t1 . s),(t2 . s),1,0 )
end;
:: deftheorem DEFdiv2 defines div AOFA_I00:def 29 :
:: deftheorem DEFmod2 defines mod AOFA_I00:def 30 :
:: deftheorem DEFleq2 defines leq AOFA_I00:def 31 :
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
T being
Subset of
(Funcs X,INT ) for
f being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T for
t1,
t2,
b7 being
INT-Expression of
A,
f holds
(
b7 = leq t1,
t2 iff for
s being
Element of
Funcs X,
INT holds
b7 . s = IFGT (t1 . s),
(t2 . s),
0 ,1 );
:: deftheorem DEFgt2 defines gt AOFA_I00:def 32 :
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
T being
Subset of
(Funcs X,INT ) for
f being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T for
t1,
t2,
b7 being
INT-Expression of
A,
f holds
(
b7 = gt t1,
t2 iff for
s being
Element of
Funcs X,
INT holds
b7 . s = IFGT (t1 . s),
(t2 . s),1,
0 );
definition
let A be
Euclidean preIfWhileAlgebra;
let X be non
empty countable set ;
let T be
Subset of
(Funcs X,INT );
let f be
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T;
let t1,
t2 be
INT-Expression of
A,
f;
:: original: eqredefine func eq t1,
t2 -> INT-Expression of
A,
f means :: AOFA_I00:def 33
for
s being
Element of
Funcs X,
INT holds
it . s = IFEQ (t1 . s),
(t2 . s),1,
0 ;
compatibility
for b1 being INT-Expression of A,f holds
( b1 = eq t1,t2 iff for s being Element of Funcs X,INT holds b1 . s = IFEQ (t1 . s),(t2 . s),1,0 )
coherence
eq t1,t2 is INT-Expression of A,f
end;
:: deftheorem defines eq AOFA_I00:def 33 :
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
T being
Subset of
(Funcs X,INT ) for
f being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T for
t1,
t2,
b7 being
INT-Expression of
A,
f holds
(
b7 = eq t1,
t2 iff for
s being
Element of
Funcs X,
INT holds
b7 . s = IFEQ (t1 . s),
(t2 . s),1,
0 );
:: deftheorem defines . AOFA_I00:def 34 :
:: deftheorem defines ^ AOFA_I00:def 35 :
:: deftheorem defines . AOFA_I00:def 36 :
theorem ThE1: :: AOFA_I00:22
definition
let A be
Euclidean preIfWhileAlgebra;
let X be non
empty countable set ;
let T be
Subset of
(Funcs X,INT );
let f be
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T;
let i be
integer number ;
func . i,
A,
f -> INT-Expression of
A,
f equals :: AOFA_I00:def 37
. i,
X;
coherence
. i,X is INT-Expression of A,f
by INT'iwa;
end;
:: deftheorem defines . AOFA_I00:def 37 :
definition
let A be
Euclidean preIfWhileAlgebra;
let X be non
empty countable set ;
let T be
Subset of
(Funcs X,INT );
let f be
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T;
let v be
INT-Variable of
A,
f;
let t be
INT-Expression of
A,
f;
func v := t -> Element of
A equals :: AOFA_I00:def 38
choose { I where I is Element of A : ( I in ElementaryInstructions A & ( for s being Element of Funcs X,INT holds f . s,I = s +* (v . s),(t . s) ) ) } ;
coherence
choose { I where I is Element of A : ( I in ElementaryInstructions A & ( for s being Element of Funcs X,INT holds f . s,I = s +* (v . s),(t . s) ) ) } is Element of A
end;
:: deftheorem defines := AOFA_I00:def 38 :
theorem Th99: :: AOFA_I00:23
:: deftheorem defines += AOFA_I00:def 39 :
:: deftheorem defines *= AOFA_I00:def 40 :
:: deftheorem defines := AOFA_I00:def 41 :
:: deftheorem defines := AOFA_I00:def 42 :
:: deftheorem defines := AOFA_I00:def 43 :
:: deftheorem defines := AOFA_I00:def 44 :
:: deftheorem defines := AOFA_I00:def 45 :
:: deftheorem defines swap AOFA_I00:def 46 :
:: deftheorem defines += AOFA_I00:def 47 :
:: deftheorem defines *= AOFA_I00:def 48 :
:: deftheorem defines %= AOFA_I00:def 49 :
:: deftheorem defines /= AOFA_I00:def 50 :
definition
let A be
Euclidean preIfWhileAlgebra;
let X be non
empty countable set ;
let T be
Subset of
(Funcs X,INT );
let f be
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T;
let x be
Variable of
f;
let i be
integer number ;
func x += i -> absolutely-terminating Element of
A equals :: AOFA_I00:def 51
x := ((. x) + i);
correctness
coherence
x := ((. x) + i) is absolutely-terminating Element of A;
;
func x *= i -> absolutely-terminating Element of
A equals :: AOFA_I00:def 52
x := ((. x) * i);
correctness
coherence
x := ((. x) * i) is absolutely-terminating Element of A;
;
func x %= i -> absolutely-terminating Element of
A equals :: AOFA_I00:def 53
x := ((. x) mod (. i,A,f));
correctness
coherence
x := ((. x) mod (. i,A,f)) is absolutely-terminating Element of A;
;
func x /= i -> absolutely-terminating Element of
A equals :: AOFA_I00:def 54
x := ((. x) div (. i,A,f));
correctness
coherence
x := ((. x) div (. i,A,f)) is absolutely-terminating Element of A;
;
func x div i -> INT-Expression of
A,
f equals :: AOFA_I00:def 55
(. x) div (. i,A,f);
correctness
coherence
(. x) div (. i,A,f) is INT-Expression of A,f;
;
end;
:: deftheorem defines += AOFA_I00:def 51 :
:: deftheorem defines *= AOFA_I00:def 52 :
:: deftheorem defines %= AOFA_I00:def 53 :
:: deftheorem defines /= AOFA_I00:def 54 :
:: deftheorem defines div AOFA_I00:def 55 :
:: deftheorem defines := AOFA_I00:def 56 :
:: deftheorem defines += AOFA_I00:def 57 :
:: deftheorem defines *= AOFA_I00:def 58 :
definition
let A be
Euclidean preIfWhileAlgebra;
let X be non
empty countable set ;
let b be
Element of
X;
let g be
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 ;
let t1 be
INT-Expression of
A,
g;
func t1 is_odd -> absolutely-terminating Element of
A equals :: AOFA_I00:def 59
b := (t1 mod (. 2,A,g));
coherence
b := (t1 mod (. 2,A,g)) is absolutely-terminating Element of A
;
func t1 is_even -> absolutely-terminating Element of
A equals :: AOFA_I00:def 60
b := ((t1 + 1) mod (. 2,A,g));
coherence
b := ((t1 + 1) mod (. 2,A,g)) is absolutely-terminating Element of A
;
let t2 be
INT-Expression of
A,
g;
func t1 leq t2 -> absolutely-terminating Element of
A equals :: AOFA_I00:def 61
b := (leq t1,t2);
coherence
b := (leq t1,t2) is absolutely-terminating Element of A
;
func t1 gt t2 -> absolutely-terminating Element of
A equals :: AOFA_I00:def 62
b := (gt t1,t2);
coherence
b := (gt t1,t2) is absolutely-terminating Element of A
;
func t1 eq t2 -> absolutely-terminating Element of
A equals :: AOFA_I00:def 63
b := (eq t1,t2);
coherence
b := (eq t1,t2) is absolutely-terminating Element of A
;
end;
:: deftheorem defines is_odd AOFA_I00:def 59 :
:: deftheorem defines is_even AOFA_I00:def 60 :
:: deftheorem defines leq AOFA_I00:def 61 :
:: deftheorem defines gt AOFA_I00:def 62 :
:: deftheorem defines eq AOFA_I00:def 63 :
:: deftheorem defines leq AOFA_I00:def 64 :
:: deftheorem defines gt AOFA_I00:def 65 :
:: deftheorem defines is_odd AOFA_I00:def 66 :
:: deftheorem defines is_even AOFA_I00:def 67 :
:: deftheorem defines leq AOFA_I00:def 68 :
:: deftheorem defines gt AOFA_I00:def 69 :
definition
let A be
Euclidean preIfWhileAlgebra;
let X be non
empty countable set ;
let b be
Element of
X;
let g be
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 ;
let x be
Variable of
g;
let i be
integer number ;
func x leq i -> absolutely-terminating Element of
A equals :: AOFA_I00:def 70
(. x) leq (. i,A,g);
coherence
(. x) leq (. i,A,g) is absolutely-terminating Element of A
;
func x geq i -> absolutely-terminating Element of
A equals :: AOFA_I00:def 71
(. x) geq (. i,A,g);
coherence
(. x) geq (. i,A,g) is absolutely-terminating Element of A
;
func x gt i -> absolutely-terminating Element of
A equals :: AOFA_I00:def 72
(. x) gt (. i,A,g);
coherence
(. x) gt (. i,A,g) is absolutely-terminating Element of A
;
func x lt i -> absolutely-terminating Element of
A equals :: AOFA_I00:def 73
(. x) lt (. i,A,g);
coherence
(. x) lt (. i,A,g) is absolutely-terminating Element of A
;
func x / i -> INT-Expression of
A,
g equals :: AOFA_I00:def 74
(. x) div (. i,A,g);
coherence
(. x) div (. i,A,g) is INT-Expression of A,g
;
end;
:: deftheorem defines leq AOFA_I00:def 70 :
:: deftheorem defines geq AOFA_I00:def 71 :
:: deftheorem defines gt AOFA_I00:def 72 :
:: deftheorem defines lt AOFA_I00:def 73 :
:: deftheorem defines / AOFA_I00:def 74 :
definition
let A be
Euclidean preIfWhileAlgebra;
let X be non
empty countable set ;
let T be
Subset of
(Funcs X,INT );
let f be
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T;
let x1,
x2 be
Variable of
f;
func x1 += x2 -> absolutely-terminating Element of
A equals :: AOFA_I00:def 75
x1 += (. x2);
coherence
x1 += (. x2) is absolutely-terminating Element of A
;
func x1 *= x2 -> absolutely-terminating Element of
A equals :: AOFA_I00:def 76
x1 *= (. x2);
coherence
x1 *= (. x2) is absolutely-terminating Element of A
;
func x1 %= x2 -> absolutely-terminating Element of
A equals :: AOFA_I00:def 77
x1 := ((. x1) mod (. x2));
coherence
x1 := ((. x1) mod (. x2)) is absolutely-terminating Element of A
;
func x1 /= x2 -> absolutely-terminating Element of
A equals :: AOFA_I00:def 78
x1 := ((. x1) div (. x2));
coherence
x1 := ((. x1) div (. x2)) is absolutely-terminating Element of A
;
func x1 + x2 -> INT-Expression of
A,
f equals :: AOFA_I00:def 79
(. x1) + (. x2);
coherence
(. x1) + (. x2) is INT-Expression of A,f
;
func x1 * x2 -> INT-Expression of
A,
f equals :: AOFA_I00:def 80
(. x1) (#) (. x2);
coherence
(. x1) (#) (. x2) is INT-Expression of A,f
;
func x1 mod x2 -> INT-Expression of
A,
f equals :: AOFA_I00:def 81
(. x1) mod (. x2);
coherence
(. x1) mod (. x2) is INT-Expression of A,f
;
func x1 div x2 -> INT-Expression of
A,
f equals :: AOFA_I00:def 82
(. x1) div (. x2);
coherence
(. x1) div (. x2) is INT-Expression of A,f
;
end;
:: deftheorem defines += AOFA_I00:def 75 :
:: deftheorem defines *= AOFA_I00:def 76 :
:: deftheorem defines %= AOFA_I00:def 77 :
:: deftheorem defines /= AOFA_I00:def 78 :
:: deftheorem defines + AOFA_I00:def 79 :
:: deftheorem defines * AOFA_I00:def 80 :
:: deftheorem defines mod AOFA_I00:def 81 :
:: deftheorem defines div AOFA_I00:def 82 :
theorem Th100: :: AOFA_I00:24
theorem Th011: :: AOFA_I00:25
theorem Th111: :: AOFA_I00:26
theorem Th211: :: AOFA_I00:27
theorem Th012: :: AOFA_I00:28
theorem Th112: :: AOFA_I00:29
theorem Th212: :: AOFA_I00:30
theorem Th013: :: AOFA_I00:31
theorem Th113: :: AOFA_I00:32
theorem Th213: :: AOFA_I00:33
theorem Th014: :: AOFA_I00:34
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
x being
Variable of
g for
i being
integer number holds
( (
s . x <= i implies
(g . s,(x leq i)) . b = 1 ) & (
s . x > i implies
(g . s,(x leq i)) . b = 0 ) & (
s . x >= i implies
(g . s,(x geq i)) . b = 1 ) & (
s . x < i implies
(g . s,(x geq i)) . b = 0 ) & ( for
z being
Element of
X st
z <> b holds
(
(g . s,(x leq i)) . z = s . z &
(g . s,(x geq i)) . z = s . z ) ) )
theorem Th114: :: AOFA_I00:35
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
x,
y being
Variable of
g holds
( (
s . x <= s . y implies
(g . s,(x leq y)) . b = 1 ) & (
s . x > s . y implies
(g . s,(x leq y)) . b = 0 ) & ( for
z being
Element of
X st
z <> b holds
(g . s,(x leq y)) . z = s . z ) )
theorem :: AOFA_I00:36
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
x being
Variable of
g for
i being
integer number holds
( (
s . x <= i implies
g . s,
(x leq i) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(x leq i) in (Funcs X,INT ) \ b,
0 implies
s . x <= i ) & (
s . x >= i implies
g . s,
(x geq i) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(x geq i) in (Funcs X,INT ) \ b,
0 implies
s . x >= i ) )
theorem :: AOFA_I00:37
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
x,
y being
Variable of
g holds
( (
s . x <= s . y implies
g . s,
(x leq y) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(x leq y) in (Funcs X,INT ) \ b,
0 implies
s . x <= s . y ) & (
s . x >= s . y implies
g . s,
(x geq y) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(x geq y) in (Funcs X,INT ) \ b,
0 implies
s . x >= s . y ) )
theorem Th015: :: AOFA_I00:38
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
x being
Variable of
g for
i being
integer number holds
( (
s . x > i implies
(g . s,(x gt i)) . b = 1 ) & (
s . x <= i implies
(g . s,(x gt i)) . b = 0 ) & (
s . x < i implies
(g . s,(x lt i)) . b = 1 ) & (
s . x >= i implies
(g . s,(x lt i)) . b = 0 ) & ( for
z being
Element of
X st
z <> b holds
(
(g . s,(x gt i)) . z = s . z &
(g . s,(x lt i)) . z = s . z ) ) )
theorem Th115: :: AOFA_I00:39
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
x,
y being
Variable of
g holds
( (
s . x > s . y implies
(g . s,(x gt y)) . b = 1 ) & (
s . x <= s . y implies
(g . s,(x gt y)) . b = 0 ) & (
s . x < s . y implies
(g . s,(x lt y)) . b = 1 ) & (
s . x >= s . y implies
(g . s,(x lt y)) . b = 0 ) & ( for
z being
Element of
X st
z <> b holds
(
(g . s,(x gt y)) . z = s . z &
(g . s,(x lt y)) . z = s . z ) ) )
theorem Th015': :: AOFA_I00:40
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
x being
Variable of
g for
i being
integer number holds
( (
s . x > i implies
g . s,
(x gt i) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(x gt i) in (Funcs X,INT ) \ b,
0 implies
s . x > i ) & (
s . x < i implies
g . s,
(x lt i) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(x lt i) in (Funcs X,INT ) \ b,
0 implies
s . x < i ) )
theorem :: AOFA_I00:41
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
x,
y being
Variable of
g holds
( (
s . x > s . y implies
g . s,
(x gt y) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(x gt y) in (Funcs X,INT ) \ b,
0 implies
s . x > s . y ) & (
s . x < s . y implies
g . s,
(x lt y) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(x lt y) in (Funcs X,INT ) \ b,
0 implies
s . x < s . y ) )
theorem :: AOFA_I00:42
theorem Th116: :: AOFA_I00:43
theorem Th216: :: AOFA_I00:44
theorem Th017: :: AOFA_I00:45
theorem Th117: :: AOFA_I00:46
theorem :: AOFA_I00:47
theorem Th118: :: AOFA_I00:48
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
t being
INT-Expression of
A,
g holds
(
(g . s,(t is_odd )) . b = (t . s) mod 2 &
(g . s,(t is_even )) . b = ((t . s) + 1) mod 2 & ( for
z being
Element of
X st
z <> b holds
(
(g . s,(t is_odd )) . z = s . z &
(g . s,(t is_even )) . z = s . z ) ) )
theorem Th218: :: AOFA_I00:49
theorem Th318: :: AOFA_I00:50
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
t being
INT-Expression of
A,
g holds
( ( not
t . s is
even implies
g . s,
(t is_odd ) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(t is_odd ) in (Funcs X,INT ) \ b,
0 implies not
t . s is
even ) & (
t . s is
even implies
g . s,
(t is_even ) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(t is_even ) in (Funcs X,INT ) \ b,
0 implies
t . s is
even ) )
theorem :: AOFA_I00:51
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
x being
Variable of
g holds
( ( not
s . x is
even implies
g . s,
(x is_odd ) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(x is_odd ) in (Funcs X,INT ) \ b,
0 implies not
s . x is
even ) & (
s . x is
even implies
g . s,
(x is_even ) in (Funcs X,INT ) \ b,
0 ) & (
g . s,
(x is_even ) in (Funcs X,INT ) \ b,
0 implies
s . x is
even ) )
scheme :: AOFA_I00:sch 1
ForToIteration{
F1()
-> Euclidean preIfWhileAlgebra,
F2()
-> non
empty countable set ,
F3()
-> Element of
F2(),
F4()
-> Element of
F1(),
F5()
-> Element of
F1(),
F6()
-> Euclidean ExecutionFunction of
F1(),
Funcs F2(),
INT ,
(Funcs F2(),INT ) \ F3(),
0 ,
F7()
-> Variable of
F6(),
F8()
-> Variable of
F6(),
F9()
-> Element of
Funcs F2(),
INT ,
F10()
-> INT-Expression of
F1(),
F6(),
P1[
set ] } :
(
P1[
F6()
. F9(),
F5()] & (
F10()
. F9()
<= F9()
. F8() implies
(F6() . F9(),F5()) . F7()
= (F9() . F8()) + 1 ) & (
F10()
. F9()
> F9()
. F8() implies
(F6() . F9(),F5()) . F7()
= F10()
. F9() ) &
(F6() . F9(),F5()) . F8()
= F9()
. F8() )
provided
F:
F5()
= for-do (F7() := F10()),
(F7() leq F8()),
(F7() += 1),
F4()
and A:
P1[
F6()
. F9(),
(F7() := F10())]
and B:
for
s being
Element of
Funcs F2(),
INT st
P1[
s] holds
(
P1[
F6()
. s,
(F4() \; (F7() += 1))] &
P1[
F6()
. s,
(F7() leq F8())] )
and C:
for
s being
Element of
Funcs F2(),
INT st
P1[
s] holds
(
(F6() . s,F4()) . F7()
= s . F7() &
(F6() . s,F4()) . F8()
= s . F8() )
and D:
(
F8()
<> F7() &
F8()
<> F3() &
F7()
<> F3() )
scheme :: AOFA_I00:sch 2
ForDowntoIteration{
F1()
-> Euclidean preIfWhileAlgebra,
F2()
-> non
empty countable set ,
F3()
-> Element of
F2(),
F4()
-> Element of
F1(),
F5()
-> Element of
F1(),
F6()
-> Euclidean ExecutionFunction of
F1(),
Funcs F2(),
INT ,
(Funcs F2(),INT ) \ F3(),
0 ,
F7()
-> Variable of
F6(),
F8()
-> Variable of
F6(),
F9()
-> Element of
Funcs F2(),
INT ,
F10()
-> INT-Expression of
F1(),
F6(),
P1[
set ] } :
(
P1[
F6()
. F9(),
F5()] & (
F10()
. F9()
>= F9()
. F8() implies
(F6() . F9(),F5()) . F7()
= (F9() . F8()) - 1 ) & (
F10()
. F9()
< F9()
. F8() implies
(F6() . F9(),F5()) . F7()
= F10()
. F9() ) &
(F6() . F9(),F5()) . F8()
= F9()
. F8() )
provided
F:
F5()
= for-do (F7() := F10()),
((. F8()) leq (. F7())),
(F7() += (- 1)),
F4()
and A:
P1[
F6()
. F9(),
(F7() := F10())]
and B:
for
s being
Element of
Funcs F2(),
INT st
P1[
s] holds
(
P1[
F6()
. s,
(F4() \; (F7() += (- 1)))] &
P1[
F6()
. s,
(F8() leq F7())] )
and C:
for
s being
Element of
Funcs F2(),
INT st
P1[
s] holds
(
(F6() . s,F4()) . F7()
= s . F7() &
(F6() . s,F4()) . F8()
= s . F8() )
and D:
(
F8()
<> F7() &
F8()
<> F3() &
F7()
<> F3() )
theorem ThT1: :: AOFA_I00:52
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
I being
Element of
A for
i,
n being
Variable of
g st ex
d being
Function st
(
d . b = 0 &
d . n = 1 &
d . i = 2 ) & ( for
s being
Element of
Funcs X,
INT holds
(
(g . s,I) . n = s . n &
(g . s,I) . i = s . i ) ) holds
g iteration_terminates_for (I \; (i += 1)) \; (i leq n),
g . s,
(i leq n)
theorem ThT12: :: AOFA_I00:53
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
s being
Element of
Funcs X,
INT for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
P being
set for
I being
Element of
A for
i,
n being
Variable of
g st ex
d being
Function st
(
d . b = 0 &
d . n = 1 &
d . i = 2 ) & ( for
s being
Element of
Funcs X,
INT st
s in P holds
(
(g . s,I) . n = s . n &
(g . s,I) . i = s . i &
g . s,
I in P &
g . s,
(i leq n) in P &
g . s,
(i += 1) in P ) ) &
s in P holds
g iteration_terminates_for (I \; (i += 1)) \; (i leq n),
g . s,
(i leq n)
theorem ThT4: :: AOFA_I00:54
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
T being
Subset of
(Funcs X,INT ) for
f being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T for
t being
INT-Expression of
A,
f for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
I being
Element of
A st
I is_terminating_wrt g holds
for
i,
n being
Variable of
g st ex
d being
Function st
(
d . b = 0 &
d . n = 1 &
d . i = 2 ) & ( for
s being
Element of
Funcs X,
INT holds
(
(g . s,I) . n = s . n &
(g . s,I) . i = s . i ) ) holds
for-do (i := t),
(i leq n),
(i += 1),
I is_terminating_wrt g
theorem :: AOFA_I00:55
for
A being
Euclidean preIfWhileAlgebra for
X being non
empty countable set for
T being
Subset of
(Funcs X,INT ) for
f being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
T for
t being
INT-Expression of
A,
f for
b being
Element of
X for
g being
Euclidean ExecutionFunction of
A,
Funcs X,
INT ,
(Funcs X,INT ) \ b,
0 for
P being
set for
I being
Element of
A st
I is_terminating_wrt g,
P holds
for
i,
n being
Variable of
g st ex
d being
Function st
(
d . b = 0 &
d . n = 1 &
d . i = 2 ) & ( for
s being
Element of
Funcs X,
INT st
s in P holds
(
(g . s,I) . n = s . n &
(g . s,I) . i = s . i ) ) &
P is_invariant_wrt i := t,
g &
P is_invariant_wrt I,
g &
P is_invariant_wrt i leq n,
g &
P is_invariant_wrt i += 1,
g holds
for-do (i := t),
(i leq n),
(i += 1),
I is_terminating_wrt g,
P
theorem :: AOFA_I00:56
for
A being
Euclidean preIfWhileAlgebra 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
n,
s,
i being
Variable of
g st ex
d being
Function st
(
d . n = 1 &
d . s = 2 &
d . i = 3 &
d . b = 4 ) holds
(s := 1) \; (for-do (i := 2),(i leq n),(i += 1),(s *= i)) is_terminating_wrt g
theorem :: AOFA_I00:57
for
A being
Euclidean preIfWhileAlgebra 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
n,
s,
i being
Variable of
g st ex
d being
Function st
(
d . n = 1 &
d . s = 2 &
d . i = 3 &
d . b = 4 ) holds
for
q being
Element of
Funcs X,
INT for
N being
natural number st
N = q . n holds
(g . q,((s := 1) \; (for-do (i := 2),(i leq n),(i += 1),(s *= i)))) . s = N !
theorem :: AOFA_I00:58
for
A being
Euclidean preIfWhileAlgebra 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,
n,
s,
i being
Variable of
g st ex
d being
Function st
(
d . x = 0 &
d . n = 1 &
d . s = 2 &
d . i = 3 &
d . b = 4 ) holds
(s := 1) \; (for-do (i := 1),(i leq n),(i += 1),(s *= x)) is_terminating_wrt g
theorem :: AOFA_I00:59
for
A being
Euclidean preIfWhileAlgebra 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,
n,
s,
i being
Variable of
g st ex
d being
Function st
(
d . x = 0 &
d . n = 1 &
d . s = 2 &
d . i = 3 &
d . b = 4 ) holds
for
q being
Element of
Funcs X,
INT for
N being
natural number st
N = q . n holds
(g . q,((s := 1) \; (for-do (i := 1),(i leq n),(i += 1),(s *= x)))) . s = (q . x) |^ N
theorem :: AOFA_I00:60
for
A being
Euclidean preIfWhileAlgebra 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
n,
x,
y,
z,
i being
Variable of
g st ex
d being
Function st
(
d . b = 0 &
d . n = 1 &
d . x = 2 &
d . y = 3 &
d . z = 4 &
d . i = 5 ) holds
((x := 0 ) \; (y := 1)) \; (for-do (i := 1),(i leq n),(i += 1),(((z := x) \; (x := y)) \; (y += z))) is_terminating_wrt g
theorem :: AOFA_I00:61
for
A being
Euclidean preIfWhileAlgebra 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
n,
x,
y,
z,
i being
Variable of
g st ex
d being
Function st
(
d . b = 0 &
d . n = 1 &
d . x = 2 &
d . y = 3 &
d . z = 4 &
d . i = 5 ) holds
for
s being
Element of
Funcs X,
INT for
N being
Element of
NAT st
N = s . n holds
(g . s,(((x := 0 ) \; (y := 1)) \; (for-do (i := 1),(i leq n),(i += 1),(((z := x) \; (x := y)) \; (y += z))))) . x = Fib N
LemEAterm:
for A being Euclidean preIfWhileAlgebra
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
for s being Element of Funcs X,INT holds
( (g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z))) . x = s . y & (g . s,((((z := x) \; (z %= y)) \; (x := y)) \; (y := z))) . y = (s . x) mod (s . y) & ( for n, m being Element of NAT st n = s . x & m = s . y & n > m & ( s in (Funcs X,INT ) \ b,0 implies m > 0 ) & ( m > 0 implies s in (Funcs X,INT ) \ b,0 ) holds
g iteration_terminates_for ((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)) \; (y gt 0 ),s ) )
theorem :: AOFA_I00:62
for
A being
Euclidean preIfWhileAlgebra 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 ) }
theorem :: AOFA_I00:63
for
A being
Euclidean preIfWhileAlgebra 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
for
s being
Element of
Funcs X,
INT for
n,
m being
Element of
NAT st
n = s . x &
m = s . y &
n > m holds
(g . s,(while (y gt 0 ),((((z := x) \; (z %= y)) \; (x := y)) \; (y := z)))) . x = n gcd m
LemEA2term:
for A being Euclidean preIfWhileAlgebra
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
for s being Element of Funcs X,INT holds
( (g . s,((((z := ((. x) - (. y))) \; (if-then (z lt 0 ),(z *= (- 1)))) \; (x := y)) \; (y := z))) . x = s . y & (g . s,((((z := ((. x) - (. y))) \; (if-then (z lt 0 ),(z *= (- 1)))) \; (x := y)) \; (y := z))) . y = abs ((s . x) - (s . y)) & ( for n, m being Element of NAT st n = s . x & m = s . y & ( s in (Funcs X,INT ) \ b,0 implies m > 0 ) & ( m > 0 implies s in (Funcs X,INT ) \ b,0 ) holds
g iteration_terminates_for ((((z := ((. x) - (. y))) \; (if-then (z lt 0 ),(z *= (- 1)))) \; (x := y)) \; (y := z)) \; (y gt 0 ),s ) )
theorem :: AOFA_I00:64
for
A being
Euclidean preIfWhileAlgebra 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) - (. y))) \; (if-then (z lt 0 ),(z *= (- 1)))) \; (x := y)) \; (y := z)) is_terminating_wrt g,
{ s where s is Element of Funcs X,INT : ( s . x >= 0 & s . y >= 0 ) }
theorem :: AOFA_I00:65
for
A being
Euclidean preIfWhileAlgebra 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
for
s being
Element of
Funcs X,
INT for
n,
m being
Element of
NAT st
n = s . x &
m = s . y &
n > 0 holds
(g . s,(while (y gt 0 ),((((z := ((. x) - (. y))) \; (if-then (z lt 0 ),(z *= (- 1)))) \; (x := y)) \; (y := z)))) . x = n gcd m
theorem :: AOFA_I00:66
for
A being
Euclidean preIfWhileAlgebra 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,
m being
Variable of
g st ex
d being
Function st
(
d . b = 0 &
d . x = 1 &
d . y = 2 &
d . m = 3 ) holds
(y := 1) \; (while (m gt 0 ),(((if-then (m is_odd ),(y *= x)) \; (m /= 2)) \; (x *= x))) is_terminating_wrt g,
{ s where s is Element of Funcs X,INT : s . m >= 0 }
theorem :: AOFA_I00:67
for
A being
Euclidean preIfWhileAlgebra 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,
m being
Variable of
g st ex
d being
Function st
(
d . b = 0 &
d . x = 1 &
d . y = 2 &
d . m = 3 ) holds
for
s being
Element of
Funcs X,
INT for
n being
Nat st
n = s . m holds
(g . s,((y := 1) \; (while (m gt 0 ),(((if-then (m is_odd ),(y *= x)) \; (m /= 2)) \; (x *= x))))) . y = (s . x) |^ n