Certification Problem
Input (TPDB TRS_Equational/AProVE_AC_04/AC07)
The rewrite relation of the following equational TRS is considered.
sum(x,y) |
→ |
S(int(x,y)) |
(1) |
S(nil) |
→ |
0 |
(2) |
S(cons(x,xs)) |
→ |
plus(x,S(xs)) |
(3) |
plus(x,0) |
→ |
x |
(4) |
plus(x,s(y)) |
→ |
s(plus(x,y)) |
(5) |
int(0,0) |
→ |
cons(0,nil) |
(6) |
int(0,s(y)) |
→ |
cons(0,int(s(0),s(y))) |
(7) |
int(s(x),0) |
→ |
nil |
(8) |
int(s(x),s(y)) |
→ |
intlist(int(x,y)) |
(9) |
intlist(nil) |
→ |
nil |
(10) |
intlist(cons(x,y)) |
→ |
cons(s(x),intlist(y)) |
(11) |
Associative symbols: plus
Commutative symbols: plus
Property / Task
Prove or disprove termination.Answer / Result
Yes.Proof (by NaTT @ termCOMP 2023)
1 AC Dependency Pair Transformation
The following set of (strict) dependency pairs is constructed for the TRS.
int#(s(x),s(y)) |
→ |
intlist#(int(x,y)) |
(17) |
S#(cons(x,xs)) |
→ |
plus#(x,S(xs)) |
(18) |
sum#(x,y) |
→ |
S#(int(x,y)) |
(19) |
sum#(x,y) |
→ |
int#(x,y) |
(20) |
int#(0,s(y)) |
→ |
int#(s(0),s(y)) |
(21) |
S#(cons(x,xs)) |
→ |
S#(xs) |
(22) |
int#(s(x),s(y)) |
→ |
int#(x,y) |
(23) |
plus#(x,s(y)) |
→ |
plus#(x,y) |
(24) |
intlist#(cons(x,y)) |
→ |
intlist#(y) |
(25) |
Finiteness for these DPs in combination with the equational DPs is proven as follows.
1.1 Dependency Graph Processor
The dependency pairs are split into 4
components.
-
The
1st
component contains the
pair
S#(cons(x,xs)) |
→ |
S#(xs) |
(22) |
1.1.1 AC Reduction Pair Processor with Usable Rules
Using the Max-polynomial interpretation
[intlist#(x1)] |
=
|
0 |
[s(x1)] |
=
|
0 |
[S(x1)] |
=
|
0 |
[plus#(x1, x2)] |
=
|
0 |
[sum(x1, x2)] |
=
|
0 |
[0] |
=
|
0 |
[nil] |
=
|
0 |
[intlist(x1)] |
=
|
0 |
[int(x1, x2)] |
=
|
0 |
[S#(x1)] |
=
|
x1 + 0 |
[plus(x1, x2)] |
=
|
0 |
[cons(x1, x2)] |
=
|
x2 + 1 |
[sum#(x1, x2)] |
=
|
0 |
[int#(x1, x2)] |
=
|
0 |
having no usable rules (w.r.t. the implicit argument filter of the
reduction pair),
the
pair
S#(cons(x,xs)) |
→ |
S#(xs) |
(22) |
could be deleted.
1.1.1.1 Dependency Graph Processor
The dependency pairs are split into 0
components.
-
The
2nd
component contains the
pair
plus#(x,s(y)) |
→ |
plus#(x,y) |
(24) |
plus#(x,y) |
→ |
plus#(y,x) |
(16) |
plus#(x,plus(y,z)) |
→ |
plus#(x,y) |
(14) |
plus#(x,plus(y,z)) |
→ |
plus#(plus(x,y),z) |
(15) |
1.1.2 AC Reduction Pair Processor with Usable Rules
Using the Max-polynomial interpretation
[intlist#(x1)] |
=
|
0 |
[s(x1)] |
=
|
x1 + 1 |
[S(x1)] |
=
|
0 |
[plus#(x1, x2)] |
=
|
x1 + x2 + 0 |
[sum(x1, x2)] |
=
|
0 |
[0] |
=
|
21277 |
[nil] |
=
|
0 |
[intlist(x1)] |
=
|
0 |
[int(x1, x2)] |
=
|
0 |
[S#(x1)] |
=
|
0 |
[plus(x1, x2)] |
=
|
x1 + x2 + 7720 |
[cons(x1, x2)] |
=
|
1 |
[sum#(x1, x2)] |
=
|
0 |
[int#(x1, x2)] |
=
|
0 |
together with the usable
rules
plus(x,0) |
→ |
x |
(4) |
plus(x,s(y)) |
→ |
s(plus(x,y)) |
(5) |
plus(x,plus(y,z)) |
→ |
plus(plus(x,y),z) |
(13) |
plus(x,y) |
→ |
plus(y,x) |
(12) |
(w.r.t. the implicit argument filter of the reduction pair),
the
pairs
plus#(x,plus(y,z)) |
→ |
plus#(x,y) |
(14) |
plus#(x,s(y)) |
→ |
plus#(x,y) |
(24) |
could be deleted.
1.1.2.1 Dependency Graph Processor
The dependency pairs are split into 1
component.
-
The
1st
component contains the
pair
plus#(x,plus(y,z)) |
→ |
plus#(plus(x,y),z) |
(15) |
plus#(x,y) |
→ |
plus#(y,x) |
(16) |
1.1.2.1.1 AC Dependency Pair Problem is trivial
There are no strict pairs and rules remaining, or there are no DPs remaining. Therefore, finiteness is trivially satisfied.
-
The
3rd
component contains the
pair
int#(s(x),s(y)) |
→ |
int#(x,y) |
(23) |
int#(0,s(y)) |
→ |
int#(s(0),s(y)) |
(21) |
1.1.3 AC Reduction Pair Processor with Usable Rules
Using the Max-polynomial interpretation
[intlist#(x1)] |
=
|
0 |
[s(x1)] |
=
|
x1 + 1 |
[S(x1)] |
=
|
0 |
[plus#(x1, x2)] |
=
|
x1 + x2 + 0 |
[sum(x1, x2)] |
=
|
0 |
[0] |
=
|
11798 |
[nil] |
=
|
0 |
[intlist(x1)] |
=
|
0 |
[int(x1, x2)] |
=
|
0 |
[S#(x1)] |
=
|
0 |
[plus(x1, x2)] |
=
|
x1 + x2 + 7720 |
[cons(x1, x2)] |
=
|
1 |
[sum#(x1, x2)] |
=
|
0 |
[int#(x1, x2)] |
=
|
x2 + 0 |
together with the usable
rules
plus(x,0) |
→ |
x |
(4) |
plus(x,s(y)) |
→ |
s(plus(x,y)) |
(5) |
plus(x,plus(y,z)) |
→ |
plus(plus(x,y),z) |
(13) |
plus(x,y) |
→ |
plus(y,x) |
(12) |
(w.r.t. the implicit argument filter of the reduction pair),
the
pair
int#(s(x),s(y)) |
→ |
int#(x,y) |
(23) |
could be deleted.
1.1.3.1 Dependency Graph Processor
The dependency pairs are split into 0
components.
-
The
4th
component contains the
pair
intlist#(cons(x,y)) |
→ |
intlist#(y) |
(25) |
1.1.4 AC Reduction Pair Processor with Usable Rules
Using the Max-polynomial interpretation
[intlist#(x1)] |
=
|
x1 + 0 |
[s(x1)] |
=
|
x1 + 1 |
[S(x1)] |
=
|
0 |
[plus#(x1, x2)] |
=
|
x1 + x2 + 0 |
[sum(x1, x2)] |
=
|
0 |
[0] |
=
|
18816 |
[nil] |
=
|
0 |
[intlist(x1)] |
=
|
0 |
[int(x1, x2)] |
=
|
0 |
[S#(x1)] |
=
|
0 |
[plus(x1, x2)] |
=
|
x1 + x2 + 62898 |
[cons(x1, x2)] |
=
|
x2 + 1 |
[sum#(x1, x2)] |
=
|
0 |
[int#(x1, x2)] |
=
|
0 |
together with the usable
rules
plus(x,0) |
→ |
x |
(4) |
plus(x,s(y)) |
→ |
s(plus(x,y)) |
(5) |
plus(x,plus(y,z)) |
→ |
plus(plus(x,y),z) |
(13) |
plus(x,y) |
→ |
plus(y,x) |
(12) |
(w.r.t. the implicit argument filter of the reduction pair),
the
pair
intlist#(cons(x,y)) |
→ |
intlist#(y) |
(25) |
could be deleted.
1.1.4.1 Dependency Graph Processor
The dependency pairs are split into 0
components.
The extended rules of the TRS
plus(plus(x,s(y)),_1) |
→ |
plus(s(plus(x,y)),_1) |
(26) |
plus(plus(x,0),_1) |
→ |
plus(x,_1) |
(27) |
give rise to another dependency pair problem.
Finiteness for these DPs in combination with the equational DPs is proven as follows.
1.2 Dependency Graph Processor
The dependency pairs are split into 1
component.