le
0
y
true
le
s
x
0
false
le
s
x
s
y
le
x
y
minus
x
0
x
minus
s
x
s
y
minus
x
y
gcd
0
y
0
gcd
s
x
0
0
gcd
s
x
s
y
if
le
y
x
s
x
s
y
if
true
s
x
s
y
gcd
minus
x
y
s
y
if
false
s
x
s
y
gcd
minus
y
x
s
x
zipWith
f
xs
nil
nil
zipWith
f
nil
ys
nil
zipWith
f
cons
x
xs
cons
y
ys
cons
f
x
y
zipWith
f
xs
ys
gcdlists
xs
ys
zipWith
x
nat
y
nat
gcd
x
y
xs
ys
x
nat
y
nat
xs
list
ys
list
f
nat
nat
nat
0
nat
s
nat
nat
le
nat
nat
bool
gcd
nat
nat
nat
minus
nat
nat
nat
true
bool
false
bool
if
bool
nat
nat
nat
nil
list
cons
nat
list
list
zipWith
nat
nat
nat
list
list
list
gcdlists
list
list
list
FULL
.