MAYBE 0.18/0.22 MAYBE 0.18/0.22 0.18/0.22 Problem: 0.18/0.22 0(#()) -> #() 0.18/0.22 +(x,#()) -> x 0.18/0.22 +(#(),x) -> x 0.18/0.22 +(0(x),0(y)) -> 0(+(x,y)) 0.18/0.22 +(0(x),1(y)) -> 1(+(x,y)) 0.18/0.22 +(1(x),0(y)) -> 1(+(x,y)) 0.18/0.22 +(1(x),1(y)) -> 0(+(+(x,y),1(#()))) 0.18/0.22 +(+(x,y),z) -> +(x,+(y,z)) 0.18/0.22 -(#(),x) -> #() 0.18/0.22 -(x,#()) -> x 0.18/0.22 -(0(x),0(y)) -> 0(-(x,y)) 0.18/0.22 -(0(x),1(y)) -> 1(-(-(x,y),1(#()))) 0.18/0.22 -(1(x),0(y)) -> 1(-(x,y)) 0.18/0.22 -(1(x),1(y)) -> 0(-(x,y)) 0.18/0.22 not(true()) -> false() 0.18/0.22 not(false()) -> true() 0.18/0.22 if(true(),x,y) -> x 0.18/0.22 if(false(),x,y) -> y 0.18/0.22 eq(#(),#()) -> true() 0.18/0.22 eq(#(),1(y)) -> false() 0.18/0.22 eq(1(x),#()) -> false() 0.18/0.22 eq(#(),0(y)) -> eq(#(),y) 0.18/0.22 eq(0(x),#()) -> eq(x,#()) 0.18/0.22 eq(1(x),1(y)) -> eq(x,y) 0.18/0.22 eq(0(x),1(y)) -> false() 0.18/0.22 eq(1(x),0(y)) -> false() 0.18/0.22 eq(0(x),0(y)) -> eq(x,y) 0.18/0.22 ge(0(x),0(y)) -> ge(x,y) 0.18/0.22 ge(0(x),1(y)) -> not(ge(y,x)) 0.18/0.22 ge(1(x),0(y)) -> ge(x,y) 0.18/0.22 ge(1(x),1(y)) -> ge(x,y) 0.18/0.22 ge(x,#()) -> true() 0.18/0.22 ge(#(),0(x)) -> ge(#(),x) 0.18/0.22 ge(#(),1(x)) -> false() 0.18/0.22 log(x) -> -(log'(x),1(#())) 0.18/0.22 log'(#()) -> #() 0.18/0.22 log'(1(x)) -> +(log'(x),1(#())) 0.18/0.22 log'(0(x)) -> if(ge(x,1(#())),+(log'(x),1(#())),#()) 0.18/0.22 *(#(),x) -> #() 0.18/0.22 *(0(x),y) -> 0(*(x,y)) 0.18/0.22 *(1(x),y) -> +(0(*(x,y)),y) 0.18/0.22 *(*(x,y),z) -> *(x,*(y,z)) 0.18/0.22 *(x,+(y,z)) -> +(*(x,y),*(x,z)) 0.18/0.22 app(nil(),l) -> l 0.18/0.22 app(cons(x,l1),l2) -> cons(x,app(l1,l2)) 0.18/0.22 sum(nil()) -> 0(#()) 0.18/0.22 sum(cons(x,l)) -> +(x,sum(l)) 0.18/0.22 sum(app(l1,l2)) -> +(sum(l1),sum(l2)) 0.18/0.22 prod(nil()) -> 1(#()) 0.18/0.22 prod(cons(x,l)) -> *(x,prod(l)) 0.18/0.22 prod(app(l1,l2)) -> *(prod(l1),prod(l2)) 0.18/0.22 mem(x,nil()) -> false() 0.18/0.22 mem(x,cons(y,l)) -> if(eq(x,y),true(),mem(x,l)) 0.18/0.22 inter(x,nil()) -> nil() 0.18/0.22 inter(nil(),x) -> nil() 0.18/0.22 inter(app(l1,l2),l3) -> app(inter(l1,l3),inter(l2,l3)) 0.18/0.22 inter(l1,app(l2,l3)) -> app(inter(l1,l2),inter(l1,l3)) 0.18/0.22 inter(cons(x,l1),l2) -> ifinter(mem(x,l2),x,l1,l2) 0.18/0.22 inter(l1,cons(x,l2)) -> ifinter(mem(x,l1),x,l2,l1) 0.18/0.22 ifinter(true(),x,l1,l2) -> cons(x,inter(l1,l2)) 0.18/0.22 ifinter(false(),x,l1,l2) -> inter(l1,l2) 0.18/0.22 0.18/0.22 Proof: 0.18/0.22 Open 0.18/0.22 EOF