(STRATEGY
    INNERMOST)

(VAR
    x y)
(DATATYPES
    A = µX.< 0, s(X), if(X, X, X), <(X, X), -(X, X) >)
(SIGNATURES
    gcd :: [A x A] -> A)
(RULES
    gcd(x,0()) -> x
    gcd(0(),y) -> y
    gcd(s(x),s(y)) -> if(<(x,y)
                        ,gcd(s(x),-(y,x))
                        ,gcd(-(x,y),s(y))))