0 RelTRS
↳1 RelTRStoRelADPProof (⇔, 0 ms)
↳2 RelADPP
↳3 RelADPDepGraphProof (⇔, 0 ms)
↳4 AND
↳5 RelADPP
↳6 RelADPCleverAfsProof (⇒, 112 ms)
↳7 QDP
↳8 MRRProof (⇔, 0 ms)
↳9 QDP
↳10 MRRProof (⇔, 0 ms)
↳11 QDP
↳12 PisEmptyProof (⇔, 0 ms)
↳13 YES
↳14 RelADPP
↳15 RelADPCleverAfsProof (⇒, 101 ms)
↳16 QDP
↳17 MRRProof (⇔, 0 ms)
↳18 QDP
↳19 MRRProof (⇔, 0 ms)
↳20 QDP
↳21 PisEmptyProof (⇔, 0 ms)
↳22 YES
↳23 RelADPP
↳24 RelADPReductionPairProof (⇔, 60 ms)
↳25 RelADPP
↳26 DAbsisEmptyProof (⇔, 0 ms)
↳27 YES
remove(nil, x) → nil
remove(cons(x, xs), 0) → cons(x, xs)
remove(cons(x, xs), s(y)) → remove(xs, y)
first(nil, x) → nil
first(cons(x, xs), 0) → nil
first(cons(x, xs), s(y)) → cons(x, first(xs, y))
sublist(nil, x) → nil
sublist(cons(x, xs), 0) → nil
sublist(cons(x, xs), s(y)) → cons(cons(x, first(xs, y)), sublist(remove(xs, y), s(y)))
sublist(cons(x, cons(y, xs)), z) → sublist(cons(y, cons(x, xs)), z)
We upgrade the RelTRS problem to an equivalent Relative ADP Problem [IJCAR24].
remove(nil, x) → nil
remove(cons(x, xs), 0) → cons(x, xs)
remove(cons(x, xs), s(y)) → REMOVE(xs, y)
first(nil, x) → nil
first(cons(x, xs), 0) → nil
first(cons(x, xs), s(y)) → cons(x, FIRST(xs, y))
sublist(nil, x) → nil
sublist(cons(x, xs), 0) → nil
sublist(cons(x, xs), s(y)) → cons(cons(x, FIRST(xs, y)), sublist(remove(xs, y), s(y)))
sublist(cons(x, xs), s(y)) → cons(cons(x, first(xs, y)), SUBLIST(remove(xs, y), s(y)))
sublist(cons(x, xs), s(y)) → cons(cons(x, first(xs, y)), sublist(REMOVE(xs, y), s(y)))
sublist(cons(x, cons(y, xs)), z) → SUBLIST(cons(y, cons(x, xs)), z)
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.
first(cons(x, xs), s(y)) → cons(x, FIRST(xs, y))
remove(cons(x, xs), 0) → cons(x, xs)
sublist(cons(x, xs), s(y)) → cons(cons(x, first(xs, y)), sublist(remove(xs, y), s(y)))
first(nil, x) → nil
remove(nil, x) → nil
sublist(nil, x) → nil
sublist(cons(x, xs), 0) → nil
sublist(cons(x, cons(y, xs)), z) → sublist(cons(y, cons(x, xs)), z)
remove(cons(x, xs), s(y)) → remove(xs, y)
first(cons(x, xs), 0) → nil
Furthermore, We use an argument filter [LPAR04].
Filtering:s_1 =
FIRST_2 =
0 =
cons_2 = 0
remove_2 = 1
first_2 = 0
sublist_2 = 0
nil =
Found this filtering by looking at the following order that orders at least one DP strictly:Combined order from the following AFS and order.
FIRST(x1, x2) = FIRST(x1, x2)
cons(x1, x2) = x2
s(x1) = s(x1)
sublist(x1, x2) = x2
first(x1, x2) = first(x2)
remove(x1, x2) = remove(x1)
0 = 0
nil = nil
Recursive path order with status [RPO].
Quasi-Precedence:
s1 > FIRST2 > nil
first1 > nil
remove1 > nil
0 > nil
FIRST2: multiset
s1: multiset
first1: [1]
remove1: [1]
0: multiset
nil: multiset
FIRST0(cons(xs), s0(y)) → FIRST0(xs, y)
remove(cons(xs)) → cons(xs)
sublist(s0(y)) → cons(sublist(s0(y)))
first(x) → nil0
remove(nil0) → nil0
sublist(x) → nil0
sublist(00) → nil0
sublist(z) → sublist(z)
first(s0(y)) → cons(first(y))
remove(cons(xs)) → remove(xs)
first(00) → nil0
remove(cons(xs)) → cons(xs)
first(x) → nil0
remove(nil0) → nil0
sublist(x) → nil0
sublist(00) → nil0
first(00) → nil0
POL(00) = 0
POL(FIRST0(x1, x2)) = x1 + x2
POL(cons(x1)) = x1
POL(first(x1)) = 2 + 2·x1
POL(nil0) = 0
POL(remove(x1)) = 1 + 2·x1
POL(s0(x1)) = x1
POL(sublist(x1)) = 1 + 2·x1
FIRST0(cons(xs), s0(y)) → FIRST0(xs, y)
sublist(s0(y)) → cons(sublist(s0(y)))
sublist(z) → sublist(z)
first(s0(y)) → cons(first(y))
remove(cons(xs)) → remove(xs)
FIRST0(cons(xs), s0(y)) → FIRST0(xs, y)
first(s0(y)) → cons(first(y))
POL(FIRST0(x1, x2)) = x1 + x2
POL(cons(x1)) = x1
POL(first(x1)) = 1 + x1
POL(remove(x1)) = x1
POL(s0(x1)) = 1 + 2·x1
POL(sublist(x1)) = 1 + 2·x1
sublist(s0(y)) → cons(sublist(s0(y)))
sublist(z) → sublist(z)
remove(cons(xs)) → remove(xs)
remove(cons(x, xs), s(y)) → REMOVE(xs, y)
remove(cons(x, xs), 0) → cons(x, xs)
sublist(cons(x, xs), s(y)) → cons(cons(x, first(xs, y)), sublist(remove(xs, y), s(y)))
first(nil, x) → nil
remove(nil, x) → nil
sublist(nil, x) → nil
sublist(cons(x, xs), 0) → nil
sublist(cons(x, cons(y, xs)), z) → sublist(cons(y, cons(x, xs)), z)
first(cons(x, xs), s(y)) → cons(x, first(xs, y))
first(cons(x, xs), 0) → nil
Furthermore, We use an argument filter [LPAR04].
Filtering:s_1 =
REMOVE_2 =
0 =
remove_2 = 1
cons_2 = 0
first_2 = 0
sublist_2 = 0
nil =
Found this filtering by looking at the following order that orders at least one DP strictly:Combined order from the following AFS and order.
REMOVE(x1, x2) = REMOVE(x1, x2)
cons(x1, x2) = x2
s(x1) = s(x1)
sublist(x1, x2) = x2
first(x1, x2) = first(x2)
remove(x1, x2) = remove(x1)
0 = 0
nil = nil
Recursive path order with status [RPO].
Quasi-Precedence:
s1 > REMOVE2 > nil
first1 > nil
remove1 > nil
0 > nil
REMOVE2: multiset
s1: multiset
first1: [1]
remove1: [1]
0: multiset
nil: multiset
REMOVE0(cons(xs), s0(y)) → REMOVE0(xs, y)
remove(cons(xs)) → cons(xs)
sublist(s0(y)) → cons(sublist(s0(y)))
first(x) → nil0
remove(nil0) → nil0
sublist(x) → nil0
sublist(00) → nil0
sublist(z) → sublist(z)
first(s0(y)) → cons(first(y))
remove(cons(xs)) → remove(xs)
first(00) → nil0
remove(cons(xs)) → cons(xs)
first(x) → nil0
remove(nil0) → nil0
sublist(x) → nil0
sublist(00) → nil0
first(00) → nil0
POL(00) = 0
POL(REMOVE0(x1, x2)) = x1 + x2
POL(cons(x1)) = x1
POL(first(x1)) = 2 + 2·x1
POL(nil0) = 0
POL(remove(x1)) = 1 + 2·x1
POL(s0(x1)) = x1
POL(sublist(x1)) = 1 + 2·x1
REMOVE0(cons(xs), s0(y)) → REMOVE0(xs, y)
sublist(s0(y)) → cons(sublist(s0(y)))
sublist(z) → sublist(z)
first(s0(y)) → cons(first(y))
remove(cons(xs)) → remove(xs)
REMOVE0(cons(xs), s0(y)) → REMOVE0(xs, y)
first(s0(y)) → cons(first(y))
POL(REMOVE0(x1, x2)) = x1 + x2
POL(cons(x1)) = x1
POL(first(x1)) = 1 + x1
POL(remove(x1)) = x1
POL(s0(x1)) = 1 + 2·x1
POL(sublist(x1)) = 1 + 2·x1
sublist(s0(y)) → cons(sublist(s0(y)))
sublist(z) → sublist(z)
remove(cons(xs)) → remove(xs)
sublist(cons(x, xs), s(y)) → cons(cons(x, first(xs, y)), SUBLIST(remove(xs, y), s(y)))
remove(cons(x, xs), 0) → cons(x, xs)
sublist(cons(x, xs), s(y)) → cons(cons(x, first(xs, y)), sublist(remove(xs, y), s(y)))
first(nil, x) → nil
remove(nil, x) → nil
sublist(nil, x) → nil
sublist(cons(x, xs), 0) → nil
sublist(cons(x, cons(y, xs)), z) → SUBLIST(cons(y, cons(x, xs)), z)
first(cons(x, xs), s(y)) → cons(x, first(xs, y))
remove(cons(x, xs), s(y)) → remove(xs, y)
first(cons(x, xs), 0) → nil
We use the reduction pair processor [IJCAR24].
The following rules can be oriented strictly (l^# > ann(r))
and therefore we can remove all of its annotations in the right-hand side:
Absolute ADPs:
sublist(cons(x, xs), s(y)) → cons(cons(x, first(xs, y)), SUBLIST(remove(xs, y), s(y)))
remove(cons(x, xs), 0) → cons(x, xs)
sublist(cons(x, xs), s(y)) → cons(cons(x, first(xs, y)), sublist(remove(xs, y), s(y)))
first(nil, x) → nil
remove(nil, x) → nil
sublist(nil, x) → nil
sublist(cons(x, xs), 0) → nil
first(cons(x, xs), s(y)) → cons(x, first(xs, y))
remove(cons(x, xs), s(y)) → remove(xs, y)
first(cons(x, xs), 0) → nil
POL(0) = 0
POL(FIRST(x1, x2)) = 2
POL(REMOVE(x1, x2)) = 2
POL(SUBLIST(x1, x2)) = 2 + 2·x1 + 2·x2
POL(cons(x1, x2)) = 3 + 2·x2
POL(first(x1, x2)) = x1
POL(nil) = 0
POL(remove(x1, x2)) = x1
POL(s(x1)) = 3
POL(sublist(x1, x2)) = 3 + 3·x1
sublist(cons(x, xs), s(y)) → cons(cons(x, first(xs, y)), sublist(remove(xs, y), s(y)))
remove(cons(x, xs), 0) → cons(x, xs)
first(nil, x) → nil
remove(nil, x) → nil
sublist(nil, x) → nil
sublist(cons(x, xs), 0) → nil
sublist(cons(x, cons(y, xs)), z) → SUBLIST(cons(y, cons(x, xs)), z)
first(cons(x, xs), s(y)) → cons(x, first(xs, y))
remove(cons(x, xs), s(y)) → remove(xs, y)
first(cons(x, xs), 0) → nil