YES Problem 1: (VAR v_NonEmpty:S l:S l1:S l2:S l3:S x:S y:S z:S) (RULES *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ) Problem 1: Dependency Pairs Processor: -> Pairs: *#(*(x:S,y:S),z:S) -> *#(x:S,*(y:S,z:S)) *#(*(x:S,y:S),z:S) -> *#(y:S,z:S) *#(0(x:S),y:S) -> *#(x:S,y:S) *#(0(x:S),y:S) -> 0#(*(x:S,y:S)) *#(1(x:S),y:S) -> *#(x:S,y:S) *#(1(x:S),y:S) -> +#(0(*(x:S,y:S)),y:S) *#(1(x:S),y:S) -> 0#(*(x:S,y:S)) *#(x:S,+(y:S,z:S)) -> *#(x:S,y:S) *#(x:S,+(y:S,z:S)) -> *#(x:S,z:S) *#(x:S,+(y:S,z:S)) -> +#(*(x:S,y:S),*(x:S,z:S)) +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(+(x:S,y:S),z:S) -> +#(y:S,z:S) +#(0(x:S),0(y:S)) -> +#(x:S,y:S) +#(0(x:S),0(y:S)) -> 0#(+(x:S,y:S)) +#(0(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> 0#(+(+(x:S,y:S),1(#))) -#(0(x:S),0(y:S)) -> -#(x:S,y:S) -#(0(x:S),0(y:S)) -> 0#(-(x:S,y:S)) -#(0(x:S),1(y:S)) -> -#(-(x:S,y:S),1(#)) -#(0(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),0(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> 0#(-(x:S,y:S)) APP(cons(x:S,l1:S),l2:S) -> APP(l1:S,l2:S) EQ(0(x:S),0(y:S)) -> EQ(x:S,y:S) EQ(0(x:S),#) -> EQ(x:S,#) EQ(#,0(y:S)) -> EQ(#,y:S) EQ(1(x:S),1(y:S)) -> EQ(x:S,y:S) GE(0(x:S),0(y:S)) -> GE(x:S,y:S) GE(0(x:S),1(y:S)) -> GE(y:S,x:S) GE(0(x:S),1(y:S)) -> NOT(ge(y:S,x:S)) GE(#,0(x:S)) -> GE(#,x:S) GE(1(x:S),0(y:S)) -> GE(x:S,y:S) GE(1(x:S),1(y:S)) -> GE(x:S,y:S) IFINTER(ffalse,x:S,l1:S,l2:S) -> INTER(l1:S,l2:S) IFINTER(ttrue,x:S,l1:S,l2:S) -> INTER(l1:S,l2:S) INTER(app(l1:S,l2:S),l3:S) -> APP(inter(l1:S,l3:S),inter(l2:S,l3:S)) INTER(app(l1:S,l2:S),l3:S) -> INTER(l1:S,l3:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l2:S,l3:S) INTER(cons(x:S,l1:S),l2:S) -> IFINTER(mem(x:S,l2:S),x:S,l1:S,l2:S) INTER(cons(x:S,l1:S),l2:S) -> MEM(x:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> APP(inter(l1:S,l2:S),inter(l1:S,l3:S)) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) INTER(l1:S,cons(x:S,l2:S)) -> IFINTER(mem(x:S,l1:S),x:S,l2:S,l1:S) INTER(l1:S,cons(x:S,l2:S)) -> MEM(x:S,l1:S) LOG(x:S) -> -#(log'(x:S),1(#)) LOG(x:S) -> LOG'(x:S) LOG'(0(x:S)) -> +#(log'(x:S),1(#)) LOG'(0(x:S)) -> GE(x:S,1(#)) LOG'(0(x:S)) -> IF(ge(x:S,1(#)),+(log'(x:S),1(#)),#) LOG'(0(x:S)) -> LOG'(x:S) LOG'(1(x:S)) -> +#(log'(x:S),1(#)) LOG'(1(x:S)) -> LOG'(x:S) MEM(x:S,cons(y:S,l:S)) -> EQ(x:S,y:S) MEM(x:S,cons(y:S,l:S)) -> IF(eq(x:S,y:S),ttrue,mem(x:S,l:S)) MEM(x:S,cons(y:S,l:S)) -> MEM(x:S,l:S) PROD(app(l1:S,l2:S)) -> *#(prod(l1:S),prod(l2:S)) PROD(app(l1:S,l2:S)) -> PROD(l1:S) PROD(app(l1:S,l2:S)) -> PROD(l2:S) PROD(cons(x:S,l:S)) -> *#(x:S,prod(l:S)) PROD(cons(x:S,l:S)) -> PROD(l:S) SUM(app(l1:S,l2:S)) -> +#(sum(l1:S),sum(l2:S)) SUM(app(l1:S,l2:S)) -> SUM(l1:S) SUM(app(l1:S,l2:S)) -> SUM(l2:S) SUM(cons(x:S,l:S)) -> +#(x:S,sum(l:S)) SUM(cons(x:S,l:S)) -> SUM(l:S) SUM(nil) -> 0#(#) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1: SCC Processor: -> Pairs: *#(*(x:S,y:S),z:S) -> *#(x:S,*(y:S,z:S)) *#(*(x:S,y:S),z:S) -> *#(y:S,z:S) *#(0(x:S),y:S) -> *#(x:S,y:S) *#(0(x:S),y:S) -> 0#(*(x:S,y:S)) *#(1(x:S),y:S) -> *#(x:S,y:S) *#(1(x:S),y:S) -> +#(0(*(x:S,y:S)),y:S) *#(1(x:S),y:S) -> 0#(*(x:S,y:S)) *#(x:S,+(y:S,z:S)) -> *#(x:S,y:S) *#(x:S,+(y:S,z:S)) -> *#(x:S,z:S) *#(x:S,+(y:S,z:S)) -> +#(*(x:S,y:S),*(x:S,z:S)) +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(+(x:S,y:S),z:S) -> +#(y:S,z:S) +#(0(x:S),0(y:S)) -> +#(x:S,y:S) +#(0(x:S),0(y:S)) -> 0#(+(x:S,y:S)) +#(0(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> 0#(+(+(x:S,y:S),1(#))) -#(0(x:S),0(y:S)) -> -#(x:S,y:S) -#(0(x:S),0(y:S)) -> 0#(-(x:S,y:S)) -#(0(x:S),1(y:S)) -> -#(-(x:S,y:S),1(#)) -#(0(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),0(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> 0#(-(x:S,y:S)) APP(cons(x:S,l1:S),l2:S) -> APP(l1:S,l2:S) EQ(0(x:S),0(y:S)) -> EQ(x:S,y:S) EQ(0(x:S),#) -> EQ(x:S,#) EQ(#,0(y:S)) -> EQ(#,y:S) EQ(1(x:S),1(y:S)) -> EQ(x:S,y:S) GE(0(x:S),0(y:S)) -> GE(x:S,y:S) GE(0(x:S),1(y:S)) -> GE(y:S,x:S) GE(0(x:S),1(y:S)) -> NOT(ge(y:S,x:S)) GE(#,0(x:S)) -> GE(#,x:S) GE(1(x:S),0(y:S)) -> GE(x:S,y:S) GE(1(x:S),1(y:S)) -> GE(x:S,y:S) IFINTER(ffalse,x:S,l1:S,l2:S) -> INTER(l1:S,l2:S) IFINTER(ttrue,x:S,l1:S,l2:S) -> INTER(l1:S,l2:S) INTER(app(l1:S,l2:S),l3:S) -> APP(inter(l1:S,l3:S),inter(l2:S,l3:S)) INTER(app(l1:S,l2:S),l3:S) -> INTER(l1:S,l3:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l2:S,l3:S) INTER(cons(x:S,l1:S),l2:S) -> IFINTER(mem(x:S,l2:S),x:S,l1:S,l2:S) INTER(cons(x:S,l1:S),l2:S) -> MEM(x:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> APP(inter(l1:S,l2:S),inter(l1:S,l3:S)) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) INTER(l1:S,cons(x:S,l2:S)) -> IFINTER(mem(x:S,l1:S),x:S,l2:S,l1:S) INTER(l1:S,cons(x:S,l2:S)) -> MEM(x:S,l1:S) LOG(x:S) -> -#(log'(x:S),1(#)) LOG(x:S) -> LOG'(x:S) LOG'(0(x:S)) -> +#(log'(x:S),1(#)) LOG'(0(x:S)) -> GE(x:S,1(#)) LOG'(0(x:S)) -> IF(ge(x:S,1(#)),+(log'(x:S),1(#)),#) LOG'(0(x:S)) -> LOG'(x:S) LOG'(1(x:S)) -> +#(log'(x:S),1(#)) LOG'(1(x:S)) -> LOG'(x:S) MEM(x:S,cons(y:S,l:S)) -> EQ(x:S,y:S) MEM(x:S,cons(y:S,l:S)) -> IF(eq(x:S,y:S),ttrue,mem(x:S,l:S)) MEM(x:S,cons(y:S,l:S)) -> MEM(x:S,l:S) PROD(app(l1:S,l2:S)) -> *#(prod(l1:S),prod(l2:S)) PROD(app(l1:S,l2:S)) -> PROD(l1:S) PROD(app(l1:S,l2:S)) -> PROD(l2:S) PROD(cons(x:S,l:S)) -> *#(x:S,prod(l:S)) PROD(cons(x:S,l:S)) -> PROD(l:S) SUM(app(l1:S,l2:S)) -> +#(sum(l1:S),sum(l2:S)) SUM(app(l1:S,l2:S)) -> SUM(l1:S) SUM(app(l1:S,l2:S)) -> SUM(l2:S) SUM(cons(x:S,l:S)) -> +#(x:S,sum(l:S)) SUM(cons(x:S,l:S)) -> SUM(l:S) SUM(nil) -> 0#(#) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: GE(#,0(x:S)) -> GE(#,x:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: GE(0(x:S),0(y:S)) -> GE(x:S,y:S) GE(0(x:S),1(y:S)) -> GE(y:S,x:S) GE(1(x:S),0(y:S)) -> GE(x:S,y:S) GE(1(x:S),1(y:S)) -> GE(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: EQ(#,0(y:S)) -> EQ(#,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: EQ(0(x:S),#) -> EQ(x:S,#) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: EQ(0(x:S),0(y:S)) -> EQ(x:S,y:S) EQ(1(x:S),1(y:S)) -> EQ(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: MEM(x:S,cons(y:S,l:S)) -> MEM(x:S,l:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: APP(cons(x:S,l1:S),l2:S) -> APP(l1:S,l2:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: IFINTER(ffalse,x:S,l1:S,l2:S) -> INTER(l1:S,l2:S) IFINTER(ttrue,x:S,l1:S,l2:S) -> INTER(l1:S,l2:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l1:S,l3:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l2:S,l3:S) INTER(cons(x:S,l1:S),l2:S) -> IFINTER(mem(x:S,l2:S),x:S,l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) INTER(l1:S,cons(x:S,l2:S)) -> IFINTER(mem(x:S,l1:S),x:S,l2:S,l1:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: -#(0(x:S),0(y:S)) -> -#(x:S,y:S) -#(0(x:S),1(y:S)) -> -#(-(x:S,y:S),1(#)) -#(0(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),0(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> -#(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(+(x:S,y:S),z:S) -> +#(y:S,z:S) +#(0(x:S),0(y:S)) -> +#(x:S,y:S) +#(0(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: LOG'(0(x:S)) -> LOG'(x:S) LOG'(1(x:S)) -> LOG'(x:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: SUM(app(l1:S,l2:S)) -> SUM(l1:S) SUM(app(l1:S,l2:S)) -> SUM(l2:S) SUM(cons(x:S,l:S)) -> SUM(l:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: *#(*(x:S,y:S),z:S) -> *#(x:S,*(y:S,z:S)) *#(*(x:S,y:S),z:S) -> *#(y:S,z:S) *#(0(x:S),y:S) -> *#(x:S,y:S) *#(1(x:S),y:S) -> *#(x:S,y:S) *#(x:S,+(y:S,z:S)) -> *#(x:S,y:S) *#(x:S,+(y:S,z:S)) -> *#(x:S,z:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->->Cycle: ->->-> Pairs: PROD(app(l1:S,l2:S)) -> PROD(l1:S) PROD(app(l1:S,l2:S)) -> PROD(l2:S) PROD(cons(x:S,l:S)) -> PROD(l:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) The problem is decomposed in 14 subproblems. Problem 1.1: Subterm Processor: -> Pairs: GE(#,0(x:S)) -> GE(#,x:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(GE) = 2 Problem 1.1: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.2: Reduction Pair Processor: -> Pairs: GE(0(x:S),0(y:S)) -> GE(x:S,y:S) GE(0(x:S),1(y:S)) -> GE(y:S,x:S) GE(1(x:S),0(y:S)) -> GE(x:S,y:S) GE(1(x:S),1(y:S)) -> GE(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) -> Usable rules: Empty ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [0](X) = 2.X + 2 [1](X) = X [GE](X1,X2) = X1 + 2.X2 Problem 1.2: SCC Processor: -> Pairs: GE(0(x:S),1(y:S)) -> GE(y:S,x:S) GE(1(x:S),0(y:S)) -> GE(x:S,y:S) GE(1(x:S),1(y:S)) -> GE(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: GE(0(x:S),1(y:S)) -> GE(y:S,x:S) GE(1(x:S),0(y:S)) -> GE(x:S,y:S) GE(1(x:S),1(y:S)) -> GE(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.2: Reduction Pair Processor: -> Pairs: GE(0(x:S),1(y:S)) -> GE(y:S,x:S) GE(1(x:S),0(y:S)) -> GE(x:S,y:S) GE(1(x:S),1(y:S)) -> GE(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) -> Usable rules: Empty ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [0](X) = 2.X + 2 [1](X) = 2.X [GE](X1,X2) = 2.X1 + 2.X2 Problem 1.2: SCC Processor: -> Pairs: GE(1(x:S),0(y:S)) -> GE(x:S,y:S) GE(1(x:S),1(y:S)) -> GE(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: GE(1(x:S),0(y:S)) -> GE(x:S,y:S) GE(1(x:S),1(y:S)) -> GE(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.2: Subterm Processor: -> Pairs: GE(1(x:S),0(y:S)) -> GE(x:S,y:S) GE(1(x:S),1(y:S)) -> GE(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(GE) = 1 Problem 1.2: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.3: Subterm Processor: -> Pairs: EQ(#,0(y:S)) -> EQ(#,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(EQ) = 2 Problem 1.3: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.4: Subterm Processor: -> Pairs: EQ(0(x:S),#) -> EQ(x:S,#) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(EQ) = 1 Problem 1.4: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.5: Subterm Processor: -> Pairs: EQ(0(x:S),0(y:S)) -> EQ(x:S,y:S) EQ(1(x:S),1(y:S)) -> EQ(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(EQ) = 1 Problem 1.5: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.6: Subterm Processor: -> Pairs: MEM(x:S,cons(y:S,l:S)) -> MEM(x:S,l:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(MEM) = 2 Problem 1.6: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.7: Subterm Processor: -> Pairs: APP(cons(x:S,l1:S),l2:S) -> APP(l1:S,l2:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(APP) = 1 Problem 1.7: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.8: Reduction Pair Processor: -> Pairs: IFINTER(ffalse,x:S,l1:S,l2:S) -> INTER(l1:S,l2:S) IFINTER(ttrue,x:S,l1:S,l2:S) -> INTER(l1:S,l2:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l1:S,l3:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l2:S,l3:S) INTER(cons(x:S,l1:S),l2:S) -> IFINTER(mem(x:S,l2:S),x:S,l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) INTER(l1:S,cons(x:S,l2:S)) -> IFINTER(mem(x:S,l1:S),x:S,l2:S,l1:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) -> Usable rules: eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [0](X) = 2.X + 2 [app](X1,X2) = 2.X1 + 2.X2 [eq](X1,X2) = 2 [if](X1,X2,X3) = 2.X2 + 2.X3 [mem](X1,X2) = 2.X2 [#] = 0 [1](X) = 1 [cons](X1,X2) = 2.X2 + 2 [false] = 0 [nil] = 0 [true] = 2 [IFINTER](X1,X2,X3,X4) = 2.X3 + 2.X4 + 2 [INTER](X1,X2) = 2.X1 + 2.X2 + 1 Problem 1.8: SCC Processor: -> Pairs: IFINTER(ttrue,x:S,l1:S,l2:S) -> INTER(l1:S,l2:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l1:S,l3:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l2:S,l3:S) INTER(cons(x:S,l1:S),l2:S) -> IFINTER(mem(x:S,l2:S),x:S,l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) INTER(l1:S,cons(x:S,l2:S)) -> IFINTER(mem(x:S,l1:S),x:S,l2:S,l1:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: IFINTER(ttrue,x:S,l1:S,l2:S) -> INTER(l1:S,l2:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l1:S,l3:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l2:S,l3:S) INTER(cons(x:S,l1:S),l2:S) -> IFINTER(mem(x:S,l2:S),x:S,l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) INTER(l1:S,cons(x:S,l2:S)) -> IFINTER(mem(x:S,l1:S),x:S,l2:S,l1:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.8: Reduction Pair Processor: -> Pairs: IFINTER(ttrue,x:S,l1:S,l2:S) -> INTER(l1:S,l2:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l1:S,l3:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l2:S,l3:S) INTER(cons(x:S,l1:S),l2:S) -> IFINTER(mem(x:S,l2:S),x:S,l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) INTER(l1:S,cons(x:S,l2:S)) -> IFINTER(mem(x:S,l1:S),x:S,l2:S,l1:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) -> Usable rules: eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [0](X) = 2.X + 2 [app](X1,X2) = X1 + 2.X2 [eq](X1,X2) = 2.X2 [if](X1,X2,X3) = X1 + 2.X2 + 2.X3 + 2 [mem](X1,X2) = 2.X2 [#] = 2 [1](X) = 2.X + 2 [cons](X1,X2) = 2.X1 + 2.X2 + 2 [false] = 0 [nil] = 2 [true] = 1 [IFINTER](X1,X2,X3,X4) = 2.X3 + 2.X4 + 2 [INTER](X1,X2) = 2.X1 + 2.X2 + 1 Problem 1.8: SCC Processor: -> Pairs: INTER(app(l1:S,l2:S),l3:S) -> INTER(l1:S,l3:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l2:S,l3:S) INTER(cons(x:S,l1:S),l2:S) -> IFINTER(mem(x:S,l2:S),x:S,l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) INTER(l1:S,cons(x:S,l2:S)) -> IFINTER(mem(x:S,l1:S),x:S,l2:S,l1:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: INTER(app(l1:S,l2:S),l3:S) -> INTER(l1:S,l3:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l2:S,l3:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.8: Subterm Processor: -> Pairs: INTER(app(l1:S,l2:S),l3:S) -> INTER(l1:S,l3:S) INTER(app(l1:S,l2:S),l3:S) -> INTER(l2:S,l3:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(INTER) = 1 Problem 1.8: SCC Processor: -> Pairs: INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.8: Subterm Processor: -> Pairs: INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l2:S) INTER(l1:S,app(l2:S,l3:S)) -> INTER(l1:S,l3:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(INTER) = 2 Problem 1.8: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.9: Reduction Pair Processor: -> Pairs: -#(0(x:S),0(y:S)) -> -#(x:S,y:S) -#(0(x:S),1(y:S)) -> -#(-(x:S,y:S),1(#)) -#(0(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),0(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> -#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) -> Usable rules: -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [-](X1,X2) = X1 [0](X) = 2.X + 2 [#] = 1 [1](X) = 2.X + 2 [-#](X1,X2) = 2.X1 + 2.X2 Problem 1.9: SCC Processor: -> Pairs: -#(0(x:S),1(y:S)) -> -#(-(x:S,y:S),1(#)) -#(0(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),0(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> -#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: -#(0(x:S),1(y:S)) -> -#(-(x:S,y:S),1(#)) -#(0(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),0(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> -#(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.9: Reduction Pair Processor: -> Pairs: -#(0(x:S),1(y:S)) -> -#(-(x:S,y:S),1(#)) -#(0(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),0(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> -#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) -> Usable rules: -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [-](X1,X2) = X1 + X2 + 1 [0](X) = X + 2 [#] = 0 [1](X) = X + 1 [-#](X1,X2) = 2.X1 + 2.X2 Problem 1.9: SCC Processor: -> Pairs: -#(0(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),0(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> -#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: -#(0(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),0(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> -#(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.9: Subterm Processor: -> Pairs: -#(0(x:S),1(y:S)) -> -#(x:S,y:S) -#(1(x:S),0(y:S)) -> -#(x:S,y:S) -#(1(x:S),1(y:S)) -> -#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(-#) = 1 Problem 1.9: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.10: Reduction Pair Processor: -> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(+(x:S,y:S),z:S) -> +#(y:S,z:S) +#(0(x:S),0(y:S)) -> +#(x:S,y:S) +#(0(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) -> Usable rules: +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S 0(#) -> # ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [+](X1,X2) = X1 + X2 + 1 [0](X) = X [#] = 0 [1](X) = X + 1 [+#](X1,X2) = 2.X1 + 2.X2 Problem 1.10: SCC Processor: -> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(0(x:S),0(y:S)) -> +#(x:S,y:S) +#(0(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(0(x:S),0(y:S)) -> +#(x:S,y:S) +#(0(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.10: Reduction Pair Processor: -> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(0(x:S),0(y:S)) -> +#(x:S,y:S) +#(0(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) -> Usable rules: +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S 0(#) -> # ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [+](X1,X2) = X1 + X2 + 1 [0](X) = X + 1 [#] = 0 [1](X) = X + 2 [+#](X1,X2) = 2.X1 + 2.X2 Problem 1.10: SCC Processor: -> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(0(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(0(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.10: Reduction Pair Processor: -> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(0(x:S),1(y:S)) -> +#(x:S,y:S) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) -> Usable rules: +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S 0(#) -> # ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [+](X1,X2) = X1 + X2 + 2 [0](X) = X [#] = 0 [1](X) = X + 2 [+#](X1,X2) = 2.X1 + 2.X2 Problem 1.10: SCC Processor: -> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.10: Reduction Pair Processor: -> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(1(x:S),0(y:S)) -> +#(x:S,y:S) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) -> Usable rules: +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S 0(#) -> # ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [+](X1,X2) = X1 + X2 + 2 [0](X) = X [#] = 0 [1](X) = X + 2 [+#](X1,X2) = 2.X1 + 2.X2 Problem 1.10: SCC Processor: -> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.10: Reduction Pair Processor: -> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(1(x:S),1(y:S)) -> +#(+(x:S,y:S),1(#)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) -> Usable rules: +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S 0(#) -> # ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [+](X1,X2) = X1 + X2 [0](X) = X + 1 [#] = 1 [1](X) = X + 2 [+#](X1,X2) = X1 + X2 Problem 1.10: SCC Processor: -> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.10: Subterm Processor: -> Pairs: +#(+(x:S,y:S),z:S) -> +#(x:S,+(y:S,z:S)) +#(1(x:S),1(y:S)) -> +#(x:S,y:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(+#) = 1 Problem 1.10: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.11: Subterm Processor: -> Pairs: LOG'(0(x:S)) -> LOG'(x:S) LOG'(1(x:S)) -> LOG'(x:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(LOG') = 1 Problem 1.11: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.12: Subterm Processor: -> Pairs: SUM(app(l1:S,l2:S)) -> SUM(l1:S) SUM(app(l1:S,l2:S)) -> SUM(l2:S) SUM(cons(x:S,l:S)) -> SUM(l:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(SUM) = 1 Problem 1.12: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.13: Subterm Processor: -> Pairs: *#(*(x:S,y:S),z:S) -> *#(x:S,*(y:S,z:S)) *#(*(x:S,y:S),z:S) -> *#(y:S,z:S) *#(0(x:S),y:S) -> *#(x:S,y:S) *#(1(x:S),y:S) -> *#(x:S,y:S) *#(x:S,+(y:S,z:S)) -> *#(x:S,y:S) *#(x:S,+(y:S,z:S)) -> *#(x:S,z:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(*#) = 1 Problem 1.13: SCC Processor: -> Pairs: *#(x:S,+(y:S,z:S)) -> *#(x:S,y:S) *#(x:S,+(y:S,z:S)) -> *#(x:S,z:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: *#(x:S,+(y:S,z:S)) -> *#(x:S,y:S) *#(x:S,+(y:S,z:S)) -> *#(x:S,z:S) ->->-> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) Problem 1.13: Subterm Processor: -> Pairs: *#(x:S,+(y:S,z:S)) -> *#(x:S,y:S) *#(x:S,+(y:S,z:S)) -> *#(x:S,z:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(*#) = 2 Problem 1.13: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.14: Subterm Processor: -> Pairs: PROD(app(l1:S,l2:S)) -> PROD(l1:S) PROD(app(l1:S,l2:S)) -> PROD(l2:S) PROD(cons(x:S,l:S)) -> PROD(l:S) -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Projection: pi(PROD) = 1 Problem 1.14: SCC Processor: -> Pairs: Empty -> Rules: *(*(x:S,y:S),z:S) -> *(x:S,*(y:S,z:S)) *(0(x:S),y:S) -> 0(*(x:S,y:S)) *(#,x:S) -> # *(1(x:S),y:S) -> +(0(*(x:S,y:S)),y:S) *(x:S,+(y:S,z:S)) -> +(*(x:S,y:S),*(x:S,z:S)) +(+(x:S,y:S),z:S) -> +(x:S,+(y:S,z:S)) +(0(x:S),0(y:S)) -> 0(+(x:S,y:S)) +(0(x:S),1(y:S)) -> 1(+(x:S,y:S)) +(#,x:S) -> x:S +(1(x:S),0(y:S)) -> 1(+(x:S,y:S)) +(1(x:S),1(y:S)) -> 0(+(+(x:S,y:S),1(#))) +(x:S,#) -> x:S -(0(x:S),0(y:S)) -> 0(-(x:S,y:S)) -(0(x:S),1(y:S)) -> 1(-(-(x:S,y:S),1(#))) -(#,x:S) -> # -(1(x:S),0(y:S)) -> 1(-(x:S,y:S)) -(1(x:S),1(y:S)) -> 0(-(x:S,y:S)) -(x:S,#) -> x:S 0(#) -> # app(cons(x:S,l1:S),l2:S) -> cons(x:S,app(l1:S,l2:S)) app(nil,l:S) -> l:S eq(0(x:S),0(y:S)) -> eq(x:S,y:S) eq(0(x:S),#) -> eq(x:S,#) eq(0(x:S),1(y:S)) -> ffalse eq(#,0(y:S)) -> eq(#,y:S) eq(#,#) -> ttrue eq(#,1(y:S)) -> ffalse eq(1(x:S),0(y:S)) -> ffalse eq(1(x:S),#) -> ffalse eq(1(x:S),1(y:S)) -> eq(x:S,y:S) ge(0(x:S),0(y:S)) -> ge(x:S,y:S) ge(0(x:S),1(y:S)) -> not(ge(y:S,x:S)) ge(#,0(x:S)) -> ge(#,x:S) ge(#,1(x:S)) -> ffalse ge(1(x:S),0(y:S)) -> ge(x:S,y:S) ge(1(x:S),1(y:S)) -> ge(x:S,y:S) ge(x:S,#) -> ttrue if(ffalse,x:S,y:S) -> y:S if(ttrue,x:S,y:S) -> x:S ifinter(ffalse,x:S,l1:S,l2:S) -> inter(l1:S,l2:S) ifinter(ttrue,x:S,l1:S,l2:S) -> cons(x:S,inter(l1:S,l2:S)) inter(app(l1:S,l2:S),l3:S) -> app(inter(l1:S,l3:S),inter(l2:S,l3:S)) inter(cons(x:S,l1:S),l2:S) -> ifinter(mem(x:S,l2:S),x:S,l1:S,l2:S) inter(nil,x:S) -> nil inter(l1:S,app(l2:S,l3:S)) -> app(inter(l1:S,l2:S),inter(l1:S,l3:S)) inter(l1:S,cons(x:S,l2:S)) -> ifinter(mem(x:S,l1:S),x:S,l2:S,l1:S) inter(x:S,nil) -> nil log(x:S) -> -(log'(x:S),1(#)) log'(0(x:S)) -> if(ge(x:S,1(#)),+(log'(x:S),1(#)),#) log'(#) -> # log'(1(x:S)) -> +(log'(x:S),1(#)) mem(x:S,cons(y:S,l:S)) -> if(eq(x:S,y:S),ttrue,mem(x:S,l:S)) mem(x:S,nil) -> ffalse not(ffalse) -> ttrue not(ttrue) -> ffalse prod(app(l1:S,l2:S)) -> *(prod(l1:S),prod(l2:S)) prod(cons(x:S,l:S)) -> *(x:S,prod(l:S)) prod(nil) -> 1(#) sum(app(l1:S,l2:S)) -> +(sum(l1:S),sum(l2:S)) sum(cons(x:S,l:S)) -> +(x:S,sum(l:S)) sum(nil) -> 0(#) ->Strongly Connected Components: There is no strongly connected component The problem is finite.