(STRATEGY
    INNERMOST)

(VAR
    u x y z)
(DATATYPES
    A = µX.< 0, s(X), true, false >)
(SIGNATURES
    - :: [A x A] -> A
    <= :: [A x A] -> A
    if :: [A x A x A] -> A
    perfectp :: [A] -> A
    f :: [A x A x A x A] -> A)
(RULES
    -(x,0()) -> x
    -(s(x),s(y)) -> -(x,y)
    <=(0(),y) -> true()
    <=(s(x),0()) -> false()
    <=(s(x),s(y)) -> <=(x,y)
    if(true(),x,y) -> x
    if(false(),x,y) -> y
    perfectp(0()) -> false()
    perfectp(s(x)) -> f(x
                       ,s(0())
                       ,s(x)
                       ,s(x))
    f(0(),y,0(),u) -> true()
    f(0(),y,s(z),u) -> false()
    f(s(x),0(),z,u) -> f(x
                        ,u
                        ,-(z,s(x))
                        ,u)
    f(s(x),s(y),z,u) -> if(<=(x,y)
                          ,f(s(x),-(y,x),z,u)
                          ,f(x,u,z,u)))