Documentation

Foundation.Logic.LogicSymbol

Logic Symbols #

This file defines structure that has logical connectives ,,,,,¬ and their homomorphisms.

Main Definitions #

class LO.Arrow (α : Type u_1) :
Type u_1
  • arrow : ααα
Instances
class LO.Wedge (α : Type u_1) :
Type u_1
  • wedge : ααα
Instances
class LO.Vee (α : Type u_1) :
Type u_1
  • vee : ααα
Instances
class LO.DeMorgan (F : Type u_1) [LogicalConnective F] :
Instances
class LO.NegAbbrev (F : Type u_1) [Tilde F] [Arrow F] [Bot F] :

Introducing ∼φ as an abbreviation of φ ➝ ⊥.

Instances
@[match_pattern]
def LO.LogicalConnective.iff {α : Type u_1} [LogicalConnective α] (a b : α) :
α
Equations
Equations
  • One or more equations did not get rendered due to their size.
@[simp]
@[simp]
theorem LO.LogicalConnective.Prop.arrow_eq (φ ψ : Prop) :
φ ψ = (φψ)
@[simp]
theorem LO.LogicalConnective.Prop.and_eq (φ ψ : Prop) :
φ ψ = (φ ψ)
@[simp]
theorem LO.LogicalConnective.Prop.or_eq (φ ψ : Prop) :
φ ψ = (φ ψ)
@[simp]
theorem LO.LogicalConnective.Prop.iff_eq (φ ψ : Prop) :
φ ψ = (φ ψ)
class LO.LogicalConnective.HomClass (F : Type u_1) (α : outParam (Type u_2)) (β : outParam (Type u_3)) [LogicalConnective α] [LogicalConnective β] [FunLike F α β] :
  • map_top (f : F) : f =
  • map_bot (f : F) : f =
  • map_neg (f : F) (φ : α) : f (φ) = f φ
  • map_imply (f : F) (φ ψ : α) : f (φ ψ) = f φ f ψ
  • map_and (f : F) (φ ψ : α) : f (φ ψ) = f φ f ψ
  • map_or (f : F) (φ ψ : α) : f (φ ψ) = f φ f ψ
Instances
instance LO.LogicalConnective.HomClass.instCoeFunForall (F : Type u_1) (α : outParam (Type u_2)) (β : outParam (Type u_3)) [FunLike F α β] :
CoeFun F fun (x : F) => αβ
Equations
@[simp]
theorem LO.LogicalConnective.HomClass.map_iff (F : Type u_1) (α : outParam (Type u_2)) (β : outParam (Type u_3)) [LogicalConnective α] [LogicalConnective β] [FunLike F α β] [HomClass F α β] (f : F) (a b : α) :
f (a b) = f a f b
structure LO.LogicalConnective.Hom (α : Type u_1) (β : Type u_2) [LogicalConnective α] [LogicalConnective β] :
Type (max u_1 u_2)
  • toTr : αβ
  • map_top' : self.toTr =
  • map_bot' : self.toTr =
  • map_neg' (φ : α) : self.toTr (φ) = self.toTr φ
  • map_imply' (φ ψ : α) : self.toTr (φ ψ) = self.toTr φ self.toTr ψ
  • map_and' (φ ψ : α) : self.toTr (φ ψ) = self.toTr φ self.toTr ψ
  • map_or' (φ ψ : α) : self.toTr (φ ψ) = self.toTr φ self.toTr ψ
Instances For
Equations
  • One or more equations did not get rendered due to their size.
theorem LO.LogicalConnective.Hom.ext {α : Type u_1} {β : Type u_2} [LogicalConnective α] [LogicalConnective β] (f g : α →ˡᶜ β) (h : ∀ (x : α), f x = g x) :
f = g
Equations
@[simp]
theorem LO.LogicalConnective.Hom.app_id {α : Type u_1} [LogicalConnective α] (a : α) :
Hom.id a = a
def LO.LogicalConnective.Hom.comp {α : Type u_1} {β : Type u_2} {γ : Type u_3} [LogicalConnective α] [LogicalConnective β] [LogicalConnective γ] (g : β →ˡᶜ γ) (f : α →ˡᶜ β) :
α →ˡᶜ γ
Equations
  • g.comp f = { toTr := g f, map_top' := , map_bot' := , map_neg' := , map_imply' := , map_and' := , map_or' := }
@[simp]
theorem LO.LogicalConnective.Hom.app_comp {α : Type u_1} {β : Type u_2} {γ : Type u_3} [LogicalConnective α] [LogicalConnective β] [LogicalConnective γ] (g : β →ˡᶜ γ) (f : α →ˡᶜ β) (a : α) :
(g.comp f) a = g (f a)
  • verum : C
  • falsum : C
  • and {f g : F} : C fC gC (f g)
  • or {f g : F} : C fC gC (f g)
Instances
  • and {f g : F} : C fC gC (f g)
  • or {f g : F} : C fC gC (f g)
  • not {f : F} : C fC (f)
  • imply {f g : F} : C fC gC (f g)
