{- An implementation of the Alt-Artëmov system λ∞ ============================================== Work in progress. For easy editing with Emacs agda-mode, add to your .emacs file: '(agda-input-user-translations (quote (("i" "⊃") ("ii" "⫗") ("e" "⊢") ("ee" "⊩") ("n" "¬") ("N" "ℕ") ("v" "𝑣") ("l" "𝜆") ("l2" "𝜆²") ("l3" "𝜆³") ("ln" "𝜆ⁿ") ("o" "∘") ("o2" "∘²") ("o3" "∘³") ("on" "∘ⁿ") ("p" "𝑝") ("p2" "𝑝²") ("p3" "𝑝³") ("pn" "𝑝ⁿ") ("pi0" "𝜋₀") ("pi02" "𝜋₀²") ("pi03" "𝜋₀³") ("pi0n" "𝜋₀ⁿ") ("pi1" "𝜋₁") ("pi12" "𝜋₁²") ("pi13" "𝜋₁³") ("pi1n" "𝜋₁ⁿ") ("u" "⇑") ("u2" "⇑²") ("u3" "⇑³") ("un" "⇑ⁿ") ("d" "⇓") ("d2" "⇓²") ("d3" "⇓³") ("dn" "⇓ⁿ") ("mv" "𝒗") ("ml" "𝝀") ("ml2" "𝝀²") ("ml3" "𝝀³") ("ml4" "𝝀⁴") ("mln" "𝝀ⁿ") ("mo" "∙") ("mo2" "∙²") ("mo3" "∙³") ("mo4" "∙⁴") ("mon" "∙ⁿ") ("mp" "𝒑") ("mp2" "𝒑²") ("mp3" "𝒑³") ("mp4" "𝒑⁴") ("mpn" "𝒑ⁿ") ("mpi0" "𝝅₀") ("mpi02" "𝝅₀²") ("mpi03" "𝝅₀³") ("mpi04" "𝝅₀⁴") ("mpi0n" "𝝅₀ⁿ") ("mpi1" "𝝅₁") ("mpi12" "𝝅₁²") ("mpi13" "𝝅₁³") ("mpi14" "𝝅₁⁴") ("mpi1n" "𝝅₁ⁿ") ("mu" "⬆") ("mu2" "⬆²") ("mu3" "⬆³") ("mu4" "⬆⁴") ("mun" "⬆ⁿ") ("md" "⬇") ("md2" "⬇²") ("md3" "⬇³") ("md4" "⬇⁴") ("mdn" "⬇ⁿ") ("mS" "𝐒") ("mZ" "𝐙") ("m0" "𝟎") ("m1" "𝟏") ("m2" "𝟐") ("m3" "𝟑") ("m4" "𝟒") ("m5" "𝟓") ("m6" "𝟔") ("m7" "𝟕") ("m8" "𝟖") ("m9" "𝟗") ("s" "𝐬") ("t" "𝐭") ("x" "𝐱") ("y" "𝐲")))) -} module A201602.Try15 where open import Data.Nat using (ℕ ; zero ; suc) open import Data.Product using (Σ ; _×_) renaming (_,_ to ⟨_,_⟩ ; proj₁ to proj₀ ; proj₂ to proj₁) open import Data.Vec using (Vec ; [] ; _∷_ ; replicate) {-infixl 9 !_ infixl 9 𝑣_ 𝒗_ infixl 8 𝜋₀_ 𝜋₀²_ 𝜋₀³_ 𝝅₀_ 𝝅₀²_ 𝝅₀³_ 𝝅₀⁴_ 𝝅₀ⁿ_ infixl 8 𝜋₁_ 𝜋₁²_ 𝜋₁³_ 𝝅₁_ 𝝅₁²_ 𝝅₁³_ 𝝅₁⁴_ 𝝅₁ⁿ_ infixl 7 _∘_ _∘²_ _∘³_ _∙_ _∙²_ _∙³_ _∙⁴_ _∙ⁿ_ infixr 6 ⇑_ ⇑²_ ⇑³_ ⬆_ ⬆²_ ⬆³_ ⬆⁴_ ⬆ⁿ_ infixr 6 ⇓_ ⇓²_ ⇓³_ ⬇_ ⬇²_ ⬇³_ ⬇⁴_ ⬇ⁿ_ infixr 5 𝜆_ 𝜆²_ 𝜆³_ 𝝀_ 𝝀²_ 𝝀³_ 𝝀⁴_ 𝝀ⁿ_ infixr 4 _∶_ infixr 3 ¬_ infixl 2 _∧_ infixl 2 _,_ infixr 1 _⊃_ _⫗_ infixr 0 _⊢_ ⊩_-} -- -------------------------------------------------------------------------- -- -- Untyped syntax -- Variables Var : Set Var = ℕ -- Term constructors data Tm : Set where -- Variable 𝑣_ : Var → Tm -- Abstraction (⊃I) at level n 𝜆[_]_ : ℕ → Tm → Tm -- Application (⊃E) at level n _∘[_]_ : Tm → ℕ → Tm → Tm -- Pairing (∧I) at level n 𝑝[_]⟨_,_⟩ : ℕ → Tm → Tm → Tm -- 0th projection (∧E₀) at level n 𝜋₀[_]_ : ℕ → Tm → Tm -- 1st projection (∧E₁) at level n 𝜋₁[_]_ : ℕ → Tm → Tm -- Artëmov’s “proof checker” !_ : Tm → Tm -- Reification at level n ⇑[_]_ : ℕ → Tm → Tm -- Reflection at level n ⇓[_]_ : ℕ → Tm → Tm mutual -- Type constructors data Ty : Set where -- Falsehood ⊥ : Ty -- Implication _⊃_ : Ty → Ty → Ty -- Conjunction _∧_ : Ty → Ty → Ty -- Type assertion α_ : TyA → Ty -- Type assertion constructor data TyA : Set where -- Explicit provability -- _∋_ : ∀{Γ} → (A : Ty) → (t : Tm Γ) → TyA -- Hypotheses Hyp : Set Hyp = ℕ × Ty -- Contexts data Cx : Set where ∅ : Cx _,_ : Cx → Hyp → Cx -- -------------------------------------------------------------------------- -- -- Example types -- Truth ⊤ : Ty ⊤ = ⊥ ⊃ ⊥ -- Negation ¬_ : Ty → Ty ¬ A = A ⊃ ⊥ -- Equivalence _⫗_ : Ty → Ty → Ty A ⫗ B = (A ⊃ B) ∧ (B ⊃ A)