0 QTRS
↳1 DependencyPairsProof (⇔, 0 ms)
↳2 QDP
↳3 DependencyGraphProof (⇔, 3 ms)
↳4 AND
↳5 QDP
↳6 QDPSizeChangeProof (⇔, 0 ms)
↳7 YES
↳8 QDP
↳9 QDPSizeChangeProof (⇔, 0 ms)
↳10 YES
↳11 QDP
↳12 NonLoopProof (⇔, 12.2 s)
↳13 NO
notZero(pos(s(x))) → true
notZero(neg(s(x))) → true
notZero(neg(0)) → false
notZero(pos(0)) → false
greaterZero(pos(s(x))) → true
greaterZero(pos(0)) → false
greaterZero(neg(x)) → false
and(false, false) → false
and(false, true) → false
and(true, false) → false
and(true, true) → true
minusT(0, y) → neg(y)
minusT(x, 0) → pos(x)
minusT(s(x), s(y)) → minusT(x, y)
plusNat(0, y) → y
plusNat(s(x), y) → plusNat(x, s(y))
negate(pos(x)) → neg(x)
negate(neg(x)) → pos(x)
minus(pos(x), pos(y)) → minusT(x, y)
minus(neg(x), neg(y)) → negate(minusT(x, y))
minus(pos(x), neg(y)) → pos(plusNat(x, y))
minus(neg(x), pos(y)) → neg(plusNat(x, y))
while(true, i, y) → while(and(notZero(y), greaterZero(i)), minus(i, y), y)
MINUST(s(x), s(y)) → MINUST(x, y)
PLUSNAT(s(x), y) → PLUSNAT(x, s(y))
MINUS(pos(x), pos(y)) → MINUST(x, y)
MINUS(neg(x), neg(y)) → NEGATE(minusT(x, y))
MINUS(neg(x), neg(y)) → MINUST(x, y)
MINUS(pos(x), neg(y)) → PLUSNAT(x, y)
MINUS(neg(x), pos(y)) → PLUSNAT(x, y)
WHILE(true, i, y) → WHILE(and(notZero(y), greaterZero(i)), minus(i, y), y)
WHILE(true, i, y) → AND(notZero(y), greaterZero(i))
WHILE(true, i, y) → NOTZERO(y)
WHILE(true, i, y) → GREATERZERO(i)
WHILE(true, i, y) → MINUS(i, y)
notZero(pos(s(x))) → true
notZero(neg(s(x))) → true
notZero(neg(0)) → false
notZero(pos(0)) → false
greaterZero(pos(s(x))) → true
greaterZero(pos(0)) → false
greaterZero(neg(x)) → false
and(false, false) → false
and(false, true) → false
and(true, false) → false
and(true, true) → true
minusT(0, y) → neg(y)
minusT(x, 0) → pos(x)
minusT(s(x), s(y)) → minusT(x, y)
plusNat(0, y) → y
plusNat(s(x), y) → plusNat(x, s(y))
negate(pos(x)) → neg(x)
negate(neg(x)) → pos(x)
minus(pos(x), pos(y)) → minusT(x, y)
minus(neg(x), neg(y)) → negate(minusT(x, y))
minus(pos(x), neg(y)) → pos(plusNat(x, y))
minus(neg(x), pos(y)) → neg(plusNat(x, y))
while(true, i, y) → while(and(notZero(y), greaterZero(i)), minus(i, y), y)
PLUSNAT(s(x), y) → PLUSNAT(x, s(y))
notZero(pos(s(x))) → true
notZero(neg(s(x))) → true
notZero(neg(0)) → false
notZero(pos(0)) → false
greaterZero(pos(s(x))) → true
greaterZero(pos(0)) → false
greaterZero(neg(x)) → false
and(false, false) → false
and(false, true) → false
and(true, false) → false
and(true, true) → true
minusT(0, y) → neg(y)
minusT(x, 0) → pos(x)
minusT(s(x), s(y)) → minusT(x, y)
plusNat(0, y) → y
plusNat(s(x), y) → plusNat(x, s(y))
negate(pos(x)) → neg(x)
negate(neg(x)) → pos(x)
minus(pos(x), pos(y)) → minusT(x, y)
minus(neg(x), neg(y)) → negate(minusT(x, y))
minus(pos(x), neg(y)) → pos(plusNat(x, y))
minus(neg(x), pos(y)) → neg(plusNat(x, y))
while(true, i, y) → while(and(notZero(y), greaterZero(i)), minus(i, y), y)
From the DPs we obtained the following set of size-change graphs:
MINUST(s(x), s(y)) → MINUST(x, y)
notZero(pos(s(x))) → true
notZero(neg(s(x))) → true
notZero(neg(0)) → false
notZero(pos(0)) → false
greaterZero(pos(s(x))) → true
greaterZero(pos(0)) → false
greaterZero(neg(x)) → false
and(false, false) → false
and(false, true) → false
and(true, false) → false
and(true, true) → true
minusT(0, y) → neg(y)
minusT(x, 0) → pos(x)
minusT(s(x), s(y)) → minusT(x, y)
plusNat(0, y) → y
plusNat(s(x), y) → plusNat(x, s(y))
negate(pos(x)) → neg(x)
negate(neg(x)) → pos(x)
minus(pos(x), pos(y)) → minusT(x, y)
minus(neg(x), neg(y)) → negate(minusT(x, y))
minus(pos(x), neg(y)) → pos(plusNat(x, y))
minus(neg(x), pos(y)) → neg(plusNat(x, y))
while(true, i, y) → while(and(notZero(y), greaterZero(i)), minus(i, y), y)
From the DPs we obtained the following set of size-change graphs:
WHILE(true, i, y) → WHILE(and(notZero(y), greaterZero(i)), minus(i, y), y)
notZero(pos(s(x))) → true
notZero(neg(s(x))) → true
notZero(neg(0)) → false
notZero(pos(0)) → false
greaterZero(pos(s(x))) → true
greaterZero(pos(0)) → false
greaterZero(neg(x)) → false
and(false, false) → false
and(false, true) → false
and(true, false) → false
and(true, true) → true
minusT(0, y) → neg(y)
minusT(x, 0) → pos(x)
minusT(s(x), s(y)) → minusT(x, y)
plusNat(0, y) → y
plusNat(s(x), y) → plusNat(x, s(y))
negate(pos(x)) → neg(x)
negate(neg(x)) → pos(x)
minus(pos(x), pos(y)) → minusT(x, y)
minus(neg(x), neg(y)) → negate(minusT(x, y))
minus(pos(x), neg(y)) → pos(plusNat(x, y))
minus(neg(x), pos(y)) → neg(plusNat(x, y))
while(true, i, y) → while(and(notZero(y), greaterZero(i)), minus(i, y), y)