let S be non empty set ; for T being Subset of S
for A being free ECIW-strict preIfWhileAlgebra
for g being Function of [:S,(ElementaryInstructions A):],S
for F being Function of (Funcs (S,S)),(Funcs (S,S)) st ( for h being Element of Funcs (S,S) holds (F . h) * h = F . h ) holds
ex f being ExecutionFunction of A,S,T st
( f | [:S,(ElementaryInstructions A):] = g & ( for C, I being Element of A
for s being Element of S st not f iteration_terminates_for I \; C,f . (s,C) holds
f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C)) ) )
let T be Subset of S; for A being free ECIW-strict preIfWhileAlgebra
for g being Function of [:S,(ElementaryInstructions A):],S
for F being Function of (Funcs (S,S)),(Funcs (S,S)) st ( for h being Element of Funcs (S,S) holds (F . h) * h = F . h ) holds
ex f being ExecutionFunction of A,S,T st
( f | [:S,(ElementaryInstructions A):] = g & ( for C, I being Element of A
for s being Element of S st not f iteration_terminates_for I \; C,f . (s,C) holds
f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C)) ) )
let A be free ECIW-strict preIfWhileAlgebra; for g being Function of [:S,(ElementaryInstructions A):],S
for F being Function of (Funcs (S,S)),(Funcs (S,S)) st ( for h being Element of Funcs (S,S) holds (F . h) * h = F . h ) holds
ex f being ExecutionFunction of A,S,T st
( f | [:S,(ElementaryInstructions A):] = g & ( for C, I being Element of A
for s being Element of S st not f iteration_terminates_for I \; C,f . (s,C) holds
f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C)) ) )
let g be Function of [:S,(ElementaryInstructions A):],S; for F being Function of (Funcs (S,S)),(Funcs (S,S)) st ( for h being Element of Funcs (S,S) holds (F . h) * h = F . h ) holds
ex f being ExecutionFunction of A,S,T st
( f | [:S,(ElementaryInstructions A):] = g & ( for C, I being Element of A
for s being Element of S st not f iteration_terminates_for I \; C,f . (s,C) holds
f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C)) ) )
let F be Function of (Funcs (S,S)),(Funcs (S,S)); ( ( for h being Element of Funcs (S,S) holds (F . h) * h = F . h ) implies ex f being ExecutionFunction of A,S,T st
( f | [:S,(ElementaryInstructions A):] = g & ( for C, I being Element of A
for s being Element of S st not f iteration_terminates_for I \; C,f . (s,C) holds
f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C)) ) ) )
assume A1:
for h being Element of Funcs (S,S) holds (F . h) * h = F . h
; ex f being ExecutionFunction of A,S,T st
( f | [:S,(ElementaryInstructions A):] = g & ( for C, I being Element of A
for s being Element of S st not f iteration_terminates_for I \; C,f . (s,C) holds
f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C)) ) )
set Z = Funcs (S,S);
deffunc H1( Element of A) -> set = (curry' g) . $1;
A2:
for I being Element of A st I in ElementaryInstructions A holds
H1(I) in Funcs (S,S)
reconsider idS = id S as Element of Funcs (S,S) by FUNCT_2:126;
deffunc H2( Element of Funcs (S,S), Element of Funcs (S,S)) -> Element of Funcs (S,S) = $2 * $1;
deffunc H3( Element of Funcs (S,S), Element of Funcs (S,S), Element of Funcs (S,S)) -> Element of Funcs (S,S) = (($2,T) +* $3) * $1;
deffunc H4( Element of Funcs (S,S), Element of Funcs (S,S)) -> Element of Funcs (S,S) = ((T,(F . ($1 * $2))) iter ($1 * $2)) * $1;
consider h being Function of the carrier of A,(Funcs (S,S)) such that
A4:
for I being Element of A st I in ElementaryInstructions A holds
h . I = H1(I)
and
A5:
h . (EmptyIns A) = idS
and
A6:
for I1, I2 being Element of A holds h . (I1 \; I2) = H2(h . I1,h . I2)
and
A7:
for C, I1, I2 being Element of A holds h . (if-then-else (C,I1,I2)) = H3(h . C,h . I1,h . I2)
and
A8:
for C, I being Element of A holds h . (while (C,I)) = H4(h . C,h . I)
from AOFA_000:sch 7(A2);
h in Funcs ( the carrier of A,(Funcs (S,S)))
by FUNCT_2:8;
then
uncurry' h in Funcs ([:S, the carrier of A:],S)
by FUNCT_6:11;
then reconsider f = uncurry' h as Function of [:S, the carrier of A:],S by FUNCT_2:66;
A9:
dom h = the carrier of A
by FUNCT_2:def 1;
A10:
f is complying_with_empty-instruction
A11:
f is complying_with_catenation
proof
let s be
Element of
S;
AOFA_000:def 29 for I1, I2 being Element of A holds f . (s,(I1 \; I2)) = f . ((f . (s,I1)),I2)let I1,
I2 be
Element of
A;
f . (s,(I1 \; I2)) = f . ((f . (s,I1)),I2)
A12:
dom (h . (I1 \; I2)) = S
by FUNCT_2:def 1;
A13:
dom (h . I1) = S
by FUNCT_2:def 1;
A14:
dom (h . I2) = S
by FUNCT_2:def 1;
thus f . (
s,
(I1 \; I2)) =
(h . (I1 \; I2)) . s
by A9, A12, FUNCT_5:39
.=
((h . I2) * (h . I1)) . s
by A6
.=
(h . I2) . ((h . I1) . s)
by FUNCT_2:15
.=
(h . I2) . (f . (s,I1))
by A9, A13, FUNCT_5:39
.=
f . (
(f . (s,I1)),
I2)
by A9, A14, FUNCT_5:39
;
verum
end;
A15:
f complies_with_if_wrt T
proof
let s be
Element of
S;
AOFA_000:def 30 for C, I1, I2 being Element of A holds
( ( f . (s,C) in T implies f . (s,(if-then-else (C,I1,I2))) = f . ((f . (s,C)),I1) ) & ( f . (s,C) nin T implies f . (s,(if-then-else (C,I1,I2))) = f . ((f . (s,C)),I2) ) )let C,
I1,
I2 be
Element of
A;
( ( f . (s,C) in T implies f . (s,(if-then-else (C,I1,I2))) = f . ((f . (s,C)),I1) ) & ( f . (s,C) nin T implies f . (s,(if-then-else (C,I1,I2))) = f . ((f . (s,C)),I2) ) )
A16:
dom (h . (if-then-else (C,I1,I2))) = S
by FUNCT_2:def 1;
A17:
dom (h . C) = S
by FUNCT_2:def 1;
A18:
dom (h . I1) = S
by FUNCT_2:def 1;
A19:
dom (h . I2) = S
by FUNCT_2:def 1;
A20:
f . (
s,
(if-then-else (C,I1,I2))) =
(h . (if-then-else (C,I1,I2))) . s
by A9, A16, FUNCT_5:39
.=
H3(
h . C,
h . I1,
h . I2)
. s
by A7
.=
(((h . I1),T) +* (h . I2)) . ((h . C) . s)
by FUNCT_2:15
;
A21:
f . (
s,
C)
= (h . C) . s
by A9, A17, FUNCT_5:39;
hereby ( f . (s,C) nin T implies f . (s,(if-then-else (C,I1,I2))) = f . ((f . (s,C)),I2) )
assume
f . (
s,
C)
in T
;
f . (s,(if-then-else (C,I1,I2))) = f . ((f . (s,C)),I1)hence f . (
s,
(if-then-else (C,I1,I2))) =
(h . I1) . (f . (s,C))
by A18, A20, A21, Th4
.=
f . (
(f . (s,C)),
I1)
by A9, A18, FUNCT_5:39
;
verum
end;
assume
f . (
s,
C)
nin T
;
f . (s,(if-then-else (C,I1,I2))) = f . ((f . (s,C)),I2)
hence f . (
s,
(if-then-else (C,I1,I2))) =
(h . I2) . (f . (s,C))
by A19, A20, A21, Th5
.=
f . (
(f . (s,C)),
I2)
by A9, A19, FUNCT_5:39
;
verum
end;
f complies_with_while_wrt T
proof
let s be
Element of
S;
AOFA_000:def 31 for C, I being Element of A holds
( ( f . (s,C) in T implies f . (s,(while (C,I))) = f . ((f . ((f . (s,C)),I)),(while (C,I))) ) & ( f . (s,C) nin T implies f . (s,(while (C,I))) = f . (s,C) ) )let C,
I be
Element of
A;
( ( f . (s,C) in T implies f . (s,(while (C,I))) = f . ((f . ((f . (s,C)),I)),(while (C,I))) ) & ( f . (s,C) nin T implies f . (s,(while (C,I))) = f . (s,C) ) )
A22:
dom (h . (while (C,I))) = S
by FUNCT_2:def 1;
A23:
dom (h . C) = S
by FUNCT_2:def 1;
A24:
dom (h . I) = S
by FUNCT_2:def 1;
A25:
dom ((h . C) * (h . I)) = S
by FUNCT_2:def 1;
A26:
f . (
s,
(while (C,I))) =
(h . (while (C,I))) . s
by A9, A22, FUNCT_5:39
.=
H4(
h . C,
h . I)
. s
by A8
.=
((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) . ((h . C) . s)
by FUNCT_2:15
;
A27:
f . (
s,
C)
= (h . C) . s
by A9, A23, FUNCT_5:39;
A28:
rng ((h . C) * (h . I)) c= S
;
A29:
(F . ((h . C) * (h . I))) * ((h . C) * (h . I)) = F . ((h . C) * (h . I))
by A1;
hereby ( f . (s,C) nin T implies f . (s,(while (C,I))) = f . (s,C) )
assume
f . (
s,
C)
in T
;
f . (s,(while (C,I))) = f . ((f . ((f . (s,C)),I)),(while (C,I)))hence f . (
s,
(while (C,I))) =
((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) . (((h . C) * (h . I)) . (f . (s,C)))
by A25, A26, A27, A28, A29, Th11
.=
((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) . ((h . C) . ((h . I) . (f . (s,C))))
by FUNCT_2:15
.=
(((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) * (h . C)) . ((h . I) . (f . (s,C)))
by FUNCT_2:15
.=
(((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) * (h . C)) . (f . ((f . (s,C)),I))
by A9, A24, FUNCT_5:39
.=
(h . (while (C,I))) . (f . ((f . (s,C)),I))
by A8
.=
f . (
(f . ((f . (s,C)),I)),
(while (C,I)))
by A9, A22, FUNCT_5:39
;
verum
end;
thus
(
f . (
s,
C)
nin T implies
f . (
s,
(while (C,I)))
= f . (
s,
C) )
by A25, A26, A27, A28, Th12;
verum
end;
then reconsider f = f as ExecutionFunction of A,S,T by A10, A11, A15, Def32;
take
f
; ( f | [:S,(ElementaryInstructions A):] = g & ( for C, I being Element of A
for s being Element of S st not f iteration_terminates_for I \; C,f . (s,C) holds
f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C)) ) )
dom f = [:S, the carrier of A:]
by FUNCT_2:def 1;
then A30:
[:S,(ElementaryInstructions A):] c= dom f
by ZFMISC_1:95;
A31:
dom g = [:S,(ElementaryInstructions A):]
by FUNCT_2:def 1;
A32:
(dom f) /\ [:S,(ElementaryInstructions A):] = [:S,(ElementaryInstructions A):]
by A30, XBOOLE_1:28;
now for a being object st a in dom g holds
g . a = f . alet a be
object ;
( a in dom g implies g . a = f . a )assume A33:
a in dom g
;
g . a = f . athen consider s,
I being
object such that A34:
s in S
and A35:
I in ElementaryInstructions A
and A36:
a = [s,I]
by ZFMISC_1:def 2;
reconsider s =
s as
Element of
S by A34;
reconsider I =
I as
Element of
A by A35;
reconsider EI =
(curry' g) . I as
Element of
Funcs (
S,
S)
by A2, A35;
g in Funcs (
[:S,(ElementaryInstructions A):],
S)
by FUNCT_2:8;
then
curry' g in Funcs (
(ElementaryInstructions A),
(Funcs (S,S)))
by A33, FUNCT_6:10;
then A37:
dom (curry' g) = ElementaryInstructions A
by FUNCT_2:92;
A38:
dom EI = S
by FUNCT_2:92;
A39:
dom (h . I) = S
by FUNCT_2:92;
thus g . a =
g . (
s,
I)
by A36
.=
EI . s
by A35, A37, A38, FUNCT_5:34
.=
(h . I) . s
by A4, A35
.=
f . (
s,
I)
by A9, A39, FUNCT_5:39
.=
f . a
by A36
;
verum end;
hence
f | [:S,(ElementaryInstructions A):] = g
by A31, A32, FUNCT_1:46; for C, I being Element of A
for s being Element of S st not f iteration_terminates_for I \; C,f . (s,C) holds
f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C))
let C, I be Element of A; for s being Element of S st not f iteration_terminates_for I \; C,f . (s,C) holds
f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C))
let s be Element of S; ( not f iteration_terminates_for I \; C,f . (s,C) implies f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C)) )
assume A40:
not f iteration_terminates_for I \; C,f . (s,C)
; f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C))
A41:
dom (h . (while (C,I))) = S
by FUNCT_2:def 1;
A42:
dom (h . C) = S
by FUNCT_2:def 1;
A43:
dom ((h . C) * (h . I)) = S
by FUNCT_2:def 1;
A44: f . (s,(while (C,I))) =
(h . (while (C,I))) . s
by A9, A41, FUNCT_5:39
.=
H4(h . C,h . I) . s
by A8
.=
((T,(F . ((h . C) * (h . I)))) iter ((h . C) * (h . I))) . ((h . C) . s)
by FUNCT_2:15
;
A45:
f . (s,C) = (h . C) . s
by A9, A42, FUNCT_5:39;
A46:
rng ((h . C) * (h . I)) c= S
;
rng h c= Funcs (S,S)
;
then
h = curry' f
by FUNCT_5:48;
then A47:
(curry' f) . (I \; C) = (h . C) * (h . I)
by A6;
then
((h . C) * (h . I)) orbit (f . (s,C)) c= T
by A40, Th87;
hence
f . (s,(while (C,I))) = (F . ((curry' f) . (I \; C))) . (f . (s,C))
by A43, A44, A45, A46, A47, Def7; verum