let A be preIfWhileAlgebra; :: thesis: for I, J being Element of A
for S being non empty set
for T being Subset of S
for s being Element of S
for f being ExecutionFunction of A,S,T st A is free & [s,(I \; J)] in TerminatingPrograms (A,S,T,f) holds
( [s,I] in TerminatingPrograms (A,S,T,f) & [(f . (s,I)),J] in TerminatingPrograms (A,S,T,f) )

let I, J be Element of A; :: thesis: for S being non empty set
for T being Subset of S
for s being Element of S
for f being ExecutionFunction of A,S,T st A is free & [s,(I \; J)] in TerminatingPrograms (A,S,T,f) holds
( [s,I] in TerminatingPrograms (A,S,T,f) & [(f . (s,I)),J] in TerminatingPrograms (A,S,T,f) )

let S be non empty set ; :: thesis: for T being Subset of S
for s being Element of S
for f being ExecutionFunction of A,S,T st A is free & [s,(I \; J)] in TerminatingPrograms (A,S,T,f) holds
( [s,I] in TerminatingPrograms (A,S,T,f) & [(f . (s,I)),J] in TerminatingPrograms (A,S,T,f) )

let T be Subset of S; :: thesis: for s being Element of S
for f being ExecutionFunction of A,S,T st A is free & [s,(I \; J)] in TerminatingPrograms (A,S,T,f) holds
( [s,I] in TerminatingPrograms (A,S,T,f) & [(f . (s,I)),J] in TerminatingPrograms (A,S,T,f) )

let s be Element of S; :: thesis: for f being ExecutionFunction of A,S,T st A is free & [s,(I \; J)] in TerminatingPrograms (A,S,T,f) holds
( [s,I] in TerminatingPrograms (A,S,T,f) & [(f . (s,I)),J] in TerminatingPrograms (A,S,T,f) )

let f be ExecutionFunction of A,S,T; :: thesis: ( A is free & [s,(I \; J)] in TerminatingPrograms (A,S,T,f) implies ( [s,I] in TerminatingPrograms (A,S,T,f) & [(f . (s,I)),J] in TerminatingPrograms (A,S,T,f) ) )
set TP = TerminatingPrograms (A,S,T,f);
assume that
A1: A is free and
A2: [s,(I \; J)] in TerminatingPrograms (A,S,T,f) ; :: thesis: ( [s,I] in TerminatingPrograms (A,S,T,f) & [(f . (s,I)),J] in TerminatingPrograms (A,S,T,f) )
reconsider P = (TerminatingPrograms (A,S,T,f)) \ {[s,(I \; J)]} as Subset of [:S, the carrier of A:] ;
A3: [:S,(ElementaryInstructions A):] c= P
proof end;
A9: [:S,{(EmptyIns A)}:] c= P
proof
let x, y be object ; :: according to RELAT_1:def 3 :: thesis: ( [x,y] nin [:S,{(EmptyIns A)}:] or not [x,y] nin P )
assume A10: [x,y] in [:S,{(EmptyIns A)}:] ; :: thesis: not [x,y] nin P
then y in {(EmptyIns A)} by ZFMISC_1:87;
then y = EmptyIns A by TARSKI:def 1;
then A11: y <> I \; J by A1, Th72;
A12: [:S,{(EmptyIns A)}:] c= TerminatingPrograms (A,S,T,f) by Def35;
[x,y] <> [s,(I \; J)] by A11, XTUPLE_0:1;
then [x,y] nin {[s,(I \; J)]} by TARSKI:def 1;
hence not [x,y] nin P by A10, A12, XBOOLE_0:def 5; :: thesis: verum
end;
set rr = s;
set IJ = I \; J;
A13: now :: thesis: for s being Element of S
for C, I, J being Element of A holds
( ( [s,C] in P & [(f . (s,C)),I] in P & f . (s,C) in T implies [s,(if-then-else (C,I,J))] in P ) & ( [s,C] in P & [(f . (s,C)),J] in P & f . (s,C) nin T implies [s,(if-then-else (C,I,J))] in P ) & ( [s,C] in P & ex r being non empty FinSequence of S st
( r . 1 = f . (s,C) & r . (len r) nin T & ( for i being Nat st 1 <= i & i < len r holds
( r . i in T & [(r . i),(I \; C)] in P & r . (i + 1) = f . ((r . i),(I \; C)) ) ) ) implies [s,(while (C,I))] in P ) )
let s be Element of S; :: thesis: for C, I, J being Element of A holds
( ( [s,C] in P & [(f . (s,C)),I] in P & f . (s,C) in T implies [s,(if-then-else (C,I,J))] in P ) & ( [s,C] in P & [(f . (s,C)),J] in P & f . (s,C) nin T implies [s,(if-then-else (C,I,J))] in P ) & ( [s,C] in P & ex r being non empty FinSequence of S st
( r . 1 = f . (s,C) & r . (len r) nin T & ( for i being Nat st 1 <= i & i < len r holds
( r . i in T & [(r . i),(I \; C)] in P & r . (i + 1) = f . ((r . i),(I \; C)) ) ) ) implies [s,(while (C,I))] in P ) )

