The rewrite relation of the following TRS is considered.
app(app(and,true),true) | → | true | (1) |
app(app(and,true),false) | → | false | (2) |
app(app(and,false),true) | → | false | (3) |
app(app(and,false),false) | → | false | (4) |
app(app(or,true),true) | → | true | (5) |
app(app(or,true),false) | → | true | (6) |
app(app(or,false),true) | → | true | (7) |
app(app(or,false),false) | → | false | (8) |
app(app(forall,p),nil) | → | true | (9) |
app(app(forall,p),app(app(cons,x),xs)) | → | app(app(and,app(p,x)),app(app(forall,p),xs)) | (10) |
app(app(forsome,p),nil) | → | false | (11) |
app(app(forsome,p),app(app(cons,x),xs)) | → | app(app(or,app(p,x)),app(app(forsome,p),xs)) | (12) |
We uncurry the binary symbol app in combination with the following symbol map which also determines the applicative arities of these symbols.
and | is mapped to | and, | and1(x1), | and2(x1, x2) |
true | is mapped to | true | ||
false | is mapped to | false | ||
or | is mapped to | or, | or1(x1), | or2(x1, x2) |
forall | is mapped to | forall, | forall1(x1), | forall2(x1, x2) |
nil | is mapped to | nil | ||
cons | is mapped to | cons, | cons1(x1), | cons2(x1, x2) |
forsome | is mapped to | forsome, | forsome1(x1), | forsome2(x1, x2) |
and2(true,true) | → | true | (23) |
and2(true,false) | → | false | (24) |
and2(false,true) | → | false | (25) |
and2(false,false) | → | false | (26) |
or2(true,true) | → | true | (27) |
or2(true,false) | → | true | (28) |
or2(false,true) | → | true | (29) |
or2(false,false) | → | false | (30) |
forall2(p,nil) | → | true | (31) |
forall2(p,cons2(x,xs)) | → | and2(app(p,x),forall2(p,xs)) | (32) |
forsome2(p,nil) | → | false | (33) |
forsome2(p,cons2(x,xs)) | → | or2(app(p,x),forsome2(p,xs)) | (34) |
app(and,y1) | → | and1(y1) | (13) |
app(and1(x0),y1) | → | and2(x0,y1) | (14) |
app(or,y1) | → | or1(y1) | (15) |
app(or1(x0),y1) | → | or2(x0,y1) | (16) |
app(forall,y1) | → | forall1(y1) | (17) |
app(forall1(x0),y1) | → | forall2(x0,y1) | (18) |
app(cons,y1) | → | cons1(y1) | (19) |
app(cons1(x0),y1) | → | cons2(x0,y1) | (20) |
app(forsome,y1) | → | forsome1(y1) | (21) |
app(forsome1(x0),y1) | → | forsome2(x0,y1) | (22) |
prec(and2) | = | 1 | stat(and2) | = | mul | |
prec(true) | = | 2 | stat(true) | = | mul | |
prec(false) | = | 1 | stat(false) | = | mul | |
prec(or2) | = | 2 | stat(or2) | = | mul | |
prec(forall2) | = | 4 | stat(forall2) | = | mul | |
prec(nil) | = | 5 | stat(nil) | = | mul | |
prec(cons2) | = | 0 | stat(cons2) | = | lex | |
prec(app) | = | 4 | stat(app) | = | mul | |
prec(forsome2) | = | 4 | stat(forsome2) | = | mul | |
prec(and) | = | 6 | stat(and) | = | mul | |
prec(and1) | = | 4 | stat(and1) | = | mul | |
prec(or) | = | 7 | stat(or) | = | mul | |
prec(or1) | = | 0 | stat(or1) | = | lex | |
prec(forall) | = | 8 | stat(forall) | = | mul | |
prec(forall1) | = | 4 | stat(forall1) | = | mul | |
prec(cons) | = | 3 | stat(cons) | = | mul | |
prec(cons1) | = | 3 | stat(cons1) | = | lex | |
prec(forsome) | = | 9 | stat(forsome) | = | mul | |
prec(forsome1) | = | 4 | stat(forsome1) | = | mul |
π(and2) | = | [1,2] |
π(true) | = | [] |
π(false) | = | [] |
π(or2) | = | [1,2] |
π(forall2) | = | [1,2] |
π(nil) | = | [] |
π(cons2) | = | [2,1] |
π(app) | = | [1,2] |
π(forsome2) | = | [1,2] |
π(and) | = | [] |
π(and1) | = | [1] |
π(or) | = | [] |
π(or1) | = | [1] |
π(forall) | = | [] |
π(forall1) | = | [1] |
π(cons) | = | [] |
π(cons1) | = | [1] |
π(forsome) | = | [] |
π(forsome1) | = | [1] |
and2(true,true) | → | true | (23) |
and2(true,false) | → | false | (24) |
and2(false,true) | → | false | (25) |
and2(false,false) | → | false | (26) |
or2(true,true) | → | true | (27) |
or2(true,false) | → | true | (28) |
or2(false,true) | → | true | (29) |
or2(false,false) | → | false | (30) |
forall2(p,nil) | → | true | (31) |
forall2(p,cons2(x,xs)) | → | and2(app(p,x),forall2(p,xs)) | (32) |
forsome2(p,nil) | → | false | (33) |
forsome2(p,cons2(x,xs)) | → | or2(app(p,x),forsome2(p,xs)) | (34) |
app(and,y1) | → | and1(y1) | (13) |
app(and1(x0),y1) | → | and2(x0,y1) | (14) |
app(or,y1) | → | or1(y1) | (15) |
app(or1(x0),y1) | → | or2(x0,y1) | (16) |
app(forall,y1) | → | forall1(y1) | (17) |
app(forall1(x0),y1) | → | forall2(x0,y1) | (18) |
app(cons,y1) | → | cons1(y1) | (19) |
app(cons1(x0),y1) | → | cons2(x0,y1) | (20) |
app(forsome,y1) | → | forsome1(y1) | (21) |
app(forsome1(x0),y1) | → | forsome2(x0,y1) | (22) |
There are no rules in the TRS. Hence, it is terminating.