Certification Problem

Input (TPDB TRS_Standard/Applicative_first_order_05/11)

The rewrite relation of the following TRS is considered.

app(D,t) 1 (1)
app(D,constant) 0 (2)
app(D,app(app(+,x),y)) app(app(+,app(D,x)),app(D,y)) (3)
app(D,app(app(*,x),y)) app(app(+,app(app(*,y),app(D,x))),app(app(*,x),app(D,y))) (4)
app(D,app(app(-,x),y)) app(app(-,app(D,x)),app(D,y)) (5)
app(D,app(minus,x)) app(minus,app(D,x)) (6)
app(D,app(app(div,x),y)) app(app(-,app(app(div,app(D,x)),y)),app(app(div,app(app(*,x),app(D,y))),app(app(pow,y),2))) (7)
app(D,app(ln,x)) app(app(div,app(D,x)),x) (8)
app(D,app(app(pow,x),y)) app(app(+,app(app(*,app(app(*,y),app(app(pow,x),app(app(-,y),1)))),app(D,x))),app(app(*,app(app(*,app(app(pow,x),y)),app(ln,x))),app(D,y))) (9)
app(app(map,f),nil) nil (10)
app(app(map,f),app(app(cons,x),xs)) app(app(cons,app(f,x)),app(app(map,f),xs)) (11)
app(app(filter,f),nil) nil (12)
app(app(filter,f),app(app(cons,x),xs)) app(app(app(app(filter2,app(f,x)),f),x),xs) (13)
app(app(app(app(filter2,true),f),x),xs) app(app(cons,x),app(app(filter,f),xs)) (14)
app(app(app(app(filter2,false),f),x),xs) app(app(filter,f),xs) (15)

Property / Task

Prove or disprove termination.

Answer / Result

Yes.

Proof (by NaTT @ termCOMP 2023)

1 Dependency Pair Transformation

