module nat1 where data ℕ : Set where Z : ℕ S : ℕ -> ℕ _+_ : ℕ -> ℕ -> ℕ n + Z = n n + S m = S (n + m) infixr 10 _+_ infixr 20 _*_ _*_ : ℕ -> ℕ -> ℕ n * Z = Z n * S m = n * m + n data Bool : Set where tt : Bool ff : Bool data ⊤ : Set where true : ⊤ data ⊥ : Set where Atom : Bool -> Set Atom tt = ⊤ Atom ff = ⊥ _==Bool_ : ℕ -> ℕ -> Bool Z ==Bool Z = tt (S n) ==Bool (S m) = n ==Bool m _ ==Bool _ = ff _==_ : ℕ -> ℕ -> Set n == m = Atom ( n ==Bool m) _=='_ : ℕ -> ℕ -> Set Z ==' Z = ⊤ (S n) ==' (S m) = n ==' m _ ==' _ = ⊥