Certification Problem

Input (TPDB TRS_Standard/AProVE_07/thiemann04)

The rewrite relation of the following TRS is considered.

eq(0,0) true (1)
eq(0,s(x)) false (2)
eq(s(x),0) false (3)
eq(s(x),s(y)) eq(x,y) (4)
or(true,y) true (5)
or(false,y) y (6)
union(empty,h) h (7)
union(edge(x,y,i),h) edge(x,y,union(i,h)) (8)
isEmpty(empty) true (9)
isEmpty(edge(x,y,i)) false (10)
from(edge(x,y,i)) x (11)
to(edge(x,y,i)) y (12)
rest(edge(x,y,i)) i (13)
rest(empty) empty (14)
reach(x,y,i,h) if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) (15)
if1(true,b1,b2,b3,x,y,i,h) true (16)
if1(false,b1,b2,b3,x,y,i,h) if2(b1,b2,b3,x,y,i,h) (17)
if2(true,b2,b3,x,y,i,h) false (18)
if2(false,b2,b3,x,y,i,h) if3(b2,b3,x,y,i,h) (19)
if3(false,b3,x,y,i,h) reach(x,y,rest(i),edge(from(i),to(i),h)) (20)
if3(true,b3,x,y,i,h) if4(b3,x,y,i,h) (21)
if4(true,x,y,i,h) true (22)
if4(false,x,y,i,h) or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty)) (23)

Property / Task

Prove or disprove termination.

Answer / Result

Yes.

Proof (by AProVE @ termCOMP 2023)

1 Switch to Innermost Termination

The TRS is overlay and locally confluent:

10

Hence, it suffices to show innermost termination in the following.

1.1 Dependency Pair Transformation

The following set of initial dependency pairs has been identified.
eq#(s(x),s(y)) eq#(x,y) (24)
union#(edge(x,y,i),h) union#(i,h) (25)
reach#(x,y,i,h) if1#(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) (26)
reach#(x,y,i,h) eq#(x,y) (27)
reach#(x,y,i,h) isEmpty#(i) (28)
reach#(x,y,i,h) eq#(x,from(i)) (29)
reach#(x,y,i,h) from#(i) (30)
reach#(x,y,i,h) eq#(y,to(i)) (31)
reach#(x,y,i,h) to#(i) (32)
if1#(false,b1,b2,b3,x,y,i,h) if2#(b1,b2,b3,x,y,i,h) (33)
if2#(false,b2,b3,x,y,i,h) if3#(b2,b3,x,y,i,h) (34)
if3#(false,b3,x,y,i,h) reach#(x,y,rest(i),edge(from(i),to(i),h)) (35)
if3#(false,b3,x,y,i,h) rest#(i) (36)
if3#(false,b3,x,y,i,h) from#(i) (37)
if3#(false,b3,x,y,i,h) to#(i) (38)
if3#(true,b3,x,y,i,h) if4#(b3,x,y,i,h) (39)
if4#(false,x,y,i,h) or#(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty)) (40)
if4#(false,x,y,i,h) reach#(x,y,rest(i),h) (41)
if4#(false,x,y,i,h) rest#(i) (42)
if4#(false,x,y,i,h) reach#(to(i),y,union(rest(i),h),empty) (43)
if4#(false,x,y,i,h) to#(i) (44)
if4#(false,x,y,i,h) union#(rest(i),h) (45)

1.1.1 Dependency Graph Processor

The dependency pairs are split into 3 components.