YES
0 RelTRS
↳1 RelTRStoRelADPProof (⇔, 0 ms)
↳2 RelADPP
↳3 RelADPDepGraphProof (⇔, 0 ms)
↳4 AND
↳5 RelADPP
↳6 RelADPCleverAfsProof (⇒, 42 ms)
↳7 QDP
↳8 MRRProof (⇔, 0 ms)
↳9 QDP
↳10 MRRProof (⇔, 11 ms)
↳11 QDP
↳12 QDPOrderProof (⇔, 0 ms)
↳13 QDP
↳14 PisEmptyProof (⇔, 0 ms)
↳15 YES
↳16 RelADPP
↳17 RelADPCleverAfsProof (⇒, 40 ms)
↳18 QDP
↳19 MRRProof (⇔, 0 ms)
↳20 QDP
↳21 MRRProof (⇔, 9 ms)
↳22 QDP
↳23 QDPOrderProof (⇔, 0 ms)
↳24 QDP
↳25 PisEmptyProof (⇔, 0 ms)
↳26 YES
↳27 RelADPP
↳28 RelADPCleverAfsProof (⇒, 42 ms)
↳29 QDP
↳30 MRRProof (⇔, 0 ms)
↳31 QDP
↳32 MRRProof (⇔, 9 ms)
↳33 QDP
↳34 QDPOrderProof (⇔, 36 ms)
↳35 QDP
↳36 PisEmptyProof (⇔, 0 ms)
↳37 YES
minus(x, 0) → x
minus(s(x), s(y)) → minus(x, y)
double(0) → 0
double(s(x)) → s(s(double(x)))
plus(0, y) → y
plus(s(x), y) → s(plus(x, y))
plus(s(x), y) → plus(x, s(y))
plus(s(x), y) → s(plus(minus(x, y), double(y)))
plus(s(plus(x, y)), z) → s(plus(plus(x, y), z))
rand(x) → rand(s(x))
rand(x) → x
We upgrade the RelTRS problem to an equivalent Relative ADP Problem [IJCAR24].
minus(x, 0) → x
minus(s(x), s(y)) → MINUS(x, y)
double(0) → 0
double(s(x)) → s(s(DOUBLE(x)))
plus(0, y) → y
plus(s(x), y) → s(PLUS(x, y))
plus(s(x), y) → PLUS(x, s(y))
plus(s(x), y) → s(PLUS(minus(x, y), double(y)))
plus(s(x), y) → s(plus(MINUS(x, y), double(y)))
plus(s(x), y) → s(plus(minus(x, y), DOUBLE(y)))
plus(s(plus(x, y)), z) → s(PLUS(plus(x, y), z))
plus(s(plus(x, y)), z) → s(plus(PLUS(x, y), z))
rand(x) → RAND(s(x))
rand(x) → x
We use the relative dependency graph processor [IJCAR24].
The approximation of the Relative Dependency Graph contains:
3 SCCs with nodes from P_abs,
0 Lassos,
Result: This relative DT problem is equivalent to 3 subproblems.
minus(s(x), s(y)) → MINUS(x, y)
double(0) → 0
double(s(x)) → s(s(double(x)))
plus(s(plus(x, y)), z) → s(plus(plus(x, y), z))
plus(s(x), y) → s(plus(x, y))
plus(0, y) → y
minus(x, 0) → x
rand(x) → rand(s(x))
rand(x) → x
plus(s(x), y) → plus(x, s(y))
plus(s(x), y) → s(plus(minus(x, y), double(y)))
Furthermore, We use an argument filter [LPAR04].
Filtering:s_1 =
MINUS_2 =
plus_2 =
0 =
minus_2 = 1
rand_1 =
double_1 =
Found this filtering by looking at the following order that orders at least one DP strictly:Combined order from the following AFS and order.
MINUS(x1, x2) = MINUS(x1, x2)
s(x1) = s(x1)
plus(x1, x2) = plus(x1, x2)
minus(x1, x2) = minus(x1)
double(x1) = double(x1)
0 = 0
Recursive path order with status [RPO].
Quasi-Precedence:
MINUS2 > minus1
plus2 > double1 > s1 > minus1
plus2 > double1 > 0 > minus1
MINUS2: [2,1]
s1: multiset
plus2: [1,2]
minus1: multiset
double1: multiset
0: multiset
MINUS0(s0(x), s0(y)) → MINUS0(x, y)
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
plus0(00, y) → y
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
rand0(x) → x
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
rand0(x) → x
POL(00) = 0
POL(MINUS0(x1, x2)) = x1 + x2
POL(double0(x1)) = x1
POL(minus(x1)) = x1
POL(plus0(x1, x2)) = x1 + x2
POL(rand0(x1)) = 2 + x1
POL(s0(x1)) = x1
MINUS0(s0(x), s0(y)) → MINUS0(x, y)
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
plus0(00, y) → y
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
plus0(00, y) → y
POL(00) = 0
POL(MINUS0(x1, x2)) = x1 + x2
POL(double0(x1)) = x1
POL(minus(x1)) = x1
POL(plus0(x1, x2)) = 2 + x1 + 2·x2
POL(rand0(x1)) = x1
POL(s0(x1)) = x1
MINUS0(s0(x), s0(y)) → MINUS0(x, y)
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
MINUS0(s0(x), s0(y)) → MINUS0(x, y)
double01 > [MINUS01, s01]
double01 > 00
rand0 > [MINUS01, s01]
MINUS01: multiset
s01: multiset
double01: multiset
00: multiset
rand0: multiset
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
double(s(x)) → s(s(DOUBLE(x)))
double(0) → 0
plus(s(plus(x, y)), z) → s(plus(plus(x, y), z))
plus(s(x), y) → s(plus(x, y))
plus(0, y) → y
minus(s(x), s(y)) → minus(x, y)
minus(x, 0) → x
rand(x) → rand(s(x))
rand(x) → x
plus(s(x), y) → plus(x, s(y))
plus(s(x), y) → s(plus(minus(x, y), double(y)))
Furthermore, We use an argument filter [LPAR04].
Filtering:s_1 =
plus_2 =
0 =
minus_2 = 1
DOUBLE_1 =
rand_1 =
double_1 =
Found this filtering by looking at the following order that orders at least one DP strictly:Combined order from the following AFS and order.
DOUBLE(x1) = DOUBLE(x1)
s(x1) = s(x1)
plus(x1, x2) = plus(x1, x2)
minus(x1, x2) = minus(x1)
double(x1) = double(x1)
0 = 0
Recursive path order with status [RPO].
Quasi-Precedence:
plus2 > double1 > [DOUBLE1, s1] > minus1
0 > minus1
DOUBLE1: [1]
s1: [1]
plus2: [1,2]
minus1: multiset
double1: multiset
0: multiset
DOUBLE0(s0(x)) → DOUBLE0(x)
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
plus0(00, y) → y
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
rand0(x) → x
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
rand0(x) → x
POL(00) = 0
POL(DOUBLE0(x1)) = x1
POL(double0(x1)) = x1
POL(minus(x1)) = x1
POL(plus0(x1, x2)) = x1 + 2·x2
POL(rand0(x1)) = 2 + x1
POL(s0(x1)) = x1
DOUBLE0(s0(x)) → DOUBLE0(x)
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
plus0(00, y) → y
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
plus0(00, y) → y
POL(00) = 0
POL(DOUBLE0(x1)) = x1
POL(double0(x1)) = x1
POL(minus(x1)) = x1
POL(plus0(x1, x2)) = 1 + x1 + x2
POL(rand0(x1)) = x1
POL(s0(x1)) = x1
DOUBLE0(s0(x)) → DOUBLE0(x)
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
DOUBLE0(s0(x)) → DOUBLE0(x)
double01 > [s01, plus01]
00 > [s01, plus01]
rand0 > [s01, plus01]
s01: multiset
double01: multiset
00: multiset
plus01: multiset
rand0: []
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
plus(s(x), y) → s(PLUS(minus(x, y), double(y)))
plus(s(x), y) → PLUS(x, s(y))
plus(s(x), y) → s(PLUS(x, y))
plus(s(plus(x, y)), z) → s(plus(PLUS(x, y), z))
plus(s(plus(x, y)), z) → s(PLUS(plus(x, y), z))
double(0) → 0
double(s(x)) → s(s(double(x)))
plus(0, y) → y
minus(s(x), s(y)) → minus(x, y)
minus(x, 0) → x
rand(x) → rand(s(x))
rand(x) → x
plus(s(x), y) → s(plus(minus(x, y), double(y)))
Furthermore, We use an argument filter [LPAR04].
Filtering:s_1 =
plus_2 =
PLUS_2 = 1
0 =
minus_2 = 1
rand_1 =
double_1 =
Found this filtering by looking at the following order that orders at least one DP strictly:Combined order from the following AFS and order.
PLUS(x1, x2) = x1
s(x1) = x1
plus(x1, x2) = plus(x1, x2)
minus(x1, x2) = x1
double(x1) = x1
0 = 0
Recursive path order with status [RPO].
Quasi-Precedence:
0 > plus2
plus2: [1,2]
0: multiset
PLUS(s0(plus0(x, y))) → PLUS(plus0(x, y))
PLUS(s0(x)) → PLUS(x)
PLUS(s0(plus0(x, y))) → PLUS(x)
PLUS(s0(x)) → PLUS(minus(x))
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
plus0(00, y) → y
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
rand0(x) → x
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
rand0(x) → x
POL(00) = 0
POL(PLUS(x1)) = 2·x1
POL(double0(x1)) = x1
POL(minus(x1)) = x1
POL(plus0(x1, x2)) = x1 + 2·x2
POL(rand0(x1)) = 2 + x1
POL(s0(x1)) = x1
PLUS(s0(plus0(x, y))) → PLUS(plus0(x, y))
PLUS(s0(x)) → PLUS(x)
PLUS(s0(plus0(x, y))) → PLUS(x)
PLUS(s0(x)) → PLUS(minus(x))
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
plus0(00, y) → y
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
PLUS(s0(plus0(x, y))) → PLUS(x)
plus0(00, y) → y
POL(00) = 0
POL(PLUS(x1)) = x1
POL(double0(x1)) = x1
POL(minus(x1)) = x1
POL(plus0(x1, x2)) = 1 + 2·x1 + 2·x2
POL(rand0(x1)) = x1
POL(s0(x1)) = x1
PLUS(s0(plus0(x, y))) → PLUS(plus0(x, y))
PLUS(s0(x)) → PLUS(x)
PLUS(s0(x)) → PLUS(minus(x))
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
PLUS(s0(plus0(x, y))) → PLUS(plus0(x, y))
PLUS(s0(x)) → PLUS(x)
PLUS(s0(x)) → PLUS(minus(x))
plus02 > double01 > [PLUS1, s01]
PLUS1: multiset
s01: multiset
plus02: [1,2]
double01: multiset
00: multiset
rand0: []
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
plus0(s0(plus0(x, y)), z) → s0(plus0(plus0(x, y), z))
plus0(s0(x), y) → s0(plus0(x, y))
minus(s0(x)) → minus(x)
minus(x) → x
rand0(x) → rand0(s0(x))
plus0(s0(x), y) → plus0(x, s0(y))
plus0(s0(x), y) → s0(plus0(minus(x), double0(y)))