Documentation

Linglib.Logic.Modal.Extensional

Extensional operators #

An operator O on intensions W → α is extensional at w when its value at w depends on its argument only through the argument's extension at w, i.e. O · w factors through evaluation at w. The pointwise connectives are extensional; quantifiers over indices such as ModalLogic.nec are not. Extensionality is closed under the pointwise connectives and under composition, so scope-inertness lifts through a whole stack of extensional operators.

Main definitions #

Main results #

def ModalLogic.IsExtensionalAt {W : Type u_1} {α : Type u_2} {β : Type u_3} (O : (Wα)Wβ) (w : W) :

O is extensional at w: its value at w depends on the argument intension only through the argument's extension at w, i.e. O · w factors through evaluation at w.

Equations
Instances For
    def ModalLogic.IsExtensional {W : Type u_1} {α : Type u_2} {β : Type u_3} (O : (Wα)Wβ) :

    O is extensional at every index.

    Equations
    Instances For
      theorem ModalLogic.isExtensionalAt_iff_factorsThrough {W : Type u_1} {α : Type u_2} {β : Type u_3} (O : (Wα)Wβ) (w : W) :
      IsExtensionalAt O w Function.FactorsThrough (fun (x : Wα) => O x w) fun (x : Wα) => x w
      theorem ModalLogic.not_isExtensionalAt_iff_exists_witness {W : Type u_1} {α : Type u_2} {β : Type u_3} {O : (Wα)Wβ} {w : W} :
      ¬IsExtensionalAt O w (p : Wα), (q : Wα), p w = q w O p w O q w
      theorem ModalLogic.IsExtensionalAt.eval {W : Type u_1} {α : Type u_2} {w : W} :
      IsExtensionalAt (fun (p : Wα) (w' : W) => p w') w
      theorem ModalLogic.IsExtensionalAt.const {W : Type u_1} {α : Type u_2} {w : W} (P : WProp) :
      IsExtensionalAt (fun (x : Wα) (w' : W) => P w') w
      theorem ModalLogic.IsExtensionalAt.neg {W : Type u_1} {w : W} :
      IsExtensionalAt (fun (p : WProp) (w' : W) => ¬p w') w

      Pointwise negation is extensional: negation is not an intensional operator.

      theorem ModalLogic.IsExtensionalAt.and {W : Type u_1} {α : Type u_2} {w : W} {O₁ O₂ : (Wα)WProp} (h₁ : IsExtensionalAt O₁ w) (h₂ : IsExtensionalAt O₂ w) :
      IsExtensionalAt (fun (p : Wα) (w' : W) => O₁ p w' O₂ p w') w
      theorem ModalLogic.IsExtensionalAt.or {W : Type u_1} {α : Type u_2} {w : W} {O₁ O₂ : (Wα)WProp} (h₁ : IsExtensionalAt O₁ w) (h₂ : IsExtensionalAt O₂ w) :
      IsExtensionalAt (fun (p : Wα) (w' : W) => O₁ p w' O₂ p w') w
      theorem ModalLogic.IsExtensionalAt.not {W : Type u_1} {α : Type u_2} {w : W} {O : (Wα)WProp} (h : IsExtensionalAt O w) :
      IsExtensionalAt (fun (p : Wα) (w' : W) => ¬O p w') w
      theorem ModalLogic.IsExtensionalAt.comp {W : Type u_1} {α : Type u_2} {β : Type u_3} {w : W} {O₁ : (Wα)Wβ} {O₂ : (Wβ)WProp} (h₂ : IsExtensionalAt O₂ w) (h₁ : IsExtensionalAt O₁ w) :
      IsExtensionalAt (fun (p : Wα) (w' : W) => O₂ (fun (s : W) => O₁ p s) w') w

      Extensional operators compose: scope-inertness lifts through a stack of them.