data  : Set where
  zero : 
  succ :   

_+_ :     
zero   + b = b
succ a + b = succ (a + b)

data _≡_ :     Set where
  refl : {a : }  (a  a)   -- "reflexivity"
  -- bailout : {a b : ℕ} → (a ≡ b)

{-
theorem : zero ≡ succ zero
theorem = bailout
-}

-- (zero ≡ zero) is the type of witnesses that zero equals zero (this type
-- is inhabited).
-- (zero ≡ succ zero) is the type of witnesses that zero equals succ zero (this type
-- is empty).
lemma : zero  zero    -- \==
lemma = refl

lemma' : (b : )  ((zero + b)  b)
lemma' b = refl

{-
factorial : ℕ → ℕ
factorial zero = {!!}
factorial (succ n) = {!!}
-}

cong : {x y : }  (f :   )  (x  y)  (f x  f y)
cong = {!!}

lemma'' : (a : )  ((a + zero)  a)
lemma'' zero     = refl
lemma'' (succ a) = cong succ (lemma'' a)
-- (lemma'' a) is a value of type ((a + zero) ≡ a).
-- What we need is a value of type (succ (a + zero) ≡ succ a).