#!/usr/bin/L1 --semantics=L1.so rem "numerals" 0 :: Nat := s:z:z 1 :: Nat := s:z:s(z) succ :: Nat -> Nat := n: s:z: n(s)(s(z)) `+` :: Nat -> Nat -> auto := a:b: s:z: a(s)(b(s)(z)) `+` := a :: Nat : b :: Nat : s:z: a(s)(b(s)(z)) `+` := a:b: if (Nat?(a) && Nat?(b)) s:z: a(s)(b(s)(z)) else a + b succ(0)