Documentation

Linglib.Logic.Team.BSML.Completeness

Completeness of natural deduction for BSML #

The natural deduction system Derives of NaturalDeduction.lean is complete: a consequence that holds on every model is derivable from finitely many premises. The proof follows the normal-form strategy of Aloni, Anttila and Yang. The world types of Characteristic.lean are the worlds of one universal model, and each type's Hintikka formula holds exactly at it there. A set of types T has the strong Hintikka formula θ_T, the disjunction of the formulas χ_τ ∧ NE, which derives every formula the team T supports. Conversely, the ⊥NE-translation rules split every formula into the cases θ_T for the teams supporting it.

Main definitions #

Main results #

Implementation notes #

Successor sets are finite, so completeness holds for finite premise sets only. No team supports {◇pₙ | n ∈ ℕ} ∪ {□¬(pᵢ ∧ pⱼ) | i ≠ j} ∪ {NE}, yet each of its finite subsets is satisfiable. The first sections derive general rules of the system.

References #

Derived propositional rules #

theorem BSML.Derives.disjE' {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ ψ χ : Formula Atom} (h : Derives Γ (φ.disj ψ)) (h₁ : Derives {φ} χ) (h₂ : Derives {ψ} χ) :
Derives Γ χ
theorem BSML.Derives.disjMonLeft {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ ψ χ : Formula Atom} (h : Derives Γ (φ.disj ψ)) (h' : Derives {φ} χ) :
Derives Γ (χ.disj ψ)
theorem BSML.Derives.of_disj_self {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ : Formula Atom} (h : Derives Γ (φ.disj φ)) :
Derives Γ φ
theorem BSML.Derives.disj_assoc {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ ψ χ : Formula Atom} (h : Derives Γ ((φ.disj ψ).disj χ)) :
Derives Γ (φ.disj (ψ.disj χ))
theorem BSML.Derives.disj_left_comm {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ ψ χ : Formula Atom} (h : Derives Γ (φ.disj (ψ.disj χ))) :
Derives Γ (ψ.disj (φ.disj χ))
theorem BSML.Derives.disj_falsum {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ : Formula Atom} (h : Derives Γ (φ.disj Formula.falsum)) :
Derives Γ φ
theorem BSML.Derives.of_falsum {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {α : Formula Atom} (h : Derives Γ Formula.falsum) (hα : α.NEFree) :
Derives Γ α
theorem BSML.derives_em {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {α : Formula Atom} (hα : α.NEFree) :
Derives Γ (α.disj α.neg)
theorem BSML.derives_verum {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} :
theorem BSML.Derives.bigConj_of_forall {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L : List (Formula Atom)} (h : ∀ x ∈ L, Derives Γ x) :
theorem BSML.Derives.of_bigConj {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L : List (Formula Atom)} (h : Derives Γ (bigConj L)) {x : Formula Atom} (hx : x ∈ L) :
Derives Γ x
theorem BSML.Derives.bigDisj_elim {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {χ : Formula Atom} {L : List (Formula Atom)} (h : Derives Γ (bigDisj L)) (hL : ∀ x ∈ L, Derives {x} χ) (h₀ : Derives {Formula.falsum} χ) :
Derives Γ χ
theorem BSML.Derives.bigDisj_of_mem {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L : List (Formula Atom)} (hL : ∀ y ∈ L, y.NEFree) {x : Formula Atom} (hx : x ∈ L) (h : Derives Γ x) :
theorem BSML.Derives.bigDisj_mono {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L L' : List (Formula Atom)} (hL' : ∀ y ∈ L', y.NEFree) (h : Derives Γ (bigDisj L)) (hsub : ∀ x ∈ L, Derives {x} (bigDisj L')) :

A finite disjunction derives a classical one when each of its disjuncts does.

theorem BSML.Derives.bigDisj_expand {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L : List (Formula Atom)} {x : Formula Atom} (hx : x ∈ L) (h : Derives Γ (bigDisj L)) :
Derives Γ (x.disj (bigDisj L))
theorem BSML.Derives.bigDisj_absorb {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L : List (Formula Atom)} {x : Formula Atom} (hx : x ∈ L) (h : Derives Γ (x.disj (bigDisj L))) :
theorem BSML.Derives.bigDisj_merge {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L L' : List (Formula Atom)} (hsub : ∀ x ∈ L, x ∈ L') (h : Derives Γ ((bigDisj L).disj (bigDisj L'))) :
theorem BSML.Derives.bigDisj_spread {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L L' : List (Formula Atom)} (hsub : ∀ x ∈ L', x ∈ L) (h : Derives Γ (bigDisj L)) :
Derives Γ ((bigDisj L').disj (bigDisj L))
theorem BSML.Derives.bigDisj_perm {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L L' : List (Formula Atom)} (hperm : ∀ (x : Formula Atom), x ∈ L ↔ x ∈ L') (h : Derives Γ (bigDisj L)) :
theorem BSML.Derives.bigDisj_append {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L L' : List (Formula Atom)} (h : Derives Γ (bigDisj (L ++ L'))) :
Derives Γ ((bigDisj L).disj (bigDisj L'))
theorem BSML.Derives.bigDisj_of_append {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L L' : List (Formula Atom)} (h : Derives Γ ((bigDisj L).disj (bigDisj L'))) :
Derives Γ (bigDisj (L ++ L'))
theorem BSML.Derives.possJoin' {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ ψ : Formula Atom} (h₁ : Derives Γ φ.poss) (h₂ : Derives Γ ψ.poss) :
Derives Γ (φ.disj ψ).poss
theorem BSML.Derives.necMap {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ ψ : Formula Atom} (h : Derives Γ φ.nec) (h' : Derives {φ} ψ) :
Derives Γ ψ.nec
theorem BSML.Derives.poss_of_falsum {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ : Formula Atom} (h : Derives Γ Formula.falsum) :

The empty team supports every possibility.

theorem BSML.Derives.nec_of_falsum {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ : Formula Atom} (h : Derives Γ Formula.falsum) :
Derives Γ φ.nec

The empty team supports every necessity.

theorem BSML.Derives.nec_disj_conj_ne {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ ψ : Formula Atom} (h : Derives Γ (φ.disj ψ).nec) (h' : Derives Γ φ.poss) :

With ◇φ, a necessary disjunction □(φ ∨ ψ) conjoins NE to φ ([AAY24] Lemma 4.22 (ii), right to left).

theorem BSML.Derives.poss_bigDisj {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L : List (Formula Atom)} (hL : L ≠ []) (h : ∀ x ∈ L, Derives Γ x.poss) :

◇Join extends to nonempty lists.

theorem BSML.Derives.nec_bigDisjNE {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L : List (Formula Atom)} (h : Derives Γ (bigDisj L).nec) (hL : ∀ x ∈ L, Derives Γ x.poss) :

With the possibility of each disjunct, a necessary disjunction conjoins NE to every disjunct ([AAY24] Lemma 4.23 (ii), right to left).

theorem BSML.Derives.of_bigDisjNE {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L : List (Formula Atom)} (hL : ∀ x ∈ L, x.NEFree) (h : Derives Γ (bigDisjNE L)) :
theorem BSML.Derives.ne_of_bigDisjNE {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L : List (Formula Atom)} (hL : L ≠ []) (h : Derives Γ (bigDisjNE L)) :
theorem BSML.Derives.poss_of_poss_bigDisjNE {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L : List (Formula Atom)} (h : Derives Γ (bigDisjNE L).poss) {x : Formula Atom} (hx : x ∈ L) :
theorem BSML.Derives.poss_of_nec_bigDisjNE {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {L : List (Formula Atom)} (hL : L ≠ []) (h : Derives Γ (bigDisjNE L).nec) {x : Formula Atom} (hx : x ∈ L) :

The universal model #

noncomputable def BSML.univModel {Atom : Type u_1} {n : ℕ} (e : Fin n → Atom) :
ModalLogic.KripkeModel ((k : ℕ) × WorldType n k) Atom

In the universal model each type is a world, whose successors are its successor types.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    @[instance_reducible]
    noncomputable instance BSML.instDecidableRelSigmaNatWorldTypeValUnivModel {Atom : Type u_1} {n : ℕ} (e : Fin n → Atom) :
    DecidableRel (univModel e).val
    Equations
    def BSML.WorldType.world {n : ℕ} (k : ℕ) (τ : WorldType n k) :
    (k : ℕ) × WorldType n k

    world k τ is the type τ as a world of the universal model.

    Equations
    Instances For
      theorem BSML.WorldType.world_injective {n : ℕ} (k : ℕ) :
      Function.Injective (world k)
      theorem BSML.univModel_val {Atom : Type u_1} {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) (i : Fin n) (w : (k : ℕ) × WorldType n k) :
      (univModel e).val (e i) w ↔ w.snd.val i = true
      theorem BSML.univModel_access_succ {Atom : Type u_1} {n : ℕ} {e : Fin n → Atom} {k : ℕ} (τ : WorldType n (k + 1)) :
      (univModel e).access (WorldType.world (k + 1) τ) = Finset.image (WorldType.world k) τ.2
      theorem BSML.worldType_univModel {Atom : Type u_1} {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) (k : ℕ) (τ : WorldType n k) :
      worldType e (univModel e) k (WorldType.world k τ) = τ
      theorem BSML.realize_hintikka {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) (k : ℕ) (τ τ' : WorldType n k) :
      Realize (univModel e) (hintikka e k τ) (WorldType.world k τ') ↔ τ' = τ

      The Hintikka formula of τ holds exactly at τ.

      Teams of types #

      def BSML.Formula.AtomsIn {Atom : Type u_1} (S : Set Atom) :
      Formula Atom → Prop

      The atoms occurring in a formula all lie in S.

      Equations
      Instances For
        theorem BSML.support_image_iff {Atom : Type u_1} {n : ℕ} {e : Fin n → Atom} {k : ℕ} {φ : Formula Atom} (hφ : φ.NEFree) (T : Finset (WorldType n k)) :
        support (univModel e) φ (Finset.image (WorldType.world k) T) ↔ ∀ τ ∈ T, Realize (univModel e) φ (WorldType.world k τ)
        theorem BSML.support_strongHintikka {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) {k : ℕ} (T T' : Finset (WorldType n k)) :
        support (univModel e) (strongHintikka e T) (Finset.image (WorldType.world k) T') ↔ T' = T

        The strong Hintikka formula of T is supported exactly by the team of the types in T.

        Derivations from Hintikka formulas #

        theorem BSML.hintikka_derives_literals {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} {k : ℕ} (τ : WorldType n k) :
        Derives {hintikka e k τ} (literals e τ.val)
        theorem BSML.literals_derives_literal {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (a : Fin n → Bool) (i : Fin n) :
        Derives {literals e a} (literal e i (a i))
        theorem BSML.hintikka_derives_poss {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} {k : ℕ} (τ : WorldType n (k + 1)) {σ : WorldType n k} (hσ : σ ∈ τ.2) :
        Derives {hintikka e (k + 1) τ} (hintikka e k σ).poss
        theorem BSML.hintikka_derives_nec {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} {k : ℕ} (τ : WorldType n (k + 1)) :
        Derives {hintikka e (k + 1) τ} (strongHintikka e τ.2).nec
        theorem BSML.Derives.strongHintikka_elim {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} {k : ℕ} {T : Finset (WorldType n k)} {Γ : Set (Formula Atom)} {χ : Formula Atom} (h : Derives Γ (strongHintikka e T)) (hT : ∀ τ ∈ T, Derives {(hintikka e k τ).conj Formula.ne} χ) (h₀ : Derives {Formula.falsum} χ) :
        Derives Γ χ
        theorem BSML.strongHintikka_union_derives {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} {k : ℕ} (T₁ T₂ : Finset (WorldType n k)) :
        Derives {strongHintikka e (T₁ ∪ T₂)} ((strongHintikka e T₁).disj (strongHintikka e T₂))
        theorem BSML.disj_strongHintikka_derives {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} {k : ℕ} (T₁ T₂ : Finset (WorldType n k)) :
        Derives {(strongHintikka e T₁).disj (strongHintikka e T₂)} (strongHintikka e (T₁ ∪ T₂))
        theorem BSML.Derives.poss_strongHintikka {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} {k : ℕ} {U : Finset (WorldType n k)} {Γ : Set (Formula Atom)} (hU : U.Nonempty) (h : ∀ σ ∈ U, Derives Γ (hintikka e k σ).poss) :

        Strong Hintikka formulas derive what their teams support #

        theorem BSML.derives_of_support {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) (φ : Formula Atom) {k : ℕ} :
        φ.modalDepth ≤ k → Formula.AtomsIn (Set.range e) φ → ∀ (T : Finset (WorldType n k)), (support (univModel e) φ (Finset.image (WorldType.world k) T) → Derives {strongHintikka e T} φ) ∧ (antiSupport (univModel e) φ (Finset.image (WorldType.world k) T) → Derives {strongHintikka e T} φ.neg)

        A strong Hintikka formula derives every formula its team supports, and the negation of every formula its team anti-supports.

        Exhaustiveness of the types #

        theorem BSML.Derives.conj_bigDisj {Atom : Type u_1} [Inhabited Atom] {A : Formula Atom} (hA : A.NEFree) {L : List (Formula Atom)} {Γ : Set (Formula Atom)} :
        Derives Γ (A.conj (bigDisj L)) → Derives Γ (bigDisj (List.map A.conj L))

        ∧ with a classical formula distributes over a finite disjunction.

        theorem BSML.Derives.conj_comm {Atom : Type u_1} [Inhabited Atom] {Γ : Set (Formula Atom)} {φ ψ : Formula Atom} (h : Derives Γ (φ.conj ψ)) :
        Derives Γ (ψ.conj φ)
        theorem BSML.derives_bigDisj_literals {Atom : Type u_1} [Inhabited Atom] {n : ℕ} (e : Fin n → Atom) (Γ : Set (Formula Atom)) :
        Derives Γ (bigDisj (List.map (literals e) Finset.univ.toList))

        Every world has some atomic type.

        noncomputable def BSML.succLit {Atom : Type u_1} [Inhabited Atom] {n : ℕ} (e : Fin n → Atom) {k : ℕ} (S : Finset (WorldType n k)) (σ : WorldType n k) :
        Formula Atom

        succLit e S σ says whether σ is a successor type in S.

        Equations
        Instances For
          theorem BSML.neFree_succLit {Atom : Type u_1} [Inhabited Atom] {n : ℕ} (e : Fin n → Atom) {k : ℕ} (S : Finset (WorldType n k)) (σ : WorldType n k) :
          (succLit e S σ).NEFree
          noncomputable def BSML.succPart {Atom : Type u_1} [Inhabited Atom] {n : ℕ} (e : Fin n → Atom) {k : ℕ} (S : Finset (WorldType n k)) :
          Formula Atom

          succPart e S is the modal part of the Hintikka formula of a type with successor types S.

          Equations
          Instances For
            theorem BSML.neFree_succPart {Atom : Type u_1} [Inhabited Atom] {n : ℕ} (e : Fin n → Atom) {k : ℕ} (S : Finset (WorldType n k)) :
            theorem BSML.neFree_bigDisj_hintikka {Atom : Type u_1} [Inhabited Atom] {n : ℕ} (e : Fin n → Atom) {k : ℕ} (L : List (WorldType n k)) :
            (bigDisj (List.map (hintikka e k) L)).NEFree
            theorem BSML.derives_bigDisj_hintikka {Atom : Type u_1} [Inhabited Atom] {n : ℕ} (e : Fin n → Atom) (k : ℕ) (Γ : Set (Formula Atom)) :
            Derives Γ (bigDisj (List.map (hintikka e k) Finset.univ.toList))

            Exhaustiveness. Every world has some type of each depth.

            Classical normal forms #

            theorem BSML.Derives.of_conj_ne {Atom : Type u_1} [Inhabited Atom] {φ β : Formula Atom} (hβ : β.NEFree) (h : Derives {φ.conj Formula.ne} β) :
            Derives {φ} β

            A classical consequence of φ ∧ NE follows from φ, since the ⊥-case of ⊥NETrs is ex falso.

            theorem BSML.strongHintikka_singleton {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} {k : ℕ} (τ : WorldType n k) :
            theorem BSML.hintikka_derives {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) {β : Formula Atom} (hβ : β.NEFree) {k : ℕ} (hk : β.modalDepth ≤ k) (hA : Formula.AtomsIn (Set.range e) β) (τ : WorldType n k) :
            (Realize (univModel e) β (WorldType.world k τ) → Derives {hintikka e k τ} β) ∧ (¬Realize (univModel e) β (WorldType.world k τ) → Derives {hintikka e k τ} β.neg)

            A Hintikka formula derives the classical formulas true at its type, and the negations of those false there.

            theorem BSML.derives_bigDisj_realize {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) {β : Formula Atom} (hβ : β.NEFree) {k : ℕ} (hk : β.modalDepth ≤ k) (hA : Formula.AtomsIn (Set.range e) β) :
            Derives {β} (bigDisj (List.map (hintikka e k) {τ : WorldType n k | Realize (univModel e) β (WorldType.world k τ)}.toList))

            Classical normal form. A classical formula derives the disjunction of the Hintikka formulas of the types at which it is true.

            Splitting into cases #

            def BSML.Splits {Atom : Type u_1} [Inhabited Atom] (A : Formula Atom) (S : Set (Formula Atom)) :

            A splits into the cases S when whatever follows from each case follows from A.

            Equations
            Instances For
              theorem BSML.Splits.of_derives {Atom : Type u_1} [Inhabited Atom] {A B : Formula Atom} (h : Derives {A} B) :
              Splits A {B}
              theorem BSML.Splits.mono {Atom : Type u_1} [Inhabited Atom] {A : Formula Atom} {S S' : Set (Formula Atom)} (h : Splits A S) (hS : S ⊆ S') :
              Splits A S'
              theorem BSML.Splits.trans {Atom : Type u_1} [Inhabited Atom] {A : Formula Atom} {S S' : Set (Formula Atom)} (h : Splits A S) (h' : ∀ σ ∈ S, Splits σ S') :
              Splits A S'
              theorem BSML.Splits.of_derives_mem {Atom : Type u_1} [Inhabited Atom] {A B : Formula Atom} {S : Set (Formula Atom)} (h : Derives {A} B) (hB : B ∈ S) :
              Splits A S

              Splittable contexts #

              def BSML.Formula.Context.comp {Atom : Type u_1} :
              Context Atom → Context Atom → Context Atom

              C.comp D places D in the hole of C.

              Equations
              Instances For
                @[simp]
                theorem BSML.Formula.Context.fill_comp {Atom : Type u_1} (C D : Context Atom) (φ : Formula Atom) :
                (C.comp D).fill φ = C.fill (D.fill φ)
                theorem BSML.Formula.Context.Distributive.comp {Atom : Type u_1} {C D : Context Atom} (hC : C.Distributive) (hD : D.Distributive) :

                A context is splittable when it is distributive below at most one modality at its top.

                Equations
                Instances For
                  theorem BSML.Formula.Context.Splittable.comp {Atom : Type u_1} {C D : Context Atom} (hC : C.Splittable) (hD : D.Distributive) :
                  def BSML.Formula.Context.extra {Atom : Type u_1} [Inhabited Atom] :
                  Context Atom → Set (Formula Atom)

                  A context with a modality on top adds the case of the empty team.

                  Equations
                  Instances For
                    theorem BSML.Formula.Context.extra_comp {Atom : Type u_1} [Inhabited Atom] {C D : Context Atom} (hD : D.Distributive) :
                    (C.comp D).extra = C.extra
                    theorem BSML.Splits.fill_split {Atom : Type u_1} [Inhabited Atom] {C : Formula.Context Atom} (hC : C.Splittable) (ψ : Formula Atom) :

                    The ⊥NE-translation rules split a splittable context.

                    theorem BSML.Splits.fill_strongFalsum {Atom : Type u_1} [Inhabited Atom] {C : Formula.Context Atom} (hC : C.Splittable) :

                    A strong contradiction in a splittable context leaves only the context's extra case.

                    theorem BSML.conj_ne_disj_strongHintikka_derives {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} {k : ℕ} (τ : WorldType n k) (T : Finset (WorldType n k)) :
                    Derives {((hintikka e k τ).conj Formula.ne).disj (strongHintikka e T)} (strongHintikka e (insert τ T))
                    theorem BSML.splits_bigDisj_hintikka {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} {k : ℕ} (L : List (WorldType n k)) {C : Formula.Context Atom} :
                    C.Splittable → Splits (C.fill (bigDisj (List.map (hintikka e k) L))) ((fun (T : Finset (WorldType n k)) => C.fill (strongHintikka e T)) '' {T : Finset (WorldType n k) | T ⊆ L.toFinset})

                    A disjunction of Hintikka formulas in a splittable context splits into the strong Hintikka formulas of its subsets.

                    Depth and atoms of the Hintikka formulas #

                    theorem BSML.Formula.AtomsIn.mono {Atom : Type u_1} {S S' : Set Atom} (hS : S ⊆ S') {φ : Formula Atom} (h : AtomsIn S φ) :
                    AtomsIn S' φ
                    theorem BSML.atomsIn_bigConj {Atom : Type u_1} [Inhabited Atom] {S : Set Atom} (hd : default ∈ S) {L : List (Formula Atom)} (hL : ∀ x ∈ L, Formula.AtomsIn S x) :
                    theorem BSML.atomsIn_bigDisj {Atom : Type u_1} [Inhabited Atom] {S : Set Atom} (hd : default ∈ S) {L : List (Formula Atom)} (hL : ∀ x ∈ L, Formula.AtomsIn S x) :
                    theorem BSML.atomsIn_literals {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (hd : default ∈ Set.range e) (a : Fin n → Bool) :
                    Formula.AtomsIn (Set.range e) (literals e a)
                    theorem BSML.atomsIn_hintikka {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (hd : default ∈ Set.range e) (k : ℕ) (τ : WorldType n k) :
                    Formula.AtomsIn (Set.range e) (hintikka e k τ)

                    Distinct strong Hintikka formulas contradict #

                    theorem BSML.conj_ne_disj_derives_strongFalsum {Atom : Type u_1} [Inhabited Atom] {φ α : Formula Atom} (hα : α.NEFree) :

                    A disjunction with a disjunct α ∧ NE contradicts ¬α ([AAY24] Lemma 4.13).

                    theorem BSML.strongHintikka_conj_derives {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) (hd : default ∈ Set.range e) {k : ℕ} {T₁ T₂ : Finset (WorldType n k)} (hT : T₁ ≠ T₂) :

                    Distinct strong Hintikka formulas contradict each other ([AAY24] Lemma 4.11).

                    Splitting every formula into strong Hintikka cases #

                    theorem BSML.realize_bigConj_poss_hintikka {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) {k : ℕ} (U : Finset (WorldType n k)) (τ : WorldType n (k + 1)) :
                    Realize (univModel e) (bigConj (List.map (fun (σ : WorldType n k) => (hintikka e k σ).poss) U.toList)) (WorldType.world (k + 1) τ) ↔ U ⊆ τ.2
                    theorem BSML.realize_nec_bigDisj_hintikka {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) {k : ℕ} (U : Finset (WorldType n k)) (τ : WorldType n (k + 1)) :
                    Realize (univModel e) (bigDisj (List.map (hintikka e k) U.toList)).nec (WorldType.world (k + 1) τ) ↔ τ.2 ⊆ U
                    theorem BSML.splits_of_derives_bigDisj {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} {A : Formula Atom} {k : ℕ} {L : List (WorldType n k)} {P : Set (Finset (WorldType n k))} (h : Derives {A} (bigDisj (List.map (hintikka e k) L))) (hP : ∀ T ⊆ L.toFinset, T ∈ P) {C : Formula.Context Atom} (hC : C.Splittable) :
                    Splits (C.fill A) ((fun (T : Finset (WorldType n k)) => C.fill (strongHintikka e T)) '' P ∪ C.extra)
                    theorem BSML.splits_fill_of_neFree {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) {β : Formula Atom} (hβ : β.NEFree) {k : ℕ} (hk : β.modalDepth ≤ k) (hA : Formula.AtomsIn (Set.range e) β) {C : Formula.Context Atom} (hC : C.Splittable) :
                    Splits (C.fill β) ((fun (T : Finset (WorldType n k)) => C.fill (strongHintikka e T)) '' {T : Finset (WorldType n k) | support (univModel e) β (Finset.image (WorldType.world k) T)} ∪ C.extra)
                    theorem BSML.splits_fill {Atom : Type u_1} [Inhabited Atom] {n : ℕ} {e : Fin n → Atom} (he : Function.Injective e) (hd : default ∈ Set.range e) (φ : Formula Atom) {k : ℕ} :
                    φ.modalDepth ≤ k → Formula.AtomsIn (Set.range e) φ → ∀ {C : Formula.Context Atom}, C.Splittable → Splits (C.fill φ) ((fun (T : Finset (WorldType n k)) => C.fill (strongHintikka e T)) '' {T : Finset (WorldType n k) | support (univModel e) φ (Finset.image (WorldType.world k) T)} ∪ C.extra) ∧ Splits (C.fill φ.neg) ((fun (T : Finset (WorldType n k)) => C.fill (strongHintikka e T)) '' {T : Finset (WorldType n k) | antiSupport (univModel e) φ (Finset.image (WorldType.world k) T)} ∪ C.extra)

                    In a splittable context, a formula splits into the strong Hintikka formulas of the teams supporting it, and its negation into those of the teams anti-supporting it, together with the context's extra case.

                    Completeness #

                    def BSML.Formula.atomList {Atom : Type u_1} :
                    Formula Atom → List Atom

                    φ.atomList lists the atoms occurring in φ.

                    Equations
                    Instances For
                      theorem BSML.Formula.atomsIn_atomList {Atom : Type u_1} (φ : Formula Atom) :
                      AtomsIn {p : Atom | p ∈ φ.atomList} φ
                      theorem BSML.completeness {Atom : Type u_1} [Inhabited Atom] {Γ : Finset (Formula Atom)} {φ : Formula Atom} (h : ∀ (W : Type) [inst : DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (s : Finset W), (∀ γ ∈ Γ, support M γ s) → support M φ s) :
                      Derives (↑Γ) φ

                      Completeness ([AAY24] Theorem 4.43) for finite premise sets. A consequence that holds on every model is derivable.

                      theorem BSML.derives_iff {Atom : Type u_1} [Inhabited Atom] {Γ : Finset (Formula Atom)} {φ : Formula Atom} :
                      Derives (↑Γ) φ ↔ ∀ (W : Type) [inst : DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (s : Finset W), (∀ γ ∈ Γ, support M γ s) → support M φ s

                      For finite premise sets, derivability is consequence on every model.