(VAR x y b xs xs2 ys ys2 zs zs2) (RULES isEmpty(cons(x,xs)) -> false isEmpty(nil) -> true isZero(0) -> true isZero(s(x)) -> false head(cons(x,xs)) -> x tail(cons(x,xs)) -> xs tail(nil) -> nil append(nil,x) -> cons(x,nil) append(cons(y,ys),x) -> cons(y,append(ys,x)) p(s(s(x))) -> s(p(s(x))) p(s(0)) -> 0 p(0) -> 0 inc(s(x)) -> s(inc(x)) inc(0) -> s(0) addLists(xs, ys, zs) -> if(isEmpty(xs), isEmpty(ys), isZero(head(xs)), tail(xs), tail(ys), cons(p(head(xs)), tail(xs)), cons(inc(head(ys)),tail(ys)), zs, append(zs, head(ys))) if(true, true, b, xs, ys, xs2, ys2, zs, zs2) -> zs if(true, false, b, xs, ys, xs2, ys2, zs, zs2) -> differentLengthError if(false, true, b, xs, ys, xs2, ys2, zs, zs2) -> differentLengthError if(false, false, false, xs, ys, xs2, ys2, zs, zs2) -> addLists(xs2, ys2, zs) if(false, false, true, xs, ys, xs2, ys2, zs, zs2) -> addLists(xs, ys, zs2) addList(xs, ys) -> addLists(xs, ys, nil) ) (COMMENT addList(xs,ys) returns a new list where the elements of xs and ys are pairwise added )