(STRATEGY
    INNERMOST)

(VAR
    u v x y)
(DATATYPES
    A = µX.< true, 0, false, s(X) >)
(SIGNATURES
    diff :: [A x A] -> A
    cond1 :: [A x A x A] -> A
    cond2 :: [A x A x A] -> A
    gt :: [A x A] -> A
    equal :: [A x A] -> A)
(RULES
    diff(x,y) -> cond1(equal(x,y)
                      ,x
                      ,y)
    cond1(true(),x,y) -> 0()
    cond1(false(),x,y) -> cond2(gt(x
                                  ,y)
                               ,x
                               ,y)
    cond2(true(),x,y) -> s(diff(x
                               ,s(y)))
    cond2(false(),x,y) ->
      s(diff(s(x),y))
    gt(0(),v) -> false()
    gt(s(u),0()) -> true()
    gt(s(u),s(v)) -> gt(u,v)
    equal(0(),0()) -> true()
    equal(s(x),0()) -> false()
    equal(0(),s(y)) -> false()
    equal(s(x),s(y)) -> equal(x,y))