resizable_array: make it polymorphic, additional invariant

parent c07f1a25
......@@ -5,50 +5,57 @@ module ResizableArrayImplem
use import int.MinMax
use array.Array as A
type elt
constant dummy: elt
type rarray = { mutable length: int; mutable data: A.array elt }
type rarray 'a =
{ dummy: 'a; mutable length: int; mutable data: A.array 'a }
invariant { 0 <= self.length <= A.length self.data }
invariant { forall i: int. self.length <= i < A.length self.data ->
A.get self.data i = self.dummy }
function ([]) (r: rarray) (i: int) : elt = A.get r.data i
function ([<-]) (r: rarray) (i: int) (v: elt) : rarray =
function ([]) (r: rarray 'a) (i: int) : 'a = A.get r.data i
function ([<-]) (r: rarray 'a) (i: int) (v: 'a) : rarray 'a =
{ r with data = A.set r.data i v }
function make (len: int) : rarray =
{ length = len; data = A.make len dummy }
function make (len: int) (dummy: 'a) : rarray 'a =
{ dummy = dummy; length = len; data = A.make len dummy }
let make (len: int)
requires { 0 <= len } ensures { result = make len }
= { length = len; data = A.make len dummy }
let make (len: int) (dummy: 'a) : rarray 'a
requires { 0 <= len } ensures { result = make len dummy }
=
{ dummy = dummy; length = len; data = A.make len dummy }
let ([]) (r: rarray) (i: int)
let ([]) (r: rarray 'a) (i: int) : 'a
requires { 0 <= i < r.length } ensures { result = r[i] }
= A.([]) r.data i
=
A.([]) r.data i
let ([]<-) (r: rarray) (i: int) (v: elt)
let ([]<-) (r: rarray 'a) (i: int) (v: 'a) : unit
requires { 0 <= i < r.length } ensures { r = (old r)[i <- v] }
= A.([]<-) r.data i v
=
A.([]<-) r.data i v
let resize (r: rarray) (len: int)
let resize (r: rarray 'a) (len: int) : unit
requires { 0 <= len }
ensures { r.length = len /\
forall i: int.
0 <= i < min (old r.length) len -> r[i] = (old r)[i] }
= let n = A.length r.data in
ensures { r.length = len }
ensures { forall i: int.
0 <= i < min (old r.length) len -> r[i] = (old r)[i] }
=
let n = A.length r.data in
if len > n then begin
let a = A.make (max len (2 * n)) dummy in
let a = A.make (max len (2 * n)) r.dummy in
A.blit r.data 0 a 0 n;
r.data <- a
end else begin
A.fill r.data len (n - len) r.dummy
end;
r.length <- len
let append (r1: rarray) (r2: rarray)
ensures { r1.length = old r1.length + r2.length /\
forall i: int. 0 <= i < r1.length ->
(i < old r1.length -> r1[i] = (old r1)[i]) /\
(old r1.length <= i -> r1[i] = r2[i - old r1.length]) }
= let n1 = length r1 in
let append (r1: rarray 'a) (r2: rarray 'a) : unit
ensures { r1.length = old r1.length + r2.length }
ensures { forall i: int. 0 <= i < r1.length ->
(i < old r1.length -> r1[i] = (old r1)[i]) /\
(old r1.length <= i -> r1[i] = r2[i - old r1.length]) }
=
let n1 = length r1 in
resize r1 (length r1 + length r2);
A.blit r2.data 0 r1.data n1 (length r2)
......@@ -81,11 +88,10 @@ end
module Test
use import int.Int
clone import ResizableArrayImplem
with type elt = int, constant dummy = Int.zero
use import ResizableArrayImplem
let test1 () =
let r = make 10 in
let r = make 10 0 in
assert { r.length = 10 };
r[0] <- 17;
resize r 7;
......@@ -93,9 +99,9 @@ module Test
assert { r.length = 7 }
let test2 () =
let r1 = make 10 in
let r1 = make 10 0 in
r1[0] <- 17;
let r2 = make 10 in
let r2 = make 10 0 in
r2[0] <- 42;
append r1 r2;
assert { r1.length = 20 };
......
......@@ -5,6 +5,10 @@
id="0"
name="Alt-Ergo"
version="0.94"/>
<prover
id="1"
name="Alt-Ergo"
version="0.95"/>
<file
name="../resizable_array.mlw"
verified="true"
......@@ -18,12 +22,12 @@
<goal
name="WP_parameter make"
locfile="../resizable_array.mlw"
loclnum="21" loccnumb="6" loccnume="10"
loclnum="20" loccnumb="6" loccnume="10"
expl="VC for make"
sum="796826f8e9ffb5c76f776ce1287d325c"
sum="5f0e573562e505c30c3a538c63edea05"
proved="true"
expanded="true"
shape="ainfix =amk rarrayV0amk arrayV0aconstadummyamakeV0Aainfix &lt;=V0V0Aainfix &lt;=c0V0Iainfix &lt;=c0V0Aainfix &gt;=V0c0Iainfix &lt;=c0V0F">
shape="ainfix =amk rarrayV1V0amk arrayV0aconstV1amakeV0V1Aainfix =agetaconstV1V2V1Iainfix &lt;V2V0Aainfix &lt;=V0V2FAainfix &lt;=V0V0Aainfix &lt;=c0V0Iainfix &lt;=c0V0Aainfix &gt;=V0c0Iainfix &lt;=c0V0F">
<label
name="expl:VC for make"/>
<proof
......@@ -40,10 +44,10 @@
locfile="../resizable_array.mlw"
loclnum="25" loccnumb="7" loccnume="9"
expl="VC for mixfix []"
sum="c7456e2986c5356e89e9357bb8ef869d"
sum="f943129a270dc5c2d18458811ad06e6c"
proved="true"
expanded="true"
shape="ainfix =agetV2V0agetV2V0Aainfix &lt;V0V1Aainfix &lt;=c0V0Iainfix &lt;V0V3Aainfix &lt;=c0V0Aainfix &lt;=c0V1Aainfix &lt;=V3V1Aainfix &lt;=c0V3FF">
shape="ainfix =agetV3V1agetV3V1Aainfix &lt;V1V2Aainfix &lt;=c0V1Iainfix &lt;V1V4Aainfix &lt;=c0V1Aainfix &lt;=c0V2Aainfix =agetV3V5V0Iainfix &lt;V5V2Aainfix &lt;=V4V5FAainfix &lt;=V4V2Aainfix &lt;=c0V4FF">
<label
name="expl:VC for mixfix []"/>
<proof
......@@ -58,12 +62,12 @@
<goal
name="WP_parameter mixfix []&lt;-"
locfile="../resizable_array.mlw"
loclnum="29" loccnumb="7" loccnume="11"
loclnum="30" loccnumb="7" loccnume="11"
expl="VC for mixfix []&lt;-"
sum="341494c1a51e093d5c696e2d85f8e2a1"
sum="9ebfe3049bcb1a3dc3a54d50b137249b"
proved="true"
expanded="true"
shape="ainfix =asetV3V0V1V5Aainfix &lt;=c0V2Aainfix &lt;=V4V2Aainfix &lt;=c0V4Iainfix =V5asetV3V0V1Aainfix &lt;=c0V2FAainfix &lt;V0V2Aainfix &lt;=c0V0Iainfix &lt;V0V4Aainfix &lt;=c0V0Aainfix &lt;=c0V2Aainfix &lt;=V4V2Aainfix &lt;=c0V4FF">
shape="ainfix =asetV4V1V2V6Aainfix &lt;=c0V3Aainfix =agetV6V7V0Iainfix &lt;V7V3Aainfix &lt;=V5V7FAainfix &lt;=V5V3Aainfix &lt;=c0V5Iainfix =V6asetV4V1V2Aainfix &lt;=c0V3FAainfix &lt;V1V3Aainfix &lt;=c0V1Iainfix &lt;V1V5Aainfix &lt;=c0V1Aainfix &lt;=c0V3Aainfix =agetV4V8V0Iainfix &lt;V8V3Aainfix &lt;=V5V8FAainfix &lt;=V5V3Aainfix &lt;=c0V5FF">
<label
name="expl:VC for mixfix []&lt;-"/>
<proof
......@@ -78,32 +82,32 @@
<goal
name="WP_parameter resize"
locfile="../resizable_array.mlw"
loclnum="33" loccnumb="6" loccnume="12"
loclnum="35" loccnumb="6" loccnume="12"
expl="VC for resize"
sum="e61c46dc3aef496a419f2489a84363be"
sum="fe729207541d0fcb7769b4956bee6718"
proved="true"
expanded="true"
shape="iainfix &gt;V0V1ainfix =agetV6V8agetV2V8Iainfix &lt;V8aminV3V0Aainfix &lt;=c0V8FAainfix =V7V0Aainfix &lt;=c0V5Aainfix &lt;=V7V5Aainfix &lt;=c0V7Iainfix =V7V0FIainfix =V6V4Aainfix =V5amaxV0ainfix *c2V1FIainfix =agetV4V9agetV2ainfix -ainfix +c0V9c0Iainfix &lt;V9ainfix +c0V1Aainfix &lt;=c0V9FAainfix =agetV4V10agetaconstadummyV10Iainfix &lt;V10amaxV0ainfix *c2V1Aainfix &lt;=ainfix +c0V1V10Oainfix &lt;V10c0Aainfix &lt;=c0V10FAainfix &lt;=c0amaxV0ainfix *c2V1FAainfix &lt;=ainfix +c0V1amaxV0ainfix *c2V1Aainfix &lt;=c0c0Aainfix &lt;=ainfix +c0V1V1Aainfix &lt;=c0V1Aainfix &lt;=c0c0Iainfix &lt;=c0amaxV0ainfix *c2V1Aainfix &gt;=amaxV0ainfix *c2V1c0ainfix =agetV2V12agetV2V12Iainfix &lt;V12aminV3V0Aainfix &lt;=c0V12FAainfix =V11V0Aainfix &lt;=V11V1Aainfix &lt;=c0V11Iainfix =V11V0FIainfix &lt;=c0V0Aainfix &lt;=c0V1Aainfix &lt;=V3V1Aainfix &lt;=c0V3FF">
shape="iainfix &gt;V1V2ainfix =agetV7V9agetV3V9Iainfix &lt;V9aminV4V1Aainfix &lt;=c0V9FAainfix =V8V1Aainfix &lt;=c0V6Aainfix =agetV7V10V0Iainfix &lt;V10V6Aainfix &lt;=V8V10FAainfix &lt;=V8V6Aainfix &lt;=c0V8Iainfix =V8V1FIainfix =V7V5Aainfix =V6amaxV1ainfix *c2V2FIainfix =agetV5V11agetV3ainfix -ainfix +c0V11c0Iainfix &lt;V11ainfix +c0V2Aainfix &lt;=c0V11FAainfix =agetV5V12agetaconstV0V12Iainfix &lt;V12amaxV1ainfix *c2V2Aainfix &lt;=ainfix +c0V2V12Oainfix &lt;V12c0Aainfix &lt;=c0V12FAainfix &lt;=c0amaxV1ainfix *c2V2FAainfix &lt;=ainfix +c0V2amaxV1ainfix *c2V2Aainfix &lt;=c0c0Aainfix &lt;=ainfix +c0V2V2Aainfix &lt;=c0V2Aainfix &lt;=c0c0Iainfix &lt;=c0amaxV1ainfix *c2V2Aainfix &gt;=amaxV1ainfix *c2V2c0ainfix =agetV13V15agetV3V15Iainfix &lt;V15aminV4V1Aainfix &lt;=c0V15FAainfix =V14V1Aainfix &lt;=c0V2Aainfix =agetV13V16V0Iainfix &lt;V16V2Aainfix &lt;=V14V16FAainfix &lt;=V14V2Aainfix &lt;=c0V14Iainfix =V14V1FIainfix =agetV13V17V0Iainfix &lt;V17ainfix +V1ainfix -V2V1Aainfix &lt;=V1V17FAainfix =agetV13V18agetV3V18Iainfix &lt;V18V2Aainfix &lt;=ainfix +V1ainfix -V2V1V18Oainfix &lt;V18V1Aainfix &lt;=c0V18FAainfix &lt;=c0V2FAainfix &lt;=ainfix +V1ainfix -V2V1V2Aainfix &lt;=c0ainfix -V2V1Aainfix &lt;=c0V1Iainfix &lt;=c0V1Aainfix &lt;=c0V2Aainfix =agetV3V19V0Iainfix &lt;V19V2Aainfix &lt;=V4V19FAainfix &lt;=V4V2Aainfix &lt;=c0V4FF">
<label
name="expl:VC for resize"/>
<proof
prover="0"
timelimit="10"
prover="1"
timelimit="5"
memlimit="1000"
obsolete="false"
archived="false">
<result status="valid" time="0.07"/>
<result status="valid" time="0.21"/>
</proof>
</goal>
<goal
name="WP_parameter append"
locfile="../resizable_array.mlw"
loclnum="46" loccnumb="6" loccnume="12"
loclnum="51" loccnumb="6" loccnume="12"
expl="VC for append"
sum="c830186d8c39d0188bf506a31f5ff3aa"
sum="315f734ad46ea8f9d5174ff75230fc34"
proved="true"
expanded="true"
shape="ainfix =agetV9V10agetV1ainfix -V10V5Iainfix &lt;=V5V10Aainfix =agetV9V10agetV4V10Iainfix &lt;V10V5Iainfix &lt;V10V8Aainfix &lt;=c0V10FAainfix =V8ainfix +V5V2Aainfix &lt;=c0V6Aainfix &lt;=V8V6Aainfix &lt;=c0V8Iainfix =agetV9V11agetV1ainfix -ainfix +c0V11V5Iainfix &lt;V11ainfix +V5V2Aainfix &lt;=V5V11FAainfix =agetV9V12agetV7V12Iainfix &lt;V12V6Aainfix &lt;=ainfix +V5V2V12Oainfix &lt;V12V5Aainfix &lt;=c0V12FAainfix &lt;=c0V6FAainfix &lt;=ainfix +V5V2V6Aainfix &lt;=c0V5Aainfix &lt;=ainfix +c0V2V0Aainfix &lt;=c0V2Aainfix &lt;=c0c0Iainfix =agetV7V13agetV4V13Iainfix &lt;V13aminV5ainfix +V5V2Aainfix &lt;=c0V13FAainfix =V8ainfix +V5V2Aainfix &lt;=c0V6Aainfix &lt;=V8V6Aainfix &lt;=c0V8FAainfix &lt;=c0ainfix +V5V2Iainfix &lt;=c0V0Aainfix &lt;=V2V0Aainfix &lt;=c0V2Aainfix &lt;=c0V3Aainfix &lt;=V5V3Aainfix &lt;=c0V5F">
shape="ainfix =agetV11V12agetV3ainfix -V12V7Iainfix &lt;=V7V12Aainfix =agetV11V12agetV6V12Iainfix &lt;V12V7Iainfix &lt;V12V10Aainfix &lt;=c0V12FAainfix =V10ainfix +V7V4Aainfix &lt;=c0V8Aainfix =agetV11V13V0Iainfix &lt;V13V8Aainfix &lt;=V10V13FAainfix &lt;=V10V8Aainfix &lt;=c0V10Iainfix =agetV11V14agetV3ainfix -ainfix +c0V14V7Iainfix &lt;V14ainfix +V7V4Aainfix &lt;=V7V14FAainfix =agetV11V15agetV9V15Iainfix &lt;V15V8Aainfix &lt;=ainfix +V7V4V15Oainfix &lt;V15V7Aainfix &lt;=c0V15FAainfix &lt;=c0V8FAainfix &lt;=ainfix +V7V4V8Aainfix &lt;=c0V7Aainfix &lt;=ainfix +c0V4V2Aainfix &lt;=c0V4Aainfix &lt;=c0c0Iainfix =agetV9V16agetV6V16Iainfix &lt;V16aminV7ainfix +V7V4Aainfix &lt;=c0V16FAainfix =V10ainfix +V7V4Aainfix &lt;=c0V8Aainfix =agetV9V17V0Iainfix &lt;V17V8Aainfix &lt;=V10V17FAainfix &lt;=V10V8Aainfix &lt;=c0V10FAainfix &lt;=c0ainfix +V7V4Iainfix &lt;=c0V2Aainfix =agetV3V18V1Iainfix &lt;V18V2Aainfix &lt;=V4V18FAainfix &lt;=V4V2Aainfix &lt;=c0V4Aainfix &lt;=c0V5Aainfix =agetV6V19V0Iainfix &lt;V19V5Aainfix &lt;=V7V19FAainfix &lt;=V7V5Aainfix &lt;=c0V7FF">
<label
name="expl:VC for append"/>
<proof
......@@ -119,18 +123,18 @@
<theory
name="Test"
locfile="../resizable_array.mlw"
loclnum="81" loccnumb="7" loccnume="11"
loclnum="86" loccnumb="7" loccnume="11"
verified="true"
expanded="true">
<goal
name="WP_parameter test1"
locfile="../resizable_array.mlw"
loclnum="87" loccnumb="6" loccnume="11"
loclnum="91" loccnumb="6" loccnume="11"
expl="VC for test1"
sum="0582db5ba8969b7241e7159e4fdc2e81"
sum="06a9f56c81b7ee3cdb32e2af60a99c8a"
proved="true"
expanded="true"
shape="ainfix =CV0amk rarrayVVV4c7Aainfix =agetCV0amk rarrayVVV3c0c17Iainfix =agetCV0amk rarrayVVV3V9agetCV0amk rarrayVVCV13amk arrayVVV1V9Iainfix &lt;V9aminCV0amk rarrayVVV16c7Aainfix &lt;=c0V9FAainfix =CV0amk rarrayVVV4c7ACV0amk rarrayVVainfix &lt;=c0V2Aainfix &lt;=CV0amk rarrayVVV4CV0amk rarrayVVV2Aainfix &lt;=c0CV0amk rarrayVVV4FAainfix &lt;=c0c7ACV0amk rarrayVVCV29amk arrayVVtICV0amk rarrayVVCV33amk arrayVVainfix =asetaeltsadataV0c0c17V1Aainfix =alengthadataV0V34Aainfix =alengthV0V32ACV0amk rarrayVVCV37amk arrayVVtAainfix &lt;=c0CV37amk arrayVVV40Aainfix &lt;=CV0amk rarrayVVV42CV0amk rarrayVVCV45amk arrayVVV46Aainfix &lt;=c0CV0amk rarrayVVV48FAainfix &lt;c0alengthV0Aainfix &lt;=c0c0ACV0amk rarrayVVCV51amk arrayVVtAainfix =alengthV0c10ICV0amk rarrayVVCV55amk arrayVVtAainfix &lt;=c0alengthV55Aainfix &lt;=alengthV0alengthadataV0Aainfix &lt;=c0alengthV0Lamakec10Aainfix &lt;=c0c10">
shape="ainfix =CV0amk rarrayVVVV4c7Aainfix =agetCV0amk rarrayVVVV3c0c17Iainfix =agetCV0amk rarrayVVVV3V11agetCV0amk rarrayVVVCV17amk arrayVVV1V11Iainfix &lt;V11aminCV0amk rarrayVVVV21c7Aainfix &lt;=c0V11FAainfix =CV0amk rarrayVVVV4c7ACV0amk rarrayVVVainfix &lt;=c0V2Aainfix =agetCV0amk rarrayVVVV3V29CV0amk rarrayVVVV33Iainfix &lt;V29CV0amk rarrayVVVV2Aainfix &lt;=CV0amk rarrayVVVV4V29FAainfix &lt;=CV0amk rarrayVVVV4CV0amk rarrayVVVV2Aainfix &lt;=c0CV0amk rarrayVVVV4FAainfix &lt;=c0c7ACV0amk rarrayVVVCV53amk arrayVVtICV0amk rarrayVVVCV58amk arrayVVainfix =asetaeltsadataV0c0c17V1Aainfix =alengthadataV0V59Aainfix =alengthV0V57Aainfix =adummyV0V56ACV0amk rarrayVVVCV63amk arrayVVtAainfix &lt;=c0CV63amk arrayVVV66Aainfix =agetCV0amk rarrayVVVCV71amk arrayVVV1V68CV0amk rarrayVVVV74Iainfix &lt;V68CV0amk rarrayVVVCV79amk arrayVVV80Aainfix &lt;=CV0amk rarrayVVVV83V68FAainfix &lt;=CV0amk rarrayVVVV86CV0amk rarrayVVVCV90amk arrayVVV91Aainfix &lt;=c0CV0amk rarrayVVVV94FAainfix &lt;c0alengthV0Aainfix &lt;=c0c0ACV0amk rarrayVVVCV98amk arrayVVtAainfix =alengthV0c10ICV0amk rarrayVVVCV103amk arrayVVtAainfix &lt;=c0alengthV103Aainfix =agetaeltsadataV0V106adummyV0Iainfix &lt;V106alengthadataV0Aainfix &lt;=alengthV0V106FAainfix &lt;=alengthV0alengthadataV0Aainfix &lt;=c0alengthV0Lamakec10c0Aainfix &lt;=c0c10">
<label
name="expl:VC for test1"/>
<proof
......@@ -145,12 +149,12 @@
<goal
name="WP_parameter test2"
locfile="../resizable_array.mlw"
loclnum="95" loccnumb="6" loccnume="11"
loclnum="99" loccnumb="6" loccnume="11"
expl="VC for test2"
sum="08ad72d18eeafd8ac4d458660bb44f36"
sum="45767b1ca1870bff0c5c34a31d550146"
proved="true"
expanded="true"
shape="ainfix =agetCV2amk rarrayVVCV8amk arrayVVV3c0c42Aainfix &lt;c0CV2amk rarrayVVV11Aainfix &lt;=c0c0ACV2amk rarrayVVCV14amk arrayVVtAainfix =agetCV0amk rarrayVVV5c10c42Aainfix &lt;c10CV0amk rarrayVVV6Aainfix &lt;=c0c10ACV0amk rarrayVVtAainfix =agetCV0amk rarrayVVV5c0c17Aainfix =CV0amk rarrayVVV6c20Iainfix =agetCV0amk rarrayVVV5V27agetCV2amk rarrayVVCV31amk arrayVVV3ainfix -V27CV0amk rarrayVVV34Iainfix &lt;=CV0amk rarrayVVV36V27Aainfix =agetCV0amk rarrayVVV5V27agetCV0amk rarrayVVCV41amk arrayVVV1V27Iainfix &lt;V27CV0amk rarrayVVV44Iainfix &lt;V27CV0amk rarrayVVV6Aainfix &lt;=c0V27FAainfix =CV0amk rarrayVVV6ainfix +CV0amk rarrayVVV50CV2amk rarrayVVV52ACV0amk rarrayVVainfix &lt;=c0V4Aainfix &lt;=CV0amk rarrayVVV6CV0amk rarrayVVV4Aainfix &lt;=c0CV0amk rarrayVVV6FACV2amk rarrayVVCV63amk arrayVVtACV0amk rarrayVVCV67amk arrayVVtICV2amk rarrayVVCV71amk arrayVVainfix =asetaeltsadataV2c0c42V3Aainfix =alengthadataV2V72Aainfix =alengthV2V70ACV2amk rarrayVVCV75amk arrayVVtAainfix &lt;=c0CV75amk arrayVVV78Aainfix &lt;=CV2amk rarrayVVV80CV2amk rarrayVVCV83amk arrayVVV84Aainfix &lt;=c0CV2amk rarrayVVV86FAainfix &lt;c0alengthV2Aainfix &lt;=c0c0ACV2amk rarrayVVCV89amk arrayVVtICV2amk rarrayVVCV93amk arrayVVtAainfix &lt;=c0alengthV93Aainfix &lt;=alengthV2alengthadataV2Aainfix &lt;=c0alengthV2Lamakec10Aainfix &lt;=c0c10ICV0amk rarrayVVCV97amk arrayVVainfix =asetaeltsadataV0c0c17V1Aainfix =alengthadataV0V98Aainfix =alengthV0V96ACV0amk rarrayVVCV101amk arrayVVtAainfix &lt;=c0CV101amk arrayVVV104Aainfix &lt;=CV0amk rarrayVVV106CV0amk rarrayVVCV109amk arrayVVV110Aainfix &lt;=c0CV0amk rarrayVVV112FAainfix &lt;c0alengthV0Aainfix &lt;=c0c0ACV0amk rarrayVVCV115amk arrayVVtICV0amk rarrayVVCV119amk arrayVVtAainfix &lt;=c0alengthV119Aainfix &lt;=alengthV0alengthadataV0Aainfix &lt;=c0alengthV0Lamakec10Aainfix &lt;=c0c10">
shape="ainfix =agetCV2amk rarrayVVVCV9amk arrayVVV3c0c42Aainfix &lt;c0CV2amk rarrayVVVV13Aainfix &lt;=c0c0ACV2amk rarrayVVVCV17amk arrayVVtAainfix =agetCV0amk rarrayVVVV5c10c42Aainfix &lt;c10CV0amk rarrayVVVV6Aainfix &lt;=c0c10ACV0amk rarrayVVVtAainfix =agetCV0amk rarrayVVVV5c0c17Aainfix =CV0amk rarrayVVVV6c20Iainfix =agetCV0amk rarrayVVVV5V35agetCV2amk rarrayVVVCV41amk arrayVVV3ainfix -V35CV0amk rarrayVVVV45Iainfix &lt;=CV0amk rarrayVVVV48V35Aainfix =agetCV0amk rarrayVVVV5V35agetCV0amk rarrayVVVCV55amk arrayVVV1V35Iainfix &lt;V35CV0amk rarrayVVVV59Iainfix &lt;V35CV0amk rarrayVVVV6Aainfix &lt;=c0V35FAainfix =CV0amk rarrayVVVV6ainfix +CV0amk rarrayVVVV68CV2amk rarrayVVVV71ACV0amk rarrayVVVainfix &lt;=c0V4Aainfix =agetCV0amk rarrayVVVV5V76CV0amk rarrayVVVV80Iainfix &lt;V76CV0amk rarrayVVVV4Aainfix &lt;=CV0amk rarrayVVVV6V76FAainfix &lt;=CV0amk rarrayVVVV6CV0amk rarrayVVVV4Aainfix &lt;=c0CV0amk rarrayVVVV6FACV2amk rarrayVVVCV100amk arrayVVtACV0amk rarrayVVVCV105amk arrayVVtICV2amk rarrayVVVCV110amk arrayVVainfix =asetaeltsadataV2c0c42V3Aainfix =alengthadataV2V111Aainfix =alengthV2V109Aainfix =adummyV2V108ACV2amk rarrayVVVCV115amk arrayVVtAainfix &lt;=c0CV115amk arrayVVV118Aainfix =agetCV2amk rarrayVVVCV123amk arrayVVV3V120CV2amk rarrayVVVV126Iainfix &lt;V120CV2amk rarrayVVVCV131amk arrayVVV132Aainfix &lt;=CV2amk rarrayVVVV135V120FAainfix &lt;=CV2amk rarrayVVVV138CV2amk rarrayVVVCV142amk arrayVVV143Aainfix &lt;=c0CV2amk rarrayVVVV146FAainfix &lt;c0alengthV2Aainfix &lt;=c0c0ACV2amk rarrayVVVCV150amk arrayVVtICV2amk rarrayVVVCV155amk arrayVVtAainfix &lt;=c0alengthV155Aainfix =agetaeltsadataV2V158adummyV2Iainfix &lt;V158alengthadataV2Aainfix &lt;=alengthV2V158FAainfix &lt;=alengthV2alengthadataV2Aainfix &lt;=c0alengthV2Lamakec10c0Aainfix &lt;=c0c10ICV0amk rarrayVVVCV161amk arrayVVainfix =asetaeltsadataV0c0c17V1Aainfix =alengthadataV0V162Aainfix =alengthV0V160Aainfix =adummyV0V159ACV0amk rarrayVVVCV166amk arrayVVtAainfix &lt;=c0CV166amk arrayVVV169Aainfix =agetCV0amk rarrayVVVCV174amk arrayVVV1V171CV0amk rarrayVVVV177Iainfix &lt;V171CV0amk rarrayVVVCV182amk arrayVVV183Aainfix &lt;=CV0amk rarrayVVVV186V171FAainfix &lt;=CV0amk rarrayVVVV189CV0amk rarrayVVVCV193amk arrayVVV194Aainfix &lt;=c0CV0amk rarrayVVVV197FAainfix &lt;c0alengthV0Aainfix &lt;=c0c0ACV0amk rarrayVVVCV201amk arrayVVtICV0amk rarrayVVVCV206amk arrayVVtAainfix &lt;=c0alengthV206Aainfix =agetaeltsadataV0V209adummyV0Iainfix &lt;V209alengthadataV0Aainfix &lt;=alengthV0V209FAainfix &lt;=alengthV0alengthadataV0Aainfix &lt;=c0alengthV0Lamakec10c0Aainfix &lt;=c0c10">
<label
name="expl:VC for test2"/>
<proof
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment