YES
0 RelTRS
↳1 RelTRStoRelADPProof (⇔, 0 ms)
↳2 RelADPP
↳3 RelADPDepGraphProof (⇔, 0 ms)
↳4 AND
↳5 RelADPP
↳6 RelADPCleverAfsProof (⇒, 45 ms)
↳7 QDP
↳8 MRRProof (⇔, 30 ms)
↳9 QDP
↳10 MRRProof (⇔, 0 ms)
↳11 QDP
↳12 MRRProof (⇔, 0 ms)
↳13 QDP
↳14 QDPOrderProof (⇔, 0 ms)
↳15 QDP
↳16 PisEmptyProof (⇔, 0 ms)
↳17 YES
↳18 RelADPP
↳19 RelADPCleverAfsProof (⇒, 55 ms)
↳20 QDP
↳21 MRRProof (⇔, 0 ms)
↳22 QDP
↳23 PisEmptyProof (⇔, 0 ms)
↳24 YES
f(0) → true
f(1) → false
f(s(x)) → f(x)
if(true, s(x), s(y)) → s(x)
if(false, s(x), s(y)) → s(y)
g(x, c(y)) → c(g(x, y))
g(x, c(y)) → g(x, if(f(x), c(g(s(x), y)), c(y)))
rand(x) → rand(s(x))
rand(x) → x
We upgrade the RelTRS problem to an equivalent Relative ADP Problem [IJCAR24].
f(0) → true
f(1) → false
f(s(x)) → F(x)
if(true, s(x), s(y)) → s(x)
if(false, s(x), s(y)) → s(y)
g(x, c(y)) → c(G(x, y))
g(x, c(y)) → G(x, if(f(x), c(g(s(x), y)), c(y)))
g(x, c(y)) → g(x, IF(f(x), c(g(s(x), y)), c(y)))
g(x, c(y)) → g(x, if(F(x), c(g(s(x), y)), c(y)))
g(x, c(y)) → g(x, if(f(x), c(G(s(x), y)), c(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:
2 SCCs with nodes from P_abs,
0 Lassos,
Result: This relative DT problem is equivalent to 2 subproblems.
if(false, s(x), s(y)) → s(y)
f(s(x)) → F(x)
if(true, s(x), s(y)) → s(x)
g(x, c(y)) → c(g(x, y))
f(1) → false
g(x, c(y)) → g(x, if(f(x), c(g(s(x), y)), c(y)))
f(0) → true
rand(x) → rand(s(x))
rand(x) → x
Furthermore, We use an argument filter [LPAR04].
Filtering:s_1 =
true =
c_1 =
if_3 =
f_1 =
0 =
1 =
F_1 =
rand_1 =
g_2 = 0, 1
false =
Found this filtering by looking at the following order that orders at least one DP strictly:Combined order from the following AFS and order.
F(x1) = x1
s(x1) = s(x1)
if(x1, x2, x3) = if(x1, x2, x3)
false = false
true = true
g(x1, x2) = g
c(x1) = x1
f(x1) = f(x1)
1 = 1
0 = 0
Recursive path order with status [RPO].
Quasi-Precedence:
if3 > [s1, g]
f1 > [true, 0]
1 > false > [s1, g]
s1: multiset
if3: multiset
false: multiset
true: multiset
g: multiset
f1: [1]
1: multiset
0: multiset
F0(s0(x)) → F0(x)
if0(false0, s0(x), s0(y)) → s0(y)
if0(true0, s0(x), s0(y)) → s0(x)
g → c0(g)
f0(10) → false0
g → g
f0(00) → true0
f0(s0(x)) → f0(x)
rand0(x) → rand0(s0(x))
rand0(x) → x
if0(false0, s0(x), s0(y)) → s0(y)
if0(true0, s0(x), s0(y)) → s0(x)
rand0(x) → x
POL(00) = 0
POL(10) = 0
POL(F0(x1)) = x1
POL(c0(x1)) = 2·x1
POL(f0(x1)) = x1
POL(false0) = 0
POL(g) = 0
POL(if0(x1, x2, x3)) = 2 + 2·x1 + x2 + x3
POL(rand0(x1)) = 2 + x1
POL(s0(x1)) = x1
POL(true0) = 0
F0(s0(x)) → F0(x)
g → c0(g)
f0(10) → false0
g → g
f0(00) → true0
f0(s0(x)) → f0(x)
rand0(x) → rand0(s0(x))
f0(10) → false0
POL(00) = 0
POL(10) = 1
POL(F0(x1)) = x1
POL(c0(x1)) = 2·x1
POL(f0(x1)) = 2·x1
POL(false0) = 1
POL(g) = 0
POL(rand0(x1)) = x1
POL(s0(x1)) = x1
POL(true0) = 0
F0(s0(x)) → F0(x)
g → c0(g)
g → g
f0(00) → true0
f0(s0(x)) → f0(x)
rand0(x) → rand0(s0(x))
f0(00) → true0
POL(00) = 0
POL(F0(x1)) = x1
POL(c0(x1)) = x1
POL(f0(x1)) = 1 + x1
POL(g) = 0
POL(rand0(x1)) = x1
POL(s0(x1)) = x1
POL(true0) = 0
F0(s0(x)) → F0(x)
g → c0(g)
g → g
f0(s0(x)) → f0(x)
rand0(x) → rand0(s0(x))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
F0(s0(x)) → F0(x)
g > f0
rand0 > s01 > f0
s01: multiset
g: multiset
f0: multiset
rand0: multiset
g → c0(g)
g → g
f0(s0(x)) → f0(x)
rand0(x) → rand0(s0(x))
g → c0(g)
g → g
f0(s0(x)) → f0(x)
rand0(x) → rand0(s0(x))
if(false, s(x), s(y)) → s(y)
if(true, s(x), s(y)) → s(x)
g(x, c(y)) → g(x, if(f(x), c(G(s(x), y)), c(y)))
f(1) → false
g(x, c(y)) → g(x, if(f(x), c(g(s(x), y)), c(y)))
f(0) → true
f(s(x)) → f(x)
g(x, c(y)) → c(G(x, y))
rand(x) → rand(s(x))
rand(x) → x
Furthermore, We use an argument filter [LPAR04].
Filtering:s_1 = 0
true =
c_1 =
G_2 = 0
if_3 = 0, 1, 2
f_1 = 0
0 =
1 =
rand_1 =
g_2 =
false =
Found this filtering by looking at the following order that orders at least one DP strictly:Combined order from the following AFS and order.
G(x1, x2) = x2
c(x1) = c(x1)
s(x1) = s
if(x1, x2, x3) = if
false = false
true = true
g(x1, x2) = g(x1, x2)
f(x1) = f
1 = 1
0 = 0
Recursive path order with status [RPO].
Quasi-Precedence:
g2 > [c1, s, if]
f > false > [c1, s, if]
f > [true, 0] > [c1, s, if]
1 > false > [c1, s, if]
c1: multiset
s: multiset
if: multiset
false: multiset
true: multiset
g2: [1,2]
f: []
1: multiset
0: multiset
G(c0(y)) → G(y)
if → s
g0(x, c0(y)) → c0(g0(x, y))
f → false0
g0(x, c0(y)) → g0(x, if)
f → true0
f → f
rand0(x) → rand0(s)
rand0(x) → x
G(c0(y)) → G(y)
if → s
g0(x, c0(y)) → c0(g0(x, y))
f → false0
g0(x, c0(y)) → g0(x, if)
f → true0
rand0(x) → x
g02 > c01 > if > G1 > rand01 > f > true0 > false0 > s
if=2
s=1
f=2
false0=1
true0=2
c0_1=1
rand0_1=1
G_1=1
g0_2=0
f → f
rand0(x) → rand0(s)