(VAR f x xs y ys ) (RULES ap(ap(map,f),xs) -> ap(ap(ap(if,ap(isEmpty,xs)),f),xs) ap(ap(ap(if,true),f),xs) -> null ap(ap(ap(if,null),f),xs) -> ap(ap(cons,ap(f,ap(last,xs))),ap(ap(if2,f),xs)) ap(ap(if2,f),xs) -> ap(ap(map,f),ap(dropLast,xs)) ap(isEmpty,null) -> true ap(isEmpty,ap(ap(cons,x),xs)) -> null ap(last,ap(ap(cons,x),null)) -> x ap(last,ap(ap(cons,x),ap(ap(cons,y),ys))) -> ap(last,ap(ap(cons,y),ys)) ap(dropLast,ap(ap(cons,x),null)) -> null ap(dropLast,ap(ap(cons,x),ap(ap(cons,y),ys))) -> ap(ap(cons,x),ap(dropLast,ap(ap(cons,y),ys))) )