Canonical pinned API for the upstream CLL cut-elimination port
DefinitionEquivalence of source and pinned cut-free proof bundles#✓fully proved
Source and pinned cut-free proof bundles contain the same proof values.
def CF.Proof.equivCutFreeProof : CF.Proof Γ ≃ CutFreeProof Γ where
toFun p := ⟨p.val, (Proof.isCutFree_iff_cutFree p.val).mp p.property⟩
invFun p := ⟨p.val, (Proof.isCutFree_iff_cutFree p.val).mpr p.property⟩
left_inv _ := Subtype.ext rfl
right_inv _ := Subtype.ext rfl
abbrev Proof (Γ : Sequent Atom) := { p : ⇓Γ // p.IsCutFree }
CSLibExt/Logics/LinearLogic/CLL/CutFree.lean:167
theorem Proof.isCutFree_iff_cutFree {Γ : Sequent Atom} (p : Proof Γ) :
p.IsCutFree ↔ p.cutFree
CSLibExt/Logics/LinearLogic/CLL/CutFree.lean:42
Uses 3 · Used by 3
DefinitionCut-free original proof from an explicit list presentation#✓fully proved
Compute a cut-free original CLL proof using an explicit list presentation.
def Proof.cut_elim_list [DecidableEq Atom]
{Γ : List (Proposition Atom)} (p : Proof (Γ : Sequent Atom)) :
CutFreeProof (Γ : Sequent Atom) :=
CF.Proof.equivCutFreeProof (Proof.cutElimList p)
def CF.Proof.equivCutFreeProof : CF.Proof Γ ≃ CutFreeProof Γ where
toFun p := ⟨p.val, (Proof.isCutFree_iff_cutFree p.val).mp p.property⟩
invFun p := ⟨p.val, (Proof.isCutFree_iff_cutFree p.val).mpr p.property⟩
left_inv _ := Subtype.ext rfl
right_inv _ := Subtype.ext rfl
CSLibExt/Logics/LinearLogic/CLL/CutEliminationBridge.lean:34
def Proof.cutElimList [DecidableEq Atom] {Γ : List (Proposition Atom)}
(p : ⇓(Γ : Sequent Atom)) : CF⇓(Γ : Sequent Atom) := cutElimAux p Γ rfl
CSLibExt/Logics/LinearLogic/CLL/CutElimination.lean:498
DefinitionCut elimination for original classical linear logic proofs#✓fully proved
Every original CLL proof has a cut-free original proof of the same sequent. This wrapper uses classical atom equality and a classical list representative.
noncomputable def Proof.cut_elim (p : Proof Γ) : CutFreeProof Γ := by
classical
exact CF.Proof.equivCutFreeProof (Proof.cutElim p)
DefinitionCut admissibility in the pinned bundle with list tails#✓fully proved
Cut admissibility in the existing pinned bundle, with explicit list tails.
def CutFreeProof.cutAdmList [DecidableEq Atom] {a : Proposition Atom}
{Γ Δ : List (Proposition Atom)} (p : CutFreeProof (a ::ₘ Γ))
(q : CutFreeProof (a⫠ ::ₘ Δ)) :
CutFreeProof ((Γ : Sequent Atom) + (Δ : Sequent Atom)) :=
CF.Proof.equivCutFreeProof (Proof.cutAdm
(CF.Proof.equivCutFreeProof.symm p)
(CF.Proof.equivCutFreeProof.symm q))
def CF.Proof.equivCutFreeProof : CF.Proof Γ ≃ CutFreeProof Γ where
toFun p := ⟨p.val, (Proof.isCutFree_iff_cutFree p.val).mp p.property⟩
invFun p := ⟨p.val, (Proof.isCutFree_iff_cutFree p.val).mpr p.property⟩
left_inv _ := Subtype.ext rfl
right_inv _ := Subtype.ext rfl
CSLibExt/Logics/LinearLogic/CLL/CutEliminationBridge.lean:34
def Proof.cutAdm [DecidableEq Atom] {Γ Δ : List (Proposition Atom)}
(p : CF⇓(a ::ₘ Γ)) (q : CF⇓(a⫠ ::ₘ Δ)) : CF⇓((Γ : Sequent Atom) + Δ) := cutAdmImpl p q
CSLibExt/Logics/LinearLogic/CLL/CutElimination.lean:419
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.