{-# OPTIONS --allow-unsolved-metas #-}

module Unifier where

open import Data.Nat.Base using (ℕ; zero; suc)
open import StateOfTheArt
  using ( _×_; ⊤
        ; _,_
        ; _≡_; refl
        )


_ : _
_ = _




_ : (_ → _) ≡ (ℕ → ℕ)
_ = refl




_ : let ?A = _ in (?A → ?A) ≡ (ℕ → ℕ)
_ = refl



_ : (ℕ → _) ≡ (ℕ → ℕ)
_ = refl



_ : _ ≡ (_ → _)
_ = refl


private
  variable
    A : Set


nary : ℕ → Set → Set
nary zero     A = A
nary (suc n)  A = ℕ → nary n A



at0 : ∀ n → nary n A → A
at0 zero    f = f
at0 (suc n) f = at0 n (f 0)




_ : nary 1 _ ≡ (ℕ → ℕ)
_ = refl



_ : nary 0 _ ≡ (ℕ → ℕ)
_ = refl



_ : nary _ _ ≡ (ℕ → A)
_ = refl



_ : nary _ ℕ ≡ ℕ
_ = refl

_ : nary _ ℕ ≡ (ℕ → ℕ)
_ = refl

_ : nary _ (ℕ → ℕ) ≡ (ℕ → ℕ)
_ = refl