Documentation

GroupoidModel.Syntax.Inversion

Inversion of typing #

In this module we prove that presuppositions hold of typing judgments: e.g. if E ∣ Γ ⊢[l] t : A then WfCtx Γ and E ∣ Γ ⊢[l] A. Note that E.Wf does not necessarily hold.

Helper lemmas #

theorem InvProof.eqSb_snoc' {χ : Type u_1} {E : Axioms χ} {Δ Γ : Ctx χ} {A t t' : Expr χ} {σ σ' : Expr χ} {l : } :
EqSb E Δ σ σ' ΓE Γ ⊢[l] AE Δ ⊢[l] t : Expr.subst σ AE Δ ⊢[l] t' : Expr.subst σ' AE Δ ⊢[l] t t' : Expr.subst σ AEqSb E Δ (Expr.snoc σ t) (Expr.snoc σ' t') ((A, l) :: Γ)
theorem InvProof.wfSb_conv_binder {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A A' : Expr χ} {l : } :
WfCtx E ΓE Γ ⊢[l] AE Γ ⊢[l] A'E Γ ⊢[l] A A'WfSb E ((A', l) :: Γ) Expr.bvar ((A, l) :: Γ)
theorem InvProof.tp_conv_binder {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A A' B : Expr χ} {l l' : } :
WfCtx E ΓE Γ ⊢[l] AE Γ ⊢[l] A'E Γ ⊢[l] A A'E (A, l) :: Γ ⊢[l'] BE (A', l) :: Γ ⊢[l'] B
theorem InvProof.tm_conv_binder {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A A' B t : Expr χ} {l l' : } :
WfCtx E ΓE Γ ⊢[l] AE Γ ⊢[l] A'E Γ ⊢[l] A A'E (A, l) :: Γ ⊢[l'] t : BE (A', l) :: Γ ⊢[l'] t : B

Instantiation #

theorem InvProof.tp_inst {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A B t : Expr χ} {l l' : } :
WfCtx E ΓE Γ ⊢[l] AE Γ ⊢[l] t : AE (A, l) :: Γ ⊢[l'] BE Γ ⊢[l'] Expr.subst t.toSb B
theorem InvProof.tm_inst {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A B t b : Expr χ} {l l' : } :
WfCtx E ΓE Γ ⊢[l] AE Γ ⊢[l] t : AE (A, l) :: Γ ⊢[l'] b : BE Γ ⊢[l'] Expr.subst t.toSb b : Expr.subst t.toSb B
theorem InvProof.eqtp_inst {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A B B' t t' : Expr χ} {l l' : } :
WfCtx E ΓE Γ ⊢[l] AE Γ ⊢[l] t : AE Γ ⊢[l] t' : AE Γ ⊢[l] t t' : AE (A, l) :: Γ ⊢[l'] B B'E Γ ⊢[l'] Expr.subst t.toSb B Expr.subst t'.toSb B'
theorem InvProof.inv_all {χ : Type u_1} {E : Axioms χ} :
(∀ {Γ : Ctx χ} {l : } {A : Expr χ}, E Γ ⊢[l] AWfCtx E Γ) (∀ {Γ : Ctx χ} {l : } {A B : Expr χ}, E Γ ⊢[l] A BWfCtx E Γ (E Γ ⊢[l] A) (E Γ ⊢[l] B)) (∀ {Γ : Ctx χ} {l : } {A t : Expr χ}, E Γ ⊢[l] t : AWfCtx E Γ (E Γ ⊢[l] A)) ∀ {Γ : Ctx χ} {l : } {A t u : Expr χ}, E Γ ⊢[l] t u : AWfCtx E Γ (E Γ ⊢[l] A) (E Γ ⊢[l] t : A) (E Γ ⊢[l] u : A)

General inversion lemmas #

theorem WfCtx.inv_snoc {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A : Expr χ} {l : } :
WfCtx E ((A, l) :: Γ)E Γ ⊢[l] A
theorem WfTp.wf_ctx {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A : Expr χ} {l : } :
E Γ ⊢[l] AWfCtx E Γ
theorem EqTp.wf_left {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A B : Expr χ} {l : } :
E Γ ⊢[l] A BE Γ ⊢[l] A
theorem EqTp.wf_right {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A B : Expr χ} {l : } :
E Γ ⊢[l] A BE Γ ⊢[l] B
theorem EqTp.wf_ctx {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A B : Expr χ} {l : } :
E Γ ⊢[l] A BWfCtx E Γ
theorem WfTm.wf_tp {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A t : Expr χ} {l : } :
E Γ ⊢[l] t : AE Γ ⊢[l] A
theorem WfTm.wf_ctx {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A t : Expr χ} {l : } :
E Γ ⊢[l] t : AWfCtx E Γ
theorem EqTm.wf_left {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A t u : Expr χ} {l : } :
E Γ ⊢[l] t u : AE Γ ⊢[l] t : A
theorem EqTm.wf_right {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A t u : Expr χ} {l : } :
E Γ ⊢[l] t u : AE Γ ⊢[l] u : A
theorem EqTm.wf_tp {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A t u : Expr χ} {l : } :
E Γ ⊢[l] t u : AE Γ ⊢[l] A
theorem EqTm.wf_ctx {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A t u : Expr χ} {l : } :
E Γ ⊢[l] t u : AWfCtx E Γ
theorem WfTp.wf_binder {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A B : Expr χ} {l l' : } :
E (A, l) :: Γ ⊢[l'] BE Γ ⊢[l] A
theorem EqTp.wf_binder {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A B B' : Expr χ} {l l' : } :
E (A, l) :: Γ ⊢[l'] B B'E Γ ⊢[l] A
theorem WfTm.wf_binder {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A B t : Expr χ} {l l' : } :
E (A, l) :: Γ ⊢[l'] t : BE Γ ⊢[l] A
theorem EqTm.wf_binder {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A B t u : Expr χ} {l l' : } :
E (A, l) :: Γ ⊢[l'] t u : BE Γ ⊢[l] A

Substitution #

theorem WfSb.mk {χ : Type u_1} {E : Axioms χ} {Δ Γ : Ctx χ} {σ : Expr χ} :
WfCtx E ΔWfCtx E Γ(∀ {i : } {A : Expr χ} {l : }, Lookup Γ i A lE Δ ⊢[l] σ i : Expr.subst σ A)WfSb E Δ σ Γ
theorem WfSb.wk {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A : Expr χ} {l : } :
E Γ ⊢[l] AWfSb E ((A, l) :: Γ) Expr.wk Γ
theorem WfSb.terminal {χ : Type u_1} {E : Axioms χ} {Δ : Ctx χ} (σ : Expr χ) :
WfCtx E ΔWfSb E Δ σ []
theorem WfSb.comp {χ : Type u_1} {E : Axioms χ} {Θ Δ Γ : Ctx χ} {σ σ' : Expr χ} :
WfSb E Θ σ ΔWfSb E Δ σ' ΓWfSb E Θ (Expr.comp σ σ') Γ
theorem WfSb.toSb {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A t : Expr χ} {l : } :
E Γ ⊢[l] t : AWfSb E Γ t.toSb ((A, l) :: Γ)
theorem EqSb.mk {χ : Type u_1} {E : Axioms χ} {Δ Γ : Ctx χ} {σ σ' : Expr χ} :
WfCtx E ΔWfCtx E Γ(∀ {i : } {A : Expr χ} {l : }, Lookup Γ i A l → (E Δ ⊢[l] Expr.subst σ A Expr.subst σ' A) (E Δ ⊢[l] σ i σ' i : Expr.subst σ A))EqSb E Δ σ σ' Γ
theorem EqSb.snoc {χ : Type u_1} {E : Axioms χ} {Δ Γ : Ctx χ} {A t t' : Expr χ} {σ σ' : Expr χ} {l : } :
EqSb E Δ σ σ' ΓE Γ ⊢[l] AE Δ ⊢[l] t t' : Expr.subst σ AEqSb E Δ (Expr.snoc σ t) (Expr.snoc σ' t') ((A, l) :: Γ)
theorem EqSb.terminal {χ : Type u_1} {E : Axioms χ} {Δ : Ctx χ} (σ σ' : Expr χ) :
WfCtx E ΔEqSb E Δ σ σ' []
theorem EqSb.toSb {χ : Type u_1} {E : Axioms χ} {Γ : Ctx χ} {A t t' : Expr χ} {l : } :
E Γ ⊢[l] t t' : AEqSb E Γ t.toSb t'.toSb ((A, l) :: Γ)