Initial Problem

Start: evalwhile2start
Program_Vars: Arg_0, Arg_1, Arg_2
Temp_Vars:
Locations: evalwhile2bb1in, evalwhile2bb2in, evalwhile2bb3in, evalwhile2bb4in, evalwhile2entryin, evalwhile2returnin, evalwhile2start, evalwhile2stop
Transitions:
6:evalwhile2bb1in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb2in(Arg_0,Arg_1,Arg_2-1)
4:evalwhile2bb2in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb1in(Arg_0,Arg_1,Arg_2):|:1<=Arg_2
5:evalwhile2bb2in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb3in(Arg_0,Arg_1,Arg_2):|:Arg_2<=0
7:evalwhile2bb3in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb4in(Arg_0-1,Arg_1,Arg_2)
2:evalwhile2bb4in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb2in(Arg_0,Arg_1,Arg_1):|:1<=Arg_0
3:evalwhile2bb4in(Arg_0,Arg_1,Arg_2) -> evalwhile2returnin(Arg_0,Arg_1,Arg_2):|:Arg_0<=0
1:evalwhile2entryin(Arg_0,Arg_1,Arg_2) -> evalwhile2bb4in(Arg_1,Arg_1,Arg_2)
8:evalwhile2returnin(Arg_0,Arg_1,Arg_2) -> evalwhile2stop(Arg_0,Arg_1,Arg_2)
0:evalwhile2start(Arg_0,Arg_1,Arg_2) -> evalwhile2entryin(Arg_0,Arg_1,Arg_2)

Preprocessing

Found invariant Arg_0<=Arg_1 && Arg_0<=0 for location evalwhile2stop

Found invariant Arg_0<=Arg_1 for location evalwhile2bb4in

Found invariant Arg_2<=0 && 1+Arg_2<=Arg_1 && 1+Arg_2<=Arg_0 && 0<=Arg_2 && 1<=Arg_1+Arg_2 && 1<=Arg_0+Arg_2 && 1<=Arg_1 && 2<=Arg_0+Arg_1 && Arg_0<=Arg_1 && 1<=Arg_0 for location evalwhile2bb3in

Found invariant Arg_2<=Arg_1 && 1<=Arg_2 && 2<=Arg_1+Arg_2 && 2<=Arg_0+Arg_2 && 1<=Arg_1 && 2<=Arg_0+Arg_1 && Arg_0<=Arg_1 && 1<=Arg_0 for location evalwhile2bb1in

Found invariant Arg_2<=Arg_1 && 0<=Arg_2 && 1<=Arg_1+Arg_2 && 1<=Arg_0+Arg_2 && 1<=Arg_1 && 2<=Arg_0+Arg_1 && Arg_0<=Arg_1 && 1<=Arg_0 for location evalwhile2bb2in

Found invariant Arg_0<=Arg_1 && Arg_0<=0 for location evalwhile2returnin

Problem after Preprocessing

Start: evalwhile2start
Program_Vars: Arg_0, Arg_1, Arg_2
Temp_Vars:
Locations: evalwhile2bb1in, evalwhile2bb2in, evalwhile2bb3in, evalwhile2bb4in, evalwhile2entryin, evalwhile2returnin, evalwhile2start, evalwhile2stop
Transitions:
6:evalwhile2bb1in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb2in(Arg_0,Arg_1,Arg_2-1):|:Arg_2<=Arg_1 && 1<=Arg_2 && 2<=Arg_1+Arg_2 && 2<=Arg_0+Arg_2 && 1<=Arg_1 && 2<=Arg_0+Arg_1 && Arg_0<=Arg_1 && 1<=Arg_0
4:evalwhile2bb2in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb1in(Arg_0,Arg_1,Arg_2):|:Arg_2<=Arg_1 && 0<=Arg_2 && 1<=Arg_1+Arg_2 && 1<=Arg_0+Arg_2 && 1<=Arg_1 && 2<=Arg_0+Arg_1 && Arg_0<=Arg_1 && 1<=Arg_0 && 1<=Arg_2
5:evalwhile2bb2in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb3in(Arg_0,Arg_1,Arg_2):|:Arg_2<=Arg_1 && 0<=Arg_2 && 1<=Arg_1+Arg_2 && 1<=Arg_0+Arg_2 && 1<=Arg_1 && 2<=Arg_0+Arg_1 && Arg_0<=Arg_1 && 1<=Arg_0 && Arg_2<=0
7:evalwhile2bb3in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb4in(Arg_0-1,Arg_1,Arg_2):|:Arg_2<=0 && 1+Arg_2<=Arg_1 && 1+Arg_2<=Arg_0 && 0<=Arg_2 && 1<=Arg_1+Arg_2 && 1<=Arg_0+Arg_2 && 1<=Arg_1 && 2<=Arg_0+Arg_1 && Arg_0<=Arg_1 && 1<=Arg_0
2:evalwhile2bb4in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb2in(Arg_0,Arg_1,Arg_1):|:Arg_0<=Arg_1 && 1<=Arg_0
3:evalwhile2bb4in(Arg_0,Arg_1,Arg_2) -> evalwhile2returnin(Arg_0,Arg_1,Arg_2):|:Arg_0<=Arg_1 && Arg_0<=0
1:evalwhile2entryin(Arg_0,Arg_1,Arg_2) -> evalwhile2bb4in(Arg_1,Arg_1,Arg_2)
8:evalwhile2returnin(Arg_0,Arg_1,Arg_2) -> evalwhile2stop(Arg_0,Arg_1,Arg_2):|:Arg_0<=Arg_1 && Arg_0<=0
0:evalwhile2start(Arg_0,Arg_1,Arg_2) -> evalwhile2entryin(Arg_0,Arg_1,Arg_2)

