type ref; type realVar; type classConst; // type Field x; // var $HeapVar : [ref, Field x]x; const unique $null : ref ; const unique $intArrNull : [int]int ; const unique $realArrNull : [int]realVar ; const unique $refArrNull : [int]ref ; const unique $arrSizeIdx : int; var $intArrSize : [int]int; var $realArrSize : [realVar]int; var $refArrSize : [ref]int; var $stringSize : [ref]int; //built-in axioms axiom ($arrSizeIdx == -1); //note: new version doesn't put helpers in the perlude anymore//Prelude finished var java.lang.String$lp$$rp$$Random$args255 : [int]ref; var int$Random$index0 : int; var int$IntList$value0 : Field int; var IntList$IntList$next254 : Field ref; // procedure is generated by joogie. function {:inline true} $neref(x : ref, y : ref) returns (__ret : int) { if (x != y) then 1 else 0 } // procedure is generated by joogie. function {:inline true} $realarrtoref($param00 : [int]realVar) returns (__ret : ref); // procedure is generated by joogie. function {:inline true} $modreal($param00 : realVar, $param11 : realVar) returns (__ret : realVar); // ()> procedure void$java.lang.Object$$la$init$ra$$28(__this : ref); // procedure is generated by joogie. function {:inline true} $leref($param00 : ref, $param11 : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $modint($param00 : int, $param11 : int) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $gtref($param00 : ref, $param11 : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $eqrealarray($param00 : [int]realVar, $param11 : [int]realVar) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $addint(x : int, y : int) returns (__ret : int) { (x + y) } // procedure is generated by joogie. function {:inline true} $subref($param00 : ref, $param11 : ref) returns (__ret : ref); // procedure is generated by joogie. function {:inline true} $inttoreal($param00 : int) returns (__ret : realVar); // procedure is generated by joogie. function {:inline true} $shrint($param00 : int, $param11 : int) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $negReal($param00 : realVar) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $ushrint($param00 : int, $param11 : int) returns (__ret : int); // ()> procedure void$Random$$la$init$ra$$2230(__this : ref) requires ($neref((__this), ($null))==1); { var r011 : ref; Block23: r011 := __this; assert ($neref((r011), ($null))==1); // @line: 1 call void$java.lang.Object$$la$init$ra$$28((r011)); return; } // procedure is generated by joogie. function {:inline true} $refarrtoref($param00 : [int]ref) returns (__ret : ref); // procedure is generated by joogie. function {:inline true} $divref($param00 : ref, $param11 : ref) returns (__ret : ref); // procedure int$java.lang.String$length$59(__this : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $mulref($param00 : ref, $param11 : ref) returns (__ret : ref); // procedure is generated by joogie. function {:inline true} $neint(x : int, y : int) returns (__ret : int) { if (x != y) then 1 else 0 } // procedure is generated by joogie. function {:inline true} $ltreal($param00 : realVar, $param11 : realVar) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $reftorefarr($param00 : ref) returns (__ret : [int]ref); // procedure is generated by joogie. function {:inline true} $gtint(x : int, y : int) returns (__ret : int) { if (x > y) then 1 else 0 } // procedure is generated by joogie. function {:inline true} $reftoint($param00 : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $addref($param00 : ref, $param11 : ref) returns (__ret : ref); // procedure is generated by joogie. function {:inline true} $xorreal($param00 : realVar, $param11 : realVar) returns (__ret : int); // @line: 3 // procedure void$ListContent$main$2234($param_0 : [int]ref) modifies $HeapVar, java.lang.String$lp$$rp$$Random$args255, $stringSize; { var r019 : [int]ref; var $i022 : int; var $i123 : int; var $i224 : int; var r121 : ref; Block27: r019 := $param_0; // @line: 4 java.lang.String$lp$$rp$$Random$args255 := r019; // @line: 5 call r121 := IntList$IntList$createIntList$2229(); goto Block28; // @line: 7 Block28: assert ($neref((r121), ($null))==1); // @line: 7 $i022 := $HeapVar[r121, int$IntList$value0]; goto Block29; // @line: 7 Block29: goto Block30, Block32; // @line: 7 Block30: assume ($leint(($i022), (0))==1); goto Block31; // @line: 7 Block32: // @line: 7 assume ($negInt(($leint(($i022), (0))))==1); assert ($neref((r121), ($null))==1); // @line: 8 $i123 := $HeapVar[r121, int$IntList$value0]; // @line: 8 $i224 := $subint(($i123), (1)); assert ($neref((r121), ($null))==1); // @line: 8 $HeapVar[r121, int$IntList$value0] := $i224; goto Block28; // @line: 8 Block31: return; } // procedure is generated by joogie. function {:inline true} $andref($param00 : ref, $param11 : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $cmpreal(x : realVar, y : realVar) returns (__ret : int) { if ($ltreal((x), (y)) == 1) then 1 else if ($eqreal((x), (y)) == 1) then 0 else -1 } // procedure is generated by joogie. function {:inline true} $addreal($param00 : realVar, $param11 : realVar) returns (__ret : realVar); // procedure is generated by joogie. function {:inline true} $gtreal($param00 : realVar, $param11 : realVar) returns (__ret : int); // @line: 15 // (int,IntList)> procedure void$IntList$$la$init$ra$$2228(__this : ref, $param_0 : int, $param_1 : ref) modifies $HeapVar; requires ($neref((__this), ($null))==1); { var r13 : ref; var i02 : int; var r01 : ref; Block16: r01 := __this; i02 := $param_0; r13 := $param_1; assert ($neref((r01), ($null))==1); // @line: 16 call void$java.lang.Object$$la$init$ra$$28((r01)); assert ($neref((r01), ($null))==1); // @line: 17 $HeapVar[r01, int$IntList$value0] := i02; assert ($neref((r01), ($null))==1); // @line: 18 $HeapVar[r01, IntList$IntList$next254] := r13; return; } // procedure is generated by joogie. function {:inline true} $eqreal(x : realVar, y : realVar) returns (__ret : int) { if (x == y) then 1 else 0 } // procedure is generated by joogie. function {:inline true} $ltint(x : int, y : int) returns (__ret : int) { if (x < y) then 1 else 0 } // procedure is generated by joogie. function {:inline true} $newvariable($param00 : int) returns (__ret : ref); // procedure is generated by joogie. function {:inline true} $divint($param00 : int, $param11 : int) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $geint(x : int, y : int) returns (__ret : int) { if (x >= y) then 1 else 0 } // procedure is generated by joogie. function {:inline true} $mulint($param00 : int, $param11 : int) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $leint(x : int, y : int) returns (__ret : int) { if (x <= y) then 1 else 0 } // procedure is generated by joogie. function {:inline true} $shlref($param00 : ref, $param11 : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $eqrefarray($param00 : [int]ref, $param11 : [int]ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $reftointarr($param00 : ref) returns (__ret : [int]int); // procedure is generated by joogie. function {:inline true} $ltref($param00 : ref, $param11 : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $mulreal($param00 : realVar, $param11 : realVar) returns (__ret : realVar); // procedure is generated by joogie. function {:inline true} $shrref($param00 : ref, $param11 : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $ushrreal($param00 : realVar, $param11 : realVar) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $shrreal($param00 : realVar, $param11 : realVar) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $divreal($param00 : realVar, $param11 : realVar) returns (__ret : realVar); // procedure is generated by joogie. function {:inline true} $orint($param00 : int, $param11 : int) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $reftorealarr($param00 : ref) returns (__ret : [int]realVar); // procedure is generated by joogie. function {:inline true} $cmpref(x : ref, y : ref) returns (__ret : int) { if ($ltref((x), (y)) == 1) then 1 else if ($eqref((x), (y)) == 1) then 0 else -1 } // procedure is generated by joogie. function {:inline true} $realtoint($param00 : realVar) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $geref($param00 : ref, $param11 : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $orreal($param00 : realVar, $param11 : realVar) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $eqint(x : int, y : int) returns (__ret : int) { if (x == y) then 1 else 0 } // procedure is generated by joogie. function {:inline true} $ushrref($param00 : ref, $param11 : ref) returns (__ret : int); // @line: 22 // procedure IntList$IntList$createIntList$2229() returns (__ret : ref) { var i19 : int; var $i08 : int; var $r07 : ref; var r110 : ref; // @line: 23 Block17: // @line: 23 call i19 := int$Random$random$2231(); // @line: 24 r110 := $null; goto Block18; // @line: 26 Block18: goto Block19, Block21; // @line: 26 Block19: assume ($leint((i19), (0))==1); goto Block20; // @line: 26 Block21: // @line: 26 assume ($negInt(($leint((i19), (0))))==1); // @line: 27 $r07 := $newvariable((22)); assume ($neref(($newvariable((22))), ($null))==1); // @line: 27 call $i08 := int$Random$random$2231(); assert ($neref(($r07), ($null))==1); // @line: 27 call void$IntList$$la$init$ra$$2228(($r07), ($i08), (r110)); // @line: 27 r110 := $r07; // @line: 28 i19 := $addint((i19), (-1)); goto Block18; // @line: 31 Block20: // @line: 31 __ret := r110; return; } // procedure is generated by joogie. function {:inline true} $modref($param00 : ref, $param11 : ref) returns (__ret : ref); // procedure is generated by joogie. function {:inline true} $eqintarray($param00 : [int]int, $param11 : [int]int) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $negRef($param00 : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $lereal($param00 : realVar, $param11 : realVar) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $nereal(x : realVar, y : realVar) returns (__ret : int) { if (x != y) then 1 else 0 } // procedure is generated by joogie. function {:inline true} $instanceof($param00 : ref, $param11 : classConst) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $xorref($param00 : ref, $param11 : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $orref($param00 : ref, $param11 : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $intarrtoref($param00 : [int]int) returns (__ret : ref); // @line: 2 // ()> procedure void$Random$$la$clinit$ra$$2232() modifies int$Random$index0; { // @line: 3 Block25: // @line: 3 int$Random$index0 := 0; return; } // procedure is generated by joogie. function {:inline true} $subreal($param00 : realVar, $param11 : realVar) returns (__ret : realVar); // procedure is generated by joogie. function {:inline true} $shlreal($param00 : realVar, $param11 : realVar) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $negInt(x : int) returns (__ret : int) { if (x == 0) then 1 else 0 } // procedure is generated by joogie. function {:inline true} $gereal($param00 : realVar, $param11 : realVar) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $eqref(x : ref, y : ref) returns (__ret : int) { if (x == y) then 1 else 0 } // ()> procedure void$ListContent$$la$init$ra$$2233(__this : ref) requires ($neref((__this), ($null))==1); { var r018 : ref; Block26: r018 := __this; assert ($neref((r018), ($null))==1); // @line: 1 call void$java.lang.Object$$la$init$ra$$28((r018)); return; } // procedure is generated by joogie. function {:inline true} $cmpint(x : int, y : int) returns (__ret : int) { if (x < y) then 1 else if (x == y) then 0 else -1 } // procedure is generated by joogie. function {:inline true} $andint($param00 : int, $param11 : int) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $andreal($param00 : realVar, $param11 : realVar) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $shlint($param00 : int, $param11 : int) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $xorint($param00 : int, $param11 : int) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $subint(x : int, y : int) returns (__ret : int) { (x - y) } // @line: 5 // procedure int$Random$random$2231() returns (__ret : int) modifies int$Random$index0, $stringSize; { var $i012 : int; var $r113 : [int]ref; var $i317 : int; var r014 : ref; var $i216 : int; var $i115 : int; // @line: 6 Block24: // @line: 6 $r113 := java.lang.String$lp$$rp$$Random$args255; // @line: 6 $i012 := int$Random$index0; assert ($geint(($i012), (0))==1); assert ($ltint(($i012), ($refArrSize[$r113[$arrSizeIdx]]))==1); // @line: 6 r014 := $r113[$i012]; // @line: 7 $i115 := int$Random$index0; // @line: 7 $i216 := $addint(($i115), (1)); // @line: 7 int$Random$index0 := $i216; $i317 := $stringSize[r014]; // @line: 8 __ret := $i317; return; }