YES
0 RelTRS
↳1 RelTRStoRelADPProof (⇔, 0 ms)
↳2 RelADPP
↳3 RelADPDepGraphProof (⇔, 0 ms)
↳4 AND
↳5 RelADPP
↳6 RelADPCleverAfsProof (⇒, 106 ms)
↳7 QDP
↳8 MRRProof (⇔, 0 ms)
↳9 QDP
↳10 MRRProof (⇔, 0 ms)
↳11 QDP
↳12 QDPOrderProof (⇔, 0 ms)
↳13 QDP
↳14 PisEmptyProof (⇔, 0 ms)
↳15 YES
↳16 RelADPP
↳17 RelADPCleverAfsProof (⇒, 91 ms)
↳18 QDP
↳19 MRRProof (⇔, 0 ms)
↳20 QDP
↳21 MRRProof (⇔, 12 ms)
↳22 QDP
↳23 QDPOrderProof (⇔, 0 ms)
↳24 QDP
↳25 PisEmptyProof (⇔, 0 ms)
↳26 YES
↳27 RelADPP
↳28 RelADPCleverAfsProof (⇒, 88 ms)
↳29 QDP
↳30 MRRProof (⇔, 0 ms)
↳31 QDP
↳32 MRRProof (⇔, 12 ms)
↳33 QDP
↳34 QDPOrderProof (⇔, 0 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)))
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)))
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.
double(0) → 0
double(s(x)) → s(s(double(x)))
plus(s(x), y) → s(plus(x, y))
plus(0, y) → y
minus(x, 0) → x
minus(s(x), s(y)) → MINUS(x, y)
plus(s(x), y) → plus(x, s(y))
plus(s(x), y) → s(plus(minus(x, y), double(y)))
rand(x) → rand(s(x))
rand(x) → x
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)
double(x1) = double(x1)
0 = 0
plus(x1, x2) = plus(x1, x2)
minus(x1, x2) = x1
Recursive path order with status [RPO].
Quasi-Precedence:
MINUS2 > s1
0 > s1
plus2 > double1 > s1
MINUS2: [2,1]
s1: [1]
double1: multiset
0: multiset
plus2: [1,2]
MINUS0(s0(x), s0(y)) → MINUS0(x, y)
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
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(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(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)
plus02 > double01 > s01
plus02 > double01 > 00
rand0 > s01
MINUS01: [1]
s01: multiset
double01: multiset
00: multiset
plus02: [1,2]
rand0: []
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
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(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(0) → 0
double(s(x)) → s(s(DOUBLE(x)))
plus(s(x), y) → s(plus(x, y))
plus(0, y) → y
minus(s(x), s(y)) → minus(x, y)
minus(x, 0) → x
plus(s(x), y) → plus(x, s(y))
plus(s(x), y) → s(plus(minus(x, y), double(y)))
rand(x) → rand(s(x))
rand(x) → x
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)
double(x1) = double(x1)
0 = 0
plus(x1, x2) = plus(x1, x2)
minus(x1, x2) = x1
Recursive path order with status [RPO].
Quasi-Precedence:
plus2 > double1 > s1 > DOUBLE1
plus2 > double1 > 0
DOUBLE1: multiset
s1: [1]
double1: multiset
0: multiset
plus2: [1,2]
DOUBLE0(s0(x)) → DOUBLE0(x)
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
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(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(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, rand0]
double01 > 00
plus01 > [s01, rand0]
s01: multiset
double01: multiset
00: multiset
plus01: [1]
rand0: []
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
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(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(0) → 0
double(s(x)) → s(s(double(x)))
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(0, y) → y
minus(s(x), s(y)) → minus(x, y)
minus(x, 0) → x
plus(s(x), y) → s(plus(minus(x, y), double(y)))
rand(x) → rand(s(x))
rand(x) → x
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) = PLUS(x1)
s(x1) = s(x1)
minus(x1, x2) = minus(x1)
double(x1) = double(x1)
0 = 0
plus(x1, x2) = plus(x1, x2)
Recursive path order with status [RPO].
Quasi-Precedence:
plus2 > double1 > [PLUS1, s1] > minus1
plus2 > double1 > 0
PLUS1: multiset
s1: multiset
minus1: multiset
double1: multiset
0: multiset
plus2: [1,2]
PLUS(s0(x)) → PLUS(x)
PLUS(s0(x)) → PLUS(minus(x))
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
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)) = 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(x)) → PLUS(x)
PLUS(s0(x)) → PLUS(minus(x))
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
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(PLUS(x1)) = x1
POL(double0(x1)) = x1
POL(minus(x1)) = x1
POL(plus0(x1, x2)) = 1 + x1 + 2·x2
POL(rand0(x1)) = x1
POL(s0(x1)) = x1
PLUS(s0(x)) → PLUS(x)
PLUS(s0(x)) → PLUS(minus(x))
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
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(x)) → PLUS(x)
PLUS(s0(x)) → PLUS(minus(x))
POL( double0(x1) ) = 2x1 |
POL( 00 ) = 0 |
POL( s0(x1) ) = x1 + 1 |
POL( plus0(x1, x2) ) = max{0, 2x1 - 1} |
POL( minus(x1) ) = x1 |
POL( rand0(x1) ) = max{0, -2} |
POL( PLUS(x1) ) = 2x1 + 1 |
double0(00) → 00
double0(s0(x)) → s0(s0(double0(x)))
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(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)))