MAYBE Problem: p(0()) -> 0() p(s(x)) -> x plus(x,0()) -> x plus(0(),y) -> y plus(s(x),y) -> s(plus(x,y)) plus(s(x),y) -> s(plus(p(s(x)),y)) plus(x,s(y)) -> s(plus(x,p(s(y)))) times(0(),y) -> 0() times(s(0()),y) -> y times(s(x),y) -> plus(y,times(x,y)) div(0(),y) -> 0() div(x,y) -> quot(x,y,y) quot(zero(y),s(y),z) -> 0() quot(s(x),s(y),z) -> quot(x,y,z) quot(x,0(),s(z)) -> s(div(x,s(z))) div(div(x,y),z) -> div(x,times(zero(y),z)) eq(0(),0()) -> true() eq(s(x),0()) -> false() eq(0(),s(y)) -> false() eq(s(x),s(y)) -> eq(x,y) divides(y,x) -> eq(x,times(div(x,y),y)) prime(s(s(x))) -> pr(s(s(x)),s(x)) pr(x,s(0())) -> true() pr(x,s(s(y))) -> if(divides(s(s(y)),x),x,s(y)) if(true(),x,y) -> false() if(false(),x,y) -> pr(x,y) zero(div(x,x)) -> x zero(divides(x,x)) -> x zero(times(x,x)) -> x zero(quot(x,x,x)) -> x zero(s(x)) -> if(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) Proof: DP Processor: DPs: plus#(s(x),y) -> plus#(x,y) plus#(s(x),y) -> p#(s(x)) plus#(s(x),y) -> plus#(p(s(x)),y) plus#(x,s(y)) -> p#(s(y)) plus#(x,s(y)) -> plus#(x,p(s(y))) times#(s(x),y) -> times#(x,y) times#(s(x),y) -> plus#(y,times(x,y)) div#(x,y) -> quot#(x,y,y) quot#(s(x),s(y),z) -> quot#(x,y,z) quot#(x,0(),s(z)) -> div#(x,s(z)) div#(div(x,y),z) -> zero#(y) div#(div(x,y),z) -> times#(zero(y),z) div#(div(x,y),z) -> div#(x,times(zero(y),z)) eq#(s(x),s(y)) -> eq#(x,y) divides#(y,x) -> div#(x,y) divides#(y,x) -> times#(div(x,y),y) divides#(y,x) -> eq#(x,times(div(x,y),y)) prime#(s(s(x))) -> pr#(s(s(x)),s(x)) pr#(x,s(s(y))) -> divides#(s(s(y)),x) pr#(x,s(s(y))) -> if#(divides(s(s(y)),x),x,s(y)) if#(false(),x,y) -> pr#(x,y) zero#(s(x)) -> plus#(0(),zero(0())) zero#(s(x)) -> zero#(0()) zero#(s(x)) -> plus#(zero(0()),0()) zero#(s(x)) -> eq#(x,s(0())) zero#(s(x)) -> if#(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) TRS: p(0()) -> 0() p(s(x)) -> x plus(x,0()) -> x plus(0(),y) -> y plus(s(x),y) -> s(plus(x,y)) plus(s(x),y) -> s(plus(p(s(x)),y)) plus(x,s(y)) -> s(plus(x,p(s(y)))) times(0(),y) -> 0() times(s(0()),y) -> y times(s(x),y) -> plus(y,times(x,y)) div(0(),y) -> 0() div(x,y) -> quot(x,y,y) quot(zero(y),s(y),z) -> 0() quot(s(x),s(y),z) -> quot(x,y,z) quot(x,0(),s(z)) -> s(div(x,s(z))) div(div(x,y),z) -> div(x,times(zero(y),z)) eq(0(),0()) -> true() eq(s(x),0()) -> false() eq(0(),s(y)) -> false() eq(s(x),s(y)) -> eq(x,y) divides(y,x) -> eq(x,times(div(x,y),y)) prime(s(s(x))) -> pr(s(s(x)),s(x)) pr(x,s(0())) -> true() pr(x,s(s(y))) -> if(divides(s(s(y)),x),x,s(y)) if(true(),x,y) -> false() if(false(),x,y) -> pr(x,y) zero(div(x,x)) -> x zero(divides(x,x)) -> x zero(times(x,x)) -> x zero(quot(x,x,x)) -> x zero(s(x)) -> if(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) TDG Processor: DPs: plus#(s(x),y) -> plus#(x,y) plus#(s(x),y) -> p#(s(x)) plus#(s(x),y) -> plus#(p(s(x)),y) plus#(x,s(y)) -> p#(s(y)) plus#(x,s(y)) -> plus#(x,p(s(y))) times#(s(x),y) -> times#(x,y) times#(s(x),y) -> plus#(y,times(x,y)) div#(x,y) -> quot#(x,y,y) quot#(s(x),s(y),z) -> quot#(x,y,z) quot#(x,0(),s(z)) -> div#(x,s(z)) div#(div(x,y),z) -> zero#(y) div#(div(x,y),z) -> times#(zero(y),z) div#(div(x,y),z) -> div#(x,times(zero(y),z)) eq#(s(x),s(y)) -> eq#(x,y) divides#(y,x) -> div#(x,y) divides#(y,x) -> times#(div(x,y),y) divides#(y,x) -> eq#(x,times(div(x,y),y)) prime#(s(s(x))) -> pr#(s(s(x)),s(x)) pr#(x,s(s(y))) -> divides#(s(s(y)),x) pr#(x,s(s(y))) -> if#(divides(s(s(y)),x),x,s(y)) if#(false(),x,y) -> pr#(x,y) zero#(s(x)) -> plus#(0(),zero(0())) zero#(s(x)) -> zero#(0()) zero#(s(x)) -> plus#(zero(0()),0()) zero#(s(x)) -> eq#(x,s(0())) zero#(s(x)) -> if#(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) TRS: p(0()) -> 0() p(s(x)) -> x plus(x,0()) -> x plus(0(),y) -> y plus(s(x),y) -> s(plus(x,y)) plus(s(x),y) -> s(plus(p(s(x)),y)) plus(x,s(y)) -> s(plus(x,p(s(y)))) times(0(),y) -> 0() times(s(0()),y) -> y times(s(x),y) -> plus(y,times(x,y)) div(0(),y) -> 0() div(x,y) -> quot(x,y,y) quot(zero(y),s(y),z) -> 0() quot(s(x),s(y),z) -> quot(x,y,z) quot(x,0(),s(z)) -> s(div(x,s(z))) div(div(x,y),z) -> div(x,times(zero(y),z)) eq(0(),0()) -> true() eq(s(x),0()) -> false() eq(0(),s(y)) -> false() eq(s(x),s(y)) -> eq(x,y) divides(y,x) -> eq(x,times(div(x,y),y)) prime(s(s(x))) -> pr(s(s(x)),s(x)) pr(x,s(0())) -> true() pr(x,s(s(y))) -> if(divides(s(s(y)),x),x,s(y)) if(true(),x,y) -> false() if(false(),x,y) -> pr(x,y) zero(div(x,x)) -> x zero(divides(x,x)) -> x zero(times(x,x)) -> x zero(quot(x,x,x)) -> x zero(s(x)) -> if(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) graph: if#(false(),x,y) -> pr#(x,y) -> pr#(x,s(s(y))) -> if#(divides(s(s(y)),x),x,s(y)) if#(false(),x,y) -> pr#(x,y) -> pr#(x,s(s(y))) -> divides#(s(s(y)),x) pr#(x,s(s(y))) -> if#(divides(s(s(y)),x),x,s(y)) -> if#(false(),x,y) -> pr#(x,y) pr#(x,s(s(y))) -> divides#(s(s(y)),x) -> divides#(y,x) -> eq#(x,times(div(x,y),y)) pr#(x,s(s(y))) -> divides#(s(s(y)),x) -> divides#(y,x) -> times#(div(x,y),y) pr#(x,s(s(y))) -> divides#(s(s(y)),x) -> divides#(y,x) -> div#(x,y) prime#(s(s(x))) -> pr#(s(s(x)),s(x)) -> pr#(x,s(s(y))) -> if#(divides(s(s(y)),x),x,s(y)) prime#(s(s(x))) -> pr#(s(s(x)),s(x)) -> pr#(x,s(s(y))) -> divides#(s(s(y)),x) divides#(y,x) -> eq#(x,times(div(x,y),y)) -> eq#(s(x),s(y)) -> eq#(x,y) divides#(y,x) -> div#(x,y) -> div#(div(x,y),z) -> div#(x,times(zero(y),z)) divides#(y,x) -> div#(x,y) -> div#(div(x,y),z) -> times#(zero(y),z) divides#(y,x) -> div#(x,y) -> div#(div(x,y),z) -> zero#(y) divides#(y,x) -> div#(x,y) -> div#(x,y) -> quot#(x,y,y) divides#(y,x) -> times#(div(x,y),y) -> times#(s(x),y) -> plus#(y,times(x,y)) divides#(y,x) -> times#(div(x,y),y) -> times#(s(x),y) -> times#(x,y) eq#(s(x),s(y)) -> eq#(x,y) -> eq#(s(x),s(y)) -> eq#(x,y) zero#(s(x)) -> if#(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) -> if#(false(),x,y) -> pr#(x,y) zero#(s(x)) -> eq#(x,s(0())) -> eq#(s(x),s(y)) -> eq#(x,y) zero#(s(x)) -> zero#(0()) -> zero#(s(x)) -> if#(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) zero#(s(x)) -> zero#(0()) -> zero#(s(x)) -> eq#(x,s(0())) zero#(s(x)) -> zero#(0()) -> zero#(s(x)) -> plus#(zero(0()),0()) zero#(s(x)) -> zero#(0()) -> zero#(s(x)) -> zero#(0()) zero#(s(x)) -> zero#(0()) -> zero#(s(x)) -> plus#(0(),zero(0())) zero#(s(x)) -> plus#(zero(0()),0()) -> plus#(x,s(y)) -> plus#(x,p(s(y))) zero#(s(x)) -> plus#(zero(0()),0()) -> plus#(x,s(y)) -> p#(s(y)) zero#(s(x)) -> plus#(zero(0()),0()) -> plus#(s(x),y) -> plus#(p(s(x)),y) zero#(s(x)) -> plus#(zero(0()),0()) -> plus#(s(x),y) -> p#(s(x)) zero#(s(x)) -> plus#(zero(0()),0()) -> plus#(s(x),y) -> plus#(x,y) zero#(s(x)) -> plus#(0(),zero(0())) -> plus#(x,s(y)) -> plus#(x,p(s(y))) zero#(s(x)) -> plus#(0(),zero(0())) -> plus#(x,s(y)) -> p#(s(y)) zero#(s(x)) -> plus#(0(),zero(0())) -> plus#(s(x),y) -> plus#(p(s(x)),y) zero#(s(x)) -> plus#(0(),zero(0())) -> plus#(s(x),y) -> p#(s(x)) zero#(s(x)) -> plus#(0(),zero(0())) -> plus#(s(x),y) -> plus#(x,y) quot#(s(x),s(y),z) -> quot#(x,y,z) -> quot#(x,0(),s(z)) -> div#(x,s(z)) quot#(s(x),s(y),z) -> quot#(x,y,z) -> quot#(s(x),s(y),z) -> quot#(x,y,z) quot#(x,0(),s(z)) -> div#(x,s(z)) -> div#(div(x,y),z) -> div#(x,times(zero(y),z)) quot#(x,0(),s(z)) -> div#(x,s(z)) -> div#(div(x,y),z) -> times#(zero(y),z) quot#(x,0(),s(z)) -> div#(x,s(z)) -> div#(div(x,y),z) -> zero#(y) quot#(x,0(),s(z)) -> div#(x,s(z)) -> div#(x,y) -> quot#(x,y,y) div#(div(x,y),z) -> zero#(y) -> zero#(s(x)) -> if#(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) div#(div(x,y),z) -> zero#(y) -> zero#(s(x)) -> eq#(x,s(0())) div#(div(x,y),z) -> zero#(y) -> zero#(s(x)) -> plus#(zero(0()),0()) div#(div(x,y),z) -> zero#(y) -> zero#(s(x)) -> zero#(0()) div#(div(x,y),z) -> zero#(y) -> zero#(s(x)) -> plus#(0(),zero(0())) div#(div(x,y),z) -> div#(x,times(zero(y),z)) -> div#(div(x,y),z) -> div#(x,times(zero(y),z)) div#(div(x,y),z) -> div#(x,times(zero(y),z)) -> div#(div(x,y),z) -> times#(zero(y),z) div#(div(x,y),z) -> div#(x,times(zero(y),z)) -> div#(div(x,y),z) -> zero#(y) div#(div(x,y),z) -> div#(x,times(zero(y),z)) -> div#(x,y) -> quot#(x,y,y) div#(div(x,y),z) -> times#(zero(y),z) -> times#(s(x),y) -> plus#(y,times(x,y)) div#(div(x,y),z) -> times#(zero(y),z) -> times#(s(x),y) -> times#(x,y) div#(x,y) -> quot#(x,y,y) -> quot#(x,0(),s(z)) -> div#(x,s(z)) div#(x,y) -> quot#(x,y,y) -> quot#(s(x),s(y),z) -> quot#(x,y,z) times#(s(x),y) -> times#(x,y) -> times#(s(x),y) -> plus#(y,times(x,y)) times#(s(x),y) -> times#(x,y) -> times#(s(x),y) -> times#(x,y) times#(s(x),y) -> plus#(y,times(x,y)) -> plus#(x,s(y)) -> plus#(x,p(s(y))) times#(s(x),y) -> plus#(y,times(x,y)) -> plus#(x,s(y)) -> p#(s(y)) times#(s(x),y) -> plus#(y,times(x,y)) -> plus#(s(x),y) -> plus#(p(s(x)),y) times#(s(x),y) -> plus#(y,times(x,y)) -> plus#(s(x),y) -> p#(s(x)) times#(s(x),y) -> plus#(y,times(x,y)) -> plus#(s(x),y) -> plus#(x,y) plus#(s(x),y) -> plus#(p(s(x)),y) -> plus#(x,s(y)) -> plus#(x,p(s(y))) plus#(s(x),y) -> plus#(p(s(x)),y) -> plus#(x,s(y)) -> p#(s(y)) plus#(s(x),y) -> plus#(p(s(x)),y) -> plus#(s(x),y) -> plus#(p(s(x)),y) plus#(s(x),y) -> plus#(p(s(x)),y) -> plus#(s(x),y) -> p#(s(x)) plus#(s(x),y) -> plus#(p(s(x)),y) -> plus#(s(x),y) -> plus#(x,y) plus#(s(x),y) -> plus#(x,y) -> plus#(x,s(y)) -> plus#(x,p(s(y))) plus#(s(x),y) -> plus#(x,y) -> plus#(x,s(y)) -> p#(s(y)) plus#(s(x),y) -> plus#(x,y) -> plus#(s(x),y) -> plus#(p(s(x)),y) plus#(s(x),y) -> plus#(x,y) -> plus#(s(x),y) -> p#(s(x)) plus#(s(x),y) -> plus#(x,y) -> plus#(s(x),y) -> plus#(x,y) plus#(x,s(y)) -> plus#(x,p(s(y))) -> plus#(x,s(y)) -> plus#(x,p(s(y))) plus#(x,s(y)) -> plus#(x,p(s(y))) -> plus#(x,s(y)) -> p#(s(y)) plus#(x,s(y)) -> plus#(x,p(s(y))) -> plus#(s(x),y) -> plus#(p(s(x)),y) plus#(x,s(y)) -> plus#(x,p(s(y))) -> plus#(s(x),y) -> p#(s(x)) plus#(x,s(y)) -> plus#(x,p(s(y))) -> plus#(s(x),y) -> plus#(x,y) SCC Processor: #sccs: 4 #rules: 16 #arcs: 74/676 DPs: if#(false(),x,y) -> pr#(x,y) pr#(x,s(s(y))) -> divides#(s(s(y)),x) divides#(y,x) -> div#(x,y) div#(x,y) -> quot#(x,y,y) quot#(s(x),s(y),z) -> quot#(x,y,z) quot#(x,0(),s(z)) -> div#(x,s(z)) div#(div(x,y),z) -> zero#(y) zero#(s(x)) -> zero#(0()) zero#(s(x)) -> if#(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) div#(div(x,y),z) -> div#(x,times(zero(y),z)) pr#(x,s(s(y))) -> if#(divides(s(s(y)),x),x,s(y)) TRS: p(0()) -> 0() p(s(x)) -> x plus(x,0()) -> x plus(0(),y) -> y plus(s(x),y) -> s(plus(x,y)) plus(s(x),y) -> s(plus(p(s(x)),y)) plus(x,s(y)) -> s(plus(x,p(s(y)))) times(0(),y) -> 0() times(s(0()),y) -> y times(s(x),y) -> plus(y,times(x,y)) div(0(),y) -> 0() div(x,y) -> quot(x,y,y) quot(zero(y),s(y),z) -> 0() quot(s(x),s(y),z) -> quot(x,y,z) quot(x,0(),s(z)) -> s(div(x,s(z))) div(div(x,y),z) -> div(x,times(zero(y),z)) eq(0(),0()) -> true() eq(s(x),0()) -> false() eq(0(),s(y)) -> false() eq(s(x),s(y)) -> eq(x,y) divides(y,x) -> eq(x,times(div(x,y),y)) prime(s(s(x))) -> pr(s(s(x)),s(x)) pr(x,s(0())) -> true() pr(x,s(s(y))) -> if(divides(s(s(y)),x),x,s(y)) if(true(),x,y) -> false() if(false(),x,y) -> pr(x,y) zero(div(x,x)) -> x zero(divides(x,x)) -> x zero(times(x,x)) -> x zero(quot(x,x,x)) -> x zero(s(x)) -> if(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) Open DPs: times#(s(x),y) -> times#(x,y) TRS: p(0()) -> 0() p(s(x)) -> x plus(x,0()) -> x plus(0(),y) -> y plus(s(x),y) -> s(plus(x,y)) plus(s(x),y) -> s(plus(p(s(x)),y)) plus(x,s(y)) -> s(plus(x,p(s(y)))) times(0(),y) -> 0() times(s(0()),y) -> y times(s(x),y) -> plus(y,times(x,y)) div(0(),y) -> 0() div(x,y) -> quot(x,y,y) quot(zero(y),s(y),z) -> 0() quot(s(x),s(y),z) -> quot(x,y,z) quot(x,0(),s(z)) -> s(div(x,s(z))) div(div(x,y),z) -> div(x,times(zero(y),z)) eq(0(),0()) -> true() eq(s(x),0()) -> false() eq(0(),s(y)) -> false() eq(s(x),s(y)) -> eq(x,y) divides(y,x) -> eq(x,times(div(x,y),y)) prime(s(s(x))) -> pr(s(s(x)),s(x)) pr(x,s(0())) -> true() pr(x,s(s(y))) -> if(divides(s(s(y)),x),x,s(y)) if(true(),x,y) -> false() if(false(),x,y) -> pr(x,y) zero(div(x,x)) -> x zero(divides(x,x)) -> x zero(times(x,x)) -> x zero(quot(x,x,x)) -> x zero(s(x)) -> if(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) Open DPs: eq#(s(x),s(y)) -> eq#(x,y) TRS: p(0()) -> 0() p(s(x)) -> x plus(x,0()) -> x plus(0(),y) -> y plus(s(x),y) -> s(plus(x,y)) plus(s(x),y) -> s(plus(p(s(x)),y)) plus(x,s(y)) -> s(plus(x,p(s(y)))) times(0(),y) -> 0() times(s(0()),y) -> y times(s(x),y) -> plus(y,times(x,y)) div(0(),y) -> 0() div(x,y) -> quot(x,y,y) quot(zero(y),s(y),z) -> 0() quot(s(x),s(y),z) -> quot(x,y,z) quot(x,0(),s(z)) -> s(div(x,s(z))) div(div(x,y),z) -> div(x,times(zero(y),z)) eq(0(),0()) -> true() eq(s(x),0()) -> false() eq(0(),s(y)) -> false() eq(s(x),s(y)) -> eq(x,y) divides(y,x) -> eq(x,times(div(x,y),y)) prime(s(s(x))) -> pr(s(s(x)),s(x)) pr(x,s(0())) -> true() pr(x,s(s(y))) -> if(divides(s(s(y)),x),x,s(y)) if(true(),x,y) -> false() if(false(),x,y) -> pr(x,y) zero(div(x,x)) -> x zero(divides(x,x)) -> x zero(times(x,x)) -> x zero(quot(x,x,x)) -> x zero(s(x)) -> if(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) Open DPs: plus#(s(x),y) -> plus#(x,y) plus#(s(x),y) -> plus#(p(s(x)),y) plus#(x,s(y)) -> plus#(x,p(s(y))) TRS: p(0()) -> 0() p(s(x)) -> x plus(x,0()) -> x plus(0(),y) -> y plus(s(x),y) -> s(plus(x,y)) plus(s(x),y) -> s(plus(p(s(x)),y)) plus(x,s(y)) -> s(plus(x,p(s(y)))) times(0(),y) -> 0() times(s(0()),y) -> y times(s(x),y) -> plus(y,times(x,y)) div(0(),y) -> 0() div(x,y) -> quot(x,y,y) quot(zero(y),s(y),z) -> 0() quot(s(x),s(y),z) -> quot(x,y,z) quot(x,0(),s(z)) -> s(div(x,s(z))) div(div(x,y),z) -> div(x,times(zero(y),z)) eq(0(),0()) -> true() eq(s(x),0()) -> false() eq(0(),s(y)) -> false() eq(s(x),s(y)) -> eq(x,y) divides(y,x) -> eq(x,times(div(x,y),y)) prime(s(s(x))) -> pr(s(s(x)),s(x)) pr(x,s(0())) -> true() pr(x,s(s(y))) -> if(divides(s(s(y)),x),x,s(y)) if(true(),x,y) -> false() if(false(),x,y) -> pr(x,y) zero(div(x,x)) -> x zero(divides(x,x)) -> x zero(times(x,x)) -> x zero(quot(x,x,x)) -> x zero(s(x)) -> if(eq(x,s(0())),plus(zero(0()),0()),s(plus(0(),zero(0())))) Open