Skip to content

Commit 1bdfc5e

Browse files
authored
add(SecondOrder): second-order LK (#792)
1 parent 7b9155c commit 1bdfc5e

3 files changed

Lines changed: 319 additions & 46 deletions

File tree

Foundation.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,7 @@ public import Foundation.ProvabilityLogic.Realization
529529
public import Foundation.ProvabilityLogic.S.Completeness
530530
public import Foundation.ProvabilityLogic.S.Soundness
531531
public import Foundation.ProvabilityLogic.SolovaySentences
532+
public import Foundation.SecondOrder.Derivation
532533
public import Foundation.SecondOrder.Syntax.Formula
533534
public import Foundation.SecondOrder.Syntax.Rew
534535
public import Foundation.Semantics.Algebra.Modal.Basic
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
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

Comments
 (0)