YES
0 RelTRS
↳1 RelTRStoRelADPProof (⇔, 0 ms)
↳2 RelADPP
↳3 RelADPDepGraphProof (⇔, 0 ms)
↳4 AND
↳5 RelADPP
↳6 RelADPCleverAfsProof (⇒, 88 ms)
↳7 QDP
↳8 MRRProof (⇔, 0 ms)
↳9 QDP
↳10 MRRProof (⇔, 2 ms)
↳11 QDP
↳12 PisEmptyProof (⇔, 0 ms)
↳13 YES
↳14 RelADPP
↳15 RelADPCleverAfsProof (⇒, 90 ms)
↳16 QDP
↳17 MRRProof (⇔, 0 ms)
↳18 QDP
↳19 MRRProof (⇔, 2 ms)
↳20 QDP
↳21 DependencyGraphProof (⇔, 0 ms)
↳22 TRUE
rev(nil) → nil
rev(cons(x, l)) → cons(rev1(x, l), rev2(x, l))
rev1(0, nil) → 0
rev1(s(x), nil) → s(x)
rev1(x, cons(y, l)) → rev1(y, l)
rev2(x, nil) → nil
rev2(x, cons(y, l)) → rev(cons(x, rev2(y, l)))
rand(x) → rand(s(x))
rand(x) → x
We upgrade the RelTRS problem to an equivalent Relative ADP Problem [IJCAR24].
rev(nil) → nil
rev(cons(x, l)) → cons(REV1(x, l), rev2(x, l))
rev(cons(x, l)) → cons(rev1(x, l), REV2(x, l))
rev1(0, nil) → 0
rev1(s(x), nil) → s(x)
rev1(x, cons(y, l)) → REV1(y, l)
rev2(x, nil) → nil
rev2(x, cons(y, l)) → REV(cons(x, rev2(y, l)))
rev2(x, cons(y, l)) → rev(cons(x, REV2(y, l)))
rand(x) → RAND(s(x))
rand(x) → x
We use the relative dependency graph processor [IJCAR24].
The approximation of the Relative Dependency Graph contains:
2 SCCs with nodes from P_abs,
0 Lassos,
Result: This relative DT problem is equivalent to 2 subproblems.
rev2(x, cons(y, l)) → rev(cons(x, rev2(y, l)))
rev1(0, nil) → 0
rev1(x, cons(y, l)) → REV1(y, l)
rev(nil) → nil
rev(cons(x, l)) → cons(rev1(x, l), rev2(x, l))
rev1(s(x), nil) → s(x)
rev2(x, nil) → nil
rand(x) → rand(s(x))
rand(x) → x
Furthermore, We use an argument filter [LPAR04].
Filtering:s_1 = 0
0 =
rev2_2 = 0
cons_2 = 0
rev1_2 = 0, 1
rev_1 =
rand_1 =
REV1_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.
REV1(x1, x2) = x2
cons(x1, x2) = cons(x2)
rev2(x1, x2) = x2
rev(x1) = x1
rev1(x1, x2) = rev1
0 = 0
nil = nil
s(x1) = s
Recursive path order with status [RPO].
Quasi-Precedence:
[rev1, 0, s]
cons1: [1]
rev1: multiset
0: multiset
nil: multiset
s: multiset
REV1(cons(l)) → REV1(l)
rev2(cons(l)) → rev0(cons(rev2(l)))
rev1 → 00
rev0(nil0) → nil0
rev0(cons(l)) → cons(rev2(l))
rev1 → rev1
rand0(x) → rand0(s)
rev1 → s
rev2(nil0) → nil0
rand0(x) → x
rev1 → 00
rev1 → s
rand0(x) → x
POL(00) = 0
POL(REV1(x1)) = x1
POL(cons(x1)) = 2·x1
POL(nil0) = 0
POL(rand0(x1)) = 2 + x1
POL(rev0(x1)) = x1
POL(rev1) = 2
POL(rev2(x1)) = x1
POL(s) = 0
REV1(cons(l)) → REV1(l)
rev2(cons(l)) → rev0(cons(rev2(l)))
rev0(nil0) → nil0
rev0(cons(l)) → cons(rev2(l))
rev1 → rev1
rand0(x) → rand0(s)
rev2(nil0) → nil0
REV1(cons(l)) → REV1(l)
POL(REV1(x1)) = x1
POL(cons(x1)) = 2 + 2·x1
POL(nil0) = 2
POL(rand0(x1)) = x1
POL(rev0(x1)) = x1
POL(rev1) = 0
POL(rev2(x1)) = x1
POL(s) = 0
rev2(cons(l)) → rev0(cons(rev2(l)))
rev0(nil0) → nil0
rev0(cons(l)) → cons(rev2(l))
rev1 → rev1
rand0(x) → rand0(s)
rev2(nil0) → nil0
rev1(0, nil) → 0
rev(nil) → nil
rev(cons(x, l)) → cons(rev1(x, l), rev2(x, l))
rev(cons(x, l)) → cons(rev1(x, l), REV2(x, l))
rev1(x, cons(y, l)) → rev1(y, l)
rev1(s(x), nil) → s(x)
rev2(x, nil) → nil
rev2(x, cons(y, l)) → rev(cons(x, REV2(y, l)))
rev2(x, cons(y, l)) → REV(cons(x, rev2(y, l)))
rand(x) → rand(s(x))
rand(x) → x
Furthermore, We use an argument filter [LPAR04].
Filtering:s_1 = 0
REV_1 =
REV2_2 = 0
0 =
cons_2 = 0
rev2_2 = 0
rev1_2 = 0, 1
rev_1 =
rand_1 =
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.
REV2(x1, x2) = REV2(x2)
cons(x1, x2) = cons(x2)
REV(x1) = x1
rev2(x1, x2) = x2
rev(x1) = x1
rev1(x1, x2) = rev1
0 = 0
nil = nil
s(x1) = s
Recursive path order with status [RPO].
Quasi-Precedence:
[REV21, cons1]
[rev1, s] > [0, nil]
REV21: [1]
cons1: [1]
rev1: multiset
0: multiset
nil: multiset
s: multiset
REV2(cons(l)) → REV2(l)
REV0(cons(l)) → REV2(l)
REV2(cons(l)) → REV0(cons(rev2(l)))
rev2(cons(l)) → rev0(cons(rev2(l)))
rev1 → 00
rev0(nil0) → nil0
rev0(cons(l)) → cons(rev2(l))
rev1 → rev1
rand0(x) → rand0(s)
rev1 → s
rev2(nil0) → nil0
rand0(x) → x
rev1 → 00
rev1 → s
rand0(x) → x
POL(00) = 0
POL(REV0(x1)) = 2·x1
POL(REV2(x1)) = 2·x1
POL(cons(x1)) = x1
POL(nil0) = 0
POL(rand0(x1)) = 2 + x1
POL(rev0(x1)) = x1
POL(rev1) = 2
POL(rev2(x1)) = x1
POL(s) = 0
REV2(cons(l)) → REV2(l)
REV0(cons(l)) → REV2(l)
REV2(cons(l)) → REV0(cons(rev2(l)))
rev2(cons(l)) → rev0(cons(rev2(l)))
rev0(nil0) → nil0
rev0(cons(l)) → cons(rev2(l))
rev1 → rev1
rand0(x) → rand0(s)
rev2(nil0) → nil0
REV2(cons(l)) → REV2(l)
REV2(cons(l)) → REV0(cons(rev2(l)))
POL(REV0(x1)) = 1 + x1
POL(REV2(x1)) = 2 + x1
POL(cons(x1)) = 1 + x1
POL(nil0) = 1
POL(rand0(x1)) = x1
POL(rev0(x1)) = x1
POL(rev1) = 0
POL(rev2(x1)) = x1
POL(s) = 0
REV0(cons(l)) → REV2(l)
rev2(cons(l)) → rev0(cons(rev2(l)))
rev0(nil0) → nil0
rev0(cons(l)) → cons(rev2(l))
rev1 → rev1
rand0(x) → rand0(s)
rev2(nil0) → nil0