let C, I, J be Element of A; :: thesis: ( ( [s,C] in P & [(f . (s,C)),I] in P & f . (s,C) in T implies [s,(if-then-else (C,I,J))] in P ) & ( [s,C] in P & [(f . (s,C)),J] in P & f . (s,C) nin T implies [s,(if-then-else (C,I,J))] in P ) & ( [s,C] in P & ex r being non empty FinSequence of S st
( r . 1 = f . (s,C) & r . (len r) nin T & ( for i being Nat st 1 <= i & i < len r holds
( r . i in T & [(r . i),(I \; C)] in P & r . (i + 1) = f . ((r . i),(I \; C)) ) ) ) implies [s,(while (C,I))] in P ) )

hereby :: thesis: ( ( [s,C] in P & [(f . (s,C)),J] in P & f . (s,C) nin T implies [s,(if-then-else (C,I,J))] in P ) & ( [s,C] in P & ex r being non empty FinSequence of S st
( r . 1 = f . (s,C) & r . (len r) nin T & ( for i being Nat st 1 <= i & i < len r holds
( r . i in T & [(r . i),(I \; C)] in P & r . (i + 1) = f . ((r . i),(I \; C)) ) ) ) implies [s,(while (C,I))] in P ) )
assume that
A14: [s,C] in P and
A15: [(f . (s,C)),I] in P and
A16: f . (s,C) in T ; :: thesis: [s,(if-then-else (C,I,J))] in P
A17: [s,C] in TerminatingPrograms (A,S,T,f) by A14, ZFMISC_1:56;
A18: [(f . (s,C)),I] in TerminatingPrograms (A,S,T,f) by A15, ZFMISC_1:56;
A19: I \; J <> if-then-else (C,I,J) by A1, Th73;
A20: [s,(if-then-else (C,I,J))] in TerminatingPrograms (A,S,T,f) by A16, A17, A18, Def35;
[s,(I \; J)] <> [s,(if-then-else (C,I,J))] by A19, XTUPLE_0:1;
hence [s,(if-then-else (C,I,J))] in P by A20, ZFMISC_1:56; :: thesis: verum
end;
hereby :: thesis: ( [s,C] in P & ex r being non empty FinSequence of S st
( r . 1 = f . (s,C) & r . (len r) nin T & ( for i being Nat st 1 <= i & i < len r holds
( r . i in T & [(r . i),(I \; C)] in P & r . (i + 1) = f . ((r . i),(I \; C)) ) ) ) implies [s,(while (C,I))] in P )
assume that
A21: [s,C] in P and
A22: [(f . (s,C)),J] in P and
A23: f . (s,C) nin T ; :: thesis: [s,(if-then-else (C,I,J))] in P
A24: [s,C] in TerminatingPrograms (A,S,T,f) by A21, ZFMISC_1:56;
A25: [(f . (s,C)),J] in TerminatingPrograms (A,S,T,f) by A22, ZFMISC_1:56;
A26: I \; J <> if-then-else (C,I,J) by A1, Th73;
A27: [s,(if-then-else (C,I,J))] in TerminatingPrograms (A,S,T,f) by A23, A24, A25, Def35;
[s,(I \; J)] <> [s,(if-then-else (C,I,J))] by A26, XTUPLE_0:1;
hence [s,(if-then-else (C,I,J))] in P by A27, ZFMISC_1:56; :: thesis: verum
end;
assume A28: [s,C] in P ; :: thesis: ( ex r being non empty FinSequence of S st
( r . 1 = f . (s,C) & r . (len r) nin T & ( for i being Nat st 1 <= i & i < len r holds
( r . i in T & [(r . i),(I \; C)] in P & r . (i + 1) = f . ((r . i),(I \; C)) ) ) ) implies [s,(while (C,I))] in P )