MPRF for transition 5:evalwhile2bb2in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb3in(Arg_0,Arg_1,Arg_2):|:Arg_2<=Arg_1 && 0<=Arg_2 && 1<=Arg_1+Arg_2 && 1<=Arg_0+Arg_2 && 1<=Arg_1 && 2<=Arg_0+Arg_1 && Arg_0<=Arg_1 && 1<=Arg_0 && Arg_2<=0 of depth 1:

new bound:

Arg_1 {O(n)}

MPRF:

evalwhile2bb1in [Arg_0 ]
evalwhile2bb3in [Arg_0-1 ]
evalwhile2bb4in [Arg_0 ]
evalwhile2bb2in [Arg_0 ]

MPRF for transition 7:evalwhile2bb3in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb4in(Arg_0-1,Arg_1,Arg_2):|:Arg_2<=0 && 1+Arg_2<=Arg_1 && 1+Arg_2<=Arg_0 && 0<=Arg_2 && 1<=Arg_1+Arg_2 && 1<=Arg_0+Arg_2 && 1<=Arg_1 && 2<=Arg_0+Arg_1 && Arg_0<=Arg_1 && 1<=Arg_0 of depth 1:

new bound:

2*Arg_1 {O(n)}

MPRF:

evalwhile2bb1in [Arg_0+Arg_1 ]
evalwhile2bb3in [Arg_0+Arg_1 ]
evalwhile2bb4in [Arg_0+Arg_1 ]
evalwhile2bb2in [Arg_0+Arg_1 ]

MPRF for transition 2:evalwhile2bb4in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb2in(Arg_0,Arg_1,Arg_1):|:Arg_0<=Arg_1 && 1<=Arg_0 of depth 1:

new bound:

Arg_1 {O(n)}

MPRF:

evalwhile2bb1in [Arg_0-1 ]
evalwhile2bb3in [Arg_0-1 ]
evalwhile2bb4in [Arg_0 ]
evalwhile2bb2in [Arg_0-1 ]

MPRF for transition 6:evalwhile2bb1in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb2in(Arg_0,Arg_1,Arg_2-1):|:Arg_2<=Arg_1 && 1<=Arg_2 && 2<=Arg_1+Arg_2 && 2<=Arg_0+Arg_2 && 1<=Arg_1 && 2<=Arg_0+Arg_1 && Arg_0<=Arg_1 && 1<=Arg_0 of depth 1:

new bound:

2*Arg_1*Arg_1 {O(n^2)}

MPRF:

evalwhile2bb1in [Arg_2 ]
evalwhile2bb2in [Arg_2 ]
evalwhile2bb3in [0 ]
evalwhile2bb4in [0 ]

MPRF for transition 4:evalwhile2bb2in(Arg_0,Arg_1,Arg_2) -> evalwhile2bb1in(Arg_0,Arg_1,Arg_2):|:Arg_2<=Arg_1 && 0<=Arg_2 && 1<=Arg_1+Arg_2 && 1<=Arg_0+Arg_2 && 1<=Arg_1 && 2<=Arg_0+Arg_1 && Arg_0<=Arg_1 && 1<=Arg_0 && 1<=Arg_2 of depth 1:

new bound:

2*Arg_1*Arg_1 {O(n^2)}

MPRF:

evalwhile2bb1in [Arg_2-1 ]
evalwhile2bb2in [Arg_2 ]
evalwhile2bb3in [Arg_2 ]
evalwhile2bb4in [0 ]

All Bounds

Timebounds

