{-# OPTIONS --without-K --safe #-}
-- A special set of typing rules just for soundness (the Sound formulation)
--
-- It appears that to establish the soundness proof, we need a bit strengthening of
-- induction hypothesis in the fundamental theorems, particularly in Λ-E and □-E
-- case. This set of rules only adds to the Concise formulation two premises. This set
-- of rules are defined to expose this strengthening and the added premises are marked
-- by
--
-- -- expose typing judgments for soundness proof
--
-- We then can show this formulation and the Concise formulation (i.e. the golden
-- formulation) is equivalent (actually we just need one directly),
-- c.f. Mints.Soundness.Equiv for the proof.
module Mints.Soundness.Typing where
open import Lib
open import Mints.Statics.Syntax public
import Mints.Statics.Concise as C
infix 4 ⊢_ _⊢_∶_ _⊢s_∶_
mutual
data ⊢_ : Ctxs → Set where
⊢[] : ⊢ [] ∷ []
⊢κ : ⊢ Γ →
----------
⊢ [] ∷⁺ Γ
⊢∺ : ∀ {i} →
⊢ Γ →
Γ ⊢ T ∶ Se i →
--------------
⊢ T ∺ Γ
data _⊢_∶_ : Ctxs → Exp → Typ → Set where
N-wf : ∀ i →
⊢ Γ →
-------------
Γ ⊢ N ∶ Se i
Se-wf : ∀ i →
⊢ Γ →
----------------
Γ ⊢ Se i ∶ Se (1 + i)
Π-wf : ∀ {i} →
Γ ⊢ S ∶ Se i →
S ∺ Γ ⊢ T ∶ Se i →
--------------------
Γ ⊢ Π S T ∶ Se i
□-wf : ∀ {i} →
[] ∷⁺ Γ ⊢ T ∶ Se i →
--------------------
Γ ⊢ □ T ∶ Se i
vlookup : ∀ {x} →
⊢ Γ →
x ∶ T ∈! Γ →
------------
Γ ⊢ v x ∶ T
ze-I : ⊢ Γ →
-----------
Γ ⊢ ze ∶ N
su-I : Γ ⊢ t ∶ N →
-------------
Γ ⊢ su t ∶ N
N-E : ∀ {i} →
N ∺ Γ ⊢ T ∶ Se i →
Γ ⊢ s ∶ T [| ze ] →
T ∺ N ∺ Γ ⊢ r ∶ T [ (wk ∘ wk) , su (v 1) ] →
Γ ⊢ t ∶ N →
--------------------------
Γ ⊢ rec T s r t ∶ T [| t ]
Λ-I : S ∺ Γ ⊢ t ∶ T →
------------------
Γ ⊢ Λ t ∶ Π S T
Λ-E : ∀ {i} →
-- expose typing judgments for soundness proof
S ∺ Γ ⊢ T ∶ Se i →
Γ ⊢ r ∶ Π S T →
Γ ⊢ s ∶ S →
---------------------
Γ ⊢ r $ s ∶ T [| s ]
□-I : [] ∷⁺ Γ ⊢ t ∶ T →
-----------------
Γ ⊢ box t ∶ □ T
□-E : ∀ {i n} Ψs →
-- expose typing judgments for soundness proof
[] ∷⁺ Γ ⊢ T ∶ Se i →
Γ ⊢ t ∶ □ T →
⊢ Ψs ++⁺ Γ →
len Ψs ≡ n →
-----------------------------------
Ψs ++⁺ Γ ⊢ unbox n t ∶ T [ I ; n ]
t[σ] : Δ ⊢ t ∶ T →
Γ ⊢s σ ∶ Δ →
---------------------
Γ ⊢ t [ σ ] ∶ T [ σ ]
cumu : ∀ {i} →
Γ ⊢ T ∶ Se i →
------------------
Γ ⊢ T ∶ Se (1 + i)
conv : ∀ {i} →
Γ ⊢ t ∶ S →
Γ C.⊢ S ≈ T ∶ Se i →
------------------
Γ ⊢ t ∶ T
data _⊢s_∶_ : Ctxs → Substs → Ctxs → Set where
s-I : ⊢ Γ →
------------
Γ ⊢s I ∶ Γ
s-wk : ⊢ T ∺ Γ →
------------------
T ∺ Γ ⊢s wk ∶ Γ
s-∘ : Γ ⊢s τ ∶ Γ′ →
Γ′ ⊢s σ ∶ Γ″ →
----------------
Γ ⊢s σ ∘ τ ∶ Γ″
s-, : ∀ {i} →
Γ ⊢s σ ∶ Δ →
Δ ⊢ T ∶ Se i →
Γ ⊢ t ∶ T [ σ ] →
-------------------
Γ ⊢s σ , t ∶ T ∺ Δ
s-; : ∀ {n} Ψs →
Γ ⊢s σ ∶ Δ →
⊢ Ψs ++⁺ Γ →
len Ψs ≡ n →
-----------------------------
Ψs ++⁺ Γ ⊢s σ ; n ∶ [] ∷⁺ Δ
s-conv : Γ ⊢s σ ∶ Δ →
C.⊢ Δ ≈ Δ′ →
-------------
Γ ⊢s σ ∶ Δ′