Certification Problem

Input (TPDB TRS_Standard/AProVE_04/AAECC)

The rewrite relation of the following TRS is considered.

fstsplit(0,x) nil (1)
fstsplit(s(n),nil) nil (2)
fstsplit(s(n),cons(h,t)) cons(h,fstsplit(n,t)) (3)
sndsplit(0,x) x (4)
sndsplit(s(n),nil) nil (5)
sndsplit(s(n),cons(h,t)) sndsplit(n,t) (6)
empty(nil) true (7)
empty(cons(h,t)) false (8)
leq(0,m) true (9)
leq(s(n),0) false (10)
leq(s(n),s(m)) leq(n,m) (11)
length(nil) 0 (12)
length(cons(h,t)) s(length(t)) (13)
app(nil,x) x (14)
app(cons(h,t),x) cons(h,app(t,x)) (15)
map_f(pid,nil) nil (16)
map_f(pid,cons(h,t)) app(f(pid,h),map_f(pid,t)) (17)
process(store,m) if1(store,m,leq(m,length(store))) (18)
if1(store,m,true) if2(store,m,empty(fstsplit(m,store))) (19)
if1(store,m,false) if3(store,m,empty(fstsplit(m,app(map_f(self,nil),store)))) (20)
if2(store,m,false) process(app(map_f(self,nil),sndsplit(m,store)),m) (21)
if3(store,m,false) process(sndsplit(m,app(map_f(self,nil),store)),m) (22)

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.
fstsplit#(s(n),cons(h,t)) fstsplit#(n,t) (23)
sndsplit#(s(n),cons(h,t)) sndsplit#(n,t) (24)
leq#(s(n),s(m)) leq#(n,m) (25)
length#(cons(h,t)) length#(t) (26)
app#(cons(h,t),x) app#(t,x) (27)
map_f#(pid,cons(h,t)) app#(f(pid,h),map_f(pid,t)) (28)
map_f#(pid,cons(h,t)) map_f#(pid,t) (29)
process#(store,m) if1#(store,m,leq(m,length(store))) (30)
process#(store,m) leq#(m,length(store)) (31)
process#(store,m) length#(store) (32)
if1#(store,m,true) if2#(store,m,empty(fstsplit(m,store))) (33)
if1#(store,m,true) empty#(fstsplit(m,store)) (34)
if1#(store,m,true) fstsplit#(m,store) (35)
if1#(store,m,false) if3#(store,m,empty(fstsplit(m,app(map_f(self,nil),store)))) (36)
if1#(store,m,false) empty#(fstsplit(m,app(map_f(self,nil),store))) (37)
if1#(store,m,false) fstsplit#(m,app(map_f(self,nil),store)) (38)
if1#(store,m,false) app#(map_f(self,nil),store) (39)
if1#(store,m,false) map_f#(self,nil) (40)
if2#(store,m,false) process#(app(map_f(self,nil),sndsplit(m,store)),m) (41)
if2#(store,m,false) app#(map_f(self,nil),sndsplit(m,store)) (42)
if2#(store,m,false) map_f#(self,nil) (43)
if2#(store,m,false) sndsplit#(m,store) (44)
if3#(store,m,false) process#(sndsplit(m,app(map_f(self,nil),store)),m) (45)
if3#(store,m,false) sndsplit#(m,app(map_f(self,nil),store)) (46)
if3#(store,m,false) app#(map_f(self,nil),store) (47)
if3#(store,m,false) map_f#(self,nil) (48)

1.1.1 Dependency Graph Processor

The dependency pairs are split into 7 components.