11.49/3.86 YES 11.49/3.87 proof of /export/starexec/sandbox/benchmark/theBenchmark.jar 11.49/3.87 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 11.49/3.87 11.49/3.87 11.49/3.87 termination of the given Bare JBC problem could be proven: 11.49/3.87 11.49/3.87 (0) Bare JBC problem 11.49/3.87 (1) BareJBCToJBCProof [EQUIVALENT, 96 ms] 11.49/3.87 (2) JBC problem 11.49/3.87 (3) JBCToGraph [EQUIVALENT, 1325 ms] 11.49/3.87 (4) JBCTerminationGraph 11.49/3.87 (5) TerminationGraphToSCCProof [SOUND, 4 ms] 11.49/3.87 (6) AND 11.49/3.87 (7) JBCTerminationSCC 11.49/3.87 (8) SCCToIRSProof [SOUND, 64 ms] 11.49/3.87 (9) IRSwT 11.49/3.87 (10) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 11.49/3.87 (11) IRSwT 11.49/3.87 (12) IRSwTTerminationDigraphProof [EQUIVALENT, 38 ms] 11.49/3.87 (13) IRSwT 11.49/3.87 (14) IntTRSCompressionProof [EQUIVALENT, 0 ms] 11.49/3.87 (15) IRSwT 11.49/3.87 (16) TempFilterProof [SOUND, 62 ms] 11.49/3.87 (17) IntTRS 11.49/3.87 (18) PolynomialOrderProcessor [EQUIVALENT, 0 ms] 11.49/3.87 (19) IntTRS 11.49/3.87 (20) RankingReductionPairProof [EQUIVALENT, 0 ms] 11.49/3.87 (21) YES 11.49/3.87 (22) JBCTerminationSCC 11.49/3.87 (23) SCCToIRSProof [SOUND, 75 ms] 11.49/3.87 (24) IRSwT 11.49/3.87 (25) IRSFormatTransformerProof [EQUIVALENT, 0 ms] 11.49/3.87 (26) IRSwT 11.49/3.87 (27) IRSwTTerminationDigraphProof [EQUIVALENT, 32 ms] 11.49/3.87 (28) IRSwT 11.49/3.87 (29) IntTRSCompressionProof [EQUIVALENT, 0 ms] 11.49/3.87 (30) IRSwT 11.49/3.87 (31) TempFilterProof [SOUND, 41 ms] 11.49/3.87 (32) IntTRS 11.49/3.87 (33) PolynomialOrderProcessor [EQUIVALENT, 7 ms] 11.49/3.87 (34) AND 11.49/3.87 (35) IntTRS 11.49/3.87 (36) PolynomialOrderProcessor [EQUIVALENT, 0 ms] 11.49/3.87 (37) YES 11.49/3.87 (38) IntTRS 11.49/3.87 (39) PolynomialOrderProcessor [EQUIVALENT, 0 ms] 11.49/3.87 (40) YES 11.49/3.87 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (0) 11.49/3.87 Obligation: 11.49/3.87 need to prove termination of the following program: 11.49/3.87 class Curseur{ 11.49/3.87 private int X=0, Y=0, maxX, maxY; 11.49/3.87 private boolean torique=false; 11.49/3.87 11.49/3.87 public Curseur(int maxX, int maxY, boolean espaceTorique){ 11.49/3.87 super(); 11.49/3.87 this.maxX=maxX; 11.49/3.87 this.maxY=maxY; 11.49/3.87 this.torique=espaceTorique; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void centrer(){ 11.49/3.87 11.49/3.87 int cX=maxX/2; 11.49/3.87 int cY=maxY/2; 11.49/3.87 X=cX; 11.49/3.87 Y=cY; 11.49/3.87 11.49/3.87 } 11.49/3.87 11.49/3.87 public void haut(){ 11.49/3.87 11.49/3.87 Y--; 11.49/3.87 if(torique&&Y<0) Y=maxY-1; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void bas(){ 11.49/3.87 Y++; 11.49/3.87 if(torique&&Y==maxY) Y=0; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void droite(){ 11.49/3.87 X++; 11.49/3.87 if(torique&&X==maxX) X=0; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void gauche(){ 11.49/3.87 X--; 11.49/3.87 if(torique&&X<0) X=maxX-1; 11.49/3.87 } 11.49/3.87 11.49/3.87 public int getX(){ 11.49/3.87 return X; 11.49/3.87 } 11.49/3.87 11.49/3.87 public int getY(){ 11.49/3.87 return Y; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void imprimer(){ 11.49/3.87 //System.out.println("Curseur@["+getX()+","+getY()+"]"); 11.49/3.87 } 11.49/3.87 } 11.49/3.87 11.49/3.87 public class Carre { 11.49/3.87 11.49/3.87 private Curseur curseur=null; 11.49/3.87 private int cote=0; 11.49/3.87 11.49/3.87 public Carre(int cote){ 11.49/3.87 if(cote>1&cote%2==1){ 11.49/3.87 this.cote=cote; 11.49/3.87 }else{ 11.49/3.87 //System.out.println("Cette classe ne genere pas les carres magiques d\'ordre pair."); 11.49/3.87 //System.exit(0); 11.49/3.87 } 11.49/3.87 this.curseur=new Curseur(cote,cote,true); 11.49/3.87 } 11.49/3.87 11.49/3.87 private int [][] carre=null; 11.49/3.87 11.49/3.87 public void init(){ 11.49/3.87 carre=new int[cote][cote]; 11.49/3.87 int n=0; 11.49/3.87 for(int x=0;x<3;x++) for(int y=0;y<3;y++) carre[x][y]=0; 11.49/3.87 curseur.centrer(); 11.49/3.87 } 11.49/3.87 11.49/3.87 public void peupler(){ 11.49/3.87 curseur.bas(); 11.49/3.87 int nbre=1; 11.49/3.87 int cpteur=1; 11.49/3.87 while(cpteur<3){ 11.49/3.87 if(!ajouter(nbre,curseur.getX(),curseur.getY())){ 11.49/3.87 curseur.bas(); 11.49/3.87 curseur.gauche(); 11.49/3.87 cpteur++; 11.49/3.87 }else{ 11.49/3.87 cpteur=1; 11.49/3.87 curseur.bas(); 11.49/3.87 curseur.droite(); 11.49/3.87 nbre++; 11.49/3.87 } 11.49/3.87 } 11.49/3.87 } 11.49/3.87 11.49/3.87 public Curseur curseur(){ 11.49/3.87 return curseur; 11.49/3.87 } 11.49/3.87 11.49/3.87 public int cote(){ 11.49/3.87 return cote; 11.49/3.87 } 11.49/3.87 11.49/3.87 public boolean ajouter(int nombre, int X, int Y){ 11.49/3.87 if(carre[X][Y]!=0) return false; 11.49/3.87 carre[X][Y]=nombre; 11.49/3.87 return true; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void imprimer(){ 11.49/3.87 for(int j=0;j= args.length) 11.49/3.87 return 0; 11.49/3.87 11.49/3.87 String string = args[index]; 11.49/3.87 index++; 11.49/3.87 return string.length(); 11.49/3.87 } 11.49/3.87 } 11.49/3.87 11.49/3.87 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (1) BareJBCToJBCProof (EQUIVALENT) 11.49/3.87 initialized classpath 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (2) 11.49/3.87 Obligation: 11.49/3.87 need to prove termination of the following program: 11.49/3.87 class Curseur{ 11.49/3.87 private int X=0, Y=0, maxX, maxY; 11.49/3.87 private boolean torique=false; 11.49/3.87 11.49/3.87 public Curseur(int maxX, int maxY, boolean espaceTorique){ 11.49/3.87 super(); 11.49/3.87 this.maxX=maxX; 11.49/3.87 this.maxY=maxY; 11.49/3.87 this.torique=espaceTorique; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void centrer(){ 11.49/3.87 11.49/3.87 int cX=maxX/2; 11.49/3.87 int cY=maxY/2; 11.49/3.87 X=cX; 11.49/3.87 Y=cY; 11.49/3.87 11.49/3.87 } 11.49/3.87 11.49/3.87 public void haut(){ 11.49/3.87 11.49/3.87 Y--; 11.49/3.87 if(torique&&Y<0) Y=maxY-1; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void bas(){ 11.49/3.87 Y++; 11.49/3.87 if(torique&&Y==maxY) Y=0; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void droite(){ 11.49/3.87 X++; 11.49/3.87 if(torique&&X==maxX) X=0; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void gauche(){ 11.49/3.87 X--; 11.49/3.87 if(torique&&X<0) X=maxX-1; 11.49/3.87 } 11.49/3.87 11.49/3.87 public int getX(){ 11.49/3.87 return X; 11.49/3.87 } 11.49/3.87 11.49/3.87 public int getY(){ 11.49/3.87 return Y; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void imprimer(){ 11.49/3.87 //System.out.println("Curseur@["+getX()+","+getY()+"]"); 11.49/3.87 } 11.49/3.87 } 11.49/3.87 11.49/3.87 public class Carre { 11.49/3.87 11.49/3.87 private Curseur curseur=null; 11.49/3.87 private int cote=0; 11.49/3.87 11.49/3.87 public Carre(int cote){ 11.49/3.87 if(cote>1&cote%2==1){ 11.49/3.87 this.cote=cote; 11.49/3.87 }else{ 11.49/3.87 //System.out.println("Cette classe ne genere pas les carres magiques d\'ordre pair."); 11.49/3.87 //System.exit(0); 11.49/3.87 } 11.49/3.87 this.curseur=new Curseur(cote,cote,true); 11.49/3.87 } 11.49/3.87 11.49/3.87 private int [][] carre=null; 11.49/3.87 11.49/3.87 public void init(){ 11.49/3.87 carre=new int[cote][cote]; 11.49/3.87 int n=0; 11.49/3.87 for(int x=0;x<3;x++) for(int y=0;y<3;y++) carre[x][y]=0; 11.49/3.87 curseur.centrer(); 11.49/3.87 } 11.49/3.87 11.49/3.87 public void peupler(){ 11.49/3.87 curseur.bas(); 11.49/3.87 int nbre=1; 11.49/3.87 int cpteur=1; 11.49/3.87 while(cpteur<3){ 11.49/3.87 if(!ajouter(nbre,curseur.getX(),curseur.getY())){ 11.49/3.87 curseur.bas(); 11.49/3.87 curseur.gauche(); 11.49/3.87 cpteur++; 11.49/3.87 }else{ 11.49/3.87 cpteur=1; 11.49/3.87 curseur.bas(); 11.49/3.87 curseur.droite(); 11.49/3.87 nbre++; 11.49/3.87 } 11.49/3.87 } 11.49/3.87 } 11.49/3.87 11.49/3.87 public Curseur curseur(){ 11.49/3.87 return curseur; 11.49/3.87 } 11.49/3.87 11.49/3.87 public int cote(){ 11.49/3.87 return cote; 11.49/3.87 } 11.49/3.87 11.49/3.87 public boolean ajouter(int nombre, int X, int Y){ 11.49/3.87 if(carre[X][Y]!=0) return false; 11.49/3.87 carre[X][Y]=nombre; 11.49/3.87 return true; 11.49/3.87 } 11.49/3.87 11.49/3.87 public void imprimer(){ 11.49/3.87 for(int j=0;j= args.length) 11.49/3.87 return 0; 11.49/3.87 11.49/3.87 String string = args[index]; 11.49/3.87 index++; 11.49/3.87 return string.length(); 11.49/3.87 } 11.49/3.87 } 11.49/3.87 11.49/3.87 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (3) JBCToGraph (EQUIVALENT) 11.49/3.87 Constructed TerminationGraph. 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (4) 11.49/3.87 Obligation: 11.49/3.87 Termination Graph based on JBC Program: 11.49/3.87 Carre.main([Ljava/lang/String;)V: Graph of 630 nodes with 2 SCCs. 11.49/3.87 11.49/3.87 11.49/3.87 11.49/3.87 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (5) TerminationGraphToSCCProof (SOUND) 11.49/3.87 Splitted TerminationGraph to 2 SCCss. 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (6) 11.49/3.87 Complex Obligation (AND) 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (7) 11.49/3.87 Obligation: 11.49/3.87 SCC of termination graph based on JBC Program. 11.49/3.87 SCC contains nodes from the following methods: Carre.main([Ljava/lang/String;)V 11.49/3.87 SCC calls the following helper methods: 11.49/3.87 Performed SCC analyses: 11.49/3.87 *Used field analysis yielded the following read fields: 11.49/3.87 *Carre: [cote] 11.49/3.87 *Marker field analysis yielded the following relations that could be markers: 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (8) SCCToIRSProof (SOUND) 11.49/3.87 Transformed FIGraph SCCs to intTRSs. Log: 11.49/3.87 Generated rules. Obtained 23 IRulesP rules: 11.49/3.87 f4321_0_imprimer_Load(EOS(STATIC_4321), java.lang.Object(Carre(EOC, i31)), i496, i496) -> f4322_0_imprimer_FieldAccess(EOS(STATIC_4322), java.lang.Object(Carre(EOC, i31)), i496, i496, java.lang.Object(Carre(EOC, i31))) :|: TRUE 11.49/3.87 f4322_0_imprimer_FieldAccess(EOS(STATIC_4322), java.lang.Object(Carre(EOC, i31)), i496, i496, java.lang.Object(Carre(EOC, i31))) -> f4323_0_imprimer_GE(EOS(STATIC_4323), java.lang.Object(Carre(EOC, i31)), i496, i496, i31) :|: TRUE 11.49/3.87 f4323_0_imprimer_GE(EOS(STATIC_4323), java.lang.Object(Carre(EOC, i31)), i496, i496, i31) -> f4325_0_imprimer_GE(EOS(STATIC_4325), java.lang.Object(Carre(EOC, i31)), i496, i496, i31) :|: i496 < i31 11.49/3.87 f4325_0_imprimer_GE(EOS(STATIC_4325), java.lang.Object(Carre(EOC, i31)), i496, i496, i31) -> f4327_0_imprimer_ConstantStackPush(EOS(STATIC_4327), java.lang.Object(Carre(EOC, i31)), i496) :|: i496 < i31 11.49/3.87 f4327_0_imprimer_ConstantStackPush(EOS(STATIC_4327), java.lang.Object(Carre(EOC, i31)), i496) -> f4329_0_imprimer_Store(EOS(STATIC_4329), java.lang.Object(Carre(EOC, i31)), i496, 0) :|: TRUE 11.49/3.87 f4329_0_imprimer_Store(EOS(STATIC_4329), java.lang.Object(Carre(EOC, i31)), i496, matching1) -> f4331_0_imprimer_Load(EOS(STATIC_4331), java.lang.Object(Carre(EOC, i31)), i496, 0) :|: TRUE && matching1 = 0 11.49/3.87 f4331_0_imprimer_Load(EOS(STATIC_4331), java.lang.Object(Carre(EOC, i31)), i496, matching1) -> f4338_0_imprimer_Load(EOS(STATIC_4338), java.lang.Object(Carre(EOC, i31)), i496, 0) :|: TRUE && matching1 = 0 11.49/3.87 f4338_0_imprimer_Load(EOS(STATIC_4338), java.lang.Object(Carre(EOC, i31)), i496, i498) -> f4345_0_imprimer_Load(EOS(STATIC_4345), java.lang.Object(Carre(EOC, i31)), i496, i498) :|: TRUE 11.49/3.87 f4345_0_imprimer_Load(EOS(STATIC_4345), java.lang.Object(Carre(EOC, i31)), i496, i501) -> f4357_0_imprimer_Load(EOS(STATIC_4357), java.lang.Object(Carre(EOC, i31)), i496, i501) :|: TRUE 11.49/3.87 f4357_0_imprimer_Load(EOS(STATIC_4357), java.lang.Object(Carre(EOC, i31)), i496, i506) -> f4358_0_imprimer_Load(EOS(STATIC_4358), java.lang.Object(Carre(EOC, i31)), i496, i506, i506) :|: TRUE 11.49/3.87 f4358_0_imprimer_Load(EOS(STATIC_4358), java.lang.Object(Carre(EOC, i31)), i496, i506, i506) -> f4359_0_imprimer_FieldAccess(EOS(STATIC_4359), java.lang.Object(Carre(EOC, i31)), i496, i506, i506, java.lang.Object(Carre(EOC, i31))) :|: TRUE 11.49/3.87 f4359_0_imprimer_FieldAccess(EOS(STATIC_4359), java.lang.Object(Carre(EOC, i31)), i496, i506, i506, java.lang.Object(Carre(EOC, i31))) -> f4360_0_imprimer_GE(EOS(STATIC_4360), java.lang.Object(Carre(EOC, i31)), i496, i506, i506, i31) :|: TRUE 11.49/3.87 f4360_0_imprimer_GE(EOS(STATIC_4360), java.lang.Object(Carre(EOC, i31)), i496, i506, i506, i31) -> f4361_0_imprimer_GE(EOS(STATIC_4361), java.lang.Object(Carre(EOC, i31)), i496, i506, i506, i31) :|: i506 >= i31 11.49/3.87 f4360_0_imprimer_GE(EOS(STATIC_4360), java.lang.Object(Carre(EOC, i31)), i496, i506, i506, i31) -> f4362_0_imprimer_GE(EOS(STATIC_4362), java.lang.Object(Carre(EOC, i31)), i496, i506, i506, i31) :|: i506 < i31 11.49/3.87 f4361_0_imprimer_GE(EOS(STATIC_4361), java.lang.Object(Carre(EOC, i31)), i496, i506, i506, i31) -> f4363_0_imprimer_Inc(EOS(STATIC_4363), java.lang.Object(Carre(EOC, i31)), i496) :|: i506 >= i31 11.49/3.87 f4363_0_imprimer_Inc(EOS(STATIC_4363), java.lang.Object(Carre(EOC, i31)), i496) -> f4365_0_imprimer_JMP(EOS(STATIC_4365), java.lang.Object(Carre(EOC, i31)), i496 + 1) :|: TRUE 11.49/3.87 f4365_0_imprimer_JMP(EOS(STATIC_4365), java.lang.Object(Carre(EOC, i31)), i508) -> f4367_0_imprimer_Load(EOS(STATIC_4367), java.lang.Object(Carre(EOC, i31)), i508) :|: TRUE 11.49/3.87 f4367_0_imprimer_Load(EOS(STATIC_4367), java.lang.Object(Carre(EOC, i31)), i508) -> f4320_0_imprimer_Load(EOS(STATIC_4320), java.lang.Object(Carre(EOC, i31)), i508) :|: TRUE 11.49/3.87 f4320_0_imprimer_Load(EOS(STATIC_4320), java.lang.Object(Carre(EOC, i31)), i496) -> f4321_0_imprimer_Load(EOS(STATIC_4321), java.lang.Object(Carre(EOC, i31)), i496, i496) :|: TRUE 11.49/3.87 f4362_0_imprimer_GE(EOS(STATIC_4362), java.lang.Object(Carre(EOC, i31)), i496, i506, i506, i31) -> f4364_0_imprimer_Inc(EOS(STATIC_4364), java.lang.Object(Carre(EOC, i31)), i496, i506) :|: i506 < i31 11.49/3.87 f4364_0_imprimer_Inc(EOS(STATIC_4364), java.lang.Object(Carre(EOC, i31)), i496, i506) -> f4366_0_imprimer_JMP(EOS(STATIC_4366), java.lang.Object(Carre(EOC, i31)), i496, i506 + 1) :|: TRUE 11.49/3.87 f4366_0_imprimer_JMP(EOS(STATIC_4366), java.lang.Object(Carre(EOC, i31)), i496, i509) -> f4368_0_imprimer_Load(EOS(STATIC_4368), java.lang.Object(Carre(EOC, i31)), i496, i509) :|: TRUE 11.49/3.87 f4368_0_imprimer_Load(EOS(STATIC_4368), java.lang.Object(Carre(EOC, i31)), i496, i509) -> f4357_0_imprimer_Load(EOS(STATIC_4357), java.lang.Object(Carre(EOC, i31)), i496, i509) :|: TRUE 11.49/3.87 Combined rules. Obtained 2 IRulesP rules: 11.49/3.87 f4360_0_imprimer_GE(EOS(STATIC_4360), java.lang.Object(Carre(EOC, i31:0)), i496:0, i506:0, i506:0, i31:0) -> f4360_0_imprimer_GE(EOS(STATIC_4360), java.lang.Object(Carre(EOC, i31:0)), i496:0, i506:0 + 1, i506:0 + 1, i31:0) :|: i506:0 < i31:0 11.49/3.87 f4360_0_imprimer_GE(EOS(STATIC_4360), java.lang.Object(Carre(EOC, i31:0)), i496:0, i506:0, i506:0, i31:0) -> f4360_0_imprimer_GE(EOS(STATIC_4360), java.lang.Object(Carre(EOC, i31:0)), i496:0 + 1, 0, 0, i31:0) :|: i496:0 + 1 < i31:0 && i506:0 >= i31:0 11.49/3.87 Filtered constant ground arguments: 11.49/3.87 f4360_0_imprimer_GE(x1, x2, x3, x4, x5, x6) -> f4360_0_imprimer_GE(x2, x3, x4, x5, x6) 11.49/3.87 EOS(x1) -> EOS 11.49/3.87 Carre(x1, x2) -> Carre(x2) 11.49/3.87 Filtered duplicate arguments: 11.49/3.87 f4360_0_imprimer_GE(x1, x2, x3, x4, x5) -> f4360_0_imprimer_GE(x1, x2, x4, x5) 11.49/3.87 Finished conversion. Obtained 2 rules.P rules: 11.49/3.87 f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0, i506:0, i31:0, i31:0) -> f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0, i506:0 + 1, i31:0, i31:0) :|: i506:0 < i31:0 11.49/3.87 f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0, i506:0, i31:0, i31:0) -> f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0 + 1, 0, i31:0, i31:0) :|: i496:0 + 1 < i31:0 && i506:0 >= i31:0 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (9) 11.49/3.87 Obligation: 11.49/3.87 Rules: 11.49/3.87 f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0, i506:0, i31:0, i31:0) -> f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0, i506:0 + 1, i31:0, i31:0) :|: i506:0 < i31:0 11.49/3.87 f4360_0_imprimer_GE(java.lang.Object(Carre(x)), x1, x2, x, x) -> f4360_0_imprimer_GE(java.lang.Object(Carre(x)), x1 + 1, 0, x, x) :|: x1 + 1 < x && x2 >= x 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (10) IRSFormatTransformerProof (EQUIVALENT) 11.49/3.87 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (11) 11.49/3.87 Obligation: 11.49/3.87 Rules: 11.49/3.87 f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0, i506:0, i31:0, i31:0) -> f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0, arith, i31:0, i31:0) :|: i506:0 < i31:0 && arith = i506:0 + 1 11.49/3.87 f4360_0_imprimer_GE(java.lang.Object(Carre(x3)), x4, x5, x3, x3) -> f4360_0_imprimer_GE(java.lang.Object(Carre(x3)), x6, 0, x3, x3) :|: x4 + 1 < x3 && x5 >= x3 && x6 = x4 + 1 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (12) IRSwTTerminationDigraphProof (EQUIVALENT) 11.49/3.87 Constructed termination digraph! 11.49/3.87 Nodes: 11.49/3.87 (1) f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0, i506:0, i31:0, i31:0) -> f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0, arith, i31:0, i31:0) :|: i506:0 < i31:0 && arith = i506:0 + 1 11.49/3.87 (2) f4360_0_imprimer_GE(java.lang.Object(Carre(x3)), x4, x5, x3, x3) -> f4360_0_imprimer_GE(java.lang.Object(Carre(x3)), x6, 0, x3, x3) :|: x4 + 1 < x3 && x5 >= x3 && x6 = x4 + 1 11.49/3.87 11.49/3.87 Arcs: 11.49/3.87 (1) -> (1), (2) 11.49/3.87 (2) -> (1), (2) 11.49/3.87 11.49/3.87 This digraph is fully evaluated! 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (13) 11.49/3.87 Obligation: 11.49/3.87 11.49/3.87 Termination digraph: 11.49/3.87 Nodes: 11.49/3.87 (1) f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0, i506:0, i31:0, i31:0) -> f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0)), i496:0, arith, i31:0, i31:0) :|: i506:0 < i31:0 && arith = i506:0 + 1 11.49/3.87 (2) f4360_0_imprimer_GE(java.lang.Object(Carre(x3)), x4, x5, x3, x3) -> f4360_0_imprimer_GE(java.lang.Object(Carre(x3)), x6, 0, x3, x3) :|: x4 + 1 < x3 && x5 >= x3 && x6 = x4 + 1 11.49/3.87 11.49/3.87 Arcs: 11.49/3.87 (1) -> (1), (2) 11.49/3.87 (2) -> (1), (2) 11.49/3.87 11.49/3.87 This digraph is fully evaluated! 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (14) IntTRSCompressionProof (EQUIVALENT) 11.49/3.87 Compressed rules. 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (15) 11.49/3.87 Obligation: 11.49/3.87 Rules: 11.49/3.87 f4360_0_imprimer_GE(java.lang.Object(Carre(x3:0)), x4:0, x5:0, x3:0, x3:0) -> f4360_0_imprimer_GE(java.lang.Object(Carre(x3:0)), x4:0 + 1, 0, x3:0, x3:0) :|: x4:0 + 1 < x3:0 && x5:0 >= x3:0 11.49/3.87 f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0:0)), i496:0:0, i506:0:0, i31:0:0, i31:0:0) -> f4360_0_imprimer_GE(java.lang.Object(Carre(i31:0:0)), i496:0:0, i506:0:0 + 1, i31:0:0, i31:0:0) :|: i506:0:0 < i31:0:0 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (16) TempFilterProof (SOUND) 11.49/3.87 Used the following sort dictionary for filtering: 11.49/3.87 f4360_0_imprimer_GE(VARIABLE, VARIABLE, VARIABLE, INTEGER, INTEGER) 11.49/3.87 java.lang.Object(VARIABLE) 11.49/3.87 Carre(INTEGER) 11.49/3.87 Replaced non-predefined constructor symbols by 0. 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (17) 11.49/3.87 Obligation: 11.49/3.87 Rules: 11.49/3.87 f4360_0_imprimer_GE(c, x4:0, x5:0, x3:0, x3:0) -> f4360_0_imprimer_GE(c1, c2, c3, x3:0, x3:0) :|: c3 = 0 && (c2 = x4:0 + 1 && (c1 = 0 && c = 0)) && (x4:0 + 1 < x3:0 && x5:0 >= x3:0) 11.49/3.87 f4360_0_imprimer_GE(c4, i496:0:0, i506:0:0, i31:0:0, i31:0:0) -> f4360_0_imprimer_GE(c5, i496:0:0, c6, i31:0:0, i31:0:0) :|: c6 = i506:0:0 + 1 && (c5 = 0 && c4 = 0) && i506:0:0 < i31:0:0 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (18) PolynomialOrderProcessor (EQUIVALENT) 11.49/3.87 Found the following polynomial interpretation: 11.49/3.87 [f4360_0_imprimer_GE(x, x1, x2, x3, x4)] = -1 + c*x - x1 + x4 11.49/3.87 11.49/3.87 The following rules are decreasing: 11.49/3.87 f4360_0_imprimer_GE(c, x4:0, x5:0, x3:0, x3:0) -> f4360_0_imprimer_GE(c1, c2, c3, x3:0, x3:0) :|: c3 = 0 && (c2 = x4:0 + 1 && (c1 = 0 && c = 0)) && (x4:0 + 1 < x3:0 && x5:0 >= x3:0) 11.49/3.87 The following rules are bounded: 11.49/3.87 f4360_0_imprimer_GE(c, x4:0, x5:0, x3:0, x3:0) -> f4360_0_imprimer_GE(c1, c2, c3, x3:0, x3:0) :|: c3 = 0 && (c2 = x4:0 + 1 && (c1 = 0 && c = 0)) && (x4:0 + 1 < x3:0 && x5:0 >= x3:0) 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (19) 11.49/3.87 Obligation: 11.49/3.87 Rules: 11.49/3.87 f4360_0_imprimer_GE(c4, i496:0:0, i506:0:0, i31:0:0, i31:0:0) -> f4360_0_imprimer_GE(c5, i496:0:0, c6, i31:0:0, i31:0:0) :|: c6 = i506:0:0 + 1 && (c5 = 0 && c4 = 0) && i506:0:0 < i31:0:0 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (20) RankingReductionPairProof (EQUIVALENT) 11.49/3.87 Interpretation: 11.49/3.87 [ f4360_0_imprimer_GE ] = -1*f4360_0_imprimer_GE_3 + f4360_0_imprimer_GE_5 11.49/3.87 11.49/3.87 The following rules are decreasing: 11.49/3.87 f4360_0_imprimer_GE(c4, i496:0:0, i506:0:0, i31:0:0, i31:0:0) -> f4360_0_imprimer_GE(c5, i496:0:0, c6, i31:0:0, i31:0:0) :|: c6 = i506:0:0 + 1 && (c5 = 0 && c4 = 0) && i506:0:0 < i31:0:0 11.49/3.87 11.49/3.87 The following rules are bounded: 11.49/3.87 f4360_0_imprimer_GE(c4, i496:0:0, i506:0:0, i31:0:0, i31:0:0) -> f4360_0_imprimer_GE(c5, i496:0:0, c6, i31:0:0, i31:0:0) :|: c6 = i506:0:0 + 1 && (c5 = 0 && c4 = 0) && i506:0:0 < i31:0:0 11.49/3.87 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (21) 11.49/3.87 YES 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (22) 11.49/3.87 Obligation: 11.49/3.87 SCC of termination graph based on JBC Program. 11.49/3.87 SCC contains nodes from the following methods: Carre.main([Ljava/lang/String;)V 11.49/3.87 SCC calls the following helper methods: 11.49/3.87 Performed SCC analyses: 11.49/3.87 *Used field analysis yielded the following read fields: 11.49/3.87 *Carre: [carre] 11.49/3.87 *Marker field analysis yielded the following relations that could be markers: 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (23) SCCToIRSProof (SOUND) 11.49/3.87 Transformed FIGraph SCCs to intTRSs. Log: 11.49/3.87 Generated rules. Obtained 32 IRulesP rules: 11.49/3.87 f3634_0_init_ConstantStackPush(EOS(STATIC_3634), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i357, i357) -> f3635_0_init_GE(EOS(STATIC_3635), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i357, i357, 3) :|: TRUE 11.49/3.87 f3635_0_init_GE(EOS(STATIC_3635), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i371, matching1) -> f3636_0_init_GE(EOS(STATIC_3636), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i371, 3) :|: TRUE && matching1 = 3 11.49/3.87 f3636_0_init_GE(EOS(STATIC_3636), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i371, matching1) -> f3638_0_init_ConstantStackPush(EOS(STATIC_3638), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371) :|: i371 < 3 && matching1 = 3 11.49/3.87 f3638_0_init_ConstantStackPush(EOS(STATIC_3638), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371) -> f3675_0_init_Store(EOS(STATIC_3675), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, 0) :|: TRUE 11.49/3.87 f3675_0_init_Store(EOS(STATIC_3675), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, matching1) -> f3681_0_init_Load(EOS(STATIC_3681), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, 0) :|: TRUE && matching1 = 0 11.49/3.87 f3681_0_init_Load(EOS(STATIC_3681), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, matching1) -> f3912_0_init_Load(EOS(STATIC_3912), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, 0) :|: TRUE && matching1 = 0 11.49/3.87 f3912_0_init_Load(EOS(STATIC_3912), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i391) -> f4107_0_init_Load(EOS(STATIC_4107), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i391) :|: TRUE 11.49/3.87 f4107_0_init_Load(EOS(STATIC_4107), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i420) -> f4155_0_init_Load(EOS(STATIC_4155), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i420) :|: TRUE 11.49/3.87 f4155_0_init_Load(EOS(STATIC_4155), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i451) -> f4158_0_init_ConstantStackPush(EOS(STATIC_4158), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i451, i451) :|: TRUE 11.49/3.87 f4158_0_init_ConstantStackPush(EOS(STATIC_4158), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i451, i451) -> f4161_0_init_GE(EOS(STATIC_4161), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i451, i451, 3) :|: TRUE 11.49/3.87 f4161_0_init_GE(EOS(STATIC_4161), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, i465, matching1) -> f4164_0_init_GE(EOS(STATIC_4164), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, i465, 3) :|: TRUE && matching1 = 3 11.49/3.87 f4161_0_init_GE(EOS(STATIC_4161), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i466, i466, matching1) -> f4165_0_init_GE(EOS(STATIC_4165), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i466, i466, 3) :|: TRUE && matching1 = 3 11.49/3.87 f4164_0_init_GE(EOS(STATIC_4164), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, i465, matching1) -> f4167_0_init_Load(EOS(STATIC_4167), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465) :|: i465 < 3 && matching1 = 3 11.49/3.87 f4167_0_init_Load(EOS(STATIC_4167), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465) -> f4170_0_init_FieldAccess(EOS(STATIC_4170), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31))))) :|: TRUE 11.49/3.87 f4170_0_init_FieldAccess(EOS(STATIC_4170), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31))))) -> f4173_0_init_Load(EOS(STATIC_4173), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(ARRAY(i31))) :|: TRUE 11.49/3.87 f4173_0_init_Load(EOS(STATIC_4173), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(ARRAY(i31))) -> f4176_0_init_ArrayAccess(EOS(STATIC_4176), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(ARRAY(i31)), i371) :|: TRUE 11.49/3.87 f4176_0_init_ArrayAccess(EOS(STATIC_4176), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(ARRAY(i31)), i371) -> f4178_0_init_ArrayAccess(EOS(STATIC_4178), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(ARRAY(i31)), i371) :|: TRUE 11.49/3.87 f4178_0_init_ArrayAccess(EOS(STATIC_4178), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(ARRAY(i31)), i371) -> f4181_0_init_Load(EOS(STATIC_4181), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, o1102) :|: i371 < i31 11.49/3.87 f4181_0_init_Load(EOS(STATIC_4181), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, o1102) -> f4184_0_init_ConstantStackPush(EOS(STATIC_4184), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, o1102, i465) :|: TRUE 11.49/3.87 f4184_0_init_ConstantStackPush(EOS(STATIC_4184), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, o1102, i465) -> f4186_0_init_ArrayAccess(EOS(STATIC_4186), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, o1102, i465, 0) :|: TRUE 11.49/3.87 f4186_0_init_ArrayAccess(EOS(STATIC_4186), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(o1108put), i465, matching1) -> f4189_0_init_ArrayAccess(EOS(STATIC_4189), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(o1108put), i465, 0) :|: TRUE && matching1 = 0 11.49/3.87 f4189_0_init_ArrayAccess(EOS(STATIC_4189), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(ARRAY(i476)), i465, matching1) -> f4193_0_init_ArrayAccess(EOS(STATIC_4193), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(ARRAY(i476)), i465, 0) :|: i476 >= 0 && matching1 = 0 11.49/3.87 f4193_0_init_ArrayAccess(EOS(STATIC_4193), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(ARRAY(i476)), i465, matching1) -> f4196_0_init_ArrayAccess(EOS(STATIC_4196), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(ARRAY(i476)), i465, 0) :|: TRUE && matching1 = 0 11.49/3.87 f4196_0_init_ArrayAccess(EOS(STATIC_4196), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465, java.lang.Object(ARRAY(i476)), i465, matching1) -> f4201_0_init_Inc(EOS(STATIC_4201), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465) :|: i465 < i476 && matching1 = 0 11.49/3.87 f4201_0_init_Inc(EOS(STATIC_4201), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465) -> f4206_0_init_JMP(EOS(STATIC_4206), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i465 + 1) :|: TRUE 11.49/3.87 f4206_0_init_JMP(EOS(STATIC_4206), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i479) -> f4209_0_init_Load(EOS(STATIC_4209), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i479) :|: TRUE 11.49/3.87 f4209_0_init_Load(EOS(STATIC_4209), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i479) -> f4155_0_init_Load(EOS(STATIC_4155), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i479) :|: TRUE 11.49/3.87 f4165_0_init_GE(EOS(STATIC_4165), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371, i466, i466, matching1) -> f4168_0_init_Inc(EOS(STATIC_4168), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371) :|: i466 >= 3 && matching1 = 3 11.49/3.87 f4168_0_init_Inc(EOS(STATIC_4168), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371) -> f4171_0_init_JMP(EOS(STATIC_4171), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i371 + 1) :|: TRUE 11.49/3.87 f4171_0_init_JMP(EOS(STATIC_4171), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i467) -> f4174_0_init_Load(EOS(STATIC_4174), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i467) :|: TRUE 11.49/3.87 f4174_0_init_Load(EOS(STATIC_4174), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i467) -> f3628_0_init_Load(EOS(STATIC_3628), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i467) :|: TRUE 11.49/3.87 f3628_0_init_Load(EOS(STATIC_3628), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i357) -> f3634_0_init_ConstantStackPush(EOS(STATIC_3634), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31)))), i357, i357) :|: TRUE 11.49/3.87 Combined rules. Obtained 2 IRulesP rules: 11.49/3.87 f4161_0_init_GE(EOS(STATIC_4161), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31:0)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31:0)))), i371:0, i466:0, i466:0, 3) -> f4161_0_init_GE(EOS(STATIC_4161), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31:0)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31:0)))), i371:0 + 1, 0, 0, 3) :|: i466:0 > 2 && i371:0 < 2 11.49/3.87 f4161_0_init_GE(EOS(STATIC_4161), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31:0)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31:0)))), i371:0, i465:0, i465:0, 3) -> f4161_0_init_GE(EOS(STATIC_4161), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31:0)))), java.lang.Object(Carre(EOC, java.lang.Object(ARRAY(i31:0)))), i371:0, i465:0 + 1, i465:0 + 1, 3) :|: i465:0 < 3 && i371:0 < i31:0 && i476:0 > i465:0 && i476:0 > -1 11.49/3.87 Filtered constant ground arguments: 11.49/3.87 f4161_0_init_GE(x1, x2, x3, x4, x5, x6, x7) -> f4161_0_init_GE(x2, x3, x4, x5, x6) 11.49/3.87 EOS(x1) -> EOS 11.49/3.87 Carre(x1, x2) -> Carre(x2) 11.49/3.87 Filtered duplicate arguments: 11.49/3.87 f4161_0_init_GE(x1, x2, x3, x4, x5) -> f4161_0_init_GE(x2, x3, x5) 11.49/3.87 Finished conversion. Obtained 2 rules.P rules: 11.49/3.87 f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), i371:0, i466:0, i31:0) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), i371:0 + 1, 0, i31:0) :|: i466:0 > 2 && i371:0 < 2 11.49/3.87 f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), i371:0, i465:0, i31:0) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), i371:0, i465:0 + 1, i31:0) :|: i371:0 < i31:0 && i465:0 < 3 && i476:0 > -1 && i476:0 > i465:0 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (24) 11.49/3.87 Obligation: 11.49/3.87 Rules: 11.49/3.87 f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), i371:0, i466:0, i31:0) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), i371:0 + 1, 0, i31:0) :|: i466:0 > 2 && i371:0 < 2 11.49/3.87 f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(x)))), x1, x2, x) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(x)))), x1, x2 + 1, x) :|: x1 < x && x2 < 3 && x3 > -1 && x3 > x2 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (25) IRSFormatTransformerProof (EQUIVALENT) 11.49/3.87 Reformatted IRS to match normalized format (transformed away non-linear left-hand sides, !=, / and %). 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (26) 11.49/3.87 Obligation: 11.49/3.87 Rules: 11.49/3.87 f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), i371:0, i466:0, i31:0) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), arith, 0, i31:0) :|: i466:0 > 2 && i371:0 < 2 && arith = i371:0 + 1 11.49/3.87 f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(x4)))), x5, x6, x4) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(x4)))), x5, x7, x4) :|: x5 < x4 && x6 < 3 && x8 > -1 && x8 > x6 && x7 = x6 + 1 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (27) IRSwTTerminationDigraphProof (EQUIVALENT) 11.49/3.87 Constructed termination digraph! 11.49/3.87 Nodes: 11.49/3.87 (1) f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), i371:0, i466:0, i31:0) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), arith, 0, i31:0) :|: i466:0 > 2 && i371:0 < 2 && arith = i371:0 + 1 11.49/3.87 (2) f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(x4)))), x5, x6, x4) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(x4)))), x5, x7, x4) :|: x5 < x4 && x6 < 3 && x8 > -1 && x8 > x6 && x7 = x6 + 1 11.49/3.87 11.49/3.87 Arcs: 11.49/3.87 (1) -> (2) 11.49/3.87 (2) -> (1), (2) 11.49/3.87 11.49/3.87 This digraph is fully evaluated! 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (28) 11.49/3.87 Obligation: 11.49/3.87 11.49/3.87 Termination digraph: 11.49/3.87 Nodes: 11.49/3.87 (1) f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), i371:0, i466:0, i31:0) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0)))), arith, 0, i31:0) :|: i466:0 > 2 && i371:0 < 2 && arith = i371:0 + 1 11.49/3.87 (2) f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(x4)))), x5, x6, x4) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(x4)))), x5, x7, x4) :|: x5 < x4 && x6 < 3 && x8 > -1 && x8 > x6 && x7 = x6 + 1 11.49/3.87 11.49/3.87 Arcs: 11.49/3.87 (1) -> (2) 11.49/3.87 (2) -> (1), (2) 11.49/3.87 11.49/3.87 This digraph is fully evaluated! 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (29) IntTRSCompressionProof (EQUIVALENT) 11.49/3.87 Compressed rules. 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (30) 11.49/3.87 Obligation: 11.49/3.87 Rules: 11.49/3.87 f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0:0)))), i371:0:0, i466:0:0, i31:0:0) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(i31:0:0)))), i371:0:0 + 1, 0, i31:0:0) :|: i466:0:0 > 2 && i371:0:0 < 2 11.49/3.87 f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(x4:0)))), x5:0, x6:0, x4:0) -> f4161_0_init_GE(java.lang.Object(Carre(java.lang.Object(ARRAY(x4:0)))), x5:0, x6:0 + 1, x4:0) :|: x8:0 > -1 && x8:0 > x6:0 && x6:0 < 3 && x5:0 < x4:0 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (31) TempFilterProof (SOUND) 11.49/3.87 Used the following sort dictionary for filtering: 11.49/3.87 f4161_0_init_GE(VARIABLE, INTEGER, VARIABLE, VARIABLE) 11.49/3.87 java.lang.Object(VARIABLE) 11.49/3.87 Carre(VARIABLE) 11.49/3.87 ARRAY(VARIABLE) 11.49/3.87 Replaced non-predefined constructor symbols by 0. 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (32) 11.49/3.87 Obligation: 11.49/3.87 Rules: 11.49/3.87 f4161_0_init_GE(c, i371:0:0, i466:0:0, i31:0:0) -> f4161_0_init_GE(c1, c2, c3, i31:0:0) :|: c3 = 0 && (c2 = i371:0:0 + 1 && (c1 = 0 && c = 0)) && (i466:0:0 > 2 && i371:0:0 < 2) 11.49/3.87 f4161_0_init_GE(c4, x5:0, x6:0, x4:0) -> f4161_0_init_GE(c5, x5:0, c6, x4:0) :|: c6 = x6:0 + 1 && (c5 = 0 && c4 = 0) && (x8:0 > -1 && x8:0 > x6:0 && x6:0 < 3 && x5:0 < x4:0) 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (33) PolynomialOrderProcessor (EQUIVALENT) 11.49/3.87 Found the following polynomial interpretation: 11.49/3.87 [f4161_0_init_GE(x, x1, x2, x3)] = c*x - x1 + x3 11.49/3.87 11.49/3.87 The following rules are decreasing: 11.49/3.87 f4161_0_init_GE(c, i371:0:0, i466:0:0, i31:0:0) -> f4161_0_init_GE(c1, c2, c3, i31:0:0) :|: c3 = 0 && (c2 = i371:0:0 + 1 && (c1 = 0 && c = 0)) && (i466:0:0 > 2 && i371:0:0 < 2) 11.49/3.87 The following rules are bounded: 11.49/3.87 f4161_0_init_GE(c4, x5:0, x6:0, x4:0) -> f4161_0_init_GE(c5, x5:0, c6, x4:0) :|: c6 = x6:0 + 1 && (c5 = 0 && c4 = 0) && (x8:0 > -1 && x8:0 > x6:0 && x6:0 < 3 && x5:0 < x4:0) 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (34) 11.49/3.87 Complex Obligation (AND) 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (35) 11.49/3.87 Obligation: 11.49/3.87 Rules: 11.49/3.87 f4161_0_init_GE(c4, x5:0, x6:0, x4:0) -> f4161_0_init_GE(c5, x5:0, c6, x4:0) :|: c6 = x6:0 + 1 && (c5 = 0 && c4 = 0) && (x8:0 > -1 && x8:0 > x6:0 && x6:0 < 3 && x5:0 < x4:0) 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (36) PolynomialOrderProcessor (EQUIVALENT) 11.49/3.87 Found the following polynomial interpretation: 11.49/3.87 [f4161_0_init_GE(x, x1, x2, x3)] = 2 + c*x - x2 11.49/3.87 11.49/3.87 The following rules are decreasing: 11.49/3.87 f4161_0_init_GE(c4, x5:0, x6:0, x4:0) -> f4161_0_init_GE(c5, x5:0, c6, x4:0) :|: c6 = x6:0 + 1 && (c5 = 0 && c4 = 0) && (x8:0 > -1 && x8:0 > x6:0 && x6:0 < 3 && x5:0 < x4:0) 11.49/3.87 The following rules are bounded: 11.49/3.87 f4161_0_init_GE(c4, x5:0, x6:0, x4:0) -> f4161_0_init_GE(c5, x5:0, c6, x4:0) :|: c6 = x6:0 + 1 && (c5 = 0 && c4 = 0) && (x8:0 > -1 && x8:0 > x6:0 && x6:0 < 3 && x5:0 < x4:0) 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (37) 11.49/3.87 YES 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (38) 11.49/3.87 Obligation: 11.49/3.87 Rules: 11.49/3.87 f4161_0_init_GE(c, i371:0:0, i466:0:0, i31:0:0) -> f4161_0_init_GE(c1, c2, c3, i31:0:0) :|: c3 = 0 && (c2 = i371:0:0 + 1 && (c1 = 0 && c = 0)) && (i466:0:0 > 2 && i371:0:0 < 2) 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (39) PolynomialOrderProcessor (EQUIVALENT) 11.49/3.87 Found the following polynomial interpretation: 11.49/3.87 [f4161_0_init_GE(x, x1, x2, x3)] = 1 + c*x - x1 11.49/3.87 11.49/3.87 The following rules are decreasing: 11.49/3.87 f4161_0_init_GE(c, i371:0:0, i466:0:0, i31:0:0) -> f4161_0_init_GE(c1, c2, c3, i31:0:0) :|: c3 = 0 && (c2 = i371:0:0 + 1 && (c1 = 0 && c = 0)) && (i466:0:0 > 2 && i371:0:0 < 2) 11.49/3.87 The following rules are bounded: 11.49/3.87 f4161_0_init_GE(c, i371:0:0, i466:0:0, i31:0:0) -> f4161_0_init_GE(c1, c2, c3, i31:0:0) :|: c3 = 0 && (c2 = i371:0:0 + 1 && (c1 = 0 && c = 0)) && (i466:0:0 > 2 && i371:0:0 < 2) 11.49/3.87 11.49/3.87 ---------------------------------------- 11.49/3.87 11.49/3.87 (40) 11.49/3.87 YES 11.49/3.92 EOF