Overall timebound:4*Arg_1*Arg_1+4*Arg_1+4 {O(n^2)}
6: evalwhile2bb1in->evalwhile2bb2in: 2*Arg_1*Arg_1 {O(n^2)}
4: evalwhile2bb2in->evalwhile2bb1in: 2*Arg_1*Arg_1 {O(n^2)}
5: evalwhile2bb2in->evalwhile2bb3in: Arg_1 {O(n)}
7: evalwhile2bb3in->evalwhile2bb4in: 2*Arg_1 {O(n)}
2: evalwhile2bb4in->evalwhile2bb2in: Arg_1 {O(n)}
3: evalwhile2bb4in->evalwhile2returnin: 1 {O(1)}
1: evalwhile2entryin->evalwhile2bb4in: 1 {O(1)}
8: evalwhile2returnin->evalwhile2stop: 1 {O(1)}
0: evalwhile2start->evalwhile2entryin: 1 {O(1)}

Costbounds

Overall costbound: 4*Arg_1*Arg_1+4*Arg_1+4 {O(n^2)}
6: evalwhile2bb1in->evalwhile2bb2in: 2*Arg_1*Arg_1 {O(n^2)}
4: evalwhile2bb2in->evalwhile2bb1in: 2*Arg_1*Arg_1 {O(n^2)}
5: evalwhile2bb2in->evalwhile2bb3in: Arg_1 {O(n)}
7: evalwhile2bb3in->evalwhile2bb4in: 2*Arg_1 {O(n)}
2: evalwhile2bb4in->evalwhile2bb2in: Arg_1 {O(n)}
3: evalwhile2bb4in->evalwhile2returnin: 1 {O(1)}
1: evalwhile2entryin->evalwhile2bb4in: 1 {O(1)}
8: evalwhile2returnin->evalwhile2stop: 1 {O(1)}
0: evalwhile2start->evalwhile2entryin: 1 {O(1)}

Sizebounds

6: evalwhile2bb1in->evalwhile2bb2in, Arg_0: Arg_1 {O(n)}
6: evalwhile2bb1in->evalwhile2bb2in, Arg_1: Arg_1 {O(n)}
6: evalwhile2bb1in->evalwhile2bb2in, Arg_2: 2*Arg_1 {O(n)}
4: evalwhile2bb2in->evalwhile2bb1in, Arg_0: Arg_1 {O(n)}
4: evalwhile2bb2in->evalwhile2bb1in, Arg_1: Arg_1 {O(n)}
4: evalwhile2bb2in->evalwhile2bb1in, Arg_2: 2*Arg_1 {O(n)}
5: evalwhile2bb2in->evalwhile2bb3in, Arg_0: Arg_1 {O(n)}
5: evalwhile2bb2in->evalwhile2bb3in, Arg_1: Arg_1 {O(n)}
5: evalwhile2bb2in->evalwhile2bb3in, Arg_2: 0 {O(1)}
7: evalwhile2bb3in->evalwhile2bb4in, Arg_0: Arg_1 {O(n)}
7: evalwhile2bb3in->evalwhile2bb4in, Arg_1: Arg_1 {O(n)}
7: evalwhile2bb3in->evalwhile2bb4in, Arg_2: 0 {O(1)}
2: evalwhile2bb4in->evalwhile2bb2in, Arg_0: Arg_1 {O(n)}
2: evalwhile2bb4in->evalwhile2bb2in, Arg_1: Arg_1 {O(n)}
2: evalwhile2bb4in->evalwhile2bb2in, Arg_2: 2*Arg_1 {O(n)}
3: evalwhile2bb4in->evalwhile2returnin, Arg_0: 2*Arg_1 {O(n)}
3: evalwhile2bb4in->evalwhile2returnin, Arg_1: 2*Arg_1 {O(n)}
3: evalwhile2bb4in->evalwhile2returnin, Arg_2: Arg_2 {O(n)}
1: evalwhile2entryin->evalwhile2bb4in, Arg_0: Arg_1 {O(n)}
1: evalwhile2entryin->evalwhile2bb4in, Arg_1: Arg_1 {O(n)}
1: evalwhile2entryin->evalwhile2bb4in, Arg_2: Arg_2 {O(n)}
8: evalwhile2returnin->evalwhile2stop, Arg_0: 2*Arg_1 {O(n)}
8: evalwhile2returnin->evalwhile2stop, Arg_1: 2*Arg_1 {O(n)}
8: evalwhile2returnin->evalwhile2stop, Arg_2: Arg_2 {O(n)}
0: evalwhile2start->evalwhile2entryin, Arg_0: Arg_0 {O(n)}
0: evalwhile2start->evalwhile2entryin, Arg_1: Arg_1 {O(n)}
0: evalwhile2start->evalwhile2entryin, Arg_2: Arg_2 {O(n)}