given r being non empty FinSequence of S such that A29: r . 1 = f . (s,C) and
A30: r . (len r) nin T and
A31: for i being Nat st 1 <= i & i < len r holds
( r . i in T & [(r . i),(I \; C)] in P & r . (i + 1) = f . ((r . i),(I \; C)) ) ; :: thesis: [s,(while (C,I))] in P
A32: now :: thesis: for i being Nat st 1 <= i & i < len r holds
( r . i in T & [(r . i),(I \; C)] in TerminatingPrograms (A,S,T,f) & r . (i + 1) = f . ((r . i),(I \; C)) )
let i be Nat; :: thesis: ( 1 <= i & i < len r implies ( r . i in T & [(r . i),(I \; C)] in TerminatingPrograms (A,S,T,f) & r . (i + 1) = f . ((r . i),(I \; C)) ) )
assume that
A33: 1 <= i and
A34: i < len r ; :: thesis: ( r . i in T & [(r . i),(I \; C)] in TerminatingPrograms (A,S,T,f) & r . (i + 1) = f . ((r . i),(I \; C)) )
[(r . i),(I \; C)] in P by A31, A33, A34;
hence ( r . i in T & [(r . i),(I \; C)] in TerminatingPrograms (A,S,T,f) & r . (i + 1) = f . ((r . i),(I \; C)) ) by A31, A33, A34, ZFMISC_1:56; :: thesis: verum
end;
A35: [s,C] in TerminatingPrograms (A,S,T,f) by A28, ZFMISC_1:56;
A36: while (C,I) <> I \; J by A1, Th73;
A37: [s,(while (C,I))] in TerminatingPrograms (A,S,T,f) by A29, A30, A32, A35, Def35;
[s,(while (C,I))] <> [s,(I \; J)] by A36, XTUPLE_0:1;
hence [s,(while (C,I))] in P by A37, ZFMISC_1:56; :: thesis: verum
end;
hereby :: thesis: [(f . (s,I)),J] in TerminatingPrograms (A,S,T,f)
assume A38: [s,I] nin TerminatingPrograms (A,S,T,f) ; :: thesis: contradiction
now :: thesis: for q being Element of S
for C, I9, J9 being Element of A st [q,I9] in P & [(f . (q,I9)),J9] in P holds
[q,(I9 \; J9)] in P
let q be Element of S; :: thesis: for C, I9, J9 being Element of A st [q,I9] in P & [(f . (q,I9)),J9] in P holds
[q,(I9 \; J9)] in P

