(STRATEGY
    INNERMOST)

(VAR
    x y)
(DATATYPES
    A = µX.< 0, s(X), true, false >)
(SIGNATURES
    minus :: [A x A] -> A
    if :: [A x A x A] -> A
    mod :: [A x A] -> A
    if1 :: [A x A x A] -> A
    gt :: [A x A] -> A
    lt :: [A x A] -> A)
(RULES
    minus(0(),y) -> 0()
    minus(s(x),y) -> if(gt(s(x),y)
                       ,x
                       ,y)
    if(true(),x,y) -> s(minus(x,y))
    if(false(),x,y) -> 0()
    mod(x,0()) -> 0()
    mod(x,s(y)) -> if1(lt(x,s(y))
                      ,x
                      ,s(y))
    if1(true(),x,y) -> x
    if1(false(),x,y) -> mod(minus(x
                                 ,y)
                           ,y)
    gt(0(),y) -> false()
    gt(s(x),0()) -> true()
    gt(s(x),s(y)) -> gt(x,y)
    lt(x,0()) -> false()
    lt(0(),s(x)) -> true()
    lt(s(x),s(y)) -> lt(x,y))