YES
0 QTRS
↳1 QTRSRRRProof (⇔, 70 ms)
↳2 QTRS
↳3 QTRSRRRProof (⇔, 0 ms)
↳4 QTRS
↳5 AAECC Innermost (⇔, 0 ms)
↳6 QTRS
↳7 DependencyPairsProof (⇔, 0 ms)
↳8 QDP
↳9 DependencyGraphProof (⇔, 0 ms)
↳10 AND
↳11 QDP
↳12 UsableRulesProof (⇔, 0 ms)
↳13 QDP
↳14 QReductionProof (⇔, 0 ms)
↳15 QDP
↳16 QDPSizeChangeProof (⇔, 0 ms)
↳17 YES
↳18 QDP
↳19 UsableRulesProof (⇔, 0 ms)
↳20 QDP
↳21 QReductionProof (⇔, 0 ms)
↳22 QDP
↳23 QDPSizeChangeProof (⇔, 0 ms)
↳24 YES
↳25 QDP
↳26 UsableRulesProof (⇔, 0 ms)
↳27 QDP
↳28 QReductionProof (⇔, 0 ms)
↳29 QDP
↳30 QDPSizeChangeProof (⇔, 0 ms)
↳31 YES
↳32 QDP
↳33 UsableRulesProof (⇔, 0 ms)
↳34 QDP
↳35 QReductionProof (⇔, 0 ms)
↳36 QDP
↳37 TransformationProof (⇔, 0 ms)
↳38 QDP
↳39 DependencyGraphProof (⇔, 0 ms)
↳40 QDP
↳41 TransformationProof (⇔, 0 ms)
↳42 QDP
↳43 TransformationProof (⇔, 0 ms)
↳44 QDP
↳45 DependencyGraphProof (⇔, 0 ms)
↳46 QDP
↳47 TransformationProof (⇔, 0 ms)
↳48 QDP
↳49 SemLabProof (⇒, 58 ms)
↳50 QDP
↳51 DependencyGraphProof (⇔, 0 ms)
↳52 QDP
↳53 UsableRulesReductionPairsProof (⇔, 0 ms)
↳54 QDP
↳55 QDPOrderProof (⇔, 4 ms)
↳56 QDP
↳57 DependencyGraphProof (⇔, 0 ms)
↳58 TRUE
tower(x) → f(a, x, s(0))
f(a, 0, y) → y
f(a, s(x), y) → f(b, y, s(x))
f(b, y, x) → f(a, half(x), exp(y))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
With this ordering the following rules can be removed by the rule removal processor [LPAR04] because they are oriented strictly:
POL(0) = 0
POL(a) = 1
POL(b) = 1
POL(double(x1)) = x1
POL(exp(x1)) = x1
POL(f(x1, x2, x3)) = 2·x1 + 2·x2 + 2·x3
POL(half(x1)) = x1
POL(s(x1)) = x1
POL(tower(x1)) = 2 + 2·x1
f(a, 0, y) → y
tower(x) → f(a, x, s(0))
f(a, s(x), y) → f(b, y, s(x))
f(b, y, x) → f(a, half(x), exp(y))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
With this ordering the following rules can be removed by the rule removal processor [LPAR04] because they are oriented strictly:
POL(0) = 0
POL(a) = 0
POL(b) = 0
POL(double(x1)) = x1
POL(exp(x1)) = x1
POL(f(x1, x2, x3)) = 2·x1 + 2·x2 + 2·x3
POL(half(x1)) = x1
POL(s(x1)) = x1
POL(tower(x1)) = 2 + 2·x1
tower(x) → f(a, x, s(0))
f(a, s(x), y) → f(b, y, s(x))
f(b, y, x) → f(a, half(x), exp(y))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
f(a, s(x), y) → f(b, y, s(x))
f(b, y, x) → f(a, half(x), exp(y))
f(a, s(x), y) → f(b, y, s(x))
f(b, y, x) → f(a, half(x), exp(y))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
F(a, s(x), y) → F(b, y, s(x))
F(b, y, x) → F(a, half(x), exp(y))
F(b, y, x) → HALF(x)
F(b, y, x) → EXP(y)
EXP(s(x)) → DOUBLE(exp(x))
EXP(s(x)) → EXP(x)
DOUBLE(s(x)) → DOUBLE(x)
HALF(0) → DOUBLE(0)
HALF(s(0)) → HALF(0)
HALF(s(s(x))) → HALF(x)
f(a, s(x), y) → f(b, y, s(x))
f(b, y, x) → f(a, half(x), exp(y))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
DOUBLE(s(x)) → DOUBLE(x)
f(a, s(x), y) → f(b, y, s(x))
f(b, y, x) → f(a, half(x), exp(y))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
DOUBLE(s(x)) → DOUBLE(x)
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
DOUBLE(s(x)) → DOUBLE(x)
From the DPs we obtained the following set of size-change graphs:
HALF(s(s(x))) → HALF(x)
f(a, s(x), y) → f(b, y, s(x))
f(b, y, x) → f(a, half(x), exp(y))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
HALF(s(s(x))) → HALF(x)
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
HALF(s(s(x))) → HALF(x)
From the DPs we obtained the following set of size-change graphs:
EXP(s(x)) → EXP(x)
f(a, s(x), y) → f(b, y, s(x))
f(b, y, x) → f(a, half(x), exp(y))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
EXP(s(x)) → EXP(x)
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
EXP(s(x)) → EXP(x)
From the DPs we obtained the following set of size-change graphs:
F(b, y, x) → F(a, half(x), exp(y))
F(a, s(x), y) → F(b, y, s(x))
f(a, s(x), y) → f(b, y, s(x))
f(b, y, x) → f(a, half(x), exp(y))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
F(b, y, x) → F(a, half(x), exp(y))
F(a, s(x), y) → F(b, y, s(x))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
f(a, s(x0), x1)
f(b, x0, x1)
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
f(a, s(x0), x1)
f(b, x0, x1)
F(b, y, x) → F(a, half(x), exp(y))
F(a, s(x), y) → F(b, y, s(x))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
F(b, y0, 0) → F(a, double(0), exp(y0)) → F(b, y0, 0) → F(a, double(0), exp(y0))
F(b, y0, s(0)) → F(a, half(0), exp(y0)) → F(b, y0, s(0)) → F(a, half(0), exp(y0))
F(b, y0, s(s(x0))) → F(a, s(half(x0)), exp(y0)) → F(b, y0, s(s(x0))) → F(a, s(half(x0)), exp(y0))
F(a, s(x), y) → F(b, y, s(x))
F(b, y0, 0) → F(a, double(0), exp(y0))
F(b, y0, s(0)) → F(a, half(0), exp(y0))
F(b, y0, s(s(x0))) → F(a, s(half(x0)), exp(y0))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
F(b, y0, s(0)) → F(a, half(0), exp(y0))
F(a, s(x), y) → F(b, y, s(x))
F(b, y0, s(s(x0))) → F(a, s(half(x0)), exp(y0))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
F(b, y0, s(0)) → F(a, double(0), exp(y0)) → F(b, y0, s(0)) → F(a, double(0), exp(y0))
F(a, s(x), y) → F(b, y, s(x))
F(b, y0, s(s(x0))) → F(a, s(half(x0)), exp(y0))
F(b, y0, s(0)) → F(a, double(0), exp(y0))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
F(b, y0, s(0)) → F(a, 0, exp(y0)) → F(b, y0, s(0)) → F(a, 0, exp(y0))
F(a, s(x), y) → F(b, y, s(x))
F(b, y0, s(s(x0))) → F(a, s(half(x0)), exp(y0))
F(b, y0, s(0)) → F(a, 0, exp(y0))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
F(b, y0, s(s(x0))) → F(a, s(half(x0)), exp(y0))
F(a, s(x), y) → F(b, y, s(x))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
F(a, s(s(y_1)), x1) → F(b, x1, s(s(y_1))) → F(a, s(s(y_1)), x1) → F(b, x1, s(s(y_1)))
F(b, y0, s(s(x0))) → F(a, s(half(x0)), exp(y0))
F(a, s(s(y_1)), x1) → F(b, x1, s(s(y_1)))
half(0) → double(0)
half(s(0)) → half(0)
half(s(s(x))) → s(half(x))
exp(0) → s(0)
exp(s(x)) → double(exp(x))
double(0) → 0
double(s(x)) → s(s(double(x)))
exp(0)
exp(s(x0))
double(0)
double(s(x0))
half(0)
half(s(0))
half(s(s(x0)))
F.0-0-0(b., y0, s.0(s.0(x0))) → F.1-0-0(a., s.0(half.0(x0)), exp.0(y0))
F.1-0-0(a., s.0(s.0(y_1)), x1) → F.0-0-0(b., x1, s.0(s.0(y_1)))
F.1-0-1(a., s.0(s.0(y_1)), x1) → F.0-1-0(b., x1, s.0(s.0(y_1)))
F.1-0-0(a., s.0(s.1(y_1)), x1) → F.0-0-0(b., x1, s.0(s.1(y_1)))
F.1-0-1(a., s.0(s.1(y_1)), x1) → F.0-1-0(b., x1, s.0(s.1(y_1)))
F.0-0-0(b., y0, s.0(s.1(x0))) → F.1-0-0(a., s.0(half.1(x0)), exp.0(y0))
F.0-1-0(b., y0, s.0(s.0(x0))) → F.1-0-0(a., s.0(half.0(x0)), exp.1(y0))
F.0-1-0(b., y0, s.0(s.1(x0))) → F.1-0-0(a., s.0(half.1(x0)), exp.1(y0))
half.0(0.) → double.0(0.)
half.0(s.0(0.)) → half.0(0.)
half.0(s.0(s.0(x))) → s.0(half.0(x))
half.0(s.0(s.1(x))) → s.0(half.1(x))
exp.0(0.) → s.0(0.)
exp.0(s.0(x)) → double.0(exp.0(x))
exp.0(s.1(x)) → double.0(exp.1(x))
double.0(0.) → 0.
double.0(s.0(x)) → s.0(s.0(double.0(x)))
double.0(s.1(x)) → s.0(s.0(double.1(x)))
exp.0(0.)
exp.0(s.0(x0))
exp.0(s.1(x0))
double.0(0.)
double.0(s.0(x0))
double.0(s.1(x0))
half.0(0.)
half.0(s.0(0.))
half.0(s.0(s.0(x0)))
half.0(s.0(s.1(x0)))
F.1-0-0(a., s.0(s.0(y_1)), x1) → F.0-0-0(b., x1, s.0(s.0(y_1)))
F.0-0-0(b., y0, s.0(s.0(x0))) → F.1-0-0(a., s.0(half.0(x0)), exp.0(y0))
half.0(0.) → double.0(0.)
half.0(s.0(0.)) → half.0(0.)
half.0(s.0(s.0(x))) → s.0(half.0(x))
half.0(s.0(s.1(x))) → s.0(half.1(x))
exp.0(0.) → s.0(0.)
exp.0(s.0(x)) → double.0(exp.0(x))
exp.0(s.1(x)) → double.0(exp.1(x))
double.0(0.) → 0.
double.0(s.0(x)) → s.0(s.0(double.0(x)))
double.0(s.1(x)) → s.0(s.0(double.1(x)))
exp.0(0.)
exp.0(s.0(x0))
exp.0(s.1(x0))
double.0(0.)
double.0(s.0(x0))
double.0(s.1(x0))
half.0(0.)
half.0(s.0(0.))
half.0(s.0(s.0(x0)))
half.0(s.0(s.1(x0)))
Used ordering: POLO with Polynomial interpretation [POLO]:
half.0(s.0(s.1(x))) → s.0(half.1(x))
exp.0(s.1(x)) → double.0(exp.1(x))
double.0(s.1(x)) → s.0(s.0(double.1(x)))
POL(0.) = 0
POL(F.0-0-0(x1, x2, x3)) = 1 + x1 + x2 + x3
POL(F.1-0-0(x1, x2, x3)) = 1 + x1 + x2 + x3
POL(a.) = 0
POL(b.) = 0
POL(double.0(x1)) = x1
POL(double.1(x1)) = x1
POL(exp.0(x1)) = x1
POL(exp.1(x1)) = x1
POL(half.0(x1)) = x1
POL(half.1(x1)) = x1
POL(s.0(x1)) = x1
POL(s.1(x1)) = x1
F.1-0-0(a., s.0(s.0(y_1)), x1) → F.0-0-0(b., x1, s.0(s.0(y_1)))
F.0-0-0(b., y0, s.0(s.0(x0))) → F.1-0-0(a., s.0(half.0(x0)), exp.0(y0))
half.0(0.) → double.0(0.)
half.0(s.0(0.)) → half.0(0.)
half.0(s.0(s.0(x))) → s.0(half.0(x))
exp.0(0.) → s.0(0.)
exp.0(s.0(x)) → double.0(exp.0(x))
double.0(0.) → 0.
double.0(s.0(x)) → s.0(s.0(double.0(x)))
exp.0(0.)
exp.0(s.0(x0))
exp.0(s.1(x0))
double.0(0.)
double.0(s.0(x0))
double.0(s.1(x0))
half.0(0.)
half.0(s.0(0.))
half.0(s.0(s.0(x0)))
half.0(s.0(s.1(x0)))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
F.1-0-0(a., s.0(s.0(y_1)), x1) → F.0-0-0(b., x1, s.0(s.0(y_1)))
POL(0.) = 0
POL(F.0-0-0(x1, x2, x3)) = x1 + x3
POL(F.1-0-0(x1, x2, x3)) = 1 + x1 + x2
POL(a.) = 1
POL(b.) = 1
POL(double.0(x1)) = 0
POL(exp.0(x1)) = 1
POL(half.0(x1)) = x1
POL(s.0(x1)) = 1 + x1
half.0(0.) → double.0(0.)
half.0(s.0(0.)) → half.0(0.)
half.0(s.0(s.0(x))) → s.0(half.0(x))
double.0(0.) → 0.
F.0-0-0(b., y0, s.0(s.0(x0))) → F.1-0-0(a., s.0(half.0(x0)), exp.0(y0))
half.0(0.) → double.0(0.)
half.0(s.0(0.)) → half.0(0.)
half.0(s.0(s.0(x))) → s.0(half.0(x))
exp.0(0.) → s.0(0.)
exp.0(s.0(x)) → double.0(exp.0(x))
double.0(0.) → 0.
double.0(s.0(x)) → s.0(s.0(double.0(x)))
exp.0(0.)
exp.0(s.0(x0))
exp.0(s.1(x0))
double.0(0.)
double.0(s.0(x0))
double.0(s.1(x0))
half.0(0.)
half.0(s.0(0.))
half.0(s.0(s.0(x0)))
half.0(s.0(s.1(x0)))