Instances
class LO.Tilde.Subclosed {F : Type u_1} [Tilde F] (C : FProp) :
  • tilde_closed {φ : F} : C (φ)C φ
Instances
    class LO.Arrow.Subclosed {F : Type u_1} [Arrow F] (C : FProp) :
    • arrow_closed {φ ψ : F} : C (φ ψ)C φ C ψ
    Instances
      class LO.Wedge.Subclosed {F : Type u_1} [Wedge F] (C : FProp) :
      • wedge_closed {φ ψ : F} : C (φ ψ)C φ C ψ
      Instances
        class LO.Vee.Subclosed {F : Type u_1} [Vee F] (C : FProp) :
        • vee_closed {φ ψ : F} : C (φ ψ)C φ C ψ
        Instances
          Instances
            def LO.conjLt {α : Type u_1} [LogicalConnective α] (φ : α) :
            α
            Equations
            @[simp]
            theorem LO.conjLt_zero {α : Type u_1} [LogicalConnective α] (φ : α) :
            conjLt φ 0 =
            @[simp]
            theorem LO.conjLt_succ {α : Type u_1} [LogicalConnective α] (φ : α) (k : ) :
            conjLt φ (k + 1) = φ k conjLt φ k
            @[simp]
            theorem LO.hom_conj_prop {α : Type u_1} [LogicalConnective α] {F : Type u_3} {k : } [FunLike F α Prop] [LogicalConnective.HomClass F α Prop] (f : F) (φ : α) :
            f (conjLt φ k) i < k, f (φ i)
            def LO.disjLt {α : Type u_1} [LogicalConnective α] (φ : α) :
            α
            Equations
            @[simp]
            theorem LO.disjLt_zero {α : Type u_1} [LogicalConnective α] (φ : α) :
            disjLt φ 0 =
            @[simp]
            theorem LO.disjLt_succ {α : Type u_1} [LogicalConnective α] (φ : α) (k : ) :
            disjLt φ (k + 1) = φ k disjLt φ k
            @[simp]
            theorem LO.hom_disj_prop {α : Type u_1} [LogicalConnective α] {F : Type u_3} {k : } [FunLike F α Prop] [LogicalConnective.HomClass F α Prop] (f : F) (φ : α) :
            f (disjLt φ k) i < k, f (φ i)
            def Matrix.conj {α : Type u_1} [LO.LogicalConnective α] {n : } :
            (Fin nα)α
            Equations
            @[simp]
            theorem Matrix.conj_nil {α : Type u_1} [LO.LogicalConnective α] (v : Fin 0α) :
            @[simp]
            theorem Matrix.conj_cons {α : Type u_1} [LO.LogicalConnective α] {n : } {a : α} {v : Fin nα} :
            conj (a :> v) = a conj v
            @[simp]
            theorem Matrix.conj_hom_prop {α : Type u_1} [LO.LogicalConnective α] {F : Type u_2} {n : } [FunLike F α Prop] [LO.LogicalConnective.HomClass F α Prop] (f : F) (v : Fin nα) :
            f (conj v) = ∀ (i : Fin n), f (v i)
            theorem Matrix.hom_conj {β : Type u_3} {α : Type u_1} [LO.LogicalConnective α] [LO.LogicalConnective β] {F : Type u_2} {n : } [FunLike F α β] [LO.LogicalConnective.HomClass F α β] (f : F) (v : Fin nα) :
            f (conj v) = conj (f v)
            theorem Matrix.hom_conj₂ {β : Type u_3} {α : Type u_1} [LO.LogicalConnective α] [LO.LogicalConnective β] {F : Type u_2} {n : } [FunLike F α β] [LO.LogicalConnective.HomClass F α β] (f : F) (v : Fin nα) :
            f (conj v) = conj fun (i : Fin n) => f (v i)
            def Matrix.disj {α : Type u_1} [LO.LogicalConnective α] {n : } :
            (Fin nα)α
            Equations
            @[simp]
            theorem Matrix.disj_nil {α : Type u_1} [LO.LogicalConnective α] (v : Fin 0α) :
            @[simp]
            theorem Matrix.disj_cons {α : Type u_1} [LO.LogicalConnective α] {n : } {a : α} {v : Fin nα} :
            disj (a :> v) = a disj v
            @[simp]
            theorem Matrix.disj_hom_prop {α : Type u_1} [LO.LogicalConnective α] {F : Type u_2} {n : } [FunLike F α Prop] [LO.LogicalConnective.HomClass F α Prop] (f : F) (v : Fin nα) :
            f (disj v) = ∃ (i : Fin n), f (v i)
            theorem Matrix.hom_disj {β : Type u_3} {α : Type u_1} [LO.LogicalConnective α] [LO.LogicalConnective β] {F : Type u_2} {n : } [FunLike F α β] [LO.LogicalConnective.HomClass F α β] (f : F) (v : Fin nα) :
            f (disj v) = disj (f v)
            theorem Matrix.hom_disj' {β : Type u_3} {α : Type u_1} [LO.LogicalConnective α] [LO.LogicalConnective β] {F : Type u_2} {n : } [FunLike F α β] [LO.LogicalConnective.HomClass F α β] (f : F) (v : Fin nα) :
            f (disj v) = disj fun (i : Fin n) => f (v i)
            def List.conj {α : Type u_1} [LO.LogicalConnective α] :
            List αα
            Equations
            @[simp]
            theorem List.conj_nil {α : Type u_1} [LO.LogicalConnective α] :
            [].conj =
            @[simp]
            theorem List.conj_cons {α : Type u_1} [LO.LogicalConnective α] {a : α} {as : List α} :
            (a :: as).conj = a as.conj
            theorem List.map_conj {α : Type u_1} [LO.LogicalConnective α] {F : Type u_2} [FunLike F α Prop] [LO.LogicalConnective.HomClass F α Prop] (f : F) (l : List α) :
            f l.conj al, f a
            theorem List.map_conj_append {α : Type u_1} [LO.LogicalConnective α] {F : Type u_2} [FunLike F α Prop] [LO.LogicalConnective.HomClass F α Prop] (f : F) (l₁ l₂ : List α) :
            f (l₁ ++ l₂).conj f (l₁.conj l₂.conj)
            def List.disj {α : Type u_1} [LO.LogicalConnective α] :
            List αα
            Equations
            @[simp]
            theorem List.disj_nil {α : Type u_1} [LO.LogicalConnective α] :
            [].disj =
            @[simp]
            theorem List.disj_cons {α : Type u_1} [LO.LogicalConnective α] {a : α} {as : List α} :
            (a :: as).disj = a as.disj
            theorem List.map_disj {α : Type u_1} [LO.LogicalConnective α] {F : Type u_2} [FunLike F α Prop] [LO.LogicalConnective.HomClass F α Prop] (f : F) (l : List α) :
            f l.disj al, f a
            theorem List.map_disj_append {α : Type u_1} [LO.LogicalConnective α] {F : Type u_2} [FunLike F α Prop] [LO.LogicalConnective.HomClass F α Prop] (f : F) (l₁ l₂ : List α) :
            f (l₁ ++ l₂).disj f (l₁.disj l₂.disj)
            def List.conj₂ {F : Type u} [LO.LogicalConnective F] :
            List FF

            Remark: [φ].conj₂ = φ ≠ φ ⋏ ⊤ = [φ].conj

            Equations
            @[simp]
            @[simp]
            theorem List.conj₂_singleton {F : Type u} [LO.LogicalConnective F] {φ : F} :
            [φ] = φ
            @[simp]
            theorem List.conj₂_doubleton {F : Type u} [LO.LogicalConnective F] {φ ψ : F} :
            [φ, ψ] = φ ψ
            @[simp]
            theorem List.conj₂_cons_nonempty {F : Type u} [LO.LogicalConnective F] {a : F} {as : List F} (h : as [] := by assumption) :
            (a :: as) = a as
            def List.disj₂ {F : Type u} [LO.LogicalConnective F] :
            List FF

            Remark: [φ].disj = φ ≠ φ ⋎ ⊥ = [φ].disj

            Equations
            @[simp]
            @[simp]
            theorem List.disj₂_singleton {F : Type u} [LO.LogicalConnective F] {φ : F} :
            [φ] = φ
            @[simp]
            theorem List.disj₂_doubleton {F : Type u} [LO.LogicalConnective F] {φ ψ : F} :
            [φ, ψ] = φ ψ
            @[simp]
            theorem List.disj₂_cons_nonempty {F : Type u} [LO.LogicalConnective F] {a : F} {as : List F} (h : as [] := by assumption) :
            (a :: as) = a as
            noncomputable def Finset.conj {α : Type u_1} [LO.LogicalConnective α] (s : Finset α) :
            α
            Equations
            • s.conj = s.toList.conj
            theorem Finset.map_conj {α : Type u_2} [LO.LogicalConnective α] {F : Type u_1} [FunLike F α Prop] [LO.LogicalConnective.HomClass F α Prop] (f : F) (s : Finset α) :
            f s.conj as, f a
            theorem Finset.map_conj_union {α : Type u_2} [LO.LogicalConnective α] {F : Type u_1} [DecidableEq α] [FunLike F α Prop] [LO.LogicalConnective.HomClass F α Prop] (f : F) (s₁ s₂ : Finset α) :
            f (s₁ s₂).conj f (s₁.conj s₂.conj)
            noncomputable def Finset.disj {α : Type u_1} [LO.LogicalConnective α] (s : Finset α) :
            α
            Equations
            • s.disj = s.toList.disj
            theorem Finset.map_disj {α : Type u_2} [LO.LogicalConnective α] {F : Type u_1} [FunLike F α Prop] [LO.LogicalConnective.HomClass F α Prop] (f : F) (s : Finset α) :
            f s.disj as, f a
            theorem Finset.map_disj_union {α : Type u_2} [LO.LogicalConnective α] {F : Type u_1} [DecidableEq α] [FunLike F α Prop] [LO.LogicalConnective.HomClass F α Prop] (f : F) (s₁ s₂ : Finset α) :
            f (s₁ s₂).disj f (s₁.disj s₂.disj)