(VAR l p x x'1 x'2 xs xs' y y'1 y'2) (DATATYPES a = < 'false, 'true > b = µX. < dd(X,X), nil, '0, 's(X), 'neg(X), 'pos(X), 'divByZero, 'underflow > ) (SIGNATURES 'equal :: b x b -> a 'eq :: b x b -> a mult :: b x b -> b 'mult :: b x b -> b sub :: b x b -> b 'sub :: b x b -> b div :: b x b -> b 'div :: b x b -> b eratos :: b -> b eratos'1 :: b -> b filter :: b x b -> b filter'1 :: b x b -> b filter'2 :: b x b x b -> b mod :: b x b -> b filter'3 :: a x b x b -> b 'add :: b x b -> b 'pred :: b -> b 'succ :: b -> b 'and :: a x a -> a 'natdiv :: b x b -> b 'positive :: b -> b 'negative :: b -> b 'divsub :: b x b -> b 'natmult :: b x b -> b 'natadd :: b x b -> b 'natdiv' :: b x b -> b 'natsub :: b x b -> b ) (RULES 'equal(x,y) -> 'eq(x,y) mult(x,y) -> 'mult(x,y) sub(x,y) -> 'sub(x,y) div(x,y) -> 'div(x,y) eratos(l) -> eratos'1(l) eratos'1(dd(x,xs)) -> dd(x,eratos(filter(x,xs))) eratos'1(nil) -> nil filter(p,l) -> filter'1(l,p) filter'1(dd(x,xs),p) -> filter'2(filter(p,xs),p,x) filter'1(nil,p) -> nil filter'2(xs',p,x) -> filter'3('equal(mod(x,p),'0),x,xs') filter'3('false,x,xs') -> dd(x,xs') filter'3('true,x,xs') -> xs' mod(x,y) -> sub(x,mult(y,div(x,y))) 'add('0,y) -> y 'add('neg('s('0)),y) -> 'pred(y) 'add('neg('s('s(x))),y) -> 'pred('add('pos('s(x)),y)) 'add('pos('s('0)),y) -> 'succ(y) 'add('pos('s('s(x))),y) -> 'succ('add('pos('s(x)),y)) 'and('false,'false) -> 'false 'and('false,'true) -> 'false 'and('true,'false) -> 'false 'and('true,'true) -> 'true 'div('0,'0) -> 'divByZero 'div('0,'neg(y)) -> '0 'div('0,'pos(y)) -> '0 'div('neg(x),'0) -> 'divByZero 'div('neg(x),'neg(y)) -> 'positive('natdiv(x,y)) 'div('neg(x),'pos(y)) -> 'negative('natdiv(x,y)) 'div('pos(x),'0) -> 'divByZero 'div('pos(x),'neg(y)) -> 'negative('natdiv(x,y)) 'div('pos(x),'pos(y)) -> 'positive('natdiv(x,y)) 'divsub('0,'0) -> '0 'divsub('0,'s(y)) -> 'underflow 'divsub('s(x),'0) -> 's(x) 'divsub('s(x),'s(y)) -> 'divsub(x,y) 'eq('0,'0) -> 'true 'eq('0,'neg(y)) -> 'false 'eq('0,'pos(y)) -> 'false 'eq('0,'s(y)) -> 'false 'eq('neg(x),'0) -> 'false 'eq('neg(x),'neg(y)) -> 'eq(x,y) 'eq('neg(x),'pos(y)) -> 'false 'eq('pos(x),'0) -> 'false 'eq('pos(x),'neg(y)) -> 'false 'eq('pos(x),'pos(y)) -> 'eq(x,y) 'eq('s(x),'0) -> 'false 'eq('s(x),'s(y)) -> 'eq(x,y) 'eq(dd(x'1,x'2),dd(y'1,y'2)) -> 'and('eq(x'1,y'1),'eq(x'2,y'2)) 'eq(dd(x'1,x'2),nil) -> 'false 'eq(nil,dd(y'1,y'2)) -> 'false 'eq(nil,nil) -> 'true 'mult('0,'0) -> '0 'mult('0,'neg(y)) -> '0 'mult('0,'pos(y)) -> '0 'mult('neg(x),'0) -> '0 'mult('neg(x),'neg(y)) -> 'pos('natmult(x,y)) 'mult('neg(x),'pos(y)) -> 'neg('natmult(x,y)) 'mult('pos(x),'0) -> '0 'mult('pos(x),'neg(y)) -> 'neg('natmult(x,y)) 'mult('pos(x),'pos(y)) -> 'pos('natmult(x,y)) 'natadd('0,y) -> y 'natadd('s(x),y) -> 's('natadd(x,y)) 'natdiv('0,'0) -> 'divByZero 'natdiv('0,'s(y)) -> '0 'natdiv('s(x),'0) -> 'divByZero 'natdiv('s(x),'s(y)) -> 'natdiv'('divsub(x,y),'s(y)) 'natdiv'('0,y) -> 's('0) 'natdiv'('s(x),y) -> 's('natdiv('s(x),y)) 'natdiv'('underflow,y) -> '0 'natmult('0,y) -> '0 'natmult('s(x),y) -> 'natadd(y,'natmult(x,y)) 'natsub(x,'0) -> x 'natsub('s(x),'s(y)) -> 'natsub(x,y) 'negative('0) -> '0 'negative('neg(x)) -> 'pos(x) 'negative('pos(x)) -> 'neg(x) 'negative('s(x)) -> 'neg('s(x)) 'positive('0) -> '0 'positive('neg(x)) -> 'neg(x) 'positive('pos(x)) -> 'pos(x) 'positive('s(x)) -> 'pos('s(x)) 'pred('0) -> 'neg('s('0)) 'pred('neg('s(x))) -> 'neg('s('s(x))) 'pred('pos('s('0))) -> '0 'pred('pos('s('s(x)))) -> 'pos('s(x)) 'sub(x,'0) -> x 'sub(x,'neg(y)) -> 'add(x,'pos(y)) 'sub(x,'pos(y)) -> 'add(x,'neg(y)) 'succ('0) -> 'pos('s('0)) 'succ('neg('s('0))) -> '0 'succ('neg('s('s(x)))) -> 'neg('s(x)) 'succ('pos('s(x))) -> 'pos('s('s(x))))