YES
0 QTRS
↳1 Overlay + Local Confluence (⇔, 0 ms)
↳2 QTRS
↳3 DependencyPairsProof (⇔, 0 ms)
↳4 QDP
↳5 DependencyGraphProof (⇔, 0 ms)
↳6 AND
↳7 QDP
↳8 UsableRulesProof (⇔, 0 ms)
↳9 QDP
↳10 QReductionProof (⇔, 0 ms)
↳11 QDP
↳12 QDPSizeChangeProof (⇔, 0 ms)
↳13 YES
↳14 QDP
↳15 UsableRulesProof (⇔, 0 ms)
↳16 QDP
↳17 QReductionProof (⇔, 0 ms)
↳18 QDP
↳19 QDPSizeChangeProof (⇔, 0 ms)
↳20 YES
↳21 QDP
↳22 UsableRulesProof (⇔, 0 ms)
↳23 QDP
↳24 QReductionProof (⇔, 0 ms)
↳25 QDP
↳26 QDPSizeChangeProof (⇔, 0 ms)
↳27 YES
↳28 QDP
↳29 UsableRulesProof (⇔, 0 ms)
↳30 QDP
↳31 QReductionProof (⇔, 0 ms)
↳32 QDP
↳33 TransformationProof (⇔, 0 ms)
↳34 QDP
↳35 TransformationProof (⇔, 0 ms)
↳36 QDP
↳37 DependencyGraphProof (⇔, 0 ms)
↳38 QDP
↳39 TransformationProof (⇔, 0 ms)
↳40 QDP
↳41 DependencyGraphProof (⇔, 0 ms)
↳42 QDP
↳43 TransformationProof (⇔, 0 ms)
↳44 QDP
↳45 TransformationProof (⇔, 0 ms)
↳46 QDP
↳47 TransformationProof (⇔, 0 ms)
↳48 QDP
↳49 TransformationProof (⇔, 0 ms)
↳50 QDP
↳51 TransformationProof (⇔, 0 ms)
↳52 QDP
↳53 TransformationProof (⇔, 0 ms)
↳54 QDP
↳55 TransformationProof (⇔, 0 ms)
↳56 QDP
↳57 TransformationProof (⇔, 0 ms)
↳58 QDP
↳59 Induction-Processor (⇒, 14 ms)
↳60 AND
↳61 QDP
↳62 DependencyGraphProof (⇔, 0 ms)
↳63 QDP
↳64 Induction-Processor (⇒, 7 ms)
↳65 AND
↳66 QDP
↳67 DependencyGraphProof (⇔, 0 ms)
↳68 TRUE
↳69 QTRS
↳70 QTRSRRRProof (⇔, 0 ms)
↳71 QTRS
↳72 QTRSRRRProof (⇔, 0 ms)
↳73 QTRS
↳74 RisEmptyProof (⇔, 0 ms)
↳75 YES
↳76 QTRS
↳77 QTRSRRRProof (⇔, 4 ms)
↳78 QTRS
↳79 QTRSRRRProof (⇔, 0 ms)
↳80 QTRS
↳81 RisEmptyProof (⇔, 0 ms)
↳82 YES
minus(s(x), y) → if(gt(s(x), y), x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gcd(x, y) → if1(ge(x, y), x, y)
if1(true, x, y) → if2(gt(y, 0), x, y)
if1(false, x, y) → if3(gt(x, 0), x, y)
if2(true, x, y) → gcd(minus(x, y), y)
if2(false, x, y) → x
if3(true, x, y) → gcd(x, minus(y, x))
if3(false, x, y) → y
gt(0, y) → false
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x), y) → if(gt(s(x), y), x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gcd(x, y) → if1(ge(x, y), x, y)
if1(true, x, y) → if2(gt(y, 0), x, y)
if1(false, x, y) → if3(gt(x, 0), x, y)
if2(true, x, y) → gcd(minus(x, y), y)
if2(false, x, y) → x
if3(true, x, y) → gcd(x, minus(y, x))
if3(false, x, y) → y
gt(0, y) → false
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
MINUS(s(x), y) → IF(gt(s(x), y), x, y)
MINUS(s(x), y) → GT(s(x), y)
IF(true, x, y) → MINUS(x, y)
GCD(x, y) → IF1(ge(x, y), x, y)
GCD(x, y) → GE(x, y)
IF1(true, x, y) → IF2(gt(y, 0), x, y)
IF1(true, x, y) → GT(y, 0)
IF1(false, x, y) → IF3(gt(x, 0), x, y)
IF1(false, x, y) → GT(x, 0)
IF2(true, x, y) → GCD(minus(x, y), y)
IF2(true, x, y) → MINUS(x, y)
IF3(true, x, y) → GCD(x, minus(y, x))
IF3(true, x, y) → MINUS(y, x)
GT(s(x), s(y)) → GT(x, y)
GE(s(x), s(y)) → GE(x, y)
minus(s(x), y) → if(gt(s(x), y), x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gcd(x, y) → if1(ge(x, y), x, y)
if1(true, x, y) → if2(gt(y, 0), x, y)
if1(false, x, y) → if3(gt(x, 0), x, y)
if2(true, x, y) → gcd(minus(x, y), y)
if2(false, x, y) → x
if3(true, x, y) → gcd(x, minus(y, x))
if3(false, x, y) → y
gt(0, y) → false
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
GE(s(x), s(y)) → GE(x, y)
minus(s(x), y) → if(gt(s(x), y), x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gcd(x, y) → if1(ge(x, y), x, y)
if1(true, x, y) → if2(gt(y, 0), x, y)
if1(false, x, y) → if3(gt(x, 0), x, y)
if2(true, x, y) → gcd(minus(x, y), y)
if2(false, x, y) → x
if3(true, x, y) → gcd(x, minus(y, x))
if3(false, x, y) → y
gt(0, y) → false
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
GE(s(x), s(y)) → GE(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
GE(s(x), s(y)) → GE(x, y)
From the DPs we obtained the following set of size-change graphs:
GT(s(x), s(y)) → GT(x, y)
minus(s(x), y) → if(gt(s(x), y), x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gcd(x, y) → if1(ge(x, y), x, y)
if1(true, x, y) → if2(gt(y, 0), x, y)
if1(false, x, y) → if3(gt(x, 0), x, y)
if2(true, x, y) → gcd(minus(x, y), y)
if2(false, x, y) → x
if3(true, x, y) → gcd(x, minus(y, x))
if3(false, x, y) → y
gt(0, y) → false
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
GT(s(x), s(y)) → GT(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
GT(s(x), s(y)) → GT(x, y)
From the DPs we obtained the following set of size-change graphs:
IF(true, x, y) → MINUS(x, y)
MINUS(s(x), y) → IF(gt(s(x), y), x, y)
minus(s(x), y) → if(gt(s(x), y), x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gcd(x, y) → if1(ge(x, y), x, y)
if1(true, x, y) → if2(gt(y, 0), x, y)
if1(false, x, y) → if3(gt(x, 0), x, y)
if2(true, x, y) → gcd(minus(x, y), y)
if2(false, x, y) → x
if3(true, x, y) → gcd(x, minus(y, x))
if3(false, x, y) → y
gt(0, y) → false
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF(true, x, y) → MINUS(x, y)
MINUS(s(x), y) → IF(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
gt(0, y) → false
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF(true, x, y) → MINUS(x, y)
MINUS(s(x), y) → IF(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
gt(0, y) → false
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
From the DPs we obtained the following set of size-change graphs:
IF2(true, x, y) → GCD(minus(x, y), y)
GCD(x, y) → IF1(ge(x, y), x, y)
IF1(true, x, y) → IF2(gt(y, 0), x, y)
IF1(false, x, y) → IF3(gt(x, 0), x, y)
IF3(true, x, y) → GCD(x, minus(y, x))
minus(s(x), y) → if(gt(s(x), y), x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gcd(x, y) → if1(ge(x, y), x, y)
if1(true, x, y) → if2(gt(y, 0), x, y)
if1(false, x, y) → if3(gt(x, 0), x, y)
if2(true, x, y) → gcd(minus(x, y), y)
if2(false, x, y) → x
if3(true, x, y) → gcd(x, minus(y, x))
if3(false, x, y) → y
gt(0, y) → false
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF2(true, x, y) → GCD(minus(x, y), y)
GCD(x, y) → IF1(ge(x, y), x, y)
IF1(true, x, y) → IF2(gt(y, 0), x, y)
IF1(false, x, y) → IF3(gt(x, 0), x, y)
IF3(true, x, y) → GCD(x, minus(y, x))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
gcd(x0, x1)
if1(true, x0, x1)
if1(false, x0, x1)
if2(true, x0, x1)
if2(false, x0, x1)
if3(true, x0, x1)
if3(false, x0, x1)
IF2(true, x, y) → GCD(minus(x, y), y)
GCD(x, y) → IF1(ge(x, y), x, y)
IF1(true, x, y) → IF2(gt(y, 0), x, y)
IF1(false, x, y) → IF3(gt(x, 0), x, y)
IF3(true, x, y) → GCD(x, minus(y, x))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
GCD(x0, 0) → IF1(true, x0, 0) → GCD(x0, 0) → IF1(true, x0, 0)
GCD(0, s(x0)) → IF1(false, 0, s(x0)) → GCD(0, s(x0)) → IF1(false, 0, s(x0))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1)) → GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF2(true, x, y) → GCD(minus(x, y), y)
IF1(true, x, y) → IF2(gt(y, 0), x, y)
IF1(false, x, y) → IF3(gt(x, 0), x, y)
IF3(true, x, y) → GCD(x, minus(y, x))
GCD(x0, 0) → IF1(true, x0, 0)
GCD(0, s(x0)) → IF1(false, 0, s(x0))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF1(true, y0, s(x0)) → IF2(true, y0, s(x0)) → IF1(true, y0, s(x0)) → IF2(true, y0, s(x0))
IF1(true, y0, 0) → IF2(false, y0, 0) → IF1(true, y0, 0) → IF2(false, y0, 0)
IF2(true, x, y) → GCD(minus(x, y), y)
IF1(false, x, y) → IF3(gt(x, 0), x, y)
IF3(true, x, y) → GCD(x, minus(y, x))
GCD(x0, 0) → IF1(true, x0, 0)
GCD(0, s(x0)) → IF1(false, 0, s(x0))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF1(true, y0, s(x0)) → IF2(true, y0, s(x0))
IF1(true, y0, 0) → IF2(false, y0, 0)
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
GCD(0, s(x0)) → IF1(false, 0, s(x0))
IF1(false, x, y) → IF3(gt(x, 0), x, y)
IF3(true, x, y) → GCD(x, minus(y, x))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF1(true, y0, s(x0)) → IF2(true, y0, s(x0))
IF2(true, x, y) → GCD(minus(x, y), y)
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF1(false, s(x0), y1) → IF3(true, s(x0), y1) → IF1(false, s(x0), y1) → IF3(true, s(x0), y1)
IF1(false, 0, y1) → IF3(false, 0, y1) → IF1(false, 0, y1) → IF3(false, 0, y1)
GCD(0, s(x0)) → IF1(false, 0, s(x0))
IF3(true, x, y) → GCD(x, minus(y, x))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF1(true, y0, s(x0)) → IF2(true, y0, s(x0))
IF2(true, x, y) → GCD(minus(x, y), y)
IF1(false, s(x0), y1) → IF3(true, s(x0), y1)
IF1(false, 0, y1) → IF3(false, 0, y1)
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF1(true, y0, s(x0)) → IF2(true, y0, s(x0))
IF2(true, x, y) → GCD(minus(x, y), y)
IF1(false, s(x0), y1) → IF3(true, s(x0), y1)
IF3(true, x, y) → GCD(x, minus(y, x))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF2(true, s(x0), x1) → GCD(if(gt(s(x0), x1), x0, x1), x1) → IF2(true, s(x0), x1) → GCD(if(gt(s(x0), x1), x0, x1), x1)
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF1(true, y0, s(x0)) → IF2(true, y0, s(x0))
IF1(false, s(x0), y1) → IF3(true, s(x0), y1)
IF3(true, x, y) → GCD(x, minus(y, x))
IF2(true, s(x0), x1) → GCD(if(gt(s(x0), x1), x0, x1), x1)
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF3(true, x1, s(x0)) → GCD(x1, if(gt(s(x0), x1), x0, x1)) → IF3(true, x1, s(x0)) → GCD(x1, if(gt(s(x0), x1), x0, x1))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF1(true, y0, s(x0)) → IF2(true, y0, s(x0))
IF1(false, s(x0), y1) → IF3(true, s(x0), y1)
IF2(true, s(x0), x1) → GCD(if(gt(s(x0), x1), x0, x1), x1)
IF3(true, x1, s(x0)) → GCD(x1, if(gt(s(x0), x1), x0, x1))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF1(true, s(z0), s(z1)) → IF2(true, s(z0), s(z1)) → IF1(true, s(z0), s(z1)) → IF2(true, s(z0), s(z1))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF1(false, s(x0), y1) → IF3(true, s(x0), y1)
IF2(true, s(x0), x1) → GCD(if(gt(s(x0), x1), x0, x1), x1)
IF3(true, x1, s(x0)) → GCD(x1, if(gt(s(x0), x1), x0, x1))
IF1(true, s(z0), s(z1)) → IF2(true, s(z0), s(z1))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF1(false, s(z0), s(z1)) → IF3(true, s(z0), s(z1)) → IF1(false, s(z0), s(z1)) → IF3(true, s(z0), s(z1))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF2(true, s(x0), x1) → GCD(if(gt(s(x0), x1), x0, x1), x1)
IF3(true, x1, s(x0)) → GCD(x1, if(gt(s(x0), x1), x0, x1))
IF1(true, s(z0), s(z1)) → IF2(true, s(z0), s(z1))
IF1(false, s(z0), s(z1)) → IF3(true, s(z0), s(z1))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF2(true, s(z0), s(z1)) → GCD(if(gt(s(z0), s(z1)), z0, s(z1)), s(z1)) → IF2(true, s(z0), s(z1)) → GCD(if(gt(s(z0), s(z1)), z0, s(z1)), s(z1))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF3(true, x1, s(x0)) → GCD(x1, if(gt(s(x0), x1), x0, x1))
IF1(true, s(z0), s(z1)) → IF2(true, s(z0), s(z1))
IF1(false, s(z0), s(z1)) → IF3(true, s(z0), s(z1))
IF2(true, s(z0), s(z1)) → GCD(if(gt(s(z0), s(z1)), z0, s(z1)), s(z1))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF2(true, s(z0), s(z1)) → GCD(if(gt(z0, z1), z0, s(z1)), s(z1)) → IF2(true, s(z0), s(z1)) → GCD(if(gt(z0, z1), z0, s(z1)), s(z1))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF3(true, x1, s(x0)) → GCD(x1, if(gt(s(x0), x1), x0, x1))
IF1(true, s(z0), s(z1)) → IF2(true, s(z0), s(z1))
IF1(false, s(z0), s(z1)) → IF3(true, s(z0), s(z1))
IF2(true, s(z0), s(z1)) → GCD(if(gt(z0, z1), z0, s(z1)), s(z1))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF3(true, s(z0), s(z1)) → GCD(s(z0), if(gt(s(z1), s(z0)), z1, s(z0))) → IF3(true, s(z0), s(z1)) → GCD(s(z0), if(gt(s(z1), s(z0)), z1, s(z0)))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF1(true, s(z0), s(z1)) → IF2(true, s(z0), s(z1))
IF1(false, s(z0), s(z1)) → IF3(true, s(z0), s(z1))
IF2(true, s(z0), s(z1)) → GCD(if(gt(z0, z1), z0, s(z1)), s(z1))
IF3(true, s(z0), s(z1)) → GCD(s(z0), if(gt(s(z1), s(z0)), z1, s(z0)))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF3(true, s(z0), s(z1)) → GCD(s(z0), if(gt(z1, z0), z1, s(z0))) → IF3(true, s(z0), s(z1)) → GCD(s(z0), if(gt(z1, z0), z1, s(z0)))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF1(true, s(z0), s(z1)) → IF2(true, s(z0), s(z1))
IF1(false, s(z0), s(z1)) → IF3(true, s(z0), s(z1))
IF2(true, s(z0), s(z1)) → GCD(if(gt(z0, z1), z0, s(z1)), s(z1))
IF3(true, s(z0), s(z1)) → GCD(s(z0), if(gt(z1, z0), z1, s(z0)))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
POL(0) = 0
POL(GCD(x1, x2)) = 1 + x1 + x2
POL(IF1(x1, x2, x3)) = 1 + x2 + x3
POL(IF2(x1, x2, x3)) = 1 + x2 + x3
POL(IF3(x1, x2, x3)) = 1 + x2 + x3
POL(false_renamed) = 0
POL(ge(x1, x2)) = x2
POL(gt(x1, x2)) = 0
POL(if(x1, x2, x3)) = 1 + x1 + x2
POL(minus(x1, x2)) = x1
POL(s(x1)) = 1 + x1
POL(true_renamed) = 0
proof of internal
# AProVE Commit ID: 3a20a6ef7432c3f292db1a8838479c42bf5e3b22 root 20240618 unpublished
Partial correctness of the following Program
[x, v60, v61, v62, x2, y'', x6, y', v58, y3, x', y, y1, x3, x4, x5, y2]
equal_bool(true, false) -> false
equal_bool(false, true) -> false
equal_bool(true, true) -> true
equal_bool(false, false) -> true
true and x -> x
false and x -> false
true or x -> true
false or x -> x
not(false) -> true
not(true) -> false
isa_true(true) -> true
isa_true(false) -> false
isa_false(true) -> false
isa_false(false) -> true
equal_sort[a0](s(v60), s(v61)) -> equal_sort[a0](v60, v61)
equal_sort[a0](s(v60), 0) -> false
equal_sort[a0](0, s(v62)) -> false
equal_sort[a0](0, 0) -> true
equal_sort[a26](true_renamed, true_renamed) -> true
equal_sort[a26](true_renamed, false_renamed) -> false
equal_sort[a26](false_renamed, true_renamed) -> false
equal_sort[a26](false_renamed, false_renamed) -> true
equal_sort[a44](witness_sort[a44], witness_sort[a44]) -> true
if'(false_renamed, x2, y'') -> true
if'(true_renamed, s(x6), y') -> if'(gt(s(x6), y'), x6, y')
if'(true_renamed, 0, y') -> false
minus'(0, v58) -> false
equal_sort[a26](gt(s(x6), y3), true_renamed) -> true | minus'(s(x6), y3) -> minus'(x6, y3)
equal_sort[a26](gt(s(x6), y3), true_renamed) -> false | minus'(s(x6), y3) -> true
gt(s(x), 0) -> true_renamed
gt(s(x'), s(y)) -> gt(x', y)
gt(0, y1) -> false_renamed
if(false_renamed, x2, y'') -> 0
if(true_renamed, s(x6), y') -> s(if(gt(s(x6), y'), x6, y'))
if(true_renamed, 0, y') -> s(0)
ge(x3, 0) -> true_renamed
ge(0, s(x4)) -> false_renamed
ge(s(x5), s(y2)) -> ge(x5, y2)
minus(0, v58) -> 0
equal_sort[a26](gt(s(x6), y3), true_renamed) -> true | minus(s(x6), y3) -> s(minus(x6, y3))
equal_sort[a26](gt(s(x6), y3), true_renamed) -> false | minus(s(x6), y3) -> 0
using the following formula:
z0'':sort[a0],z1'':sort[a0].if'(gt(z0'', z1''), z0'', s(z1''))=true
could be successfully shown:
(0) Formula
(1) Induction by algorithm [EQUIVALENT, 0 ms]
(2) AND
(3) Formula
(4) Symbolic evaluation [EQUIVALENT, 0 ms]
(5) Formula
(6) Induction by data structure [EQUIVALENT, 0 ms]
(7) AND
(8) Formula
(9) Symbolic evaluation under hypothesis [EQUIVALENT, 0 ms]
(10) YES
(11) Formula
(12) Symbolic evaluation [EQUIVALENT, 0 ms]
(13) YES
(14) Formula
(15) Symbolic evaluation [EQUIVALENT, 0 ms]
(16) YES
(17) Formula
(18) Symbolic evaluation [EQUIVALENT, 0 ms]
(19) Formula
(20) Hypothesis Lifting [EQUIVALENT, 0 ms]
(21) Formula
(22) Inverse Substitution [SOUND, 0 ms]
(23) Formula
(24) Inverse Substitution [SOUND, 0 ms]
(25) Formula
(26) Induction by algorithm [EQUIVALENT, 0 ms]
(27) AND
(28) Formula
(29) Symbolic evaluation [EQUIVALENT, 0 ms]
(30) YES
(31) Formula
(32) Symbolic evaluation [EQUIVALENT, 0 ms]
(33) YES
(34) Formula
(35) Symbolic evaluation under hypothesis [EQUIVALENT, 0 ms]
(36) YES
----------------------------------------
(0)
Obligation:
Formula:
z0'':sort[a0],z1'':sort[a0].if'(gt(z0'', z1''), z0'', s(z1''))=true
There are no hypotheses.
----------------------------------------
(1) Induction by algorithm (EQUIVALENT)
Induction by algorithm gt(z0'', z1'') generates the following cases:
1. Base Case:
Formula:
x:sort[a0].if'(gt(s(x), 0), s(x), s(0))=true
There are no hypotheses.
2. Base Case:
Formula:
y1:sort[a0].if'(gt(0, y1), 0, s(y1))=true
There are no hypotheses.
1. Step Case:
Formula:
x':sort[a0],y:sort[a0].if'(gt(s(x'), s(y)), s(x'), s(s(y)))=true
Hypotheses:
x':sort[a0],y:sort[a0].if'(gt(x', y), x', s(y))=true
----------------------------------------
(2)
Complex Obligation (AND)
----------------------------------------
(3)
Obligation:
Formula:
x:sort[a0].if'(gt(s(x), 0), s(x), s(0))=true
There are no hypotheses.
----------------------------------------
(4) Symbolic evaluation (EQUIVALENT)
Could be shown by simple symbolic evaluation.
----------------------------------------
(5)
Obligation:
Formula:
x:sort[a0].if'(gt(x, 0), x, s(0))=true
There are no hypotheses.
----------------------------------------
(6) Induction by data structure (EQUIVALENT)
Induction by data structure sort[a0] generates the following cases:
1. Base Case:
Formula:
if'(gt(0, 0), 0, s(0))=true
There are no hypotheses.
1. Step Case:
Formula:
n:sort[a0].if'(gt(s(n), 0), s(n), s(0))=true
Hypotheses:
n:sort[a0].if'(gt(n, 0), n, s(0))=true
----------------------------------------
(7)
Complex Obligation (AND)
----------------------------------------
(8)
Obligation:
Formula:
n:sort[a0].if'(gt(s(n), 0), s(n), s(0))=true
Hypotheses:
n:sort[a0].if'(gt(n, 0), n, s(0))=true
----------------------------------------
(9) Symbolic evaluation under hypothesis (EQUIVALENT)
Could be shown using symbolic evaluation under hypothesis, by using the following hypotheses:
n:sort[a0].if'(gt(n, 0), n, s(0))=true
----------------------------------------
(10)
YES
----------------------------------------
(11)
Obligation:
Formula:
if'(gt(0, 0), 0, s(0))=true
There are no hypotheses.
----------------------------------------
(12) Symbolic evaluation (EQUIVALENT)
Could be reduced to the following new obligation by simple symbolic evaluation:
True
----------------------------------------
(13)
YES
----------------------------------------
(14)
Obligation:
Formula:
y1:sort[a0].if'(gt(0, y1), 0, s(y1))=true
There are no hypotheses.
----------------------------------------
(15) Symbolic evaluation (EQUIVALENT)
Could be reduced to the following new obligation by simple symbolic evaluation:
True
----------------------------------------
(16)
YES
----------------------------------------
(17)
Obligation:
Formula:
x':sort[a0],y:sort[a0].if'(gt(s(x'), s(y)), s(x'), s(s(y)))=true
Hypotheses:
x':sort[a0],y:sort[a0].if'(gt(x', y), x', s(y))=true
----------------------------------------
(18) Symbolic evaluation (EQUIVALENT)
Could be shown by simple symbolic evaluation.
----------------------------------------
(19)
Obligation:
Formula:
x':sort[a0],y:sort[a0].if'(gt(x', y), s(x'), s(s(y)))=true
Hypotheses:
x':sort[a0],y:sort[a0].if'(gt(x', y), x', s(y))=true
----------------------------------------
(20) Hypothesis Lifting (EQUIVALENT)
Formula could be generalised by hypothesis lifting to the following new obligation:
Formula:
x':sort[a0],y:sort[a0].(if'(gt(x', y), x', s(y))=true->if'(gt(x', y), s(x'), s(s(y)))=true)
There are no hypotheses.
----------------------------------------
(21)
Obligation:
Formula:
x':sort[a0],y:sort[a0].(if'(gt(x', y), x', s(y))=true->if'(gt(x', y), s(x'), s(s(y)))=true)
There are no hypotheses.
----------------------------------------
(22) Inverse Substitution (SOUND)
The formula could be generalised by inverse substitution to:
n:sort[a26],x':sort[a0],y:sort[a0].(if'(n, x', s(y))=true->if'(n, s(x'), s(s(y)))=true)
Inverse substitution used:
[gt(x', y)/n]
----------------------------------------
(23)
Obligation:
Formula:
n:sort[a26],x':sort[a0],y:sort[a0].(if'(n, x', s(y))=true->if'(n, s(x'), s(s(y)))=true)
There are no hypotheses.
----------------------------------------
(24) Inverse Substitution (SOUND)
The formula could be generalised by inverse substitution to:
n:sort[a26],x':sort[a0],n':sort[a0].(if'(n, x', n')=true->if'(n, s(x'), s(n'))=true)
Inverse substitution used:
[s(y)/n']
----------------------------------------
(25)
Obligation:
Formula:
n:sort[a26],x':sort[a0],n':sort[a0].(if'(n, x', n')=true->if'(n, s(x'), s(n'))=true)
There are no hypotheses.
----------------------------------------
(26) Induction by algorithm (EQUIVALENT)
Induction by algorithm if'(n, x', n') generates the following cases:
1. Base Case:
Formula:
x2:sort[a0],y'':sort[a0].(if'(false_renamed, x2, y'')=true->if'(false_renamed, s(x2), s(y''))=true)
There are no hypotheses.
2. Base Case:
Formula:
y':sort[a0].(if'(true_renamed, 0, y')=true->if'(true_renamed, s(0), s(y'))=true)
There are no hypotheses.
1. Step Case:
Formula:
x6:sort[a0],y':sort[a0].(if'(true_renamed, s(x6), y')=true->if'(true_renamed, s(s(x6)), s(y'))=true)
Hypotheses:
x6:sort[a0],y':sort[a0].(if'(gt(s(x6), y'), x6, y')=true->if'(gt(s(x6), y'), s(x6), s(y'))=true)
----------------------------------------
(27)
Complex Obligation (AND)
----------------------------------------
(28)
Obligation:
Formula:
x2:sort[a0],y'':sort[a0].(if'(false_renamed, x2, y'')=true->if'(false_renamed, s(x2), s(y''))=true)
There are no hypotheses.
----------------------------------------
(29) Symbolic evaluation (EQUIVALENT)
Could be reduced to the following new obligation by simple symbolic evaluation:
True
----------------------------------------
(30)
YES
----------------------------------------
(31)
Obligation:
Formula:
y':sort[a0].(if'(true_renamed, 0, y')=true->if'(true_renamed, s(0), s(y'))=true)
There are no hypotheses.
----------------------------------------
(32) Symbolic evaluation (EQUIVALENT)
Could be reduced to the following new obligation by simple symbolic evaluation:
True
----------------------------------------
(33)
YES
----------------------------------------
(34)
Obligation:
Formula:
x6:sort[a0],y':sort[a0].(if'(true_renamed, s(x6), y')=true->if'(true_renamed, s(s(x6)), s(y'))=true)
Hypotheses:
x6:sort[a0],y':sort[a0].(if'(gt(s(x6), y'), x6, y')=true->if'(gt(s(x6), y'), s(x6), s(y'))=true)
----------------------------------------
(35) Symbolic evaluation under hypothesis (EQUIVALENT)
Could be shown using symbolic evaluation under hypothesis, by using the following hypotheses:
x6:sort[a0],y':sort[a0].(if'(gt(s(x6), y'), x6, y')=true->if'(gt(s(x6), y'), s(x6), s(y'))=true)
----------------------------------------
(36)
YES
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
IF1(true, s(z0), s(z1)) → IF2(true, s(z0), s(z1))
IF1(false, s(z0), s(z1)) → IF3(true, s(z0), s(z1))
IF3(true, s(z0), s(z1)) → GCD(s(z0), if(gt(z1, z0), z1, s(z0)))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
IF1(false, s(z0), s(z1)) → IF3(true, s(z0), s(z1))
IF3(true, s(z0), s(z1)) → GCD(s(z0), if(gt(z1, z0), z1, s(z0)))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
POL(0) = 0
POL(GCD(x1, x2)) = x2
POL(IF1(x1, x2, x3)) = x3
POL(IF3(x1, x2, x3)) = x3
POL(false_renamed) = 1
POL(ge(x1, x2)) = x1 + x2
POL(gt(x1, x2)) = 1 + x1 + x2
POL(if(x1, x2, x3)) = 1 + x2
POL(minus(x1, x2)) = x1
POL(s(x1)) = 1 + x1
POL(true_renamed) = 0
proof of internal
# AProVE Commit ID: 3a20a6ef7432c3f292db1a8838479c42bf5e3b22 root 20240618 unpublished
Partial correctness of the following Program
[x, v30, v31, v32, x2, y'', x6, y', v28, y3, x', y, y1, x3, x4, x5, y2]
equal_bool(true, false) -> false
equal_bool(false, true) -> false
equal_bool(true, true) -> true
equal_bool(false, false) -> true
true and x -> x
false and x -> false
true or x -> true
false or x -> x
not(false) -> true
not(true) -> false
isa_true(true) -> true
isa_true(false) -> false
isa_false(true) -> false
isa_false(false) -> true
equal_sort[a0](s(v30), s(v31)) -> equal_sort[a0](v30, v31)
equal_sort[a0](s(v30), 0) -> false
equal_sort[a0](0, s(v32)) -> false
equal_sort[a0](0, 0) -> true
equal_sort[a22](true_renamed, true_renamed) -> true
equal_sort[a22](true_renamed, false_renamed) -> false
equal_sort[a22](false_renamed, true_renamed) -> false
equal_sort[a22](false_renamed, false_renamed) -> true
equal_sort[a41](witness_sort[a41], witness_sort[a41]) -> true
if'(false_renamed, x2, y'') -> true
if'(true_renamed, s(x6), y') -> if'(gt(s(x6), y'), x6, y')
if'(true_renamed, 0, y') -> false
minus'(0, v28) -> false
equal_sort[a22](gt(s(x6), y3), true_renamed) -> true | minus'(s(x6), y3) -> minus'(x6, y3)
equal_sort[a22](gt(s(x6), y3), true_renamed) -> false | minus'(s(x6), y3) -> true
gt(s(x), 0) -> true_renamed
gt(s(x'), s(y)) -> gt(x', y)
gt(0, y1) -> false_renamed
if(false_renamed, x2, y'') -> 0
if(true_renamed, s(x6), y') -> s(if(gt(s(x6), y'), x6, y'))
if(true_renamed, 0, y') -> s(0)
ge(x3, 0) -> true_renamed
ge(0, s(x4)) -> false_renamed
ge(s(x5), s(y2)) -> ge(x5, y2)
minus(0, v28) -> 0
equal_sort[a22](gt(s(x6), y3), true_renamed) -> true | minus(s(x6), y3) -> s(minus(x6, y3))
equal_sort[a22](gt(s(x6), y3), true_renamed) -> false | minus(s(x6), y3) -> 0
using the following formula:
z1':sort[a0],z0':sort[a0].if'(gt(z1', z0'), z1', s(z0'))=true
could be successfully shown:
(0) Formula
(1) Induction by algorithm [EQUIVALENT, 0 ms]
(2) AND
(3) Formula
(4) Symbolic evaluation [EQUIVALENT, 0 ms]
(5) Formula
(6) Induction by data structure [EQUIVALENT, 0 ms]
(7) AND
(8) Formula
(9) Symbolic evaluation under hypothesis [EQUIVALENT, 0 ms]
(10) YES
(11) Formula
(12) Symbolic evaluation [EQUIVALENT, 0 ms]
(13) YES
(14) Formula
(15) Symbolic evaluation [EQUIVALENT, 0 ms]
(16) YES
(17) Formula
(18) Symbolic evaluation [EQUIVALENT, 0 ms]
(19) Formula
(20) Hypothesis Lifting [EQUIVALENT, 0 ms]
(21) Formula
(22) Inverse Substitution [SOUND, 0 ms]
(23) Formula
(24) Inverse Substitution [SOUND, 0 ms]
(25) Formula
(26) Induction by algorithm [EQUIVALENT, 0 ms]
(27) AND
(28) Formula
(29) Symbolic evaluation [EQUIVALENT, 0 ms]
(30) YES
(31) Formula
(32) Symbolic evaluation [EQUIVALENT, 0 ms]
(33) YES
(34) Formula
(35) Symbolic evaluation under hypothesis [EQUIVALENT, 0 ms]
(36) YES
----------------------------------------
(0)
Obligation:
Formula:
z1':sort[a0],z0':sort[a0].if'(gt(z1', z0'), z1', s(z0'))=true
There are no hypotheses.
----------------------------------------
(1) Induction by algorithm (EQUIVALENT)
Induction by algorithm gt(z1', z0') generates the following cases:
1. Base Case:
Formula:
x:sort[a0].if'(gt(s(x), 0), s(x), s(0))=true
There are no hypotheses.
2. Base Case:
Formula:
y1:sort[a0].if'(gt(0, y1), 0, s(y1))=true
There are no hypotheses.
1. Step Case:
Formula:
x':sort[a0],y:sort[a0].if'(gt(s(x'), s(y)), s(x'), s(s(y)))=true
Hypotheses:
x':sort[a0],y:sort[a0].if'(gt(x', y), x', s(y))=true
----------------------------------------
(2)
Complex Obligation (AND)
----------------------------------------
(3)
Obligation:
Formula:
x:sort[a0].if'(gt(s(x), 0), s(x), s(0))=true
There are no hypotheses.
----------------------------------------
(4) Symbolic evaluation (EQUIVALENT)
Could be shown by simple symbolic evaluation.
----------------------------------------
(5)
Obligation:
Formula:
x:sort[a0].if'(gt(x, 0), x, s(0))=true
There are no hypotheses.
----------------------------------------
(6) Induction by data structure (EQUIVALENT)
Induction by data structure sort[a0] generates the following cases:
1. Base Case:
Formula:
if'(gt(0, 0), 0, s(0))=true
There are no hypotheses.
1. Step Case:
Formula:
n:sort[a0].if'(gt(s(n), 0), s(n), s(0))=true
Hypotheses:
n:sort[a0].if'(gt(n, 0), n, s(0))=true
----------------------------------------
(7)
Complex Obligation (AND)
----------------------------------------
(8)
Obligation:
Formula:
n:sort[a0].if'(gt(s(n), 0), s(n), s(0))=true
Hypotheses:
n:sort[a0].if'(gt(n, 0), n, s(0))=true
----------------------------------------
(9) Symbolic evaluation under hypothesis (EQUIVALENT)
Could be shown using symbolic evaluation under hypothesis, by using the following hypotheses:
n:sort[a0].if'(gt(n, 0), n, s(0))=true
----------------------------------------
(10)
YES
----------------------------------------
(11)
Obligation:
Formula:
if'(gt(0, 0), 0, s(0))=true
There are no hypotheses.
----------------------------------------
(12) Symbolic evaluation (EQUIVALENT)
Could be reduced to the following new obligation by simple symbolic evaluation:
True
----------------------------------------
(13)
YES
----------------------------------------
(14)
Obligation:
Formula:
y1:sort[a0].if'(gt(0, y1), 0, s(y1))=true
There are no hypotheses.
----------------------------------------
(15) Symbolic evaluation (EQUIVALENT)
Could be reduced to the following new obligation by simple symbolic evaluation:
True
----------------------------------------
(16)
YES
----------------------------------------
(17)
Obligation:
Formula:
x':sort[a0],y:sort[a0].if'(gt(s(x'), s(y)), s(x'), s(s(y)))=true
Hypotheses:
x':sort[a0],y:sort[a0].if'(gt(x', y), x', s(y))=true
----------------------------------------
(18) Symbolic evaluation (EQUIVALENT)
Could be shown by simple symbolic evaluation.
----------------------------------------
(19)
Obligation:
Formula:
x':sort[a0],y:sort[a0].if'(gt(x', y), s(x'), s(s(y)))=true
Hypotheses:
x':sort[a0],y:sort[a0].if'(gt(x', y), x', s(y))=true
----------------------------------------
(20) Hypothesis Lifting (EQUIVALENT)
Formula could be generalised by hypothesis lifting to the following new obligation:
Formula:
x':sort[a0],y:sort[a0].(if'(gt(x', y), x', s(y))=true->if'(gt(x', y), s(x'), s(s(y)))=true)
There are no hypotheses.
----------------------------------------
(21)
Obligation:
Formula:
x':sort[a0],y:sort[a0].(if'(gt(x', y), x', s(y))=true->if'(gt(x', y), s(x'), s(s(y)))=true)
There are no hypotheses.
----------------------------------------
(22) Inverse Substitution (SOUND)
The formula could be generalised by inverse substitution to:
n:sort[a22],x':sort[a0],y:sort[a0].(if'(n, x', s(y))=true->if'(n, s(x'), s(s(y)))=true)
Inverse substitution used:
[gt(x', y)/n]
----------------------------------------
(23)
Obligation:
Formula:
n:sort[a22],x':sort[a0],y:sort[a0].(if'(n, x', s(y))=true->if'(n, s(x'), s(s(y)))=true)
There are no hypotheses.
----------------------------------------
(24) Inverse Substitution (SOUND)
The formula could be generalised by inverse substitution to:
n:sort[a22],x':sort[a0],n':sort[a0].(if'(n, x', n')=true->if'(n, s(x'), s(n'))=true)
Inverse substitution used:
[s(y)/n']
----------------------------------------
(25)
Obligation:
Formula:
n:sort[a22],x':sort[a0],n':sort[a0].(if'(n, x', n')=true->if'(n, s(x'), s(n'))=true)
There are no hypotheses.
----------------------------------------
(26) Induction by algorithm (EQUIVALENT)
Induction by algorithm if'(n, x', n') generates the following cases:
1. Base Case:
Formula:
x2:sort[a0],y'':sort[a0].(if'(false_renamed, x2, y'')=true->if'(false_renamed, s(x2), s(y''))=true)
There are no hypotheses.
2. Base Case:
Formula:
y':sort[a0].(if'(true_renamed, 0, y')=true->if'(true_renamed, s(0), s(y'))=true)
There are no hypotheses.
1. Step Case:
Formula:
x6:sort[a0],y':sort[a0].(if'(true_renamed, s(x6), y')=true->if'(true_renamed, s(s(x6)), s(y'))=true)
Hypotheses:
x6:sort[a0],y':sort[a0].(if'(gt(s(x6), y'), x6, y')=true->if'(gt(s(x6), y'), s(x6), s(y'))=true)
----------------------------------------
(27)
Complex Obligation (AND)
----------------------------------------
(28)
Obligation:
Formula:
x2:sort[a0],y'':sort[a0].(if'(false_renamed, x2, y'')=true->if'(false_renamed, s(x2), s(y''))=true)
There are no hypotheses.
----------------------------------------
(29) Symbolic evaluation (EQUIVALENT)
Could be reduced to the following new obligation by simple symbolic evaluation:
True
----------------------------------------
(30)
YES
----------------------------------------
(31)
Obligation:
Formula:
y':sort[a0].(if'(true_renamed, 0, y')=true->if'(true_renamed, s(0), s(y'))=true)
There are no hypotheses.
----------------------------------------
(32) Symbolic evaluation (EQUIVALENT)
Could be reduced to the following new obligation by simple symbolic evaluation:
True
----------------------------------------
(33)
YES
----------------------------------------
(34)
Obligation:
Formula:
x6:sort[a0],y':sort[a0].(if'(true_renamed, s(x6), y')=true->if'(true_renamed, s(s(x6)), s(y'))=true)
Hypotheses:
x6:sort[a0],y':sort[a0].(if'(gt(s(x6), y'), x6, y')=true->if'(gt(s(x6), y'), s(x6), s(y'))=true)
----------------------------------------
(35) Symbolic evaluation under hypothesis (EQUIVALENT)
Could be shown using symbolic evaluation under hypothesis, by using the following hypotheses:
x6:sort[a0],y':sort[a0].(if'(gt(s(x6), y'), x6, y')=true->if'(gt(s(x6), y'), s(x6), s(y'))=true)
----------------------------------------
(36)
YES
IF1(false, s(z0), s(z1)) → IF3(true, s(z0), s(z1))
GCD(s(x0), s(x1)) → IF1(ge(x0, x1), s(x0), s(x1))
minus(s(x), y) → if(gt(s(x), y), x, y)
gt(s(x), 0) → true
gt(s(x), s(y)) → gt(x, y)
if(true, x, y) → s(minus(x, y))
if(false, x, y) → 0
gt(0, y) → false
ge(x, 0) → true
ge(0, s(x)) → false
ge(s(x), s(y)) → ge(x, y)
minus(s(x0), x1)
if(true, x0, x1)
if(false, x0, x1)
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
ge(x0, 0)
ge(0, s(x0))
ge(s(x0), s(x1))
if'(true_renamed, x'', y') → minus'(x'', y')
if'(false_renamed, x2, y'') → true
minus'(s(x6), y3) → if'(gt(s(x6), y3), x6, y3)
minus'(0, v28) → false
gt(s(x), 0) → true_renamed
gt(s(x'), s(y)) → gt(x', y)
if(true_renamed, x'', y') → s(minus(x'', y'))
if(false_renamed, x2, y'') → 0
gt(0, y1) → false_renamed
ge(x3, 0) → true_renamed
ge(0, s(x4)) → false_renamed
ge(s(x5), s(y2)) → ge(x5, y2)
minus(s(x6), y3) → if(gt(s(x6), y3), x6, y3)
minus(0, v28) → 0
equal_bool(true, false) → false
equal_bool(false, true) → false
equal_bool(true, true) → true
equal_bool(false, false) → true
and(true, x) → x
and(false, x) → false
or(true, x) → true
or(false, x) → x
not(false) → true
not(true) → false
isa_true(true) → true
isa_true(false) → false
isa_false(true) → false
isa_false(false) → true
equal_sort[a0](s(v30), s(v31)) → equal_sort[a0](v30, v31)
equal_sort[a0](s(v30), 0) → false
equal_sort[a0](0, s(v32)) → false
equal_sort[a0](0, 0) → true
equal_sort[a22](true_renamed, true_renamed) → true
equal_sort[a22](true_renamed, false_renamed) → false
equal_sort[a22](false_renamed, true_renamed) → false
equal_sort[a22](false_renamed, false_renamed) → true
equal_sort[a41](witness_sort[a41], witness_sort[a41]) → true
[if'3, minus'2] > [truerenamed, true, equalbool2, or2] > s1 > gt2
[if'3, minus'2] > [truerenamed, true, equalbool2, or2] > [false, and2, equalsort[a22]2] > gt2
[if3, minus2] > s1 > gt2
ge2 > [falserenamed, 0] > [truerenamed, true, equalbool2, or2] > s1 > gt2
ge2 > [falserenamed, 0] > [truerenamed, true, equalbool2, or2] > [false, and2, equalsort[a22]2] > gt2
not1 > [truerenamed, true, equalbool2, or2] > s1 > gt2
not1 > [truerenamed, true, equalbool2, or2] > [false, and2, equalsort[a22]2] > gt2
isafalse1 > [truerenamed, true, equalbool2, or2] > s1 > gt2
isafalse1 > [truerenamed, true, equalbool2, or2] > [false, and2, equalsort[a22]2] > gt2
equalsort[a0]2 > [truerenamed, true, equalbool2, or2] > s1 > gt2
equalsort[a0]2 > [truerenamed, true, equalbool2, or2] > [false, and2, equalsort[a22]2] > gt2
equalsort[a41]2 > gt2
witnesssort[a41] > [truerenamed, true, equalbool2, or2] > s1 > gt2
witnesssort[a41] > [truerenamed, true, equalbool2, or2] > [false, and2, equalsort[a22]2] > gt2
if'3: [2,3,1]
truerenamed: multiset
minus'2: [1,2]
falserenamed: multiset
true: multiset
s1: multiset
gt2: [1,2]
0: multiset
false: multiset
if3: [2,3,1]
minus2: [1,2]
ge2: [1,2]
equalbool2: multiset
and2: multiset
or2: multiset
not1: [1]
isafalse1: multiset
equalsort[a0]2: multiset
equalsort[a22]2: multiset
equalsort[a41]2: [1,2]
witnesssort[a41]: multiset
if'(true_renamed, x'', y') → minus'(x'', y')
if'(false_renamed, x2, y'') → true
minus'(s(x6), y3) → if'(gt(s(x6), y3), x6, y3)
minus'(0, v28) → false
gt(s(x), 0) → true_renamed
gt(s(x'), s(y)) → gt(x', y)
if(true_renamed, x'', y') → s(minus(x'', y'))
if(false_renamed, x2, y'') → 0
gt(0, y1) → false_renamed
ge(x3, 0) → true_renamed
ge(0, s(x4)) → false_renamed
ge(s(x5), s(y2)) → ge(x5, y2)
minus(s(x6), y3) → if(gt(s(x6), y3), x6, y3)
minus(0, v28) → 0
equal_bool(true, false) → false
equal_bool(false, true) → false
equal_bool(true, true) → true
equal_bool(false, false) → true
and(true, x) → x
and(false, x) → false
or(true, x) → true
or(false, x) → x
not(false) → true
not(true) → false
isa_false(true) → false
isa_false(false) → true
equal_sort[a0](s(v30), s(v31)) → equal_sort[a0](v30, v31)
equal_sort[a0](s(v30), 0) → false
equal_sort[a0](0, s(v32)) → false
equal_sort[a0](0, 0) → true
equal_sort[a22](true_renamed, true_renamed) → true
equal_sort[a22](true_renamed, false_renamed) → false
equal_sort[a22](false_renamed, true_renamed) → false
equal_sort[a22](false_renamed, false_renamed) → true
equal_sort[a41](witness_sort[a41], witness_sort[a41]) → true
isa_true(true) → true
isa_true(false) → false
isatrue1 > false > true
true=1
false=1
isa_true_1=0
isa_true(true) → true
isa_true(false) → false
if'(true_renamed, x'', y') → minus'(x'', y')
if'(false_renamed, x2, y'') → true
minus'(s(x6), y3) → if'(gt(s(x6), y3), x6, y3)
minus'(0, v58) → false
gt(s(x), 0) → true_renamed
gt(s(x'), s(y)) → gt(x', y)
if(true_renamed, x'', y') → s(minus(x'', y'))
if(false_renamed, x2, y'') → 0
gt(0, y1) → false_renamed
ge(x3, 0) → true_renamed
ge(0, s(x4)) → false_renamed
ge(s(x5), s(y2)) → ge(x5, y2)
minus(s(x6), y3) → if(gt(s(x6), y3), x6, y3)
minus(0, v58) → 0
equal_bool(true, false) → false
equal_bool(false, true) → false
equal_bool(true, true) → true
equal_bool(false, false) → true
and(true, x) → x
and(false, x) → false
or(true, x) → true
or(false, x) → x
not(false) → true
not(true) → false
isa_true(true) → true
isa_true(false) → false
isa_false(true) → false
isa_false(false) → true
equal_sort[a0](s(v60), s(v61)) → equal_sort[a0](v60, v61)
equal_sort[a0](s(v60), 0) → false
equal_sort[a0](0, s(v62)) → false
equal_sort[a0](0, 0) → true
equal_sort[a26](true_renamed, true_renamed) → true
equal_sort[a26](true_renamed, false_renamed) → false
equal_sort[a26](false_renamed, true_renamed) → false
equal_sort[a26](false_renamed, false_renamed) → true
equal_sort[a44](witness_sort[a44], witness_sort[a44]) → true
[if3, minus2] > [0, false, not1] > truerenamed > [if'3, minus'2, falserenamed, s1] > true > gt2
ge2 > truerenamed > [if'3, minus'2, falserenamed, s1] > true > gt2
equalbool2 > true > gt2
and2 > gt2
or2 > true > gt2
isafalse1 > [0, false, not1] > truerenamed > [if'3, minus'2, falserenamed, s1] > true > gt2
equalsort[a0]2 > [0, false, not1] > truerenamed > [if'3, minus'2, falserenamed, s1] > true > gt2
equalsort[a26]2 > [0, false, not1] > truerenamed > [if'3, minus'2, falserenamed, s1] > true > gt2
equalsort[a44]2 > gt2
witnesssort[a44] > true > gt2
if'3: [3,2,1]
truerenamed: multiset
minus'2: [2,1]
falserenamed: multiset
true: multiset
s1: multiset
gt2: [2,1]
0: multiset
false: multiset
if3: [3,2,1]
minus2: [2,1]
ge2: [1,2]
equalbool2: multiset
and2: multiset
or2: multiset
not1: multiset
isafalse1: [1]
equalsort[a0]2: [1,2]
equalsort[a26]2: multiset
equalsort[a44]2: multiset
witnesssort[a44]: multiset
if'(true_renamed, x'', y') → minus'(x'', y')
if'(false_renamed, x2, y'') → true
minus'(s(x6), y3) → if'(gt(s(x6), y3), x6, y3)
minus'(0, v58) → false
gt(s(x), 0) → true_renamed
gt(s(x'), s(y)) → gt(x', y)
if(true_renamed, x'', y') → s(minus(x'', y'))
if(false_renamed, x2, y'') → 0
gt(0, y1) → false_renamed
ge(x3, 0) → true_renamed
ge(0, s(x4)) → false_renamed
ge(s(x5), s(y2)) → ge(x5, y2)
minus(s(x6), y3) → if(gt(s(x6), y3), x6, y3)
minus(0, v58) → 0
equal_bool(true, false) → false
equal_bool(false, true) → false
equal_bool(true, true) → true
equal_bool(false, false) → true
and(true, x) → x
and(false, x) → false
or(true, x) → true
or(false, x) → x
not(false) → true
not(true) → false
isa_false(true) → false
isa_false(false) → true
equal_sort[a0](s(v60), s(v61)) → equal_sort[a0](v60, v61)
equal_sort[a0](s(v60), 0) → false
equal_sort[a0](0, s(v62)) → false
equal_sort[a0](0, 0) → true
equal_sort[a26](true_renamed, true_renamed) → true
equal_sort[a26](true_renamed, false_renamed) → false
equal_sort[a26](false_renamed, true_renamed) → false
equal_sort[a26](false_renamed, false_renamed) → true
equal_sort[a44](witness_sort[a44], witness_sort[a44]) → true
isa_true(true) → true
isa_true(false) → false
isatrue1 > false > true
true=1
false=1
isa_true_1=0
isa_true(true) → true
isa_true(false) → false