Initial Problem

Start: evalSimpleMultiplestart
Program_Vars: Arg_0, Arg_1, Arg_2, Arg_3
Temp_Vars:
Locations: evalSimpleMultiplebb1in, evalSimpleMultiplebb2in, evalSimpleMultiplebb3in, evalSimpleMultiplebbin, evalSimpleMultipleentryin, evalSimpleMultiplereturnin, evalSimpleMultiplestart, evalSimpleMultiplestop
Transitions:
6:evalSimpleMultiplebb1in(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb3in(Arg_0+1,Arg_1,Arg_2,Arg_3)
7:evalSimpleMultiplebb2in(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb3in(Arg_0,Arg_1+1,Arg_2,Arg_3)
2:evalSimpleMultiplebb3in(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebbin(Arg_0,Arg_1,Arg_2,Arg_3):|:Arg_1+1<=Arg_2
3:evalSimpleMultiplebb3in(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplereturnin(Arg_0,Arg_1,Arg_2,Arg_3):|:Arg_2<=Arg_1
4:evalSimpleMultiplebbin(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb1in(Arg_0,Arg_1,Arg_2,Arg_3):|:Arg_0+1<=Arg_3
5:evalSimpleMultiplebbin(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb2in(Arg_0,Arg_1,Arg_2,Arg_3):|:Arg_3<=Arg_0
1:evalSimpleMultipleentryin(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb3in(0,0,Arg_2,Arg_3)
8:evalSimpleMultiplereturnin(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplestop(Arg_0,Arg_1,Arg_2,Arg_3)
0:evalSimpleMultiplestart(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultipleentryin(Arg_0,Arg_1,Arg_2,Arg_3)

Preprocessing

Found invariant Arg_3<=Arg_0 && 1<=Arg_2 && 1<=Arg_1+Arg_2 && 1+Arg_1<=Arg_2 && 1<=Arg_0+Arg_2 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 for location evalSimpleMultiplebb2in

Found invariant 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 for location evalSimpleMultiplebb3in

Found invariant Arg_2<=Arg_1 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 for location evalSimpleMultiplereturnin

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

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

Found invariant Arg_2<=Arg_1 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 for location evalSimpleMultiplestop

Problem after Preprocessing

Start: evalSimpleMultiplestart
Program_Vars: Arg_0, Arg_1, Arg_2, Arg_3
Temp_Vars:
Locations: evalSimpleMultiplebb1in, evalSimpleMultiplebb2in, evalSimpleMultiplebb3in, evalSimpleMultiplebbin, evalSimpleMultipleentryin, evalSimpleMultiplereturnin, evalSimpleMultiplestart, evalSimpleMultiplestop
Transitions:
6:evalSimpleMultiplebb1in(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb3in(Arg_0+1,Arg_1,Arg_2,Arg_3):|:1<=Arg_3 && 2<=Arg_2+Arg_3 && 1<=Arg_1+Arg_3 && 1<=Arg_0+Arg_3 && 1+Arg_0<=Arg_3 && 1<=Arg_2 && 1<=Arg_1+Arg_2 && 1+Arg_1<=Arg_2 && 1<=Arg_0+Arg_2 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0
7:evalSimpleMultiplebb2in(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb3in(Arg_0,Arg_1+1,Arg_2,Arg_3):|:Arg_3<=Arg_0 && 1<=Arg_2 && 1<=Arg_1+Arg_2 && 1+Arg_1<=Arg_2 && 1<=Arg_0+Arg_2 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0
2:evalSimpleMultiplebb3in(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebbin(Arg_0,Arg_1,Arg_2,Arg_3):|:0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 && Arg_1+1<=Arg_2
3:evalSimpleMultiplebb3in(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplereturnin(Arg_0,Arg_1,Arg_2,Arg_3):|:0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 && Arg_2<=Arg_1
4:evalSimpleMultiplebbin(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb1in(Arg_0,Arg_1,Arg_2,Arg_3):|:1<=Arg_2 && 1<=Arg_1+Arg_2 && 1+Arg_1<=Arg_2 && 1<=Arg_0+Arg_2 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 && Arg_0+1<=Arg_3
5:evalSimpleMultiplebbin(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb2in(Arg_0,Arg_1,Arg_2,Arg_3):|:1<=Arg_2 && 1<=Arg_1+Arg_2 && 1+Arg_1<=Arg_2 && 1<=Arg_0+Arg_2 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 && Arg_3<=Arg_0
1:evalSimpleMultipleentryin(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb3in(0,0,Arg_2,Arg_3)
8:evalSimpleMultiplereturnin(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplestop(Arg_0,Arg_1,Arg_2,Arg_3):|:Arg_2<=Arg_1 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0
0:evalSimpleMultiplestart(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultipleentryin(Arg_0,Arg_1,Arg_2,Arg_3)

MPRF for transition 6:evalSimpleMultiplebb1in(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb3in(Arg_0+1,Arg_1,Arg_2,Arg_3):|:1<=Arg_3 && 2<=Arg_2+Arg_3 && 1<=Arg_1+Arg_3 && 1<=Arg_0+Arg_3 && 1+Arg_0<=Arg_3 && 1<=Arg_2 && 1<=Arg_1+Arg_2 && 1+Arg_1<=Arg_2 && 1<=Arg_0+Arg_2 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 of depth 1:

new bound:

Arg_3 {O(n)}

MPRF:

evalSimpleMultiplebb3in [Arg_3-Arg_0 ]
evalSimpleMultiplebb1in [Arg_3-Arg_0 ]
evalSimpleMultiplebbin [Arg_3-Arg_0 ]
evalSimpleMultiplebb2in [Arg_3-Arg_0 ]

MPRF for transition 7:evalSimpleMultiplebb2in(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb3in(Arg_0,Arg_1+1,Arg_2,Arg_3):|:Arg_3<=Arg_0 && 1<=Arg_2 && 1<=Arg_1+Arg_2 && 1+Arg_1<=Arg_2 && 1<=Arg_0+Arg_2 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 of depth 1:

new bound:

Arg_2 {O(n)}

MPRF:

evalSimpleMultiplebb3in [Arg_2-Arg_1 ]
evalSimpleMultiplebb1in [Arg_2-Arg_1 ]
evalSimpleMultiplebbin [Arg_2-Arg_1 ]
evalSimpleMultiplebb2in [Arg_2-Arg_1 ]

MPRF for transition 4:evalSimpleMultiplebbin(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb1in(Arg_0,Arg_1,Arg_2,Arg_3):|:1<=Arg_2 && 1<=Arg_1+Arg_2 && 1+Arg_1<=Arg_2 && 1<=Arg_0+Arg_2 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 && Arg_0+1<=Arg_3 of depth 1:

new bound:

Arg_3 {O(n)}

MPRF:

evalSimpleMultiplebb3in [Arg_3-Arg_0 ]
evalSimpleMultiplebb1in [Arg_3-Arg_0-1 ]
evalSimpleMultiplebbin [Arg_3-Arg_0 ]
evalSimpleMultiplebb2in [Arg_3-Arg_0 ]

MPRF for transition 5:evalSimpleMultiplebbin(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebb2in(Arg_0,Arg_1,Arg_2,Arg_3):|:1<=Arg_2 && 1<=Arg_1+Arg_2 && 1+Arg_1<=Arg_2 && 1<=Arg_0+Arg_2 && 0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 && Arg_3<=Arg_0 of depth 1:

new bound:

Arg_2 {O(n)}

MPRF:

evalSimpleMultiplebb3in [Arg_2-Arg_1 ]
evalSimpleMultiplebb1in [Arg_2-Arg_1 ]
evalSimpleMultiplebbin [Arg_2-Arg_1 ]
evalSimpleMultiplebb2in [Arg_2-Arg_1-1 ]

knowledge_propagation leads to new time bound Arg_2+Arg_3+1 {O(n)} for transition 2:evalSimpleMultiplebb3in(Arg_0,Arg_1,Arg_2,Arg_3) -> evalSimpleMultiplebbin(Arg_0,Arg_1,Arg_2,Arg_3):|:0<=Arg_1 && 0<=Arg_0+Arg_1 && 0<=Arg_0 && Arg_1+1<=Arg_2

All Bounds

Timebounds

Overall timebound:3*Arg_2+3*Arg_3+5 {O(n)}
6: evalSimpleMultiplebb1in->evalSimpleMultiplebb3in: Arg_3 {O(n)}
7: evalSimpleMultiplebb2in->evalSimpleMultiplebb3in: Arg_2 {O(n)}
2: evalSimpleMultiplebb3in->evalSimpleMultiplebbin: Arg_2+Arg_3+1 {O(n)}
3: evalSimpleMultiplebb3in->evalSimpleMultiplereturnin: 1 {O(1)}
4: evalSimpleMultiplebbin->evalSimpleMultiplebb1in: Arg_3 {O(n)}
5: evalSimpleMultiplebbin->evalSimpleMultiplebb2in: Arg_2 {O(n)}
1: evalSimpleMultipleentryin->evalSimpleMultiplebb3in: 1 {O(1)}
8: evalSimpleMultiplereturnin->evalSimpleMultiplestop: 1 {O(1)}
0: evalSimpleMultiplestart->evalSimpleMultipleentryin: 1 {O(1)}

Costbounds

Overall costbound: 3*Arg_2+3*Arg_3+5 {O(n)}
6: evalSimpleMultiplebb1in->evalSimpleMultiplebb3in: Arg_3 {O(n)}
7: evalSimpleMultiplebb2in->evalSimpleMultiplebb3in: Arg_2 {O(n)}
2: evalSimpleMultiplebb3in->evalSimpleMultiplebbin: Arg_2+Arg_3+1 {O(n)}
3: evalSimpleMultiplebb3in->evalSimpleMultiplereturnin: 1 {O(1)}
4: evalSimpleMultiplebbin->evalSimpleMultiplebb1in: Arg_3 {O(n)}
5: evalSimpleMultiplebbin->evalSimpleMultiplebb2in: Arg_2 {O(n)}
1: evalSimpleMultipleentryin->evalSimpleMultiplebb3in: 1 {O(1)}
8: evalSimpleMultiplereturnin->evalSimpleMultiplestop: 1 {O(1)}
0: evalSimpleMultiplestart->evalSimpleMultipleentryin: 1 {O(1)}

Sizebounds

6: evalSimpleMultiplebb1in->evalSimpleMultiplebb3in, Arg_0: Arg_3 {O(n)}
6: evalSimpleMultiplebb1in->evalSimpleMultiplebb3in, Arg_1: Arg_2 {O(n)}
6: evalSimpleMultiplebb1in->evalSimpleMultiplebb3in, Arg_2: Arg_2 {O(n)}
6: evalSimpleMultiplebb1in->evalSimpleMultiplebb3in, Arg_3: Arg_3 {O(n)}
7: evalSimpleMultiplebb2in->evalSimpleMultiplebb3in, Arg_0: Arg_3 {O(n)}
7: evalSimpleMultiplebb2in->evalSimpleMultiplebb3in, Arg_1: Arg_2 {O(n)}
7: evalSimpleMultiplebb2in->evalSimpleMultiplebb3in, Arg_2: Arg_2 {O(n)}
7: evalSimpleMultiplebb2in->evalSimpleMultiplebb3in, Arg_3: Arg_3 {O(n)}
2: evalSimpleMultiplebb3in->evalSimpleMultiplebbin, Arg_0: Arg_3 {O(n)}
2: evalSimpleMultiplebb3in->evalSimpleMultiplebbin, Arg_1: Arg_2 {O(n)}
2: evalSimpleMultiplebb3in->evalSimpleMultiplebbin, Arg_2: Arg_2 {O(n)}
2: evalSimpleMultiplebb3in->evalSimpleMultiplebbin, Arg_3: Arg_3 {O(n)}
3: evalSimpleMultiplebb3in->evalSimpleMultiplereturnin, Arg_0: Arg_3 {O(n)}
3: evalSimpleMultiplebb3in->evalSimpleMultiplereturnin, Arg_1: Arg_2 {O(n)}
3: evalSimpleMultiplebb3in->evalSimpleMultiplereturnin, Arg_2: 2*Arg_2 {O(n)}
3: evalSimpleMultiplebb3in->evalSimpleMultiplereturnin, Arg_3: 2*Arg_3 {O(n)}
4: evalSimpleMultiplebbin->evalSimpleMultiplebb1in, Arg_0: Arg_3 {O(n)}
4: evalSimpleMultiplebbin->evalSimpleMultiplebb1in, Arg_1: Arg_2 {O(n)}
4: evalSimpleMultiplebbin->evalSimpleMultiplebb1in, Arg_2: Arg_2 {O(n)}
4: evalSimpleMultiplebbin->evalSimpleMultiplebb1in, Arg_3: Arg_3 {O(n)}
5: evalSimpleMultiplebbin->evalSimpleMultiplebb2in, Arg_0: Arg_3 {O(n)}
5: evalSimpleMultiplebbin->evalSimpleMultiplebb2in, Arg_1: Arg_2 {O(n)}
5: evalSimpleMultiplebbin->evalSimpleMultiplebb2in, Arg_2: Arg_2 {O(n)}
5: evalSimpleMultiplebbin->evalSimpleMultiplebb2in, Arg_3: Arg_3 {O(n)}
1: evalSimpleMultipleentryin->evalSimpleMultiplebb3in, Arg_0: 0 {O(1)}
1: evalSimpleMultipleentryin->evalSimpleMultiplebb3in, Arg_1: 0 {O(1)}
1: evalSimpleMultipleentryin->evalSimpleMultiplebb3in, Arg_2: Arg_2 {O(n)}
1: evalSimpleMultipleentryin->evalSimpleMultiplebb3in, Arg_3: Arg_3 {O(n)}
8: evalSimpleMultiplereturnin->evalSimpleMultiplestop, Arg_0: Arg_3 {O(n)}
8: evalSimpleMultiplereturnin->evalSimpleMultiplestop, Arg_1: Arg_2 {O(n)}
8: evalSimpleMultiplereturnin->evalSimpleMultiplestop, Arg_2: 2*Arg_2 {O(n)}
8: evalSimpleMultiplereturnin->evalSimpleMultiplestop, Arg_3: 2*Arg_3 {O(n)}
0: evalSimpleMultiplestart->evalSimpleMultipleentryin, Arg_0: Arg_0 {O(n)}
0: evalSimpleMultiplestart->evalSimpleMultipleentryin, Arg_1: Arg_1 {O(n)}
0: evalSimpleMultiplestart->evalSimpleMultipleentryin, Arg_2: Arg_2 {O(n)}
0: evalSimpleMultiplestart->evalSimpleMultipleentryin, Arg_3: Arg_3 {O(n)}