let s be State of SCM+FSA ; for c0 being Element of NAT st IC s = c0 holds
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 + 1) = 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 c0 be Element of NAT ; ( IC s = c0 implies 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 + 1) = 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 )
assume A1:
IC s = c0
; 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 + 1) = 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 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 + 1) = 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 + 1) = 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 + 1) = s . (c0 + c)
; for i being Element of NAT st i <= len (aSeq a,k) holds
IC (Comput (ProgramPart s),s,i) = c0 + i
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, FINSEQ_1:35
.=
1
+ (len (k1 |-> (AddTo a,(intloc 0 ))))
by FINSEQ_1:56
.=
k9
by A4, FINSEQ_1:def 18
;
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 A8:
1
< i
and A9:
i <= k9
;
(aSeq a,k9) . i = AddTo a,(intloc 0 )A10:
1
<= i - 1
by A8, INT_1:79;
then reconsider i1 =
i - 1 as
Element of
NAT by INT_1:16;
i - 1
<= k9 - 1
by A9, XREAL_1:11;
then A11:
i1 in Seg k1
by A4, A10;
len <*(a := (intloc 0 ))*> = 1
by FINSEQ_1:56;
hence (aSeq a,k9) . i =
(k1 |-> (AddTo a,(intloc 0 ))) . (i - 1)
by A5, A6, A8, A9, FINSEQ_1:37
.=
AddTo a,
(intloc 0 )
by A11, FUNCOP_1:13
;
verum end;
A12:
now let i be
Element of
NAT ;
( 0 < i & i < k9 implies s . (c0 + i) = AddTo a,(intloc 0 ) )assume that A13:
0 < i
and A14:
i < k9
;
s . (c0 + i) = AddTo a,(intloc 0 )A15:
(
0 + 1
< i + 1 &
i + 1
<= k9 )
by A13, A14, NAT_1:13, XREAL_1:8;
thus s . (c0 + i) =
(aSeq a,k9) . (i + 1)
by A2, A6, A14
.=
AddTo a,
(intloc 0 )
by A7, A15
;
verum end;
A16:
s . (c0 + 0 ) =
(aSeq a,k9) . (0 + 1)
by A2, A3, A6
.=
a := (intloc 0 )
by A5, FINSEQ_1:58
;
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 ) )Y:
(ProgramPart (Comput (ProgramPart s),s,n)) /. (IC (Comput (ProgramPart s),s,n)) = (Comput (ProgramPart s),s,n) . (IC (Comput (ProgramPart s),s,n))
by COMPOS_1:38;
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 AMI_1:13;
( 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 A19:
CurInstr (ProgramPart (Comput (ProgramPart s),s,n)),
(Comput (ProgramPart s),s,n) = a := (intloc 0 )
by A1, A16, Y, COMPOS_1:def 10;
Comput (ProgramPart s),s,(n + 1) = Exec (a := (intloc 0 )),sthus Comput (ProgramPart s),
s,
(n + 1) =
Following (ProgramPart s),
(Comput (ProgramPart s),s,n)
by AMI_1:14
.=
Exec (a := (intloc 0 )),
s
by A18, A19, AMI_1:def 18
;
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;
Y:
(ProgramPart (Comput (ProgramPart s),s,n)) /. (IC (Comput (ProgramPart s),s,n)) = (Comput (ProgramPart s),s,n) . (IC (Comput (ProgramPart s),s,n))
by COMPOS_1:38;
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, Y, COMPOS_1:def 10, XXREAL_0:2
.=
s . (c0 + n)
by AMI_1:54
.=
AddTo a,
(intloc 0 )
by A12, A24, A25
;
T:
ProgramPart s = ProgramPart (Comput (ProgramPart s),s,n)
by AMI_1:123;
A28:
Comput (ProgramPart s),
s,
(n + 1) =
Following (ProgramPart s),
(Comput (ProgramPart s),s,n)
by AMI_1:14
.=
Exec (AddTo a,(intloc 0 )),
(Comput (ProgramPart s),s,n)
by A27, T, AMI_1:def 18
;
thus IC (Comput (ProgramPart s),s,(n + 1)) =
(Comput (ProgramPart s),s,(n + 1)) . (IC SCM+FSA )
by COMPOS_1:def 9
.=
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, AMI_1:13;
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, FINSEQ_1:35
.=
1
+ (len (k1 |-> (SubFrom a,(intloc 0 ))))
by FINSEQ_1:56
.=
(mk + 1) + 1
by A32, FINSEQ_1:def 18
;
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 A36:
1
< i
and A37:
i <= (mk + 1) + 1
;
(aSeq a,k) . i = SubFrom a,(intloc 0 )A38:
i - 1
<= ((mk + 1) + 1) - 1
by A37, XREAL_1:11;
A39:
1
- 1
< i - 1
by A36, XREAL_1:11;
then reconsider i1 =
i - 1 as
Element of
NAT by INT_1:16;
(1 - 1) + 1
<= i - 1
by A39, INT_1:20;
then A40:
i1 in Seg k1
by A32, A38;
len <*(a := (intloc 0 ))*> = 1
by FINSEQ_1:56;
hence (aSeq a,k) . i =
(k1 |-> (SubFrom a,(intloc 0 ))) . (i - 1)
by A33, A34, A36, A37, FINSEQ_1:37
.=
SubFrom a,
(intloc 0 )
by A40, FUNCOP_1:13
;
verum end;
A41:
now let i be
Element of
NAT ;
( 0 < i & i < (mk + 1) + 1 implies s . (c0 + i) = SubFrom a,(intloc 0 ) )assume that A42:
0 < i
and A43:
i < (mk + 1) + 1
;
s . (c0 + i) = SubFrom a,(intloc 0 )A44:
(
0 + 1
< i + 1 &
i + 1
<= (mk + 1) + 1 )
by A42, A43, NAT_1:13, XREAL_1:8;
thus s . (c0 + i) =
(aSeq a,k) . (i + 1)
by A2, A34, A43
.=
SubFrom a,
(intloc 0 )
by A35, A44
;
verum end;
A45:
s . (c0 + 0 ) =
(aSeq a,k) . (0 + 1)
by A2, A34
.=
a := (intloc 0 )
by A33, FINSEQ_1:58
;
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 ) )
Y:
(ProgramPart (Comput (ProgramPart s),s,n)) /. (IC (Comput (ProgramPart s),s,n)) = (Comput (ProgramPart s),s,n) . (IC (Comput (ProgramPart s),s,n))
by COMPOS_1:38;
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 AMI_1:13;
( 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 A48:
CurInstr (ProgramPart (Comput (ProgramPart s),s,n)),
(Comput (ProgramPart s),s,n) = a := (intloc 0 )
by A1, A45, Y, COMPOS_1:def 10;
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 AMI_1:14
.=
Exec (a := (intloc 0 )),
s
by A47, A48, AMI_1:def 18
;
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;
Y:
(ProgramPart (Comput (ProgramPart s),s,n)) /. (IC (Comput (ProgramPart s),s,n)) = (Comput (ProgramPart s),s,n) . (IC (Comput (ProgramPart s),s,n))
by COMPOS_1:38;
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, Y, COMPOS_1:def 10, XXREAL_0:2
.=
s . (c0 + n)
by AMI_1:54
.=
SubFrom a,
(intloc 0 )
by A41, A53, A54
;
T:
ProgramPart s = ProgramPart (Comput (ProgramPart s),s,n)
by AMI_1:123;
A57:
Comput (ProgramPart s),
s,
(n + 1) =
Following (ProgramPart s),
(Comput (ProgramPart s),s,n)
by AMI_1:14
.=
Exec (SubFrom a,(intloc 0 )),
(Comput (ProgramPart s),s,n)
by A56, T, AMI_1:def 18
;
thus IC (Comput (ProgramPart s),s,(n + 1)) =
(Comput (ProgramPart s),s,(n + 1)) . (IC SCM+FSA )
by COMPOS_1:def 9
.=
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, AMI_1:13;
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;