:: The Construction and Computation of For-loop Programs for SCMPDS
:: by JingChao Chen and Piotr Rudnicki
::
:: Received December 27, 1999
:: Copyright (c) 1999 Association of Mizar Users
set A = NAT ;
set D = SCM-Data-Loc ;
theorem Th1: :: SCMPDS_7:1
theorem :: SCMPDS_7:2
canceled;
theorem :: SCMPDS_7:3
canceled;
theorem Th4: :: SCMPDS_7:4
theorem Th5: :: SCMPDS_7:5
theorem Th6: :: SCMPDS_7:6
theorem Th7: :: SCMPDS_7:7
theorem Th8: :: SCMPDS_7:8
theorem :: SCMPDS_7:9
theorem Th10: :: SCMPDS_7:10
theorem :: SCMPDS_7:11
theorem Th12: :: SCMPDS_7:12
theorem :: SCMPDS_7:13
canceled;
theorem :: SCMPDS_7:14
theorem Th15: :: SCMPDS_7:15
theorem Th16: :: SCMPDS_7:16
theorem Th17: :: SCMPDS_7:17
theorem Th18: :: SCMPDS_7:18
theorem Th19: :: SCMPDS_7:19
theorem :: SCMPDS_7:20
theorem :: SCMPDS_7:21
theorem :: SCMPDS_7:22
theorem Th23: :: SCMPDS_7:23
theorem Th24: :: SCMPDS_7:24
theorem Th25: :: SCMPDS_7:25
theorem Th26: :: SCMPDS_7:26
theorem :: SCMPDS_7:27
theorem Th28: :: SCMPDS_7:28
theorem Th29: :: SCMPDS_7:29
theorem :: SCMPDS_7:30
theorem Th31: :: SCMPDS_7:31
theorem :: SCMPDS_7:32
theorem Th33: :: SCMPDS_7:33
theorem Th34: :: SCMPDS_7:34
theorem Th35: :: SCMPDS_7:35
theorem Th36: :: SCMPDS_7:36
theorem Th37: :: SCMPDS_7:37
theorem Th38: :: SCMPDS_7:38
theorem Th39: :: SCMPDS_7:39
theorem Th40: :: SCMPDS_7:40
theorem Th41: :: SCMPDS_7:41
theorem Th42: :: SCMPDS_7:42
theorem Th43: :: SCMPDS_7:43
theorem Th44: :: SCMPDS_7:44
theorem :: SCMPDS_7:45
theorem Th46: :: SCMPDS_7:46
Lm1:
for I being No-StopCode Program of SCMPDS
for J being shiftable Program of SCMPDS
for s, s1, s2 being State of SCMPDS st I is_closed_on s & I is_halting_on s & J is_closed_on IExec I,s & J is_halting_on IExec I,s & s2 = s +* (Initialized (stop (I ';' J))) & s1 = s +* (Initialized (stop I)) holds
( IC (Computation s2,(LifeSpan s1)) = inspos (card I) & DataPart (Computation s2,(LifeSpan s1)) = DataPart ((Computation s1,(LifeSpan s1)) +* (Initialized (stop J))) & Shift (stop J),(card I) c= Computation s2,(LifeSpan s1) & LifeSpan s2 = (LifeSpan s1) + (LifeSpan ((Result s1) +* (Initialized (stop J)))) )
theorem :: SCMPDS_7:47
theorem Th48: :: SCMPDS_7:48
theorem Th49: :: SCMPDS_7:49
theorem Th50: :: SCMPDS_7:50
:: deftheorem defines for-up SCMPDS_7:def 1 :
theorem Th51: :: SCMPDS_7:51
Lm2:
for a being Int_position
for i being Integer
for n being Element of NAT
for I being Program of SCMPDS holds card (stop (for-up a,i,n,I)) = (card I) + 4
theorem Th52: :: SCMPDS_7:52
theorem Th53: :: SCMPDS_7:53
for
a being
Int_position for
i being
Integer for
n being
Element of
NAT for
I being
Program of
SCMPDS holds
(
(for-up a,i,n,I) . (inspos 0 ) = a,
i >=0_goto ((card I) + 3) &
(for-up a,i,n,I) . (inspos ((card I) + 1)) = AddTo a,
i,
n &
(for-up a,i,n,I) . (inspos ((card I) + 2)) = goto (- ((card I) + 2)) )
theorem Th54: :: SCMPDS_7:54
theorem Th55: :: SCMPDS_7:55
theorem :: SCMPDS_7:56
theorem :: SCMPDS_7:57
Lm3:
for I being Program of SCMPDS
for a being Int_position
for i being Integer
for n being Element of NAT holds Shift I,1 c= for-up a,i,n,I
theorem Th58: :: SCMPDS_7:58
for
s being
State of
SCMPDS for
I being
shiftable No-StopCode Program of
SCMPDS for
a being
Int_position for
i being
Integer for
n being
Element of
NAT for
X being
set st
s . (DataLoc (s . a),i) < 0 & not
DataLoc (s . a),
i in X &
n > 0 &
card I > 0 &
a <> DataLoc (s . a),
i & ( for
t being
State of
SCMPDS st ( for
x being
Int_position st
x in X holds
t . x = s . x ) &
t . a = s . a holds
(
(IExec I,t) . a = t . a &
(IExec I,t) . (DataLoc (s . a),i) = t . (DataLoc (s . a),i) &
I is_closed_on t &
I is_halting_on t & ( for
y being
Int_position st
y in X holds
(IExec I,t) . y = t . y ) ) ) holds
(
for-up a,
i,
n,
I is_closed_on s &
for-up a,
i,
n,
I is_halting_on s )
theorem :: SCMPDS_7:59
for
s being
State of
SCMPDS for
I being
shiftable No-StopCode Program of
SCMPDS for
a being
Int_position for
i being
Integer for
n being
Element of
NAT for
X being
set st
s . (DataLoc (s . a),i) < 0 & not
DataLoc (s . a),
i in X &
n > 0 &
card I > 0 &
a <> DataLoc (s . a),
i & ( for
t being
State of
SCMPDS st ( for
x being
Int_position st
x in X holds
t . x = s . x ) &
t . a = s . a holds
(
(IExec I,t) . a = t . a &
(IExec I,t) . (DataLoc (s . a),i) = t . (DataLoc (s . a),i) &
I is_closed_on t &
I is_halting_on t & ( for
y being
Int_position st
y in X holds
(IExec I,t) . y = t . y ) ) ) holds
IExec (for-up a,i,n,I),
s = IExec (for-up a,i,n,I),
(IExec (I ';' (AddTo a,i,n)),s)
:: deftheorem defines for-down SCMPDS_7:def 2 :
theorem Th60: :: SCMPDS_7:60
Lm4:
for a being Int_position
for i being Integer
for n being Element of NAT
for I being Program of SCMPDS holds card (stop (for-down a,i,n,I)) = (card I) + 4
theorem Th61: :: SCMPDS_7:61
theorem Th62: :: SCMPDS_7:62
for
a being
Int_position for
i being
Integer for
n being
Element of
NAT for
I being
Program of
SCMPDS holds
(
(for-down a,i,n,I) . (inspos 0 ) = a,
i <=0_goto ((card I) + 3) &
(for-down a,i,n,I) . (inspos ((card I) + 1)) = AddTo a,
i,
(- n) &
(for-down a,i,n,I) . (inspos ((card I) + 2)) = goto (- ((card I) + 2)) )
theorem Th63: :: SCMPDS_7:63
theorem Th64: :: SCMPDS_7:64
theorem :: SCMPDS_7:65
theorem Th66: :: SCMPDS_7:66
Lm5:
for I being Program of SCMPDS
for a being Int_position
for i being Integer
for n being Element of NAT holds Shift I,1 c= for-down a,i,n,I
theorem Th67: :: SCMPDS_7:67
for
s being
State of
SCMPDS for
I being
shiftable No-StopCode Program of
SCMPDS for
a being
Int_position for
i being
Integer for
n being
Element of
NAT for
X being
set st
s . (DataLoc (s . a),i) > 0 & not
DataLoc (s . a),
i in X &
n > 0 &
card I > 0 &
a <> DataLoc (s . a),
i & ( for
t being
State of
SCMPDS st ( for
x being
Int_position st
x in X holds
t . x = s . x ) &
t . a = s . a holds
(
(IExec I,t) . a = t . a &
(IExec I,t) . (DataLoc (s . a),i) = t . (DataLoc (s . a),i) &
I is_closed_on t &
I is_halting_on t & ( for
y being
Int_position st
y in X holds
(IExec I,t) . y = t . y ) ) ) holds
(
for-down a,
i,
n,
I is_closed_on s &
for-down a,
i,
n,
I is_halting_on s )
theorem Th68: :: SCMPDS_7:68
for
s being
State of
SCMPDS for
I being
shiftable No-StopCode Program of
SCMPDS for
a being
Int_position for
i being
Integer for
n being
Element of
NAT for
X being
set st
s . (DataLoc (s . a),i) > 0 & not
DataLoc (s . a),
i in X &
n > 0 &
card I > 0 &
a <> DataLoc (s . a),
i & ( for
t being
State of
SCMPDS st ( for
x being
Int_position st
x in X holds
t . x = s . x ) &
t . a = s . a holds
(
(IExec I,t) . a = t . a &
(IExec I,t) . (DataLoc (s . a),i) = t . (DataLoc (s . a),i) &
I is_closed_on t &
I is_halting_on t & ( for
y being
Int_position st
y in X holds
(IExec I,t) . y = t . y ) ) ) holds
IExec (for-down a,i,n,I),
s = IExec (for-down a,i,n,I),
(IExec (I ';' (AddTo a,i,(- n))),s)
definition
let n be
Element of
NAT ;
func sum n -> Program of
SCMPDS equals :: SCMPDS_7:def 3
(((GBP := 0 ) ';' (GBP ,2 := n)) ';' (GBP ,3 := 0 )) ';' (for-down GBP ,2,1,(Load (AddTo GBP ,3,1)));
coherence
(((GBP := 0 ) ';' (GBP ,2 := n)) ';' (GBP ,3 := 0 )) ';' (for-down GBP ,2,1,(Load (AddTo GBP ,3,1))) is Program of SCMPDS
;
end;
:: deftheorem defines sum SCMPDS_7:def 3 :
theorem Th69: :: SCMPDS_7:69
for
s being
State of
SCMPDS st
s . GBP = 0 holds
(
for-down GBP ,2,1,
(Load (AddTo GBP ,3,1)) is_closed_on s &
for-down GBP ,2,1,
(Load (AddTo GBP ,3,1)) is_halting_on s )
theorem Th70: :: SCMPDS_7:70
theorem :: SCMPDS_7:71
definition
let sp,
control,
result,
pp,
pData be
Element of
NAT ;
func sum sp,
control,
result,
pp,
pData -> Program of
SCMPDS equals :: SCMPDS_7:def 4
(((intpos sp),result := 0 ) ';' ((intpos pp) := pData)) ';' (for-down (intpos sp),control,1,((AddTo (intpos sp),result,(intpos pData),0 ) ';' (AddTo (intpos pp),0 ,1)));
coherence
(((intpos sp),result := 0 ) ';' ((intpos pp) := pData)) ';' (for-down (intpos sp),control,1,((AddTo (intpos sp),result,(intpos pData),0 ) ';' (AddTo (intpos pp),0 ,1))) is Program of SCMPDS
;
end;
:: deftheorem defines sum SCMPDS_7:def 4 :
for
sp,
control,
result,
pp,
pData being
Element of
NAT holds
sum sp,
control,
result,
pp,
pData = (((intpos sp),result := 0 ) ';' ((intpos pp) := pData)) ';' (for-down (intpos sp),control,1,((AddTo (intpos sp),result,(intpos pData),0 ) ';' (AddTo (intpos pp),0 ,1)));
theorem Th72: :: SCMPDS_7:72
for
s being
State of
SCMPDS for
sp,
cv,
result,
pp,
pD being
Element of
NAT st
s . (intpos sp) > sp &
cv < result &
s . (intpos pp) = pD &
(s . (intpos sp)) + result < pp &
pp < pD &
pD < s . (intpos pD) holds
(
for-down (intpos sp),
cv,1,
((AddTo (intpos sp),result,(intpos pD),0 ) ';' (AddTo (intpos pp),0 ,1)) is_closed_on s &
for-down (intpos sp),
cv,1,
((AddTo (intpos sp),result,(intpos pD),0 ) ';' (AddTo (intpos pp),0 ,1)) is_halting_on s )
theorem Th73: :: SCMPDS_7:73
for
s being
State of
SCMPDS for
sp,
cv,
result,
pp,
pD being
Element of
NAT for
f being
FinSequence of
NAT st
s . (intpos sp) > sp &
cv < result &
s . (intpos pp) = pD &
(s . (intpos sp)) + result < pp &
pp < pD &
pD < s . (intpos pD) &
s . (DataLoc (s . (intpos sp)),result) = 0 &
len f = s . (DataLoc (s . (intpos sp)),cv) & ( for
k being
Element of
NAT st
k < len f holds
f . (k + 1) = s . (DataLoc (s . (intpos pD)),k) ) holds
(IExec (for-down (intpos sp),cv,1,((AddTo (intpos sp),result,(intpos pD),0 ) ';' (AddTo (intpos pp),0 ,1))),s) . (DataLoc (s . (intpos sp)),result) = Sum f
theorem :: SCMPDS_7:74
for
s being
State of
SCMPDS for
sp,
cv,
result,
pp,
pD being
Element of
NAT for
f being
FinSequence of
NAT st
s . (intpos sp) > sp &
cv < result &
(s . (intpos sp)) + result < pp &
pp < pD &
pD < s . (intpos pD) &
len f = s . (DataLoc (s . (intpos sp)),cv) & ( for
k being
Element of
NAT st
k < len f holds
f . (k + 1) = s . (DataLoc (s . (intpos pD)),k) ) holds
(IExec (sum sp,cv,result,pp,pD),s) . (DataLoc (s . (intpos sp)),result) = Sum f