(0) Obligation:
Relative term rewrite system:
The relative TRS consists of the following R rules:
top(ok(left(car(x, y), z))) → top(check(right(y, z)))
top(ok(right(x, car(y, z)))) → top(check(left(x, z)))
top(ok(left(bot, x))) → top(check(right(bot, x)))
top(ok(right(x, bot))) → top(check(left(x, bot)))
The relative TRS consists of the following S rules:
check(car(x, y)) → car(check(x), y)
check(right(x, y)) → right(x, check(y))
bot → car(new, bot)
check(old) → ok(old)
top(ok(left(car(x, y), z))) → top(check(left(y, z)))
car(x, ok(y)) → ok(car(x, y))
top(ok(right(x, car(y, z)))) → top(check(right(x, z)))
check(car(x, y)) → car(x, check(y))
check(right(x, y)) → right(check(x), y)
left(ok(x), y) → ok(left(x, y))
right(x, ok(y)) → ok(right(x, y))
check(left(x, y)) → left(x, check(y))
car(ok(x), y) → ok(car(x, y))
left(x, ok(y)) → ok(left(x, y))
right(ok(x), y) → ok(right(x, y))
check(left(x, y)) → left(check(x), y)
(1) RelTRSSemanticLabellingPOLOProof (EQUIVALENT transformation)
We use Semantic Labelling over tuples of bools combined with a polynomial order [SEMLAB]
We use semantic labelling over boolean tuples of size 1.
We used the following model:
check
1: component 1: AND[x
11]
car
2: component 1: OR[x
11, x
21]
right
2: component 1: AND[]
bot
0: component 1: OR[]
new
0: component 1: OR[]
old
0: component 1: AND[]
ok
1: component 1: AND[x
11]
top
1: component 1: OR[]
left
2: component 1: OR[x
11, x
21]
Our labelling function was:
check
1:component 1: XOR[]
car
2:component 1: AND[-x
11, -x
21]
right
2:component 1: AND[x
11]
bot
0:component 1: AND[]
new
0:component 1: XOR[]
old
0:component 1: AND[]
ok
1:component 1: OR[-x
11]
top
1:component 1: XOR[x
11]
left
2:component 1: OR[-x
11, -x
21]
Our labelled system was:
[f]check[f](
[f]car[t](
[f]x,
[f]y)) →
[f]car[t](
[f]check[f](
[f]x),
[f]y)
[t]check[f](
[t]car[f](
[f]x,
[t]y)) →
[t]car[f](
[f]check[f](
[f]x),
[t]y)
[t]check[f](
[t]car[f](
[t]x,
[f]y)) →
[t]car[f](
[t]check[f](
[t]x),
[f]y)
[t]check[f](
[t]right[f](
[f]x,
[f]y)) →
[t]right[f](
[f]x,
[f]check[f](
[f]y))
[t]check[f](
[t]right[f](
[f]x,
[t]y)) →
[t]right[f](
[f]x,
[t]check[f](
[t]y))
[t]check[f](
[t]right[t](
[t]x,
[f]y)) →
[t]right[t](
[t]x,
[f]check[f](
[f]y))
[t]check[f](
[t]right[t](
[t]x,
[t]y)) →
[t]right[t](
[t]x,
[t]check[f](
[t]y))
[f]bot[t] →
[f]car[t](
[f]new[f],
[f]bot[t])
[t]check[f](
[t]old[t]) →
[t]ok[f](
[t]old[t])
[f]top[f](
[f]ok[t](
[f]left[t](
[f]car[t](
[f]x,
[f]y),
[f]z))) →
[f]top[f](
[f]check[f](
[f]left[t](
[f]y,
[f]z)))
[f]top[t](
[t]ok[f](
[t]left[t](
[f]car[t](
[f]x,
[f]y),
[t]z))) →
[f]top[t](
[t]check[f](
[t]left[t](
[f]y,
[t]z)))
[f]top[t](
[t]ok[f](
[t]left[t](
[t]car[f](
[f]x,
[t]y),
[f]z))) →
[f]top[t](
[t]check[f](
[t]left[t](
[t]y,
[f]z)))
[f]top[t](
[t]ok[f](
[t]left[f](
[t]car[f](
[f]x,
[t]y),
[t]z))) →
[f]top[t](
[t]check[f](
[t]left[f](
[t]y,
[t]z)))
[f]top[t](
[t]ok[f](
[t]left[t](
[t]car[f](
[t]x,
[f]y),
[f]z))) →
[f]top[f](
[f]check[f](
[f]left[t](
[f]y,
[f]z)))
[f]top[t](
[t]ok[f](
[t]left[f](
[t]car[f](
[t]x,
[f]y),
[t]z))) →
[f]top[t](
[t]check[f](
[t]left[t](
[f]y,
[t]z)))
[f]car[t](
[f]x,
[f]ok[t](
[f]y)) →
[f]ok[t](
[f]car[t](
[f]x,
[f]y))
[t]car[f](
[f]x,
[t]ok[f](
[t]y)) →
[t]ok[f](
[t]car[f](
[f]x,
[t]y))
[t]car[f](
[t]x,
[f]ok[t](
[f]y)) →
[t]ok[f](
[t]car[f](
[t]x,
[f]y))
[f]top[t](
[t]ok[f](
[t]right[f](
[f]x,
[f]car[t](
[f]y,
[f]z)))) →
[f]top[t](
[t]check[f](
[t]right[f](
[f]x,
[f]z)))
[f]top[t](
[t]ok[f](
[t]right[f](
[f]x,
[t]car[f](
[f]y,
[t]z)))) →
[f]top[t](
[t]check[f](
[t]right[f](
[f]x,
[t]z)))
[f]top[t](
[t]ok[f](
[t]right[t](
[t]x,
[f]car[t](
[f]y,
[f]z)))) →
[f]top[t](
[t]check[f](
[t]right[t](
[t]x,
[f]z)))
[f]top[t](
[t]ok[f](
[t]right[t](
[t]x,
[t]car[f](
[f]y,
[t]z)))) →
[f]top[t](
[t]check[f](
[t]right[t](
[t]x,
[t]z)))
[f]check[f](
[f]car[t](
[f]x,
[f]y)) →
[f]car[t](
[f]x,
[f]check[f](
[f]y))
[t]check[f](
[t]car[f](
[f]x,
[t]y)) →
[t]car[f](
[f]x,
[t]check[f](
[t]y))
[t]check[f](
[t]car[f](
[t]x,
[f]y)) →
[t]car[f](
[t]x,
[f]check[f](
[f]y))
[t]check[f](
[t]right[f](
[f]x,
[f]y)) →
[t]right[f](
[f]check[f](
[f]x),
[f]y)
[t]check[f](
[t]right[t](
[t]x,
[f]y)) →
[t]right[t](
[t]check[f](
[t]x),
[f]y)
[f]left[t](
[f]ok[t](
[f]x),
[f]y) →
[f]ok[t](
[f]left[t](
[f]x,
[f]y))
[t]left[t](
[f]ok[t](
[f]x),
[t]y) →
[t]ok[f](
[t]left[t](
[f]x,
[t]y))
[t]left[t](
[t]ok[f](
[t]x),
[f]y) →
[t]ok[f](
[t]left[t](
[t]x,
[f]y))
[t]left[f](
[t]ok[f](
[t]x),
[t]y) →
[t]ok[f](
[t]left[f](
[t]x,
[t]y))
[t]right[f](
[f]x,
[f]ok[t](
[f]y)) →
[t]ok[f](
[t]right[f](
[f]x,
[f]y))
[t]right[f](
[f]x,
[t]ok[f](
[t]y)) →
[t]ok[f](
[t]right[f](
[f]x,
[t]y))
[t]right[t](
[t]x,
[f]ok[t](
[f]y)) →
[t]ok[f](
[t]right[t](
[t]x,
[f]y))
[t]right[t](
[t]x,
[t]ok[f](
[t]y)) →
[t]ok[f](
[t]right[t](
[t]x,
[t]y))
[f]check[f](
[f]left[t](
[f]x,
[f]y)) →
[f]left[t](
[f]x,
[f]check[f](
[f]y))
[t]check[f](
[t]left[t](
[f]x,
[t]y)) →
[t]left[t](
[f]x,
[t]check[f](
[t]y))
[t]check[f](
[t]left[t](
[t]x,
[f]y)) →
[t]left[t](
[t]x,
[f]check[f](
[f]y))
[t]check[f](
[t]left[f](
[t]x,
[t]y)) →
[t]left[f](
[t]x,
[t]check[f](
[t]y))
[f]car[t](
[f]ok[t](
[f]x),
[f]y) →
[f]ok[t](
[f]car[t](
[f]x,
[f]y))
[t]car[f](
[f]ok[t](
[f]x),
[t]y) →
[t]ok[f](
[t]car[f](
[f]x,
[t]y))
[t]car[f](
[t]ok[f](
[t]x),
[f]y) →
[t]ok[f](
[t]car[f](
[t]x,
[f]y))
[f]left[t](
[f]x,
[f]ok[t](
[f]y)) →
[f]ok[t](
[f]left[t](
[f]x,
[f]y))
[t]left[t](
[f]x,
[t]ok[f](
[t]y)) →
[t]ok[f](
[t]left[t](
[f]x,
[t]y))
[t]left[t](
[t]x,
[f]ok[t](
[f]y)) →
[t]ok[f](
[t]left[t](
[t]x,
[f]y))
[t]left[f](
[t]x,
[t]ok[f](
[t]y)) →
[t]ok[f](
[t]left[f](
[t]x,
[t]y))
[t]right[f](
[f]ok[t](
[f]x),
[f]y) →
[t]ok[f](
[t]right[f](
[f]x,
[f]y))
[t]right[t](
[t]ok[f](
[t]x),
[f]y) →
[t]ok[f](
[t]right[t](
[t]x,
[f]y))
[f]check[f](
[f]left[t](
[f]x,
[f]y)) →
[f]left[t](
[f]check[f](
[f]x),
[f]y)
[t]check[f](
[t]left[t](
[f]x,
[t]y)) →
[t]left[t](
[f]check[f](
[f]x),
[t]y)
[t]check[f](
[t]left[t](
[t]x,
[f]y)) →
[t]left[t](
[t]check[f](
[t]x),
[f]y)
[t]check[f](
[t]left[f](
[t]x,
[t]y)) →
[t]left[f](
[t]check[f](
[t]x),
[t]y)
[f]top[f](
[f]ok[t](
[f]left[t](
[f]car[t](
[f]x,
[f]y),
[f]z))) →
[f]top[t](
[t]check[f](
[t]right[f](
[f]y,
[f]z)))
[f]top[t](
[t]ok[f](
[t]left[t](
[f]car[t](
[f]x,
[f]y),
[t]z))) →
[f]top[t](
[t]check[f](
[t]right[f](
[f]y,
[t]z)))
[f]top[t](
[t]ok[f](
[t]left[t](
[t]car[f](
[f]x,
[t]y),
[f]z))) →
[f]top[t](
[t]check[f](
[t]right[t](
[t]y,
[f]z)))
[f]top[t](
[t]ok[f](
[t]left[f](
[t]car[f](
[f]x,
[t]y),
[t]z))) →
[f]top[t](
[t]check[f](
[t]right[t](
[t]y,
[t]z)))
[f]top[t](
[t]ok[f](
[t]left[t](
[t]car[f](
[t]x,
[f]y),
[f]z))) →
[f]top[t](
[t]check[f](
[t]right[f](
[f]y,
[f]z)))
[f]top[t](
[t]ok[f](
[t]left[f](
[t]car[f](
[t]x,
[f]y),
[t]z))) →
[f]top[t](
[t]check[f](
[t]right[f](
[f]y,
[t]z)))
[f]top[t](
[t]ok[f](
[t]right[f](
[f]x,
[f]car[t](
[f]y,
[f]z)))) →
[f]top[f](
[f]check[f](
[f]left[t](
[f]x,
[f]z)))
[f]top[t](
[t]ok[f](
[t]right[f](
[f]x,
[t]car[f](
[f]y,
[t]z)))) →
[f]top[t](
[t]check[f](
[t]left[t](
[f]x,
[t]z)))
[f]top[t](
[t]ok[f](
[t]right[f](
[f]x,
[t]car[f](
[t]y,
[f]z)))) →
[f]top[f](
[f]check[f](
[f]left[t](
[f]x,
[f]z)))
[f]top[t](
[t]ok[f](
[t]right[t](
[t]x,
[f]car[t](
[f]y,
[f]z)))) →
[f]top[t](
[t]check[f](
[t]left[t](
[t]x,
[f]z)))
[f]top[t](
[t]ok[f](
[t]right[t](
[t]x,
[t]car[f](
[f]y,
[t]z)))) →
[f]top[t](
[t]check[f](
[t]left[f](
[t]x,
[t]z)))
[f]top[t](
[t]ok[f](
[t]right[t](
[t]x,
[t]car[f](
[t]y,
[f]z)))) →
[f]top[t](
[t]check[f](
[t]left[t](
[t]x,
[f]z)))
[f]top[f](
[f]ok[t](
[f]left[t](
[f]bot[t],
[f]x))) →
[f]top[t](
[t]check[f](
[t]right[f](
[f]bot[t],
[f]x)))
[f]top[t](
[t]ok[f](
[t]left[t](
[f]bot[t],
[t]x))) →
[f]top[t](
[t]check[f](
[t]right[f](
[f]bot[t],
[t]x)))
[f]top[t](
[t]ok[f](
[t]right[f](
[f]x,
[f]bot[t]))) →
[f]top[f](
[f]check[f](
[f]left[t](
[f]x,
[f]bot[t])))
[f]top[t](
[t]ok[f](
[t]right[t](
[t]x,
[f]bot[t]))) →
[f]top[t](
[t]check[f](
[t]left[t](
[t]x,
[f]bot[t])))
Our polynomial interpretation was:
P(check
[false])(
x1) = 0 + 1·
x1P(check
[true])(
x1) = 1 + 1·
x1P(car
[false])(
x1,
x2) = 1 + 1·
x1 + 1·
x2P(car
[true])(
x1,
x2) = 0 + 1·
x1 + 1·
x2P(right
[false])(
x1,
x2) = 0 + 1·
x1 + 1·
x2P(right
[true])(
x1,
x2) = 1 + 1·
x1 + 1·
x2P(bot
[false])() = 0
P(bot
[true])() = 0
P(new
[false])() = 0
P(new
[true])() = 0
P(old
[false])() = 0
P(old
[true])() = 0
P(ok
[false])(
x1) = 0 + 1·
x1P(ok
[true])(
x1) = 1 + 1·
x1P(top
[false])(
x1) = 0 + 1·
x1P(top
[true])(
x1) = 1 + 1·
x1P(left
[false])(
x1,
x2) = 1 + 1·
x1 + 1·
x2P(left
[true])(
x1,
x2) = 0 + 1·
x1 + 1·
x2The following rules were deleted from R:
top(ok(right(x, car(y, z)))) → top(check(left(x, z)))
The following rules were deleted from S:
none
(2) Obligation:
Relative term rewrite system:
The relative TRS consists of the following R rules:
top(ok(left(car(x, y), z))) → top(check(right(y, z)))
top(ok(left(bot, x))) → top(check(right(bot, x)))
top(ok(right(x, bot))) → top(check(left(x, bot)))
The relative TRS consists of the following S rules:
check(car(x, y)) → car(check(x), y)
check(right(x, y)) → right(x, check(y))
bot → car(new, bot)
check(old) → ok(old)
top(ok(left(car(x, y), z))) → top(check(left(y, z)))
car(x, ok(y)) → ok(car(x, y))
top(ok(right(x, car(y, z)))) → top(check(right(x, z)))
check(car(x, y)) → car(x, check(y))
check(right(x, y)) → right(check(x), y)
left(ok(x), y) → ok(left(x, y))
right(x, ok(y)) → ok(right(x, y))
check(left(x, y)) → left(x, check(y))
car(ok(x), y) → ok(car(x, y))
left(x, ok(y)) → ok(left(x, y))
right(ok(x), y) → ok(right(x, y))
check(left(x, y)) → left(check(x), y)
(3) RelTRSSemanticLabellingPOLOProof (EQUIVALENT transformation)
We use Semantic Labelling over tuples of bools combined with a polynomial order [SEMLAB]
We use semantic labelling over boolean tuples of size 1.
We used the following model:
check
1: component 1: OR[x
11]
car
2: component 1: AND[x
11, x
21]
right
2: component 1: AND[x
11, x
21]
bot
0: component 1: AND[]
new
0: component 1: AND[]
old
0: component 1: OR[]
ok
1: component 1: AND[x
11]
top
1: component 1: OR[]
left
2: component 1: OR[]
Our labelling function was:
check
1:component 1: OR[]
car
2:component 1: AND[x
11, x
21]
right
2:component 1: OR[-x
11, -x
21]
bot
0:component 1: XOR[]
new
0:component 1: XOR[]
old
0:component 1: AND[]
ok
1:component 1: AND[x
11]
top
1:component 1: OR[x
11]
left
2:component 1: XOR[-x
11]
Our labelled system was:
[f]check[f](
[f]car[f](
[f]x,
[f]y)) →
[f]car[f](
[f]check[f](
[f]x),
[f]y)
[f]check[f](
[f]car[f](
[t]x,
[f]y)) →
[f]car[f](
[t]check[f](
[t]x),
[f]y)
[t]check[f](
[t]car[t](
[t]x,
[t]y)) →
[t]car[t](
[t]check[f](
[t]x),
[t]y)
[f]check[f](
[f]right[t](
[f]x,
[f]y)) →
[f]right[t](
[f]x,
[f]check[f](
[f]y))
[f]check[f](
[f]right[t](
[f]x,
[t]y)) →
[f]right[t](
[f]x,
[t]check[f](
[t]y))
[t]check[f](
[t]right[f](
[t]x,
[t]y)) →
[t]right[f](
[t]x,
[t]check[f](
[t]y))
[t]bot[f] →
[t]car[t](
[t]new[f],
[t]bot[f])
[f]check[f](
[f]old[t]) →
[f]ok[f](
[f]old[t])
[f]top[f](
[f]ok[f](
[f]left[t](
[f]car[f](
[f]x,
[f]y),
[f]z))) →
[f]top[f](
[f]check[f](
[f]left[t](
[f]y,
[f]z)))
[f]top[f](
[f]ok[f](
[f]left[t](
[f]car[f](
[f]x,
[t]y),
[f]z))) →
[f]top[f](
[f]check[f](
[f]left[f](
[t]y,
[f]z)))
[f]top[f](
[f]ok[f](
[f]left[f](
[t]car[t](
[t]x,
[t]y),
[f]z))) →
[f]top[f](
[f]check[f](
[f]left[f](
[t]y,
[f]z)))
[f]car[f](
[f]x,
[f]ok[f](
[f]y)) →
[f]ok[f](
[f]car[f](
[f]x,
[f]y))
[f]car[f](
[f]x,
[t]ok[t](
[t]y)) →
[f]ok[f](
[f]car[f](
[f]x,
[t]y))
[t]car[t](
[t]x,
[t]ok[t](
[t]y)) →
[t]ok[t](
[t]car[t](
[t]x,
[t]y))
[f]top[f](
[f]ok[f](
[f]right[t](
[f]x,
[f]car[f](
[f]y,
[f]z)))) →
[f]top[f](
[f]check[f](
[f]right[t](
[f]x,
[f]z)))
[f]top[f](
[f]ok[f](
[f]right[t](
[f]x,
[t]car[t](
[t]y,
[t]z)))) →
[f]top[f](
[f]check[f](
[f]right[t](
[f]x,
[t]z)))
[f]top[f](
[f]ok[f](
[f]right[t](
[t]x,
[f]car[f](
[f]y,
[t]z)))) →
[f]top[t](
[t]check[f](
[t]right[f](
[t]x,
[t]z)))
[f]top[t](
[t]ok[t](
[t]right[f](
[t]x,
[t]car[t](
[t]y,
[t]z)))) →
[f]top[t](
[t]check[f](
[t]right[f](
[t]x,
[t]z)))
[f]check[f](
[f]car[f](
[f]x,
[f]y)) →
[f]car[f](
[f]x,
[f]check[f](
[f]y))
[f]check[f](
[f]car[f](
[f]x,
[t]y)) →
[f]car[f](
[f]x,
[t]check[f](
[t]y))
[t]check[f](
[t]car[t](
[t]x,
[t]y)) →
[t]car[t](
[t]x,
[t]check[f](
[t]y))
[f]check[f](
[f]right[t](
[f]x,
[f]y)) →
[f]right[t](
[f]check[f](
[f]x),
[f]y)
[f]check[f](
[f]right[t](
[t]x,
[f]y)) →
[f]right[t](
[t]check[f](
[t]x),
[f]y)
[t]check[f](
[t]right[f](
[t]x,
[t]y)) →
[t]right[f](
[t]check[f](
[t]x),
[t]y)
[f]left[t](
[f]ok[f](
[f]x),
[f]y) →
[f]ok[f](
[f]left[t](
[f]x,
[f]y))
[f]left[f](
[t]ok[t](
[t]x),
[f]y) →
[f]ok[f](
[f]left[f](
[t]x,
[f]y))
[f]right[t](
[f]x,
[f]ok[f](
[f]y)) →
[f]ok[f](
[f]right[t](
[f]x,
[f]y))
[f]right[t](
[f]x,
[t]ok[t](
[t]y)) →
[f]ok[f](
[f]right[t](
[f]x,
[t]y))
[t]right[f](
[t]x,
[t]ok[t](
[t]y)) →
[t]ok[t](
[t]right[f](
[t]x,
[t]y))
[f]check[f](
[f]left[t](
[f]x,
[f]y)) →
[f]left[t](
[f]x,
[f]check[f](
[f]y))
[f]check[f](
[f]left[t](
[f]x,
[t]y)) →
[f]left[t](
[f]x,
[t]check[f](
[t]y))
[f]check[f](
[f]left[f](
[t]x,
[f]y)) →
[f]left[f](
[t]x,
[f]check[f](
[f]y))
[f]check[f](
[f]left[f](
[t]x,
[t]y)) →
[f]left[f](
[t]x,
[t]check[f](
[t]y))
[f]car[f](
[f]ok[f](
[f]x),
[f]y) →
[f]ok[f](
[f]car[f](
[f]x,
[f]y))
[f]car[f](
[t]ok[t](
[t]x),
[f]y) →
[f]ok[f](
[f]car[f](
[t]x,
[f]y))
[t]car[t](
[t]ok[t](
[t]x),
[t]y) →
[t]ok[t](
[t]car[t](
[t]x,
[t]y))
[f]left[t](
[f]x,
[f]ok[f](
[f]y)) →
[f]ok[f](
[f]left[t](
[f]x,
[f]y))
[f]left[t](
[f]x,
[t]ok[t](
[t]y)) →
[f]ok[f](
[f]left[t](
[f]x,
[t]y))
[f]left[f](
[t]x,
[f]ok[f](
[f]y)) →
[f]ok[f](
[f]left[f](
[t]x,
[f]y))
[f]left[f](
[t]x,
[t]ok[t](
[t]y)) →
[f]ok[f](
[f]left[f](
[t]x,
[t]y))
[f]right[t](
[f]ok[f](
[f]x),
[f]y) →
[f]ok[f](
[f]right[t](
[f]x,
[f]y))
[f]right[t](
[t]ok[t](
[t]x),
[f]y) →
[f]ok[f](
[f]right[t](
[t]x,
[f]y))
[t]right[f](
[t]ok[t](
[t]x),
[t]y) →
[t]ok[t](
[t]right[f](
[t]x,
[t]y))
[f]check[f](
[f]left[t](
[f]x,
[f]y)) →
[f]left[t](
[f]check[f](
[f]x),
[f]y)
[f]check[f](
[f]left[f](
[t]x,
[f]y)) →
[f]left[f](
[t]check[f](
[t]x),
[f]y)
[f]top[f](
[f]ok[f](
[f]left[t](
[f]car[f](
[f]x,
[f]y),
[f]z))) →
[f]top[f](
[f]check[f](
[f]right[t](
[f]y,
[f]z)))
[f]top[f](
[f]ok[f](
[f]left[t](
[f]car[f](
[f]x,
[t]y),
[t]z))) →
[f]top[t](
[t]check[f](
[t]right[f](
[t]y,
[t]z)))
[f]top[f](
[f]ok[f](
[f]left[f](
[t]car[t](
[t]x,
[t]y),
[f]z))) →
[f]top[f](
[f]check[f](
[f]right[t](
[t]y,
[f]z)))
[f]top[f](
[f]ok[f](
[f]left[f](
[t]car[t](
[t]x,
[t]y),
[t]z))) →
[f]top[t](
[t]check[f](
[t]right[f](
[t]y,
[t]z)))
[f]top[f](
[f]ok[f](
[f]left[f](
[t]bot[f],
[f]x))) →
[f]top[f](
[f]check[f](
[f]right[t](
[t]bot[f],
[f]x)))
[f]top[f](
[f]ok[f](
[f]left[f](
[t]bot[f],
[t]x))) →
[f]top[t](
[t]check[f](
[t]right[f](
[t]bot[f],
[t]x)))
[f]top[f](
[f]ok[f](
[f]right[t](
[f]x,
[t]bot[f]))) →
[f]top[f](
[f]check[f](
[f]left[t](
[f]x,
[t]bot[f])))
[f]top[t](
[t]ok[t](
[t]right[f](
[t]x,
[t]bot[f]))) →
[f]top[f](
[f]check[f](
[f]left[f](
[t]x,
[t]bot[f])))
Our polynomial interpretation was:
P(check
[false])(
x1) = 0 + 1·
x1P(check
[true])(
x1) = 1 + 1·
x1P(car
[false])(
x1,
x2) = 1 + 1·
x1 + 1·
x2P(car
[true])(
x1,
x2) = 0 + 1·
x1 + 1·
x2P(right
[false])(
x1,
x2) = 1 + 1·
x1 + 1·
x2P(right
[true])(
x1,
x2) = 0 + 1·
x1 + 1·
x2P(bot
[false])() = 0
P(bot
[true])() = 1
P(new
[false])() = 0
P(new
[true])() = 0
P(old
[false])() = 0
P(old
[true])() = 0
P(ok
[false])(
x1) = 0 + 1·
x1P(ok
[true])(
x1) = 1 + 1·
x1P(top
[false])(
x1) = 1 + 1·
x1P(top
[true])(
x1) = 0 + 1·
x1P(left
[false])(
x1,
x2) = 1 + 1·
x1 + 1·
x2P(left
[true])(
x1,
x2) = 0 + 1·
x1 + 1·
x2The following rules were deleted from R:
top(ok(left(car(x, y), z))) → top(check(right(y, z)))
The following rules were deleted from S:
none
(4) Obligation:
Relative term rewrite system:
The relative TRS consists of the following R rules:
top(ok(left(bot, x))) → top(check(right(bot, x)))
top(ok(right(x, bot))) → top(check(left(x, bot)))
The relative TRS consists of the following S rules:
check(car(x, y)) → car(check(x), y)
check(right(x, y)) → right(x, check(y))
bot → car(new, bot)
check(old) → ok(old)
top(ok(left(car(x, y), z))) → top(check(left(y, z)))
car(x, ok(y)) → ok(car(x, y))
top(ok(right(x, car(y, z)))) → top(check(right(x, z)))
check(car(x, y)) → car(x, check(y))
check(right(x, y)) → right(check(x), y)
left(ok(x), y) → ok(left(x, y))
right(x, ok(y)) → ok(right(x, y))
check(left(x, y)) → left(x, check(y))
car(ok(x), y) → ok(car(x, y))
left(x, ok(y)) → ok(left(x, y))
right(ok(x), y) → ok(right(x, y))
check(left(x, y)) → left(check(x), y)
(5) RelTRSSemanticLabellingPOLOProof (EQUIVALENT transformation)
We use Semantic Labelling over tuples of bools combined with a polynomial order [SEMLAB]
We use semantic labelling over boolean tuples of size 1.
We used the following model:
check
1: component 1: OR[x
11]
car
2: component 1: OR[x
11, x
21]
right
2: component 1: AND[]
bot
0: component 1: OR[]
new
0: component 1: OR[]
old
0: component 1: AND[]
ok
1: component 1: AND[]
top
1: component 1: OR[]
left
2: component 1: OR[x
11, x
21]
Our labelling function was:
check
1:component 1: XOR[x
11]
car
2:component 1: OR[x
11]
right
2:component 1: XOR[-x
11]
bot
0:component 1: XOR[]
new
0:component 1: XOR[]
old
0:component 1: AND[]
ok
1:component 1: AND[x
11]
top
1:component 1: OR[-x
11]
left
2:component 1: AND[x
11, x
21]
Our labelled system was:
[f]check[f](
[f]car[f](
[f]x,
[f]y)) →
[f]car[f](
[f]check[f](
[f]x),
[f]y)
[t]check[t](
[t]car[f](
[f]x,
[t]y)) →
[t]car[f](
[f]check[f](
[f]x),
[t]y)
[t]check[t](
[t]car[t](
[t]x,
[f]y)) →
[t]car[t](
[t]check[t](
[t]x),
[f]y)
[t]check[t](
[t]right[t](
[f]x,
[f]y)) →
[t]right[t](
[f]x,
[f]check[f](
[f]y))
[t]check[t](
[t]right[t](
[f]x,
[t]y)) →
[t]right[t](
[f]x,
[t]check[t](
[t]y))
[t]check[t](
[t]right[f](
[t]x,
[f]y)) →
[t]right[f](
[t]x,
[f]check[f](
[f]y))
[t]check[t](
[t]right[f](
[t]x,
[t]y)) →
[t]right[f](
[t]x,
[t]check[t](
[t]y))
[f]bot[f] →
[f]car[f](
[f]new[f],
[f]bot[f])
[t]check[t](
[t]old[t]) →
[t]ok[t](
[t]old[t])
[f]top[f](
[t]ok[f](
[f]left[f](
[f]car[f](
[f]x,
[f]y),
[f]z))) →
[f]top[t](
[f]check[f](
[f]left[f](
[f]y,
[f]z)))
[f]top[f](
[t]ok[t](
[t]left[f](
[f]car[f](
[f]x,
[f]y),
[t]z))) →
[f]top[f](
[t]check[t](
[t]left[f](
[f]y,
[t]z)))
[f]top[f](
[t]ok[t](
[t]left[f](
[t]car[f](
[f]x,
[t]y),
[f]z))) →
[f]top[f](
[t]check[t](
[t]left[f](
[t]y,
[f]z)))
[f]top[f](
[t]ok[t](
[t]left[t](
[t]car[f](
[f]x,
[t]y),
[t]z))) →
[f]top[f](
[t]check[t](
[t]left[t](
[t]y,
[t]z)))
[f]top[f](
[t]ok[t](
[t]left[f](
[t]car[t](
[t]x,
[f]y),
[f]z))) →
[f]top[t](
[f]check[f](
[f]left[f](
[f]y,
[f]z)))
[f]top[f](
[t]ok[t](
[t]left[t](
[t]car[t](
[t]x,
[f]y),
[t]z))) →
[f]top[f](
[t]check[t](
[t]left[f](
[f]y,
[t]z)))
[f]top[f](
[t]ok[t](
[t]left[f](
[t]car[t](
[t]x,
[t]y),
[f]z))) →
[f]top[f](
[t]check[t](
[t]left[f](
[t]y,
[f]z)))
[f]top[f](
[t]ok[t](
[t]left[t](
[t]car[t](
[t]x,
[t]y),
[t]z))) →
[f]top[f](
[t]check[t](
[t]left[t](
[t]y,
[t]z)))
[t]car[f](
[f]x,
[t]ok[f](
[f]y)) →
[t]ok[f](
[f]car[f](
[f]x,
[f]y))
[t]car[f](
[f]x,
[t]ok[t](
[t]y)) →
[t]ok[t](
[t]car[f](
[f]x,
[t]y))
[t]car[t](
[t]x,
[t]ok[f](
[f]y)) →
[t]ok[t](
[t]car[t](
[t]x,
[f]y))
[t]car[t](
[t]x,
[t]ok[t](
[t]y)) →
[t]ok[t](
[t]car[t](
[t]x,
[t]y))
[f]top[f](
[t]ok[t](
[t]right[t](
[f]x,
[f]car[f](
[f]y,
[f]z)))) →
[f]top[f](
[t]check[t](
[t]right[t](
[f]x,
[f]z)))
[f]top[f](
[t]ok[t](
[t]right[t](
[f]x,
[t]car[f](
[f]y,
[t]z)))) →
[f]top[f](
[t]check[t](
[t]right[t](
[f]x,
[t]z)))
[f]top[f](
[t]ok[t](
[t]right[t](
[f]x,
[t]car[t](
[t]y,
[f]z)))) →
[f]top[f](
[t]check[t](
[t]right[t](
[f]x,
[f]z)))
[f]top[f](
[t]ok[t](
[t]right[f](
[t]x,
[f]car[f](
[f]y,
[f]z)))) →
[f]top[f](
[t]check[t](
[t]right[f](
[t]x,
[f]z)))
[f]top[f](
[t]ok[t](
[t]right[f](
[t]x,
[t]car[f](
[f]y,
[t]z)))) →
[f]top[f](
[t]check[t](
[t]right[f](
[t]x,
[t]z)))
[f]top[f](
[t]ok[t](
[t]right[f](
[t]x,
[t]car[t](
[t]y,
[f]z)))) →
[f]top[f](
[t]check[t](
[t]right[f](
[t]x,
[f]z)))
[f]check[f](
[f]car[f](
[f]x,
[f]y)) →
[f]car[f](
[f]x,
[f]check[f](
[f]y))
[t]check[t](
[t]car[f](
[f]x,
[t]y)) →
[t]car[f](
[f]x,
[t]check[t](
[t]y))
[t]check[t](
[t]car[t](
[t]x,
[f]y)) →
[t]car[t](
[t]x,
[f]check[f](
[f]y))
[t]check[t](
[t]car[t](
[t]x,
[t]y)) →
[t]car[t](
[t]x,
[t]check[t](
[t]y))
[t]check[t](
[t]right[t](
[f]x,
[f]y)) →
[t]right[t](
[f]check[f](
[f]x),
[f]y)
[t]check[t](
[t]right[f](
[t]x,
[f]y)) →
[t]right[f](
[t]check[t](
[t]x),
[f]y)
[t]left[f](
[t]ok[f](
[f]x),
[f]y) →
[t]ok[f](
[f]left[f](
[f]x,
[f]y))
[t]left[t](
[t]ok[f](
[f]x),
[t]y) →
[t]ok[t](
[t]left[f](
[f]x,
[t]y))
[t]left[f](
[t]ok[t](
[t]x),
[f]y) →
[t]ok[t](
[t]left[f](
[t]x,
[f]y))
[t]left[t](
[t]ok[t](
[t]x),
[t]y) →
[t]ok[t](
[t]left[t](
[t]x,
[t]y))
[t]right[t](
[f]x,
[t]ok[f](
[f]y)) →
[t]ok[t](
[t]right[t](
[f]x,
[f]y))
[t]right[t](
[f]x,
[t]ok[t](
[t]y)) →
[t]ok[t](
[t]right[t](
[f]x,
[t]y))
[t]right[f](
[t]x,
[t]ok[f](
[f]y)) →
[t]ok[t](
[t]right[f](
[t]x,
[f]y))
[t]right[f](
[t]x,
[t]ok[t](
[t]y)) →
[t]ok[t](
[t]right[f](
[t]x,
[t]y))
[f]check[f](
[f]left[f](
[f]x,
[f]y)) →
[f]left[f](
[f]x,
[f]check[f](
[f]y))
[t]check[t](
[t]left[f](
[f]x,
[t]y)) →
[t]left[f](
[f]x,
[t]check[t](
[t]y))
[t]check[t](
[t]left[f](
[t]x,
[f]y)) →
[t]left[f](
[t]x,
[f]check[f](
[f]y))
[t]check[t](
[t]left[t](
[t]x,
[t]y)) →
[t]left[t](
[t]x,
[t]check[t](
[t]y))
[t]car[t](
[t]ok[f](
[f]x),
[f]y) →
[t]ok[f](
[f]car[f](
[f]x,
[f]y))
[t]car[t](
[t]ok[f](
[f]x),
[t]y) →
[t]ok[t](
[t]car[f](
[f]x,
[t]y))
[t]car[t](
[t]ok[t](
[t]x),
[f]y) →
[t]ok[t](
[t]car[t](
[t]x,
[f]y))
[t]left[f](
[f]x,
[t]ok[f](
[f]y)) →
[t]ok[f](
[f]left[f](
[f]x,
[f]y))
[t]left[f](
[f]x,
[t]ok[t](
[t]y)) →
[t]ok[t](
[t]left[f](
[f]x,
[t]y))
[t]left[t](
[t]x,
[t]ok[f](
[f]y)) →
[t]ok[t](
[t]left[f](
[t]x,
[f]y))
[t]left[t](
[t]x,
[t]ok[t](
[t]y)) →
[t]ok[t](
[t]left[t](
[t]x,
[t]y))
[t]right[f](
[t]ok[f](
[f]x),
[f]y) →
[t]ok[t](
[t]right[t](
[f]x,
[f]y))
[t]right[f](
[t]ok[t](
[t]x),
[f]y) →
[t]ok[t](
[t]right[f](
[t]x,
[f]y))
[f]check[f](
[f]left[f](
[f]x,
[f]y)) →
[f]left[f](
[f]check[f](
[f]x),
[f]y)
[t]check[t](
[t]left[f](
[f]x,
[t]y)) →
[t]left[f](
[f]check[f](
[f]x),
[t]y)
[t]check[t](
[t]left[f](
[t]x,
[f]y)) →
[t]left[f](
[t]check[t](
[t]x),
[f]y)
[t]check[t](
[t]left[t](
[t]x,
[t]y)) →
[t]left[t](
[t]check[t](
[t]x),
[t]y)
[f]top[f](
[t]ok[f](
[f]left[f](
[f]bot[f],
[f]x))) →
[f]top[f](
[t]check[t](
[t]right[t](
[f]bot[f],
[f]x)))
[f]top[f](
[t]ok[t](
[t]left[f](
[f]bot[f],
[t]x))) →
[f]top[f](
[t]check[t](
[t]right[t](
[f]bot[f],
[t]x)))
[f]top[f](
[t]ok[t](
[t]right[t](
[f]x,
[f]bot[f]))) →
[f]top[t](
[f]check[f](
[f]left[f](
[f]x,
[f]bot[f])))
[f]top[f](
[t]ok[t](
[t]right[f](
[t]x,
[f]bot[f]))) →
[f]top[f](
[t]check[t](
[t]left[f](
[t]x,
[f]bot[f])))
Our polynomial interpretation was:
P(check
[false])(
x1) = 1 + 1·
x1P(check
[true])(
x1) = 1 + 1·
x1P(car
[false])(
x1,
x2) = 0 + 1·
x1 + 1·
x2P(car
[true])(
x1,
x2) = 1 + 1·
x1 + 1·
x2P(right
[false])(
x1,
x2) = 1 + 1·
x1 + 1·
x2P(right
[true])(
x1,
x2) = 0 + 1·
x1 + 1·
x2P(bot
[false])() = 0
P(bot
[true])() = 1
P(new
[false])() = 0
P(new
[true])() = 0
P(old
[false])() = 0
P(old
[true])() = 1
P(ok
[false])(
x1) = 1 + 1·
x1P(ok
[true])(
x1) = 1 + 1·
x1P(top
[false])(
x1) = 1 + 1·
x1P(top
[true])(
x1) = 0 + 1·
x1P(left
[false])(
x1,
x2) = 0 + 1·
x1 + 1·
x2P(left
[true])(
x1,
x2) = 1 + 1·
x1 + 1·
x2The following rules were deleted from R:
top(ok(right(x, bot))) → top(check(left(x, bot)))
The following rules were deleted from S:
none
(6) Obligation:
Relative term rewrite system:
The relative TRS consists of the following R rules:
top(ok(left(bot, x))) → top(check(right(bot, x)))
The relative TRS consists of the following S rules:
check(car(x, y)) → car(check(x), y)
check(right(x, y)) → right(x, check(y))
bot → car(new, bot)
check(old) → ok(old)
top(ok(left(car(x, y), z))) → top(check(left(y, z)))
car(x, ok(y)) → ok(car(x, y))
top(ok(right(x, car(y, z)))) → top(check(right(x, z)))
check(car(x, y)) → car(x, check(y))
check(right(x, y)) → right(check(x), y)
left(ok(x), y) → ok(left(x, y))
right(x, ok(y)) → ok(right(x, y))
check(left(x, y)) → left(x, check(y))
car(ok(x), y) → ok(car(x, y))
left(x, ok(y)) → ok(left(x, y))
right(ok(x), y) → ok(right(x, y))
check(left(x, y)) → left(check(x), y)
(7) RelTRSRRRProof (EQUIVALENT transformation)
We used the following monotonic ordering for rule removal:
Polynomial interpretation [POLO]:
POL(bot) = 0
POL(car(x1, x2)) = x1 + x2
POL(check(x1)) = x1
POL(left(x1, x2)) = 1 + x1 + x2
POL(new) = 0
POL(ok(x1)) = x1
POL(old) = 0
POL(right(x1, x2)) = x1 + x2
POL(top(x1)) = x1
With this ordering the following rules can be removed [MATRO] because they are oriented strictly:
Rules from R:
top(ok(left(bot, x))) → top(check(right(bot, x)))
Rules from S:
none
(8) Obligation:
Relative term rewrite system:
R is empty.
The relative TRS consists of the following S rules:
check(car(x, y)) → car(check(x), y)
check(right(x, y)) → right(x, check(y))
bot → car(new, bot)
check(old) → ok(old)
top(ok(left(car(x, y), z))) → top(check(left(y, z)))
car(x, ok(y)) → ok(car(x, y))
top(ok(right(x, car(y, z)))) → top(check(right(x, z)))
check(car(x, y)) → car(x, check(y))
check(right(x, y)) → right(check(x), y)
left(ok(x), y) → ok(left(x, y))
right(x, ok(y)) → ok(right(x, y))
check(left(x, y)) → left(x, check(y))
car(ok(x), y) → ok(car(x, y))
left(x, ok(y)) → ok(left(x, y))
right(ok(x), y) → ok(right(x, y))
check(left(x, y)) → left(check(x), y)
(9) RIsEmptyProof (EQUIVALENT transformation)
The TRS R is empty. Hence, termination is trivially proven.
(10) YES