:: SFMASTR3 semantic presentation
theorem Th1: :: SFMASTR3:1
theorem Th2: :: SFMASTR3:2
definition
canceled;let c
1 be
FinSequence of
INT ;
let c
2, c
3 be
Nat;
assume E3:
( 1
<= c
2 & c
2 <= c
3 & c
3 <= len c
1 )
;
canceled;func min_at c
1,c
2,c
3 -> Nat means :
Def3:
:: SFMASTR3:def 3
ex b
1 being non
empty finite Subset of
INT st
( b
1 = rng (a2,a3 -cut a1) & a
4 + 1
= ((min b1) .. (a2,a3 -cut a1)) + a
2 );
existence
ex b1 being Natex b2 being non empty finite Subset of INT st
( b2 = rng (c2,c3 -cut c1) & b1 + 1 = ((min b2) .. (c2,c3 -cut c1)) + c2 )
uniqueness
for b1, b2 being Nat holds
( ex b3 being non empty finite Subset of INT st
( b3 = rng (c2,c3 -cut c1) & b1 + 1 = ((min b3) .. (c2,c3 -cut c1)) + c2 ) & ex b3 being non empty finite Subset of INT st
( b3 = rng (c2,c3 -cut c1) & b2 + 1 = ((min b3) .. (c2,c3 -cut c1)) + c2 ) implies b1 = b2 )
;
end;
:: deftheorem Def1 SFMASTR3:def 1 :
canceled;
:: deftheorem Def2 SFMASTR3:def 2 :
canceled;
:: deftheorem Def3 defines min_at SFMASTR3:def 3 :
theorem Th3: :: SFMASTR3:3
for b
1 being
FinSequence of
INT for b
2, b
3, b
4 being
Nat holds
( 1
<= b
2 & b
2 <= b
3 & b
3 <= len b
1 implies ( b
4 = min_at b
1,b
2,b
3 iff ( b
2 <= b
4 & b
4 <= b
3 & ( for b
5 being
Nat holds
( b
2 <= b
5 & b
5 <= b
3 implies b
1 . b
4 <= b
1 . b
5 ) ) & ( for b
5 being
Nat holds
not ( b
2 <= b
5 & b
5 < b
4 & not b
1 . b
4 < b
1 . b
5 ) ) ) ) )
theorem Th4: :: SFMASTR3:4
:: deftheorem Def4 defines is_non_decreasing_on SFMASTR3:def 4 :
:: deftheorem Def5 defines is_split_at SFMASTR3:def 5 :
theorem Th5: :: SFMASTR3:5
theorem Th6: :: SFMASTR3:6
theorem Th7: :: SFMASTR3:7
theorem Th8: :: SFMASTR3:8
theorem Th9: :: SFMASTR3:9
theorem Th10: :: SFMASTR3:10
theorem Th11: :: SFMASTR3:11
theorem Th12: :: SFMASTR3:12
theorem Th13: :: SFMASTR3:13
theorem Th14: :: SFMASTR3:14
theorem Th15: :: SFMASTR3:15
definition
let c
1, c
2, c
3 be
Int-Location ;
let c
4 be
Macro-Instruction;
let c
5 be
State of
SCM+FSA ;
func StepForUp c
1,c
2,c
3,c
4,c
5 -> Function of
NAT ,
product the
Object-Kind of
SCM+FSA equals :: SFMASTR3:def 6
StepWhile>0 (1 -stRWNotIn ({a1,a2,a3} \/ (UsedIntLoc a4))),
((a4 ';' (AddTo a1,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({a1,a2,a3} \/ (UsedIntLoc a4))),(intloc 0))),
((a5 +* (1 -stRWNotIn ({a1,a2,a3} \/ (UsedIntLoc a4))),(((a5 . a3) - (a5 . a2)) + 1)) +* a1,(a5 . a2));
coherence
StepWhile>0 (1 -stRWNotIn ({c1,c2,c3} \/ (UsedIntLoc c4))),((c4 ';' (AddTo c1,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c1,c2,c3} \/ (UsedIntLoc c4))),(intloc 0))),((c5 +* (1 -stRWNotIn ({c1,c2,c3} \/ (UsedIntLoc c4))),(((c5 . c3) - (c5 . c2)) + 1)) +* c1,(c5 . c2)) is Function of NAT , product the Object-Kind of SCM+FSA
;
end;
:: deftheorem Def6 defines StepForUp SFMASTR3:def 6 :
for b
1, b
2, b
3 being
Int-Location for b
4 being
Macro-Instructionfor b
5 being
State of
SCM+FSA holds
StepForUp b
1,b
2,b
3,b
4,b
5 = StepWhile>0 (1 -stRWNotIn ({b1,b2,b3} \/ (UsedIntLoc b4))),
((b4 ';' (AddTo b1,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({b1,b2,b3} \/ (UsedIntLoc b4))),(intloc 0))),
((b5 +* (1 -stRWNotIn ({b1,b2,b3} \/ (UsedIntLoc b4))),(((b5 . b3) - (b5 . b2)) + 1)) +* b1,(b5 . b2));
theorem Th16: :: SFMASTR3:16
theorem Th17: :: SFMASTR3:17
theorem Th18: :: SFMASTR3:18
theorem Th19: :: SFMASTR3:19
theorem Th20: :: SFMASTR3:20
theorem Th21: :: SFMASTR3:21
theorem Th22: :: SFMASTR3:22
definition
let c
1, c
2, c
3 be
Int-Location ;
let c
4 be
Macro-Instruction;
let c
5 be
State of
SCM+FSA ;
pred ProperForUpBody c
1,c
2,c
3,c
4,c
5 means :
Def7:
:: SFMASTR3:def 7
for b
1 being
Nat holds
( b
1 < ((a5 . a3) - (a5 . a2)) + 1 implies ( a
4 is_closed_on (StepForUp a1,a2,a3,a4,a5) . b
1 & a
4 is_halting_on (StepForUp a1,a2,a3,a4,a5) . b
1 ) );
end;
:: deftheorem Def7 defines ProperForUpBody SFMASTR3:def 7 :
for b
1, b
2, b
3 being
Int-Location for b
4 being
Macro-Instructionfor b
5 being
State of
SCM+FSA holds
(
ProperForUpBody b
1,b
2,b
3,b
4,b
5 iff for b
6 being
Nat holds
( b
6 < ((b5 . b3) - (b5 . b2)) + 1 implies ( b
4 is_closed_on (StepForUp b1,b2,b3,b4,b5) . b
6 & b
4 is_halting_on (StepForUp b1,b2,b3,b4,b5) . b
6 ) ) );
theorem Th23: :: SFMASTR3:23
theorem Th24: :: SFMASTR3:24
for b
1 being
State of
SCM+FSA for b
2 being
read-write Int-Location for b
3, b
4 being
Int-Location for b
5 being
good Macro-Instructionfor b
6 being
Nat holds
(
((StepForUp b2,b3,b4,b5,b1) . b6) . (intloc 0) = 1 & b
5 is_closed_on (StepForUp b2,b3,b4,b5,b1) . b
6 & b
5 is_halting_on (StepForUp b2,b3,b4,b5,b1) . b
6 implies
((StepForUp b2,b3,b4,b5,b1) . (b6 + 1)) . (intloc 0) = 1 )
theorem Th25: :: SFMASTR3:25
for b
1 being
State of
SCM+FSA for b
2 being
read-write Int-Location for b
3, b
4 being
Int-Location for b
5 being
good Macro-Instruction holds
( b
1 . (intloc 0) = 1 &
ProperForUpBody b
2,b
3,b
4,b
5,b
1 implies for b
6 being
Nat holds
( b
6 <= ((b1 . b4) - (b1 . b3)) + 1 implies (
((StepForUp b2,b3,b4,b5,b1) . b6) . (intloc 0) = 1 & ( b
5 does_not_destroy b
2 implies (
((StepForUp b2,b3,b4,b5,b1) . b6) . b
2 = b
6 + (b1 . b3) &
((StepForUp b2,b3,b4,b5,b1) . b6) . b
2 <= (b1 . b4) + 1 ) ) &
(((StepForUp b2,b3,b4,b5,b1) . b6) . (1 -stRWNotIn ({b2,b3,b4} \/ (UsedIntLoc b5)))) + b
6 = ((b1 . b4) - (b1 . b3)) + 1 ) ) )
theorem Th26: :: SFMASTR3:26
for b
1 being
State of
SCM+FSA for b
2 being
read-write Int-Location for b
3, b
4 being
Int-Location for b
5 being
good Macro-Instruction holds
( b
1 . (intloc 0) = 1 &
ProperForUpBody b
2,b
3,b
4,b
5,b
1 implies for b
6 being
Nat holds
( not (
((StepForUp b2,b3,b4,b5,b1) . b6) . (1 -stRWNotIn ({b2,b3,b4} \/ (UsedIntLoc b5))) > 0 & not b
6 < ((b1 . b4) - (b1 . b3)) + 1 ) & not ( b
6 < ((b1 . b4) - (b1 . b3)) + 1 & not
((StepForUp b2,b3,b4,b5,b1) . b6) . (1 -stRWNotIn ({b2,b3,b4} \/ (UsedIntLoc b5))) > 0 ) ) )
theorem Th27: :: SFMASTR3:27
for b
1 being
State of
SCM+FSA for b
2 being
read-write Int-Location for b
3, b
4 being
Int-Location for b
5 being
good Macro-Instructionfor b
6 being
Nat holds
( b
1 . (intloc 0) = 1 &
ProperForUpBody b
2,b
3,b
4,b
5,b
1 & b
6 < ((b1 . b4) - (b1 . b3)) + 1 implies
((StepForUp b2,b3,b4,b5,b1) . (b6 + 1)) | (({b2,b3,b4} \/ (UsedIntLoc b5)) \/ FinSeq-Locations ) = (IExec (b5 ';' (AddTo b2,(intloc 0))),((StepForUp b2,b3,b4,b5,b1) . b6)) | (({b2,b3,b4} \/ (UsedIntLoc b5)) \/ FinSeq-Locations ) )
definition
let c
1, c
2, c
3 be
Int-Location ;
let c
4 be
Macro-Instruction;
set c
5 = 1
-stRWNotIn ({c1,c2,c3} \/ (UsedIntLoc c4));
func for-up c
1,c
2,c
3,c
4 -> Macro-Instruction equals :: SFMASTR3:def 8
(((((1 -stRWNotIn ({a1,a2,a3} \/ (UsedIntLoc a4))) := a3) ';' (SubFrom (1 -stRWNotIn ({a1,a2,a3} \/ (UsedIntLoc a4))),a2)) ';' (AddTo (1 -stRWNotIn ({a1,a2,a3} \/ (UsedIntLoc a4))),(intloc 0))) ';' (a1 := a2)) ';' (while>0 (1 -stRWNotIn ({a1,a2,a3} \/ (UsedIntLoc a4))),((a4 ';' (AddTo a1,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({a1,a2,a3} \/ (UsedIntLoc a4))),(intloc 0))));
coherence
(((((1 -stRWNotIn ({c1,c2,c3} \/ (UsedIntLoc c4))) := c3) ';' (SubFrom (1 -stRWNotIn ({c1,c2,c3} \/ (UsedIntLoc c4))),c2)) ';' (AddTo (1 -stRWNotIn ({c1,c2,c3} \/ (UsedIntLoc c4))),(intloc 0))) ';' (c1 := c2)) ';' (while>0 (1 -stRWNotIn ({c1,c2,c3} \/ (UsedIntLoc c4))),((c4 ';' (AddTo c1,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c1,c2,c3} \/ (UsedIntLoc c4))),(intloc 0)))) is Macro-Instruction
;
end;
:: deftheorem Def8 defines for-up SFMASTR3:def 8 :
for b
1, b
2, b
3 being
Int-Location for b
4 being
Macro-Instruction holds
for-up b
1,b
2,b
3,b
4 = (((((1 -stRWNotIn ({b1,b2,b3} \/ (UsedIntLoc b4))) := b3) ';' (SubFrom (1 -stRWNotIn ({b1,b2,b3} \/ (UsedIntLoc b4))),b2)) ';' (AddTo (1 -stRWNotIn ({b1,b2,b3} \/ (UsedIntLoc b4))),(intloc 0))) ';' (b1 := b2)) ';' (while>0 (1 -stRWNotIn ({b1,b2,b3} \/ (UsedIntLoc b4))),((b4 ';' (AddTo b1,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({b1,b2,b3} \/ (UsedIntLoc b4))),(intloc 0))));
theorem Th28: :: SFMASTR3:28
theorem Th29: :: SFMASTR3:29
theorem Th30: :: SFMASTR3:30
for b
1 being
State of
SCM+FSA for b
2 being
read-write Int-Location for b
3, b
4 being
Int-Location for b
5 being
Macro-Instruction holds
( b
1 . (intloc 0) = 1 & b
1 . b
3 > b
1 . b
4 implies ( ( for b
6 being
Int-Location holds
( b
6 <> b
2 & b
6 in {b3,b4} \/ (UsedIntLoc b5) implies
(IExec (for-up b2,b3,b4,b5),b1) . b
6 = b
1 . b
6 ) ) & ( for b
6 being
FinSeq-Location holds
(IExec (for-up b2,b3,b4,b5),b1) . b
6 = b
1 . b
6 ) ) )
E35:
now
let c
1 be
State of
SCM+FSA ;
let c
2 be
read-write Int-Location ;
let c
3, c
4 be
Int-Location ;
set c
5 =
Int-Locations \/ FinSeq-Locations ;
let c
6 be
good Macro-Instruction;
assume that E36:
c
1 . (intloc 0) = 1
and E37:
(
ProperForUpBody c
2,c
3,c
4,c
6,c
1 or c
6 is
parahalting )
;
E38:
ProperForUpBody c
2,c
3,c
4,c
6,c
1
by E37, Th23;
set c
7 = 1
-stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6));
set c
8 =
(1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c
4;
set c
9 =
SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c
3;
set c
10 =
AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),
(intloc 0);
set c
11 = c
2 := c
3;
set c
12 =
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0));
set c
13 =
IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c
1;
set c
14 =
(c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c
2,
(c1 . c3);
E39:
(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1) | (Int-Locations \/ FinSeq-Locations ) = ((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3)) | (Int-Locations \/ FinSeq-Locations )
by E36, Th22;
set c
15 =
(AddTo c2,(intloc 0)) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0));
set c
16 =
StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),
((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),
(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1);
set c
17 =
StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),
((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),
((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3));
set c
18 =
StepForUp c
2,c
3,c
4,c
6,c
1;
set c
19 =
((c1 . c4) - (c1 . c3)) + 1;
E40:
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)) = c
6 ';' ((AddTo c2,(intloc 0)) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)))
by SCMFSA6A:65;
E41:
StepForUp c
2,c
3,c
4,c
6,c
1 = StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),
((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),
((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))
;
E42:
ProperBodyWhile>0 1
-stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6)),
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)),
(c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c
2,
(c1 . c3)
proof
let c
20 be
Nat;
:: according to SCMFSA9A:def 4
assume
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c20) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) > 0
;
then E43:
c
20 < ((c1 . c4) - (c1 . c3)) + 1
by E36, E38, E41, Th26;
then E44:
((StepForUp c2,c3,c4,c6,c1) . c20) . (intloc 0) = 1
by E36, E38, Th25;
E45:
c
6 is_closed_on (StepForUp c2,c3,c4,c6,c1) . c
20
by E38, E43, Def7;
then E46:
c
6 is_closed_on Initialize ((StepForUp c2,c3,c4,c6,c1) . c20)
by E44, SFMASTR2:4;
c
6 is_halting_on (StepForUp c2,c3,c4,c6,c1) . c
20
by E38, E43, Def7;
then E47:
c
6 is_halting_on Initialize ((StepForUp c2,c3,c4,c6,c1) . c20)
by E44, E45, SFMASTR2:5;
E48:
(AddTo c2,(intloc 0)) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)) is_closed_on IExec c
6,
((StepForUp c2,c3,c4,c6,c1) . c20)
by SCMFSA7B:24;
then E49:
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)) is_closed_on Initialize ((StepForUp c2,c3,c4,c6,c1) . c20)
by E40, E46, E47, SFMASTR1:3;
hence
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)) is_closed_on (StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c
20
by E44, SFMASTR2:4;
(AddTo c2,(intloc 0)) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)) is_halting_on IExec c
6,
((StepForUp c2,c3,c4,c6,c1) . c20)
by SCMFSA7B:25;
then
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)) is_halting_on Initialize ((StepForUp c2,c3,c4,c6,c1) . c20)
by E40, E46, E47, E48, SFMASTR1:4;
hence
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)) is_halting_on (StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c
20
by E44, E49, SFMASTR2:5;
end;
thus
ProperBodyWhile>0 1
-stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6)),
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)),
IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c
1
proof
let c
20 be
Nat;
:: according to SCMFSA9A:def 4
assume E43:
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c20) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) > 0
;
E44:
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c20) | (Int-Locations \/ FinSeq-Locations ) = ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c20) | (Int-Locations \/ FinSeq-Locations )
by E39, E42, SCMFSA9A:40;
then E45:
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c20) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) = ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c20) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6)))
by SCMFSA6A:38;
then E46:
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)) is_closed_on (StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c
20
by E42, E43, SCMFSA9A:def 4;
E47:
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)) is_halting_on (StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c
20
by E42, E43, E45, SCMFSA9A:def 4;
thus
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)) is_closed_on (StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c
20
by E44, E46, SCMFSA8B:6;
thus
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)) is_halting_on (StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c
20
by E44, E46, E47, SCMFSA8B:8;
end;
deffunc H
1(
Element of
product the
Object-Kind of
SCM+FSA )
-> Element of
NAT =
abs (a1 . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))));
consider c
20 being
Function of
product the
Object-Kind of
SCM+FSA ,
NAT such that E43:
for b
1 being
Element of
product the
Object-Kind of
SCM+FSA holds c
20 . b
1 = H
1(b
1)
from FUNCT_2:sch 4();
E44:
for b
1 being
Nat holds
not ( not c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (b1 + 1)) < c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . b1) & not
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . b1) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) <= 0 )
proof
let c
21 be
Nat;
E45:
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c21) | (Int-Locations \/ FinSeq-Locations ) = ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c21) | (Int-Locations \/ FinSeq-Locations )
by E39, E42, SCMFSA9A:40;
then E46:
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c21) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) = ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c21) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6)))
by SCMFSA6A:38;
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . (c21 + 1)) | (Int-Locations \/ FinSeq-Locations ) = ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) | (Int-Locations \/ FinSeq-Locations )
by E39, E42, SCMFSA9A:40;
then E47:
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) = ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6)))
by SCMFSA6A:38;
now
assume E48:
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c21) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) > 0
;
E49: c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c21) =
abs (((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c21) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))))
by E43
.=
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c21) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6)))
by E46, E48, ABSVALUE:def 1
;
c
21 < ((c1 . c4) - (c1 . c3)) + 1
by E36, E38, E41, E46, E48, Th26;
then E50:
(((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c21) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6)))) + c
21 = ((c1 . c4) - (c1 . c3)) + 1
by E36, E38, E41, Th25;
E51:
c
21 < ((c1 . c4) - (c1 . c3)) + 1
by E36, E38, E41, E46, E48, Th26;
0
<= ((c1 . c4) - (c1 . c3)) + 1
by E51;
then reconsider c
22 =
((c1 . c4) - (c1 . c3)) + 1 as
Nat by INT_1:16;
E52:
c
21 + 1
<= c
22
by E51, NAT_1:38;
then E53:
(((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6)))) + (c21 + 1) = ((c1 . c4) - (c1 . c3)) + 1
by E36, E38, E41, Th25;
per cases
not ( not ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) > 0 & not ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) <= 0 )
;
suppose E54:
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) > 0
;
E55: c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) =
abs (((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))))
by E43
.=
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6)))
by E47, E54, ABSVALUE:def 1
.=
c
22 - (c21 + 1)
by E53
.=
(c22 - c21) - 1
;
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . c21) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) = c
22 - c
21
by E50;
hence
c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) < c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c21)
by E49, E55, XREAL_1:148;
end;
suppose E54:
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) <= 0
;
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),((c1 +* (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(((c1 . c4) - (c1 . c3)) + 1)) +* c2,(c1 . c3))) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) = c
22 - (c21 + 1)
by E53;
then E55:
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) = 0
by E47, E52, E54, XREAL_1:50;
c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) =
abs (((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))))
by E43
.=
0
by E55, ABSVALUE:def 1
;
hence
c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) < c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c21)
by E45, E48, E49, SCMFSA6A:38;
end;
end;
end;
hence
not ( not c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (c21 + 1)) < c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c21) & not
((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . c21) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) <= 0 )
;
end;
thus
WithVariantWhile>0 1
-stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6)),
(c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0)),
IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c
1
proof
take
c
20
;
:: according to SCMFSA9A:def 5
thus
for b
1 being
Element of
NAT holds
not ( not c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . (b1 + 1)) < c
20 . ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . b1) & 0
< ((StepWhile>0 (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),((c6 ';' (AddTo c2,(intloc 0))) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))),(IExec (((((1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) := c4) ';' (SubFrom (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),c3)) ';' (AddTo (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))),(intloc 0))) ';' (c2 := c3)),c1)) . b1) . (1 -stRWNotIn ({c2,c3,c4} \/ (UsedIntLoc c6))) )
by E44;
end;
end;
theorem Th31: :: SFMASTR3:31
for b
1 being
State of
SCM+FSA for b
2 being
read-write Int-Location for b
3, b
4 being
Int-Location for b
5 being
good Macro-Instructionfor b
6 being
Nat holds
( b
1 . (intloc 0) = 1 & b
6 = ((b1 . b3) - (b1 . b4)) + 1 & (
ProperForUpBody b
2,b
4,b
3,b
5,b
1 or b
5 is
parahalting ) implies
(IExec (for-up b2,b4,b3,b5),b1) | (Int-Locations \/ FinSeq-Locations ) = ((StepForUp b2,b4,b3,b5,b1) . b6) | (Int-Locations \/ FinSeq-Locations ) )
theorem Th32: :: SFMASTR3:32
for b
1 being
State of
SCM+FSA for b
2 being
read-write Int-Location for b
3, b
4 being
Int-Location for b
5 being
good Macro-Instruction holds
( b
1 . (intloc 0) = 1 & (
ProperForUpBody b
2,b
3,b
4,b
5,b
1 or b
5 is
parahalting ) implies (
for-up b
2,b
3,b
4,b
5 is_closed_on b
1 &
for-up b
2,b
3,b
4,b
5 is_halting_on b
1 ) )
definition
let c
1, c
2, c
3 be
Int-Location ;
let c
4 be
FinSeq-Location ;
set c
5 = 1
-stRWNotIn {c1,c2,c3};
set c
6 = 2
-ndRWNotIn {c1,c2,c3};
set c
7 = 3
-rdRWNotIn {c1,c2,c3};
func FinSeqMin c
4,c
1,c
2,c
3 -> Macro-Instruction equals :: SFMASTR3:def 9
(a3 := a1) ';' (for-up (3 -rdRWNotIn {a1,a2,a3}),a1,a2,((((1 -stRWNotIn {a1,a2,a3}) := a4,(3 -rdRWNotIn {a1,a2,a3})) ';' ((2 -ndRWNotIn {a1,a2,a3}) := a4,a3)) ';' (if>0 (2 -ndRWNotIn {a1,a2,a3}),(1 -stRWNotIn {a1,a2,a3}),(Macro (a3 := (3 -rdRWNotIn {a1,a2,a3}))),SCM+FSA-Stop )));
coherence
(c3 := c1) ';' (for-up (3 -rdRWNotIn {c1,c2,c3}),c1,c2,((((1 -stRWNotIn {c1,c2,c3}) := c4,(3 -rdRWNotIn {c1,c2,c3})) ';' ((2 -ndRWNotIn {c1,c2,c3}) := c4,c3)) ';' (if>0 (2 -ndRWNotIn {c1,c2,c3}),(1 -stRWNotIn {c1,c2,c3}),(Macro (c3 := (3 -rdRWNotIn {c1,c2,c3}))),SCM+FSA-Stop ))) is Macro-Instruction
;
end;
:: deftheorem Def9 defines FinSeqMin SFMASTR3:def 9 :
for b
1, b
2, b
3 being
Int-Location for b
4 being
FinSeq-Location holds
FinSeqMin b
4,b
1,b
2,b
3 = (b3 := b1) ';' (for-up (3 -rdRWNotIn {b1,b2,b3}),b1,b2,((((1 -stRWNotIn {b1,b2,b3}) := b4,(3 -rdRWNotIn {b1,b2,b3})) ';' ((2 -ndRWNotIn {b1,b2,b3}) := b4,b3)) ';' (if>0 (2 -ndRWNotIn {b1,b2,b3}),(1 -stRWNotIn {b1,b2,b3}),(Macro (b3 := (3 -rdRWNotIn {b1,b2,b3}))),SCM+FSA-Stop )));
theorem Th33: :: SFMASTR3:33
theorem Th34: :: SFMASTR3:34
theorem Th35: :: SFMASTR3:35
theorem Th36: :: SFMASTR3:36
for b
1 being
State of
SCM+FSA for b
2 being
read-write Int-Location for b
3, b
4 being
Int-Location for b
5 being
FinSeq-Location holds
( b
3 <> b
2 & b
4 <> b
2 & b
1 . (intloc 0) = 1 implies (
(IExec (FinSeqMin b5,b3,b4,b2),b1) . b
5 = b
1 . b
5 &
(IExec (FinSeqMin b5,b3,b4,b2),b1) . b
3 = b
1 . b
3 &
(IExec (FinSeqMin b5,b3,b4,b2),b1) . b
4 = b
1 . b
4 ) )
theorem Th37: :: SFMASTR3:37
definition
let c
1 be
FinSeq-Location ;
let c
2, c
3 be
Int-Location ;
set c
4 = 1
-stRWNotIn {c2,c3};
set c
5 = 2
-ndRWNotIn {c2,c3};
func swap c
1,c
2,c
3 -> Macro-Instruction equals :: SFMASTR3:def 10
((((1 -stRWNotIn {a2,a3}) := a1,a2) ';' ((2 -ndRWNotIn {a2,a3}) := a1,a3)) ';' (a1,a2 := (2 -ndRWNotIn {a2,a3}))) ';' (a1,a3 := (1 -stRWNotIn {a2,a3}));
coherence
((((1 -stRWNotIn {c2,c3}) := c1,c2) ';' ((2 -ndRWNotIn {c2,c3}) := c1,c3)) ';' (c1,c2 := (2 -ndRWNotIn {c2,c3}))) ';' (c1,c3 := (1 -stRWNotIn {c2,c3})) is Macro-Instruction
;
end;
:: deftheorem Def10 defines swap SFMASTR3:def 10 :
for b
1 being
FinSeq-Location for b
2, b
3 being
Int-Location holds
swap b
1,b
2,b
3 = ((((1 -stRWNotIn {b2,b3}) := b1,b2) ';' ((2 -ndRWNotIn {b2,b3}) := b1,b3)) ';' (b1,b2 := (2 -ndRWNotIn {b2,b3}))) ';' (b1,b3 := (1 -stRWNotIn {b2,b3}));
theorem Th38: :: SFMASTR3:38
theorem Th39: :: SFMASTR3:39
theorem Th40: :: SFMASTR3:40
theorem Th41: :: SFMASTR3:41
theorem Th42: :: SFMASTR3:42
definition
let c
1 be
FinSeq-Location ;
set c
2 = 1
-stRWNotIn ({} Int-Locations );
set c
3 = 2
-ndRWNotIn ({} Int-Locations );
func Selection-sort c
1 -> Macro-Instruction equals :: SFMASTR3:def 11
((1 -stNotUsed (swap a1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations )))) :=len a1) ';' (for-up (1 -stRWNotIn ({} Int-Locations )),(intloc 0),(1 -stNotUsed (swap a1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations )))),((FinSeqMin a1,(1 -stRWNotIn ({} Int-Locations )),(1 -stNotUsed (swap a1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations )))),(2 -ndRWNotIn ({} Int-Locations ))) ';' (swap a1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations )))));
coherence
((1 -stNotUsed (swap c1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations )))) :=len c1) ';' (for-up (1 -stRWNotIn ({} Int-Locations )),(intloc 0),(1 -stNotUsed (swap c1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations )))),((FinSeqMin c1,(1 -stRWNotIn ({} Int-Locations )),(1 -stNotUsed (swap c1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations )))),(2 -ndRWNotIn ({} Int-Locations ))) ';' (swap c1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations ))))) is Macro-Instruction
;
end;
:: deftheorem Def11 defines Selection-sort SFMASTR3:def 11 :
for b
1 being
FinSeq-Location holds
Selection-sort b
1 = ((1 -stNotUsed (swap b1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations )))) :=len b1) ';' (for-up (1 -stRWNotIn ({} Int-Locations )),(intloc 0),(1 -stNotUsed (swap b1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations )))),((FinSeqMin b1,(1 -stRWNotIn ({} Int-Locations )),(1 -stNotUsed (swap b1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations )))),(2 -ndRWNotIn ({} Int-Locations ))) ';' (swap b1,(1 -stRWNotIn ({} Int-Locations )),(2 -ndRWNotIn ({} Int-Locations )))));
theorem Th43: :: SFMASTR3:43