Initial Problem
Start: evalgcdstart
Program_Vars: Arg_0, Arg_1
Temp_Vars:
Locations: evalgcdbb4in, evalgcdbb5in, evalgcdbb6in, evalgcdbb7in, evalgcdentryin, evalgcdreturnin, evalgcdstart, evalgcdstop
Transitions:
7:evalgcdbb4in(Arg_0,Arg_1) -> evalgcdbb5in(Arg_0,Arg_1):|:Arg_1+1<=Arg_0
8:evalgcdbb4in(Arg_0,Arg_1) -> evalgcdbb6in(Arg_0,Arg_1):|:Arg_0<=Arg_1
9:evalgcdbb5in(Arg_0,Arg_1) -> evalgcdbb7in(Arg_0-Arg_1,Arg_1)
10:evalgcdbb6in(Arg_0,Arg_1) -> evalgcdbb7in(Arg_0,Arg_1-Arg_0)
4:evalgcdbb7in(Arg_0,Arg_1) -> evalgcdbb4in(Arg_0,Arg_1):|:Arg_1+1<=Arg_0
5:evalgcdbb7in(Arg_0,Arg_1) -> evalgcdbb4in(Arg_0,Arg_1):|:Arg_0+1<=Arg_1
6:evalgcdbb7in(Arg_0,Arg_1) -> evalgcdreturnin(Arg_0,Arg_1):|:Arg_1<=Arg_0 && Arg_0<=Arg_1
3:evalgcdentryin(Arg_0,Arg_1) -> evalgcdbb7in(Arg_1,Arg_0):|:1<=Arg_0 && 1<=Arg_1
1:evalgcdentryin(Arg_0,Arg_1) -> evalgcdreturnin(Arg_0,Arg_1):|:Arg_0<=0
2:evalgcdentryin(Arg_0,Arg_1) -> evalgcdreturnin(Arg_0,Arg_1):|:Arg_1<=0
11:evalgcdreturnin(Arg_0,Arg_1) -> evalgcdstop(Arg_0,Arg_1)
0:evalgcdstart(Arg_0,Arg_1) -> evalgcdentryin(Arg_0,Arg_1)
Preprocessing
Found invariant 1<=Arg_1 && 1<=Arg_0+Arg_1 && Arg_0<=Arg_1 for location evalgcdbb6in
Found invariant 1<=Arg_0+Arg_1 for location evalgcdbb4in
Found invariant 1<=Arg_0+Arg_1 for location evalgcdbb7in
Found invariant 1+Arg_1<=Arg_0 && 1<=Arg_0+Arg_1 && 1<=Arg_0 for location evalgcdbb5in
Problem after Preprocessing
Start: evalgcdstart
Program_Vars: Arg_0, Arg_1
Temp_Vars:
Locations: evalgcdbb4in, evalgcdbb5in, evalgcdbb6in, evalgcdbb7in, evalgcdentryin, evalgcdreturnin, evalgcdstart, evalgcdstop
Transitions:
7:evalgcdbb4in(Arg_0,Arg_1) -> evalgcdbb5in(Arg_0,Arg_1):|:1<=Arg_0+Arg_1 && Arg_1+1<=Arg_0
8:evalgcdbb4in(Arg_0,Arg_1) -> evalgcdbb6in(Arg_0,Arg_1):|:1<=Arg_0+Arg_1 && Arg_0<=Arg_1
9:evalgcdbb5in(Arg_0,Arg_1) -> evalgcdbb7in(Arg_0-Arg_1,Arg_1):|:1+Arg_1<=Arg_0 && 1<=Arg_0+Arg_1 && 1<=Arg_0
10:evalgcdbb6in(Arg_0,Arg_1) -> evalgcdbb7in(Arg_0,Arg_1-Arg_0):|:1<=Arg_1 && 1<=Arg_0+Arg_1 && Arg_0<=Arg_1
4:evalgcdbb7in(Arg_0,Arg_1) -> evalgcdbb4in(Arg_0,Arg_1):|:1<=Arg_0+Arg_1 && Arg_1+1<=Arg_0
5:evalgcdbb7in(Arg_0,Arg_1) -> evalgcdbb4in(Arg_0,Arg_1):|:1<=Arg_0+Arg_1 && Arg_0+1<=Arg_1
6:evalgcdbb7in(Arg_0,Arg_1) -> evalgcdreturnin(Arg_0,Arg_1):|:1<=Arg_0+Arg_1 && Arg_1<=Arg_0 && Arg_0<=Arg_1
3:evalgcdentryin(Arg_0,Arg_1) -> evalgcdbb7in(Arg_1,Arg_0):|:1<=Arg_0 && 1<=Arg_1
1:evalgcdentryin(Arg_0,Arg_1) -> evalgcdreturnin(Arg_0,Arg_1):|:Arg_0<=0
2:evalgcdentryin(Arg_0,Arg_1) -> evalgcdreturnin(Arg_0,Arg_1):|:Arg_1<=0
11:evalgcdreturnin(Arg_0,Arg_1) -> evalgcdstop(Arg_0,Arg_1)
0:evalgcdstart(Arg_0,Arg_1) -> evalgcdentryin(Arg_0,Arg_1)
Analysing control-flow refined program
Found invariant 1+Arg_1<=Arg_0 && 1<=Arg_1 && 3<=Arg_0+Arg_1 && 2<=Arg_0 for location n_evalgcdbb4in___4
Found invariant 2<=Arg_1 && 3<=Arg_0+Arg_1 && 1+Arg_0<=Arg_1 && 1<=Arg_0 for location n_evalgcdbb4in___3
Found invariant 2<=Arg_0+Arg_1 for location evalgcdbb7in
Found invariant 2<=Arg_1 && 3<=Arg_0+Arg_1 && 1+Arg_0<=Arg_1 && 1<=Arg_0 for location n_evalgcdbb6in___1
Found invariant 1+Arg_1<=Arg_0 && 1<=Arg_1 && 3<=Arg_0+Arg_1 && 2<=Arg_0 for location n_evalgcdbb5in___2
MPRF for transition 99:evalgcdbb7in(Arg_0,Arg_1) -> n_evalgcdbb4in___3(Arg_0,Arg_1):|:2<=Arg_0+Arg_1 && 1<=Arg_0+Arg_1 && 1<=Arg_1 && 1<=Arg_0 && 1<=Arg_0+2*Arg_1 && 1<=2*Arg_0+Arg_1 && 0<=Arg_1 && 1<=Arg_0+Arg_1 && 1<=Arg_0 && 1<=Arg_1 && 1<=Arg_0+Arg_1 && 1+Arg_0<=Arg_1 of depth 1:
new bound:
Arg_0+1 {O(n)}
MPRF:
n_evalgcdbb4in___3 [Arg_1 ]
n_evalgcdbb4in___4 [Arg_1+1 ]
n_evalgcdbb5in___2 [Arg_1+1 ]
n_evalgcdbb6in___1 [Arg_1 ]
evalgcdbb7in [Arg_1+1 ]
MPRF for transition 100:evalgcdbb7in(Arg_0,Arg_1) -> n_evalgcdbb4in___4(Arg_0,Arg_1):|:2<=Arg_0+Arg_1 && 1<=Arg_0+Arg_1 && 1<=Arg_1 && 1<=Arg_0 && 1<=Arg_0+2*Arg_1 && 1<=2*Arg_0+Arg_1 && 0<=Arg_1 && 1<=Arg_0+Arg_1 && 1<=Arg_0 && 1<=Arg_1 && 1<=Arg_0+Arg_1 && 1+Arg_1<=Arg_0 of depth 1:
new bound:
Arg_0+Arg_1 {O(n)}
MPRF:
n_evalgcdbb4in___3 [Arg_1 ]
n_evalgcdbb4in___4 [Arg_0 ]
n_evalgcdbb5in___2 [Arg_0 ]
n_evalgcdbb6in___1 [Arg_1 ]
evalgcdbb7in [Arg_0+Arg_1 ]
MPRF for transition 95:n_evalgcdbb4in___3(Arg_0,Arg_1) -> n_evalgcdbb6in___1(Arg_0,Arg_1):|:2<=Arg_1 && 3<=Arg_0+Arg_1 && 1+Arg_0<=Arg_1 && 1<=Arg_0 && 1+Arg_0<=Arg_1 && 1<=Arg_0 && 1<=Arg_0+Arg_1 && Arg_0<=Arg_1 of depth 1:
new bound:
Arg_0 {O(n)}
MPRF:
n_evalgcdbb4in___3 [Arg_1+1-Arg_0 ]
n_evalgcdbb4in___4 [Arg_1 ]
n_evalgcdbb5in___2 [Arg_1 ]
n_evalgcdbb6in___1 [Arg_1-Arg_0 ]
evalgcdbb7in [Arg_1 ]
MPRF for transition 96:n_evalgcdbb4in___4(Arg_0,Arg_1) -> n_evalgcdbb5in___2(Arg_0,Arg_1):|:1+Arg_1<=Arg_0 && 1<=Arg_1 && 3<=Arg_0+Arg_1 && 2<=Arg_0 && 1+Arg_1<=Arg_0 && 1<=Arg_1 && 1<=Arg_0+Arg_1 && 1+Arg_1<=Arg_0 of depth 1:
new bound:
Arg_0+Arg_1 {O(n)}
MPRF:
n_evalgcdbb4in___3 [Arg_1 ]
n_evalgcdbb4in___4 [Arg_0+1 ]
n_evalgcdbb5in___2 [Arg_0 ]
n_evalgcdbb6in___1 [Arg_1 ]
evalgcdbb7in [Arg_0+Arg_1 ]
MPRF for transition 97:n_evalgcdbb5in___2(Arg_0,Arg_1) -> evalgcdbb7in(Arg_0-Arg_1,Arg_1):|:1+Arg_1<=Arg_0 && 1<=Arg_1 && 3<=Arg_0+Arg_1 && 2<=Arg_0 && 1+Arg_1<=Arg_0 && 1<=Arg_1 && 1<=Arg_0+Arg_1 && 1+Arg_1<=Arg_0 of depth 1:
new bound:
Arg_1+1 {O(n)}
MPRF:
n_evalgcdbb4in___3 [Arg_0-1 ]
n_evalgcdbb4in___4 [Arg_0-1 ]
n_evalgcdbb5in___2 [Arg_0-1 ]
n_evalgcdbb6in___1 [Arg_0-1 ]
evalgcdbb7in [Arg_0-1 ]
MPRF for transition 98:n_evalgcdbb6in___1(Arg_0,Arg_1) -> evalgcdbb7in(Arg_0,Arg_1-Arg_0):|:2<=Arg_1 && 3<=Arg_0+Arg_1 && 1+Arg_0<=Arg_1 && 1<=Arg_0 && 1+Arg_0<=Arg_1 && 1<=Arg_0 && 1<=Arg_0+Arg_1 && 1<=Arg_1 && Arg_0<=Arg_1 of depth 1:
new bound:
Arg_0 {O(n)}
MPRF:
n_evalgcdbb4in___3 [Arg_1 ]
n_evalgcdbb4in___4 [Arg_1 ]
n_evalgcdbb5in___2 [Arg_1 ]
n_evalgcdbb6in___1 [Arg_1+1-Arg_0 ]
evalgcdbb7in [Arg_1 ]
CFR: Improvement to new bound with the following program:
new bound:
3*Arg_1+5*Arg_0+2 {O(n)}
cfr-program:
Start: evalgcdstart
Program_Vars: Arg_0, Arg_1
Temp_Vars:
Locations: evalgcdbb7in, evalgcdentryin, evalgcdreturnin, evalgcdstart, evalgcdstop, n_evalgcdbb4in___3, n_evalgcdbb4in___4, n_evalgcdbb5in___2, n_evalgcdbb6in___1
Transitions:
6:evalgcdbb7in(Arg_0,Arg_1) -> evalgcdreturnin(Arg_0,Arg_1):|:2<=Arg_0+Arg_1 && 1<=Arg_0+Arg_1 && Arg_1<=Arg_0 && Arg_0<=Arg_1
99:evalgcdbb7in(Arg_0,Arg_1) -> n_evalgcdbb4in___3(Arg_0,Arg_1):|:2<=Arg_0+Arg_1 && 1<=Arg_0+Arg_1 && 1<=Arg_1 && 1<=Arg_0 && 1<=Arg_0+2*Arg_1 && 1<=2*Arg_0+Arg_1 && 0<=Arg_1 && 1<=Arg_0+Arg_1 && 1<=Arg_0 && 1<=Arg_1 && 1<=Arg_0+Arg_1 && 1+Arg_0<=Arg_1
100:evalgcdbb7in(Arg_0,Arg_1) -> n_evalgcdbb4in___4(Arg_0,Arg_1):|:2<=Arg_0+Arg_1 && 1<=Arg_0+Arg_1 && 1<=Arg_1 && 1<=Arg_0 && 1<=Arg_0+2*Arg_1 && 1<=2*Arg_0+Arg_1 && 0<=Arg_1 && 1<=Arg_0+Arg_1 && 1<=Arg_0 && 1<=Arg_1 && 1<=Arg_0+Arg_1 && 1+Arg_1<=Arg_0
3:evalgcdentryin(Arg_0,Arg_1) -> evalgcdbb7in(Arg_1,Arg_0):|:1<=Arg_0 && 1<=Arg_1
1:evalgcdentryin(Arg_0,Arg_1) -> evalgcdreturnin(Arg_0,Arg_1):|:Arg_0<=0
2:evalgcdentryin(Arg_0,Arg_1) -> evalgcdreturnin(Arg_0,Arg_1):|:Arg_1<=0
11:evalgcdreturnin(Arg_0,Arg_1) -> evalgcdstop(Arg_0,Arg_1)
0:evalgcdstart(Arg_0,Arg_1) -> evalgcdentryin(Arg_0,Arg_1)
95:n_evalgcdbb4in___3(Arg_0,Arg_1) -> n_evalgcdbb6in___1(Arg_0,Arg_1):|:2<=Arg_1 && 3<=Arg_0+Arg_1 && 1+Arg_0<=Arg_1 && 1<=Arg_0 && 1+Arg_0<=Arg_1 && 1<=Arg_0 && 1<=Arg_0+Arg_1 && Arg_0<=Arg_1
96:n_evalgcdbb4in___4(Arg_0,Arg_1) -> n_evalgcdbb5in___2(Arg_0,Arg_1):|:1+Arg_1<=Arg_0 && 1<=Arg_1 && 3<=Arg_0+Arg_1 && 2<=Arg_0 && 1+Arg_1<=Arg_0 && 1<=Arg_1 && 1<=Arg_0+Arg_1 && 1+Arg_1<=Arg_0
97:n_evalgcdbb5in___2(Arg_0,Arg_1) -> evalgcdbb7in(Arg_0-Arg_1,Arg_1):|:1+Arg_1<=Arg_0 && 1<=Arg_1 && 3<=Arg_0+Arg_1 && 2<=Arg_0 && 1+Arg_1<=Arg_0 && 1<=Arg_1 && 1<=Arg_0+Arg_1 && 1+Arg_1<=Arg_0
98:n_evalgcdbb6in___1(Arg_0,Arg_1) -> evalgcdbb7in(Arg_0,Arg_1-Arg_0):|:2<=Arg_1 && 3<=Arg_0+Arg_1 && 1+Arg_0<=Arg_1 && 1<=Arg_0 && 1+Arg_0<=Arg_1 && 1<=Arg_0 && 1<=Arg_0+Arg_1 && 1<=Arg_1 && Arg_0<=Arg_1
All Bounds
Timebounds
Overall timebound:3*Arg_1+5*Arg_0+8 {O(n)}
6: evalgcdbb7in->evalgcdreturnin: 1 {O(1)}
99: evalgcdbb7in->n_evalgcdbb4in___3: Arg_0+1 {O(n)}
100: evalgcdbb7in->n_evalgcdbb4in___4: Arg_0+Arg_1 {O(n)}
1: evalgcdentryin->evalgcdreturnin: 1 {O(1)}
2: evalgcdentryin->evalgcdreturnin: 1 {O(1)}
3: evalgcdentryin->evalgcdbb7in: 1 {O(1)}
11: evalgcdreturnin->evalgcdstop: 1 {O(1)}
0: evalgcdstart->evalgcdentryin: 1 {O(1)}
95: n_evalgcdbb4in___3->n_evalgcdbb6in___1: Arg_0 {O(n)}
96: n_evalgcdbb4in___4->n_evalgcdbb5in___2: Arg_0+Arg_1 {O(n)}
97: n_evalgcdbb5in___2->evalgcdbb7in: Arg_1+1 {O(n)}
98: n_evalgcdbb6in___1->evalgcdbb7in: Arg_0 {O(n)}
Costbounds
Overall costbound: 3*Arg_1+5*Arg_0+8 {O(n)}
6: evalgcdbb7in->evalgcdreturnin: 1 {O(1)}
99: evalgcdbb7in->n_evalgcdbb4in___3: Arg_0+1 {O(n)}
100: evalgcdbb7in->n_evalgcdbb4in___4: Arg_0+Arg_1 {O(n)}
1: evalgcdentryin->evalgcdreturnin: 1 {O(1)}
2: evalgcdentryin->evalgcdreturnin: 1 {O(1)}
3: evalgcdentryin->evalgcdbb7in: 1 {O(1)}
11: evalgcdreturnin->evalgcdstop: 1 {O(1)}
0: evalgcdstart->evalgcdentryin: 1 {O(1)}
95: n_evalgcdbb4in___3->n_evalgcdbb6in___1: Arg_0 {O(n)}
96: n_evalgcdbb4in___4->n_evalgcdbb5in___2: Arg_0+Arg_1 {O(n)}
97: n_evalgcdbb5in___2->evalgcdbb7in: Arg_1+1 {O(n)}
98: n_evalgcdbb6in___1->evalgcdbb7in: Arg_0 {O(n)}
Sizebounds
6: evalgcdbb7in->evalgcdreturnin, Arg_0: 5*Arg_1 {O(n)}
6: evalgcdbb7in->evalgcdreturnin, Arg_1: 5*Arg_0 {O(n)}
99: evalgcdbb7in->n_evalgcdbb4in___3, Arg_0: 2*Arg_1 {O(n)}
99: evalgcdbb7in->n_evalgcdbb4in___3, Arg_1: 2*Arg_0 {O(n)}
100: evalgcdbb7in->n_evalgcdbb4in___4, Arg_0: 2*Arg_1 {O(n)}
100: evalgcdbb7in->n_evalgcdbb4in___4, Arg_1: 2*Arg_0 {O(n)}
1: evalgcdentryin->evalgcdreturnin, Arg_0: Arg_0 {O(n)}
1: evalgcdentryin->evalgcdreturnin, Arg_1: Arg_1 {O(n)}
2: evalgcdentryin->evalgcdreturnin, Arg_0: Arg_0 {O(n)}
2: evalgcdentryin->evalgcdreturnin, Arg_1: Arg_1 {O(n)}
3: evalgcdentryin->evalgcdbb7in, Arg_0: Arg_1 {O(n)}
3: evalgcdentryin->evalgcdbb7in, Arg_1: Arg_0 {O(n)}
11: evalgcdreturnin->evalgcdstop, Arg_0: 2*Arg_0+5*Arg_1 {O(n)}
11: evalgcdreturnin->evalgcdstop, Arg_1: 2*Arg_1+5*Arg_0 {O(n)}
0: evalgcdstart->evalgcdentryin, Arg_0: Arg_0 {O(n)}
0: evalgcdstart->evalgcdentryin, Arg_1: Arg_1 {O(n)}
95: n_evalgcdbb4in___3->n_evalgcdbb6in___1, Arg_0: 2*Arg_1 {O(n)}
95: n_evalgcdbb4in___3->n_evalgcdbb6in___1, Arg_1: 2*Arg_0 {O(n)}
96: n_evalgcdbb4in___4->n_evalgcdbb5in___2, Arg_0: 2*Arg_1 {O(n)}
96: n_evalgcdbb4in___4->n_evalgcdbb5in___2, Arg_1: 2*Arg_0 {O(n)}
97: n_evalgcdbb5in___2->evalgcdbb7in, Arg_0: 2*Arg_1 {O(n)}
97: n_evalgcdbb5in___2->evalgcdbb7in, Arg_1: 2*Arg_0 {O(n)}
98: n_evalgcdbb6in___1->evalgcdbb7in, Arg_0: 2*Arg_1 {O(n)}
98: n_evalgcdbb6in___1->evalgcdbb7in, Arg_1: 2*Arg_0 {O(n)}