|
| 1 | +module |
| 2 | + |
| 3 | +public import Foundation.SecondOrder.Syntax.Rew |
| 4 | + |
| 5 | +@[expose] public section |
| 6 | + |
| 7 | +/-! |
| 8 | +# Second-order one-sided $\mathbf{LK}$ |
| 9 | +-/ |
| 10 | + |
| 11 | +namespace LO.SecondOrder |
| 12 | + |
| 13 | +open FirstOrder |
| 14 | + |
| 15 | +variable {L : Language} |
| 16 | + |
| 17 | +abbrev Sequent (L : Language) := List (Statement L) |
| 18 | + |
| 19 | +namespace Sequent |
| 20 | + |
| 21 | +def shift₀ (Γ : Sequent L) : Sequent L := Γ.map Semistatement.shift₀ |
| 22 | + |
| 23 | +@[simp] lemma shift₀_nil : shift₀ ([] : Sequent L) = [] := rfl |
| 24 | + |
| 25 | +@[simp] lemma shift₀_cons (φ : Statement L) (Γ : Sequent L) : |
| 26 | + shift₀ (φ :: Γ) = Semistatement.shift₀ φ :: shift₀ Γ := rfl |
| 27 | + |
| 28 | +def shift₁ (Γ : Sequent L) : Sequent L := Γ.map Semistatement.shift₁ |
| 29 | + |
| 30 | +@[simp] lemma shift₁_nil : shift₁ ([] : Sequent L) = [] := rfl |
| 31 | + |
| 32 | +@[simp] lemma shift₁_cons (φ : Statement L) (Γ : Sequent L) : |
| 33 | + shift₁ (φ :: Γ) = Semistatement.shift₁ φ :: shift₁ Γ := rfl |
| 34 | + |
| 35 | +instance : Tilde (Sequent L) := ⟨List.map (∼·)⟩ |
| 36 | + |
| 37 | +@[simp] lemma tilde_nil : ∼([] : Sequent L) = [] := rfl |
| 38 | + |
| 39 | +@[simp] lemma tilde_cons (φ : Statement L) (Γ : Sequent L) : |
| 40 | + ∼(φ :: Γ) = ∼φ :: ∼Γ := rfl |
| 41 | + |
| 42 | +end Sequent |
| 43 | + |
| 44 | +/-- Second-order one-sided $\mathbf{LK}$-derivation -/ |
| 45 | +inductive Derivation : Sequent L → Type _ |
| 46 | +| identity : Derivation [φ, ∼φ] |
| 47 | +| cut : Derivation (φ :: Γ) → Derivation (∼φ :: Γ) → Derivation Γ |
| 48 | +| wk : Derivation Γ → Γ ⊆ Δ → Derivation Δ |
| 49 | +| verum : Derivation [⊤] |
| 50 | +| and : Derivation (φ :: Γ) → Derivation (ψ :: Γ) → Derivation (φ ⋏ ψ :: Γ) |
| 51 | +| or : Derivation (φ :: ψ :: Γ) → Derivation (φ ⋎ ψ :: Γ) |
| 52 | +| all₀ {φ : Semistatement L 0 1} : Derivation (φ.free₀ :: Sequent.shift₀ Γ) → Derivation ((∀⁰ φ) :: Γ) |
| 53 | +| exs₀ {φ : Semistatement L 0 1} : Derivation (φ/[t] :: Γ) → Derivation ((∃⁰ φ) :: Γ) |
| 54 | +| all₁ {φ : Semistatement L 1 0} : Derivation (φ.free₁ :: Sequent.shift₁ Γ) → Derivation ((∀¹ φ) :: Γ) |
| 55 | +| exs₁ {φ : Semistatement L 1 0} : Derivation (φ/⟦ψ⟧ :: Γ) → Derivation ((∃¹ φ) :: Γ) |
| 56 | + |
| 57 | +scoped prefix:45 "⊢² " => Derivation |
| 58 | + |
| 59 | +namespace Derivation |
| 60 | + |
| 61 | +def cast {Γ Δ : Sequent L} (d : ⊢² Γ) (h : Γ = Δ) : ⊢² Δ := h ▸ d |
| 62 | + |
| 63 | +end Derivation |
| 64 | + |
| 65 | +abbrev Proof (φ : Sentence L) := ⊢² [(φ : Statement L)] |
| 66 | + |
| 67 | +inductive Proof.Symbol (L : Language) : Type |
| 68 | +| symbol |
| 69 | + |
| 70 | +notation "𝐋𝐊²" => Proof.Symbol.symbol |
| 71 | + |
| 72 | +instance : Entailment (Proof.Symbol L) (Sentence L) := ⟨fun _ ↦ Proof⟩ |
| 73 | + |
| 74 | +/-! ## Proof system with axioms -/ |
| 75 | + |
| 76 | +abbrev Schema (L : Language) := Set (Statement L) |
| 77 | + |
| 78 | +protected structure Schema.Derivation (𝓢 : Schema L) (φ : Statement L) where |
| 79 | + axioms : Sequent L |
| 80 | + derivation : Derivation (φ :: ∼axioms) |
| 81 | + isInstance : ∀ φ ∈ axioms, φ ∈ 𝓢 |
| 82 | + |
| 83 | +instance : Entailment (Schema L) (Statement L) := ⟨Schema.Derivation⟩ |
| 84 | + |
| 85 | +/-! ## Theory: a set of provable sentences -/ |
| 86 | + |
| 87 | +abbrev Theory (L : Language) := Set (Sentence L) |
| 88 | + |
| 89 | +instance : Entailment (Theory L) (Sentence L) := ⟨fun T φ ↦ PLift (φ ∈ T)⟩ |
| 90 | + |
| 91 | +def Schema.theory (𝓢 : Schema L) : Theory L := {φ | 𝓢 ⊢ ↑φ} |
| 92 | + |
| 93 | +namespace Theory |
| 94 | + |
| 95 | +variable {T : Theory L} |
| 96 | + |
| 97 | +lemma provable_def {φ : Sentence L} : T ⊢ φ ↔ φ ∈ T := |
| 98 | + ⟨fun h ↦ PLift.down h.some, fun h ↦ ⟨⟨h⟩⟩⟩ |
| 99 | + |
| 100 | +@[simp] lemma schema_theory_def {𝓢 : Schema L} {φ : Sentence L} : |
| 101 | + 𝓢.theory ⊢ φ ↔ 𝓢 ⊢ ↑φ := by simp [provable_def, Schema.theory] |
| 102 | + |
| 103 | +end Theory |
| 104 | + |
| 105 | +end LO.SecondOrder |
| 106 | + |
| 107 | +end |
0 commit comments