The following set of initial dependency pairs has been identified.
app#(D,app(minus,x)) app#(D,x) (16)
app#(D,app(app(div,x),y)) app#(pow,y) (17)
app#(app(app(app(filter2,true),f),x),xs) app#(cons,x) (18)
app#(D,app(app(div,x),y)) app#(div,app(D,x)) (19)
app#(D,app(app(-,x),y)) app#(D,x) (20)
app#(D,app(app(div,x),y)) app#(app(pow,y),2) (21)
app#(D,app(app(div,x),y)) app#(D,y) (22)
app#(D,app(app(div,x),y)) app#(app(div,app(app(*,x),app(D,y))),app(app(pow,y),2)) (23)
app#(D,app(app(-,x),y)) app#(D,y) (24)
app#(D,app(ln,x)) app#(div,app(D,x)) (25)
app#(D,app(app(+,x),y)) app#(app(+,app(D,x)),app(D,y)) (26)
app#(D,app(app(*,x),y)) app#(+,app(app(*,y),app(D,x))) (27)
app#(D,app(app(*,x),y)) app#(D,x) (28)
app#(D,app(app(div,x),y)) app#(div,app(app(*,x),app(D,y))) (29)
app#(app(filter,f),app(app(cons,x),xs)) app#(filter2,app(f,x)) (30)
app#(D,app(app(*,x),y)) app#(app(*,y),app(D,x)) (31)
app#(app(app(app(filter2,false),f),x),xs) app#(app(filter,f),xs) (32)
app#(D,app(app(div,x),y)) app#(*,x) (33)
app#(D,app(app(+,x),y)) app#(D,y) (34)
app#(D,app(app(pow,x),y)) app#(*,y) (35)
app#(D,app(app(pow,x),y)) app#(+,app(app(*,app(app(*,y),app(app(pow,x),app(app(-,y),1)))),app(D,x))) (36)
app#(D,app(app(pow,x),y)) app#(*,app(app(*,y),app(app(pow,x),app(app(-,y),1)))) (37)
app#(D,app(app(*,x),y)) app#(app(+,app(app(*,y),app(D,x))),app(app(*,x),app(D,y))) (38)
app#(app(map,f),app(app(cons,x),xs)) app#(app(cons,app(f,x)),app(app(map,f),xs)) (39)
app#(D,app(app(pow,x),y)) app#(D,y) (40)
app#(D,app(app(-,x),y)) app#(-,app(D,x)) (41)
app#(D,app(app(pow,x),y)) app#(app(*,y),app(app(pow,x),app(app(-,y),1))) (42)
app#(app(app(app(filter2,true),f),x),xs) app#(filter,f) (43)
app#(app(app(app(filter2,false),f),x),xs) app#(filter,f) (44)
app#(D,app(app(pow,x),y)) app#(app(pow,x),app(app(-,y),1)) (45)
app#(D,app(app(*,x),y)) app#(app(*,x),app(D,y)) (46)
app#(app(app(app(filter2,true),f),x),xs) app#(app(filter,f),xs) (47)
app#(D,app(ln,x)) app#(app(div,app(D,x)),x) (48)
app#(D,app(app(+,x),y)) app#(+,app(D,x)) (49)
app#(app(map,f),app(app(cons,x),xs)) app#(cons,app(f,x)) (50)
app#(D,app(app(pow,x),y)) app#(app(*,app(app(pow,x),y)),app(ln,x)) (51)
app#(app(filter,f),app(app(cons,x),xs)) app#(f,x) (52)
app#(D,app(app(div,x),y)) app#(app(*,x),app(D,y)) (53)
app#(D,app(app(pow,x),y)) app#(app(*,app(app(*,y),app(app(pow,x),app(app(-,y),1)))),app(D,x)) (54)
app#(D,app(app(div,x),y)) app#(-,app(app(div,app(D,x)),y)) (55)
app#(app(filter,f),app(app(cons,x),xs)) app#(app(filter2,app(f,x)),f) (56)
app#(D,app(app(-,x),y)) app#(app(-,app(D,x)),app(D,y)) (57)
app#(app(app(app(filter2,true),f),x),xs) app#(app(cons,x),app(app(filter,f),xs)) (58)
app#(D,app(app(pow,x),y)) app#(ln,x) (59)
app#(D,app(app(div,x),y)) app#(app(div,app(D,x)),y) (60)
app#(app(map,f),app(app(cons,x),xs)) app#(app(map,f),xs) (61)
app#(D,app(app(*,x),y)) app#(*,y) (62)
app#(D,app(app(pow,x),y)) app#(D,x) (63)
app#(D,app(app(div,x),y)) app#(app(-,app(app(div,app(D,x)),y)),app(app(div,app(app(*,x),app(D,y))),app(app(pow,y),2))) (64)
app#(D,app(app(pow,x),y)) app#(*,app(app(*,app(app(pow,x),y)),app(ln,x))) (65)
app#(D,app(app(*,x),y)) app#(D,y) (66)
app#(app(map,f),app(app(cons,x),xs)) app#(f,x) (67)
app#(D,app(app(div,x),y)) app#(D,x) (68)
app#(D,app(app(pow,x),y)) app#(*,app(app(pow,x),y)) (69)
app#(D,app(app(pow,x),y)) app#(-,y) (70)
app#(app(filter,f),app(app(cons,x),xs)) app#(app(app(app(filter2,app(f,x)),f),x),xs) (71)
app#(D,app(minus,x)) app#(minus,app(D,x)) (72)
app#(D,app(ln,x)) app#(D,x) (73)
app#(D,app(app(pow,x),y)) app#(app(+,app(app(*,app(app(*,y),app(app(pow,x),app(app(-,y),1)))),app(D,x))),app(app(*,app(app(*,app(app(pow,x),y)),app(ln,x))),app(D,y))) (74)
app#(D,app(app(pow,x),y)) app#(app(-,y),1) (75)
app#(app(filter,f),app(app(cons,x),xs)) app#(app(app(filter2,app(f,x)),f),x) (76)
app#(D,app(app(+,x),y)) app#(D,x) (77)
app#(D,app(app(pow,x),y)) app#(app(*,app(app(*,app(app(pow,x),y)),app(ln,x))),app(D,y)) (78)

1.1 Dependency Graph Processor

The dependency pairs are split into 2 components.