data Nat : Type where { Zero : Nat ; Succ : (n:Nat) -> Nat ; } ; plus : Nat -> Nat -> Nat ; plus Zero y = y ; plus (Succ x) y = Succ (plus x y) ; pred : Nat -> Nat ; pred Zero = Zero ; pred (Succ n) = n ; natToInt : Nat -> Int ; natToInt Zero = 0 ; natToInt (Succ n) = 1 + natToInt n ; plus : Nat -> Nat -> Nat ; plus Zero y = y ; plus (Succ x) y = Succ (plus x y) ; intToNat : Int -> Nat ; intToNat n = if n == 0 then Zero else Succ (intToNat (n-1)) ;