let C, I9, J9 be Element of A; :: thesis: ( [q,I9] in P & [(f . (q,I9)),J9] in P implies [q,(I9 \; J9)] in P )
assume that
A39: [q,I9] in P and
A40: [(f . (q,I9)),J9] in P ; :: thesis: [q,(I9 \; J9)] in P
A41: [q,I9] in TerminatingPrograms (A,S,T,f) by A39, ZFMISC_1:56;
A42: [(f . (q,I9)),J9] in TerminatingPrograms (A,S,T,f) by A40, ZFMISC_1:56;
A43: ( q <> s or I9 \; J9 <> I \; J ) by A1, A38, A41, Th73;
A44: [q,(I9 \; J9)] in TerminatingPrograms (A,S,T,f) by A41, A42, Def35;
[q,(I9 \; J9)] <> [s,(I \; J)] by A43, XTUPLE_0:1;
hence [q,(I9 \; J9)] in P by A44, ZFMISC_1:56; :: thesis: verum
end;
then for s being Element of S
for C, I, J being Element of A holds
( ( [s,I] in P & [(f . (s,I)),J] in P implies [s,(I \; J)] in P ) & ( [s,C] in P & [(f . (s,C)),I] in P & f . (s,C) in T implies [s,(if-then-else (C,I,J))] in P ) & ( [s,C] in P & [(f . (s,C)),J] in P & f . (s,C) nin T implies [s,(if-then-else (C,I,J))] in P ) & ( [s,C] in P & ex r being non empty FinSequence of S st
( r . 1 = f . (s,C) & r . (len r) nin T & ( for i being Nat st 1 <= i & i < len r holds
( r . i in T & [(r . i),(I \; C)] in P & r . (i + 1) = f . ((r . i),(I \; C)) ) ) ) implies [s,(while (C,I))] in P ) ) by A13;
then TerminatingPrograms (A,S,T,f) c= P by A3, A9, Def35;
hence contradiction by A2, ZFMISC_1:56; :: thesis: verum
end;
assume A45: [(f . (s,I)),J] nin TerminatingPrograms (A,S,T,f) ; :: thesis: contradiction
now :: thesis: for q being Element of S
for C, I9, J9 being Element of A st [q,I9] in P & [(f . (q,I9)),J9] in P holds
[q,(I9 \; J9)] in P
let q be Element of S; :: thesis: for C, I9, J9 being Element of A st [q,I9] in P & [(f . (q,I9)),J9] in P holds
[q,(I9 \; J9)] in P

let C, I9, J9 be Element of A; :: thesis: ( [q,I9] in P & [(f . (q,I9)),J9] in P implies [q,(I9 \; J9)] in P )
assume that
A46: [q,I9] in P and
A47: [(f . (q,I9)),J9] in P ; :: thesis: [q,(I9 \; J9)] in P
A48: [q,I9] in TerminatingPrograms (A,S,T,f) by A46, ZFMISC_1:56;
A49: [(f . (q,I9)),J9] in TerminatingPrograms (A,S,T,f) by A47, ZFMISC_1:56;
( f . (q,I9) <> f . (s,I) or J9 <> J ) by A45, A47, ZFMISC_1:56;
then A50: ( q <> s or I9 \; J9 <> I \; J ) by A1, Th73;
A51: [q,(I9 \; J9)] in TerminatingPrograms (A,S,T,f) by A48, A49, Def35;
[q,(I9 \; J9)] <> [s,(I \; J)] by A50, XTUPLE_0:1;
hence [q,(I9 \; J9)] in P by A51, ZFMISC_1:56; :: thesis: verum
end;
then for s being Element of S
for C, I, J being Element of A holds
( ( [s,I] in P & [(f . (s,I)),J] in P implies [s,(I \; J)] in P ) & ( [s,C] in P & [(f . (s,C)),I] in P & f . (s,C) in T implies [s,(if-then-else (C,I,J))] in P ) & ( [s,C] in P & [(f . (s,C)),J] in P & f . (s,C) nin T implies [s,(if-then-else (C,I,J))] in P ) & ( [s,C] in P & ex r being non empty FinSequence of S st
( r . 1 = f . (s,C) & r . (len r) nin T & ( for i being Nat st 1 <= i & i < len r holds
( r . i in T & [(r . i),(I \; C)] in P & r . (i + 1) = f . ((r . i),(I \; C)) ) ) ) implies [s,(while (C,I))] in P ) ) by A13;
then TerminatingPrograms (A,S,T,f) c= P by A3, A9, Def35;
hence contradiction by A2, ZFMISC_1:56; :: thesis: verum