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$$ClassAnalysisRec.Random$args255 : [int]ref; var ClassAnalysisRec.A$ClassAnalysisRec.ClassAnalysisRec$field254 : Field ref; var int$ClassAnalysisRec.Random$index0 : int; // 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 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 is generated by joogie. function {:inline true} $refarrtoref($param00 : [int]ref) returns (__ret : ref); // @line: 2 // ()> procedure void$ClassAnalysisRec.Random$$la$init$ra$$2235(__this : ref) requires ($neref((__this), ($null))==1); { var r022 : ref; Block31: r022 := __this; assert ($neref((r022), ($null))==1); // @line: 3 call void$java.lang.Object$$la$init$ra$$28((r022)); return; } // procedure is generated by joogie. function {:inline true} $divref($param00 : ref, $param11 : ref) returns (__ret : ref); // 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 void$java.lang.Object$$la$init$ra$$28(__this : ref); // 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); // @line: 19 // ()> procedure void$ClassAnalysisRec.A$$la$init$ra$$2228(__this : ref) requires ($neref((__this), ($null))==1); { var r01 : ref; Block16: r01 := __this; assert ($neref((r01), ($null))==1); // @line: 20 call void$java.lang.Object$$la$init$ra$$28((r01)); return; } // procedure is generated by joogie. function {:inline true} $xorreal($param00 : realVar, $param11 : realVar) returns (__ret : int); // 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); // 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); // @line: 6 // procedure void$ClassAnalysisRec.ClassAnalysisRec$main$2233($param_0 : [int]ref) modifies java.lang.String$lp$$rp$$ClassAnalysisRec.Random$args255, $HeapVar, $stringSize; { var $r213 : ref; var $r416 : ref; var r114 : ref; var r012 : [int]ref; var $r315 : ref; Block26: r012 := $param_0; // @line: 7 java.lang.String$lp$$rp$$ClassAnalysisRec.Random$args255 := r012; // @line: 8 $r213 := $newvariable((27)); assume ($neref(($newvariable((27))), ($null))==1); assert ($neref(($r213), ($null))==1); // @line: 8 call void$ClassAnalysisRec.ClassAnalysisRec$$la$init$ra$$2232(($r213)); // @line: 8 r114 := $r213; // @line: 9 $r315 := $newvariable((28)); assume ($neref(($newvariable((28))), ($null))==1); assert ($neref(($r315), ($null))==1); // @line: 9 call void$ClassAnalysisRec.A$$la$init$ra$$2228(($r315)); assert ($neref((r114), ($null))==1); // @line: 9 $HeapVar[r114, ClassAnalysisRec.A$ClassAnalysisRec.ClassAnalysisRec$field254] := $r315; // @line: 10 $r416 := $newvariable((29)); assume ($neref(($newvariable((29))), ($null))==1); assert ($neref(($r416), ($null))==1); // @line: 10 call void$ClassAnalysisRec.B$$la$init$ra$$2230(($r416)); assert ($neref((r114), ($null))==1); // @line: 10 $HeapVar[r114, ClassAnalysisRec.A$ClassAnalysisRec.ClassAnalysisRec$field254] := $r416; assert ($neref((r114), ($null))==1); // @line: 11 call void$ClassAnalysisRec.ClassAnalysisRec$eval$2234((r114)); return; } // 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); // @line: 2 // ()> procedure void$ClassAnalysisRec.ClassAnalysisRec$$la$init$ra$$2232(__this : ref) requires ($neref((__this), ($null))==1); { var r011 : ref; Block25: r011 := __this; assert ($neref((r011), ($null))==1); // @line: 3 call void$java.lang.Object$$la$init$ra$$28((r011)); return; } // 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 } // @line: 4 // ()> procedure void$ClassAnalysisRec.Random$$la$clinit$ra$$2237() modifies int$ClassAnalysisRec.Random$index0; { // @line: 5 Block33: // @line: 5 int$ClassAnalysisRec.Random$index0 := 0; return; } // 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 } // @line: 21 // procedure boolean$ClassAnalysisRec.A$test$2229(__this : ref, $param_0 : int) returns (__ret : int) requires ($neref((__this), ($null))==1); { var $i14 : int; var $z05 : int; var i03 : int; var r02 : ref; Block17: r02 := __this; i03 := $param_0; // @line: 22 $i14 := $subint((i03), (1)); assert ($neref((r02), ($null))==1); // @line: 22 call $z05 := boolean$ClassAnalysisRec.A$test$2229((r02), ($i14)); // @line: 22 __ret := $z05; return; } // @line: 7 // procedure int$ClassAnalysisRec.Random$random$2236() returns (__ret : int) modifies $stringSize, int$ClassAnalysisRec.Random$index0; { var $i328 : int; var r025 : ref; var $i126 : int; var $r124 : [int]ref; var $i023 : int; var $i227 : int; // @line: 8 Block32: // @line: 8 $r124 := java.lang.String$lp$$rp$$ClassAnalysisRec.Random$args255; // @line: 8 $i023 := int$ClassAnalysisRec.Random$index0; assert ($geint(($i023), (0))==1); assert ($ltint(($i023), ($refArrSize[$r124[$arrSizeIdx]]))==1); // @line: 8 r025 := $r124[$i023]; // @line: 9 $i126 := int$ClassAnalysisRec.Random$index0; // @line: 9 $i227 := $addint(($i126), (1)); // @line: 9 int$ClassAnalysisRec.Random$index0 := $i227; $i328 := $stringSize[r025]; // @line: 10 __ret := $i328; return; } // procedure is generated by joogie. function {:inline true} $ushrref($param00 : ref, $param11 : ref) returns (__ret : int); // 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 } // @line: 14 // procedure void$ClassAnalysisRec.ClassAnalysisRec$eval$2234(__this : ref) requires ($neref((__this), ($null))==1); { var $i117 : int; var i018 : int; var $r120 : ref; var r019 : ref; //temp local variables var $freshlocal0 : int; Block30: r019 := __this; // @line: 15 call $i117 := int$ClassAnalysisRec.Random$random$2236(); // @line: 15 i018 := $modint(($i117), (100)); assert ($neref((r019), ($null))==1); // @line: 16 $r120 := $HeapVar[r019, ClassAnalysisRec.A$ClassAnalysisRec.ClassAnalysisRec$field254]; assert ($neref(($r120), ($null))==1); // @line: 16 call $freshlocal0 := boolean$ClassAnalysisRec.A$test$2229(($r120), (i018)); return; } // 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 int$java.lang.String$length$59(__this : ref) returns (__ret : int); // procedure is generated by joogie. function {:inline true} $intarrtoref($param00 : [int]int) returns (__ret : ref); // 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 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); // @line: 27 // procedure boolean$ClassAnalysisRec.B$test$2231(__this : ref, $param_0 : int) returns (__ret : int) requires ($neref((__this), ($null))==1); { var i07 : int; var $z010 : int; var $i19 : int; var r08 : ref; Block19: r08 := __this; i07 := $param_0; goto Block20; // @line: 28 Block20: goto Block23, Block21; // @line: 28 Block23: // @line: 28 assume ($negInt(($gtint((i07), (0))))==1); // @line: 29 __ret := 1; return; // @line: 28 Block21: assume ($gtint((i07), (0))==1); goto Block22; // @line: 29 Block22: // @line: 29 $i19 := $subint((i07), (1)); goto Block24; // @line: 29 Block24: assert ($neref((r08), ($null))==1); // @line: 29 call $z010 := boolean$ClassAnalysisRec.B$test$2231((r08), ($i19)); // @line: 29 __ret := $z010; return; } // procedure is generated by joogie. function {:inline true} $shlint($param00 : int, $param11 : int) returns (__ret : int); // @line: 25 // ()> procedure void$ClassAnalysisRec.B$$la$init$ra$$2230(__this : ref) requires ($neref((__this), ($null))==1); { var r06 : ref; Block18: r06 := __this; assert ($neref((r06), ($null))==1); // @line: 26 call void$ClassAnalysisRec.A$$la$init$ra$$2228((r06)); return; } // 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) }