(VAR b x xs xs2 y 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) )