let c0 be Element of NAT ; for s being c0 -started State of SCM+FSA
for a being Int-Location
for k being Integer st ( for c being Element of NAT st c < len (aSeq (a,k)) holds
(aSeq (a,k)) . c = s . (c0 + c) ) holds
for i being Element of NAT st i <= len (aSeq (a,k)) holds
IC (Comput ((ProgramPart s),s,i)) = c0 + i
let s be c0 -started State of SCM+FSA; for a being Int-Location
for k being Integer st ( for c being Element of NAT st c < len (aSeq (a,k)) holds
(aSeq (a,k)) . c = s . (c0 + c) ) holds
for i being Element of NAT st i <= len (aSeq (a,k)) holds
IC (Comput ((ProgramPart s),s,i)) = c0 + i
A1:
IC s = c0
by COMPOS_1:def 20;
let a be Int-Location ; for k being Integer st ( for c being Element of NAT st c < len (aSeq (a,k)) holds
(aSeq (a,k)) . c = s . (c0 + c) ) holds
for i being Element of NAT st i <= len (aSeq (a,k)) holds
IC (Comput ((ProgramPart s),s,i)) = c0 + i
let k be Integer; ( ( for c being Element of NAT st c < len (aSeq (a,k)) holds
(aSeq (a,k)) . c = s . (c0 + c) ) implies for i being Element of NAT st i <= len (aSeq (a,k)) holds
IC (Comput ((ProgramPart s),s,i)) = c0 + i )
assume A2:
for c being Element of NAT st c < len (aSeq (a,k)) holds
(aSeq (a,k)) . c = s . (c0 + c)
; for i being Element of NAT st i <= len (aSeq (a,k)) holds
IC (Comput ((ProgramPart s),s,i)) = c0 + i
S4:
for c being Element of NAT st c in dom (aSeq (a,k)) holds
(aSeq (a,k)) . c = s . (c0 + c)
per cases
( k > 0 or k <= 0 )
;
suppose A3:
k > 0
;
for i being Element of NAT st i <= len (aSeq (a,k)) holds
IC (Comput ((ProgramPart s),s,i)) = c0 + ithen reconsider k9 =
k as
Element of
NAT by INT_1:16;
consider k1 being
Element of
NAT such that A4:
k1 + 1
= k9
and A5:
aSeq (
a,
k9)
= <%(a := (intloc 0))%> ^ (k1 --> (AddTo (a,(intloc 0))))
by A3, SCMFSA_7:def 3;
defpred S1[
Nat]
means ( $1
<= k9 implies
IC (Comput ((ProgramPart s),s,$1)) = c0 + $1 );
A6:
len (aSeq (a,k9)) =
(len <%(a := (intloc 0))%>) + (len (k1 --> (AddTo (a,(intloc 0)))))
by A5, AFINSQ_1:20
.=
1
+ (len (k1 --> (AddTo (a,(intloc 0)))))
by AFINSQ_1:38
.=
k9
by A4, CARD_1:106
;
for
i being
Element of
NAT st
i <= len (aSeq (a,k9)) holds
IC (Comput ((ProgramPart s),s,i)) = c0 + i
proof
A7:
now let i be
Element of
NAT ;
( 1 <= i & i < k9 implies (aSeq (a,k9)) . i = AddTo (a,(intloc 0)) )assume that A17:
1
<= i
and A18:
i < k9
;
(aSeq (a,k9)) . i = AddTo (a,(intloc 0))reconsider i1 =
i - 1 as
Element of
NAT by A17, INT_1:18;
i = i1 + 1
;
then
i1 < k1
by A18, A4, XREAL_1:8;
then A20:
i1 in k1
by NAT_1:45;
TT:
len (k1 --> (AddTo (a,(intloc 0)))) = k1
by CARD_1:106;
len <%(a := (intloc 0))%> = 1
by AFINSQ_1:36;
hence (aSeq (a,k9)) . i =
(k1 --> (AddTo (a,(intloc 0)))) . (i - 1)
by A17, A5, TT, A4, A18, AFINSQ_1:21
.=
AddTo (
a,
(intloc 0))
by A20, FUNCOP_1:13
;
verum end;
S10:
for
i being
Element of
NAT st
i < k9 holds
i in dom (aSeq (a,k9))
by A6, NAT_1:45;
A16:
s . (c0 + 0) =
(aSeq (a,k9)) . 0
by A2, A3, A6
.=
a := (intloc 0)
by A5, AFINSQ_1:39
;
A17:
now let n be
Element of
NAT ;
( n = 0 implies ( Comput ((ProgramPart s),s,n) = s & CurInstr ((ProgramPart (Comput ((ProgramPart s),s,n))),(Comput ((ProgramPart s),s,n))) = a := (intloc 0) & Comput ((ProgramPart s),s,(n + 1)) = Exec ((a := (intloc 0)),s) ) )assume
n = 0
;
( Comput ((ProgramPart s),s,n) = s & CurInstr ((ProgramPart (Comput ((ProgramPart s),s,n))),(Comput ((ProgramPart s),s,n))) = a := (intloc 0) & Comput ((ProgramPart s),s,(n + 1)) = Exec ((a := (intloc 0)),s) )hence A18:
Comput (
(ProgramPart s),
s,
n)
= s
by EXTPRO_1:3;
( CurInstr ((ProgramPart (Comput ((ProgramPart s),s,n))),(Comput ((ProgramPart s),s,n))) = a := (intloc 0) & Comput ((ProgramPart s),s,(n + 1)) = Exec ((a := (intloc 0)),s) )hence
CurInstr (
(ProgramPart (Comput ((ProgramPart s),s,n))),
(Comput ((ProgramPart s),s,n)))
= a := (intloc 0)
by A1, A16, COMPOS_1:38;
Comput ((ProgramPart s),s,(n + 1)) = Exec ((a := (intloc 0)),s)thus Comput (
(ProgramPart s),
s,
(n + 1)) =
Following (
(ProgramPart s),
(Comput ((ProgramPart s),s,n)))
by EXTPRO_1:4
.=
Exec (
(a := (intloc 0)),
s)
by A18, A1, A16, COMPOS_1:38
;
verum end;
A20:
for
n being
Element of
NAT st
S1[
n] holds
S1[
n + 1]
proof
let n be
Element of
NAT ;
( S1[n] implies S1[n + 1] )
assume A21:
S1[
n]
;
S1[n + 1]
assume A22:
n + 1
<= k9
;
IC (Comput ((ProgramPart s),s,(n + 1))) = c0 + (n + 1)
per cases
( n = 0 or n > 0 )
;
suppose A24:
n > 0
;
IC (Comput ((ProgramPart s),s,(n + 1))) = c0 + (n + 1)A25:
n < k9
by A22, NAT_1:13;
A26:
n + 0 <= n + 1
by XREAL_1:9;
then A27:
CurInstr (
(ProgramPart (Comput ((ProgramPart s),s,n))),
(Comput ((ProgramPart s),s,n))) =
(Comput ((ProgramPart s),s,n)) . (c0 + n)
by A21, A22, COMPOS_1:38, XXREAL_0:2
.=
s . (c0 + n)
by AMI_1:54
.=
AddTo (
a,
(intloc 0))
by A12, A24, A25
;
A28:
Comput (
(ProgramPart s),
s,
(n + 1)) =
Following (
(ProgramPart s),
(Comput ((ProgramPart s),s,n)))
by EXTPRO_1:4
.=
Exec (
(AddTo (a,(intloc 0))),
(Comput ((ProgramPart s),s,n)))
by A27, AMI_1:123
;
thus IC (Comput ((ProgramPart s),s,(n + 1))) =
succ (IC (Comput ((ProgramPart s),s,n)))
by A28, SCMFSA_2:90
.=
(c0 + n) + 1
by A21, A22, A26, NAT_1:39, XXREAL_0:2
.=
c0 + (n + 1)
;
verum end; end;
end;
let i be
Element of
NAT ;
( i <= len (aSeq (a,k9)) implies IC (Comput ((ProgramPart s),s,i)) = c0 + i )
assume A29:
i <= len (aSeq (a,k9))
;
IC (Comput ((ProgramPart s),s,i)) = c0 + i
A30:
S1[
0 ]
by A1, EXTPRO_1:3;
for
i being
Element of
NAT holds
S1[
i]
from NAT_1:sch 1(A30, A20);
hence
IC (Comput ((ProgramPart s),s,i)) = c0 + i
by A6, A29;
verum
end; hence
for
i being
Element of
NAT st
i <= len (aSeq (a,k)) holds
IC (Comput ((ProgramPart s),s,i)) = c0 + i
;
verum end; suppose A31:
k <= 0
;
for i being Element of NAT st i <= len (aSeq (a,k)) holds
IC (Comput ((ProgramPart s),s,i)) = c0 + ithen reconsider mk =
- k as
Element of
NAT by INT_1:16;
defpred S1[
Nat]
means ( $1
<= (mk + 1) + 1 implies
IC (Comput ((ProgramPart s),s,$1)) = c0 + $1 );
consider k1 being
Element of
NAT such that A32:
k1 + k = 1
and A33:
aSeq (
a,
k)
= <%(a := (intloc 0))%> ^ (k1 --> (SubFrom (a,(intloc 0))))
by A31, SCMFSA_7:def 3;
A34:
len (aSeq (a,k)) =
(len <%(a := (intloc 0))%>) + (len (k1 --> (SubFrom (a,(intloc 0)))))
by A33, AFINSQ_1:20
.=
1
+ (len (k1 --> (SubFrom (a,(intloc 0)))))
by AFINSQ_1:38
.=
(mk + 1) + 1
by A32, CARD_1:106
;
for
i being
Element of
NAT st
i <= len (aSeq (a,k)) holds
IC (Comput ((ProgramPart s),s,i)) = c0 + i
proof
A35:
now let i be
Element of
NAT ;
( 1 <= i & i < (mk + 1) + 1 implies (aSeq (a,k)) . i = SubFrom (a,(intloc 0)) )assume that A51:
1
<= i
and A52:
i < (mk + 1) + 1
;
(aSeq (a,k)) . i = SubFrom (a,(intloc 0))A53:
i - 1
< ((mk + 1) + 1) - 1
by A52, XREAL_1:11;
reconsider i1 =
i - 1 as
Element of
NAT by A51, INT_1:18;
A55:
i1 in k1
by A32, A53, NAT_1:45;
TT:
len (k1 --> (SubFrom (a,(intloc 0)))) = k1
by CARD_1:106;
len <%(a := (intloc 0))%> = 1
by AFINSQ_1:36;
hence (aSeq (a,k)) . i =
(k1 --> (SubFrom (a,(intloc 0)))) . (i - 1)
by A33, A51, TT, A32, A52, AFINSQ_1:21
.=
SubFrom (
a,
(intloc 0))
by A55, FUNCOP_1:13
;
verum end;
S44:
for
i being
Element of
NAT st
i < (mk + 1) + 1 holds
i in dom (aSeq (a,k))
by A34, NAT_1:45;
A45:
s . (c0 + 0) =
(aSeq (a,k)) . 0
by A2, A34
.=
a := (intloc 0)
by A33, AFINSQ_1:39
;
A46:
for
n being
Element of
NAT st
n = 0 holds
(
Comput (
(ProgramPart s),
s,
n)
= s &
CurInstr (
(ProgramPart (Comput ((ProgramPart s),s,n))),
(Comput ((ProgramPart s),s,n)))
= a := (intloc 0) &
Comput (
(ProgramPart s),
s,
(n + 1))
= Exec (
(a := (intloc 0)),
s) )
proof
let n be
Element of
NAT ;
( n = 0 implies ( Comput ((ProgramPart s),s,n) = s & CurInstr ((ProgramPart (Comput ((ProgramPart s),s,n))),(Comput ((ProgramPart s),s,n))) = a := (intloc 0) & Comput ((ProgramPart s),s,(n + 1)) = Exec ((a := (intloc 0)),s) ) )
assume
n = 0
;
( Comput ((ProgramPart s),s,n) = s & CurInstr ((ProgramPart (Comput ((ProgramPart s),s,n))),(Comput ((ProgramPart s),s,n))) = a := (intloc 0) & Comput ((ProgramPart s),s,(n + 1)) = Exec ((a := (intloc 0)),s) )
hence A47:
Comput (
(ProgramPart s),
s,
n)
= s
by EXTPRO_1:3;
( CurInstr ((ProgramPart (Comput ((ProgramPart s),s,n))),(Comput ((ProgramPart s),s,n))) = a := (intloc 0) & Comput ((ProgramPart s),s,(n + 1)) = Exec ((a := (intloc 0)),s) )
hence
CurInstr (
(ProgramPart (Comput ((ProgramPart s),s,n))),
(Comput ((ProgramPart s),s,n)))
= a := (intloc 0)
by A1, A45, COMPOS_1:38;
Comput ((ProgramPart s),s,(n + 1)) = Exec ((a := (intloc 0)),s)
thus Comput (
(ProgramPart s),
s,
(n + 1)) =
Following (
(ProgramPart s),
(Comput ((ProgramPart s),s,n)))
by EXTPRO_1:4
.=
Exec (
(a := (intloc 0)),
s)
by A47, A1, A45, COMPOS_1:38
;
verum
end;
A49:
for
n being
Element of
NAT st
S1[
n] holds
S1[
n + 1]
proof
let n be
Element of
NAT ;
( S1[n] implies S1[n + 1] )
assume A50:
S1[
n]
;
S1[n + 1]
assume A51:
n + 1
<= (mk + 1) + 1
;
IC (Comput ((ProgramPart s),s,(n + 1))) = c0 + (n + 1)
per cases
( n = 0 or n > 0 )
;
suppose A53:
n > 0
;
IC (Comput ((ProgramPart s),s,(n + 1))) = c0 + (n + 1)A54:
n < (mk + 1) + 1
by A51, NAT_1:13;
A55:
n + 0 <= n + 1
by XREAL_1:9;
then A56:
CurInstr (
(ProgramPart (Comput ((ProgramPart s),s,n))),
(Comput ((ProgramPart s),s,n))) =
(Comput ((ProgramPart s),s,n)) . (c0 + n)
by A50, A51, COMPOS_1:38, XXREAL_0:2
.=
s . (c0 + n)
by AMI_1:54
.=
SubFrom (
a,
(intloc 0))
by A41, A53, A54
;
A57:
Comput (
(ProgramPart s),
s,
(n + 1)) =
Following (
(ProgramPart s),
(Comput ((ProgramPart s),s,n)))
by EXTPRO_1:4
.=
Exec (
(SubFrom (a,(intloc 0))),
(Comput ((ProgramPart s),s,n)))
by A56, AMI_1:123
;
thus IC (Comput ((ProgramPart s),s,(n + 1))) =
succ (IC (Comput ((ProgramPart s),s,n)))
by A57, SCMFSA_2:91
.=
(c0 + n) + 1
by A50, A51, A55, NAT_1:39, XXREAL_0:2
.=
c0 + (n + 1)
;
verum end; end;
end;
let i be
Element of
NAT ;
( i <= len (aSeq (a,k)) implies IC (Comput ((ProgramPart s),s,i)) = c0 + i )
assume A58:
i <= len (aSeq (a,k))
;
IC (Comput ((ProgramPart s),s,i)) = c0 + i
A59:
S1[
0 ]
by A1, EXTPRO_1:3;
for
i being
Element of
NAT holds
S1[
i]
from NAT_1:sch 1(A59, A49);
hence
IC (Comput ((ProgramPart s),s,i)) = c0 + i
by A34, A58;
verum
end; hence
for
i being
Element of
NAT st
i <= len (aSeq (a,k)) holds
IC (Comput ((ProgramPart s),s,i)) = c0 + i
;
verum end; end;