Elimination

Difficulty: hard — 2 definitions, 0 abbreviations, 1 lemmas, 5 theorems, 0 examples.

definition lemma theorem
legend

Pasting is never needed when the rules are schematic.

A deduction may paste other deductions into the statements it draws on. Where the rules are schemata, that is a convenience rather than a necessity: everything obtained by pasting can be obtained without it, by pushing the pasted deductions out to the leaves.

Source: Hiep, New Foundations for Separation Logic (PhD thesis, 2024), appendix A.3.

Enlarging the premises of a cut-free deduction gives a cut-free deduction: the schemata are read against the larger list instead, and the leaves point into it.

def Logic.ProofTheory.CutFree.mono {Obj : Type} {S : Logic.ProofTheory.Schema Obj  Prop}
  {P P' : List Obj} {a : Obj} :
  ( x  P, x  P')  Logic.ProofTheory.CutFree S P a  Logic.ProofTheory.CutFree S P' a
Show details
| Logic.ProofTheory.CutFree.mono x_3 (Logic.ProofTheory.CutFree.assumption ha) =
  Logic.ProofTheory.CutFree.assumption 
| Logic.ProofTheory.CutFree.mono x_2 (Logic.ProofTheory.CutFree.apply s hs es) =
  Logic.ProofTheory.CutFree.apply s hs (Logic.ProofTheory.CutFree.DerivationsOf.mono x_2 es)

Complexity: 225 (size of the value term)

Lean core dependencies: Eq, Eq.symm, HEq, List, Prod, eq_of_heq

The same, branch by branch.

def Logic.ProofTheory.CutFree.DerivationsOf.mono {Obj : Type} {S : Logic.ProofTheory.Schema Obj  Prop}
  {P P' : List Obj} {ps : List (List Obj × Obj)} :
  ( x  P, x  P') 
    Logic.ProofTheory.CutFree.DerivationsOf S P ps  Logic.ProofTheory.CutFree.DerivationsOf S P' ps
Show details
| Logic.ProofTheory.CutFree.DerivationsOf.mono x_2 Logic.ProofTheory.CutFree.DerivationsOf.nil =
  Logic.ProofTheory.CutFree.DerivationsOf.nil
| Logic.ProofTheory.CutFree.DerivationsOf.mono x_2
    (Logic.ProofTheory.CutFree.DerivationsOf.cons d es) =
  Logic.ProofTheory.CutFree.DerivationsOf.cons (Logic.ProofTheory.CutFree.mono  d)
    (Logic.ProofTheory.CutFree.DerivationsOf.mono x_2 es)

Complexity: 233 (size of the value term)

Lean core dependencies: Eq, Eq.mp, Eq.mpr, Eq.symm, HEq, List, List.mem_append, Or, Or.elim, Prod, eq_of_heq, id

Pasting, for cut-free deductions: the result is again cut-free.

theorem Logic.ProofTheory.DerivableCutFree.graft {Obj : Type} {S : Logic.ProofTheory.Schema Obj  Prop}
  {P Q : List Obj} {a : Obj} :
  ( b  Q, Logic.ProofTheory.DerivableCutFree S P b) 
     (a : Logic.ProofTheory.CutFree S Q a), Logic.ProofTheory.DerivableCutFree S P a
Show details
fun {Obj} {S} x x_1 x_2 x_3 x_4 =>
  Logic.ProofTheory.CutFree.brecOn x_4 Logic.ProofTheory.DerivableCutFree.graft._f
    Logic.ProofTheory.CutFree.DerivationsOf.graft._f x x_3

Complexity: 209 (size of the value term)

Lean core dependencies: Eq, Eq.symm, HEq, List, Nonempty, Nonempty.elim, Prod, eq_of_heq

The same, branch by branch.

theorem Logic.ProofTheory.CutFree.DerivationsOf.graft {Obj : Type} {S : Logic.ProofTheory.Schema Obj  Prop}
  {P Q : List Obj} {ps : List (List Obj × Obj)} :
  ( b  Q, Logic.ProofTheory.DerivableCutFree S P b) 
     (a : Logic.ProofTheory.CutFree.DerivationsOf S Q ps),
      Nonempty (Logic.ProofTheory.CutFree.DerivationsOf S P ps)
Show details
fun {Obj} {S} x x_1 x_2 x_3 x_4 =>
  Logic.ProofTheory.CutFree.DerivationsOf.brecOn x_4 Logic.ProofTheory.DerivableCutFree.graft._f
    Logic.ProofTheory.CutFree.DerivationsOf.graft._f x x_3

Complexity: 217 (size of the value term)

Used by: (none)

Establishing every branch of a schema, one at a time, establishes them all.

theorem Logic.ProofTheory.CutFree.DerivationsOf.of_forall {Obj : Type}
  {S : Logic.ProofTheory.Schema Obj  Prop} {Γ : List Obj} {ps : List (List Obj × Obj)} :
  ( p  ps, Logic.ProofTheory.DerivableCutFree S p.1, Γ⟫ p.2) 
    Nonempty (Logic.ProofTheory.CutFree.DerivationsOf S Γ ps)
Show details
fun {Obj} {S} {Γ} x x_1 =>
  List.brecOn (motive := fun x =>
    ( p  x, Logic.ProofTheory.DerivableCutFree S p.1, Γ⟫ p.2) 
      Nonempty (Logic.ProofTheory.CutFree.DerivationsOf S Γ x))
    x Logic.ProofTheory.CutFree.DerivationsOf.of_forall._f x_1

Complexity: 301 (size of the value term)

Proof dependencies: Logic.ProofTheory.CutFree

Every deduction in a system generated by schemata can be replaced by a direct one.

theorem Logic.ProofTheory.Derivation.toCutFree {Obj : Type} {S : Logic.ProofTheory.Schema Obj  Prop}
  {P : List Obj} {a : Obj} :
   (a : Logic.ProofTheory.Derivation (Logic.ProofTheory.Schema.system S) P a),
    Logic.ProofTheory.DerivableCutFree S P a
Show details
fun {Obj} {S} {P} {a} a_1 => Logic.ProofTheory.Derivation.toCutFree._mutual (PSum.inl P, a, a_1⟩⟩)

Complexity: 221 (size of the value term)

Mathlib dependencies: Nonempty.some

The same, claim by claim.

theorem Logic.ProofTheory.DerivationsOf.forall_toCutFree {Obj : Type}
  {S : Logic.ProofTheory.Schema Obj  Prop} {ps : List (List Obj × Obj)} :
   (a : Logic.ProofTheory.DerivationsOf (Logic.ProofTheory.Schema.system S) ps),
     q  ps, Logic.ProofTheory.DerivableCutFree S q.1 q.2
Show details
fun {Obj} {S} {ps} a q a_1 =>
  Logic.ProofTheory.Derivation.toCutFree._mutual (PSum.inr ps, a, q, a_1⟩⟩⟩)

Complexity: 447 (size of the value term)

Proof dependencies: Logic.ProofTheory.Derivation

Lean core dependencies: Eq, Eq.symm, HEq, List, PSigma, Prod, eq_of_heq

Used by: (none)

Pasting is eliminable. Where the rules are schemata, a conclusion is deducible exactly when it is deducible without pasting. Deducibility is unchanged, so a certificate never needs a node that carries no rule of its own.

cut-elimination
theorem Logic.ProofTheory.derivable_iff_derivableCutFree {Obj : Type}
  {S : Logic.ProofTheory.Schema Obj  Prop} {P : List Obj} {a : Obj} :
  Logic.ProofTheory.Derivable (Logic.ProofTheory.Schema.system S) P a 
    Logic.ProofTheory.DerivableCutFree S P a
Show details
fun {Obj} {S} {P} {a} =>
  { mp := fun h => Logic.ProofTheory.Derivation.toCutFree (Nonempty.some h),
    mpr := fun h => Nonempty.intro (Nonempty.some h).toDerivation }

Complexity: 131 (size of the value term)

Mathlib dependencies: Nonempty.some

Lean core dependencies: Iff, List

Used by: (none)

Dependency diagram

Drag to pan, Ctrl+scroll (or Cmd+scroll, or pinch on a touch screen) to zoom, click a node to jump to it.

definitionlemmatheoremdeclared elsewheredependencyproof dependency
legend