Documentation

equational_theories.MagmaLaw

structure Law.MagmaLaw (α : Type u_1) :
Type u_1
Instances For
    theorem Law.MagmaLaw.ext {α : Type u_1} {x y : MagmaLaw α} (lhs : x.lhs = y.lhs) (rhs : x.rhs = y.rhs) :
    x = y
    theorem Law.MagmaLaw.ext_iff {α : Type u_1} {x y : MagmaLaw α} :
    x = y ↔ x.lhs = y.lhs ∧ x.rhs = y.rhs
    def Law.instDecidableEqMagmaLaw.decEq {α✝ : Type u_1} [DecidableEq α✝] (x✝ x✝¹ : MagmaLaw α✝) :
    Decidable (x✝ = x✝¹)
    Equations
    Instances For
      @[reducible, inline]
      Equations
      Instances For
        @[implicit_reducible]
        Equations
        @[implicit_reducible]
        instance Law.instToStringMagmaLaw {α : Type u_1} [ToString α] :
        Equations
        @[reducible, inline]
        abbrev Ctx (α : Type u_1) :
        Type u_1
        Equations
        Instances For
          @[implicit_reducible]
          instance Ctx.Membership (α : Type u_1) :
          Equations
          @[implicit_reducible]
          Equations
          inductive derive {α : Type u} (Γ : Ctx α) :

          Definition for derivability

          Instances For
            inductive derive' {α : Type u} {β : Type v} (Γ : Ctx α) :
            Law.MagmaLaw β → Type (max u v)

            Definition for derivability where Subst can only be applied to Ax

            Instances For
              def derive'_of_derive {α : Type u_1} {Γ : Ctx α} {E : Law.MagmaLaw α} (H : Γ ⊢ E) :
              Γ ⊢' E
              Equations
              Instances For
                def satisfiesPhi {α : Type u_1} {G : Type u_2} [Magma G] (φ : α → G) (E : Law.MagmaLaw α) :

                Definitions of entailment

                Equations
                Instances For
                  def satisfies {α : Type u_1} (G : Type u_2) [Magma G] (E : Law.MagmaLaw α) :

                  satisfies G E, or G ⊧ E, means that all evaluations of E in G are true.

                  Equations
                  Instances For
                    def satisfiesSet {α : Type u_1} (G : Type u_2) [Magma G] (Γ : Ctx α) :

                    satisfiesSet G Γ, or G ⊧ Γ, means that G satisfies every element of Γ.

                    Equations
                    Instances For
                      def models {α : Type u_1} {β : Type u_2} (Γ : Ctx α) (E : Law.MagmaLaw β) :

                      models Γ E, or Γ ⊧ E, means that every magma G satisfying Γ also satisfies E.

                      Equations
                      Instances For

                        Notation for derivability and entailment

                        satisfies G E, or G ⊧ E, means that all evaluations of E in G are true.

                        Equations
                        Instances For

                          satisfiesSet G Γ, or G ⊧ Γ, means that G satisfies every element of Γ.

                          Equations
                          Instances For

                            models Γ E, or Γ ⊧ E, means that every magma G satisfying Γ also satisfies E.

                            Equations
                            Instances For

                              Definition for derivability

                              Equations
                              Instances For

                                Definition for derivability where Subst can only be applied to Ax

                                Equations
                                Instances For
                                  def Law.MagmaLaw.symm {α : Type u_1} (l : MagmaLaw α) :
                                  Equations
                                  Instances For
                                    @[simp]
                                    theorem Law.MagmaLaw.symm_symm {α : Type u_1} (l : MagmaLaw α) :
                                    l.symm.symm = l
                                    def Law.MagmaLaw.map {α : Type u_1} {β : Type u_2} (f : α → β) :
                                    MagmaLaw α → MagmaLaw β
                                    Equations
                                    Instances For
                                      theorem Law.MagmaLaw.map_id {α : Type u_1} (m : MagmaLaw α) :
                                      map id m = m
                                      theorem Law.MagmaLaw.map_comp {α : Type u_1} {β : Type u_2} {γ : Type u_3} (f : α → β) (g : β → γ) (m : MagmaLaw α) :
                                      map g (map f m) = map (g ∘ f) m
                                      theorem Law.MagmaLaw.map_symm {α : Type u_1} {β : Type u_2} (f : α → β) (m : MagmaLaw α) :
                                      map f m.symm = (map f m).symm
                                      def Law.MagmaLaw.Mem {α : Type u_1} (a : α) (m : MagmaLaw α) :
                                      Equations
                                      Instances For
                                        def Law.MagmaLaw.toList {α : Type u_1} (m : MagmaLaw α) :
                                        List α
                                        Equations
                                        Instances For
                                          @[simp]
                                          def Law.MagmaLaw.map_toList {α : Type u_1} {β : Type u_2} (m : MagmaLaw α) (f : α → β) :
                                          Equations
                                          • ⋯ = ⋯
                                          Instances For
                                            def Law.MagmaLaw.elems {α : Type u_1} [DecidableEq α] (m : MagmaLaw α) :
                                            { l : List α // l.Nodup ∧ ∀ (a : α), a ∈ l ↔ Mem a m }
                                            Equations
                                            Instances For
                                              @[implicit_reducible]
                                              instance Law.MagmaLaw.instDecidableMemOfDecidableEq {α : Type u_1} [DecidableEq α] (a : α) (m : MagmaLaw α) :
                                              Equations
                                              def Law.MagmaLaw.finEquiv {α : Type u_1} [DecidableEq α] (m : MagmaLaw α) :
                                              Fin (↑m.elems).length ≃ { a : α // Mem a m }
                                              Equations
                                              Instances For
                                                def Law.MagmaLaw.pmap {α : Type u_1} {β : Type u_2} (m : MagmaLaw α) :
                                                ((a : α) → Mem a m → β) → MagmaLaw β
                                                Equations
                                                Instances For
                                                  def Law.MagmaLaw.attach {α : Type u_1} (m : MagmaLaw α) :
                                                  MagmaLaw { a : α // Mem a m }
                                                  Equations
                                                  Instances For
                                                    theorem Law.MagmaLaw.attach_map_val {α : Type u_1} (m : MagmaLaw α) :
                                                    map (fun (x : { a : α // Mem a m }) => ↑x) m.attach = m
                                                    def Law.MagmaLaw.toFin {α : Type u_1} [DecidableEq α] (m : MagmaLaw α) :
                                                    Equations
                                                    Instances For
                                                      def Law.MagmaLaw.toNat {α : Type u_1} [DecidableEq α] (m : MagmaLaw α) :
                                                      Equations
                                                      Instances For
                                                        theorem Law.MagmaLaw.pmap_eq_map {α : Type u_1} {β : Type u_2} (m : MagmaLaw α) (f : (a : α) → Mem a m → β) (g : α → β) (h : ∀ (a : α) (h : Mem a m), f a h = g a) :
                                                        m.pmap f = map g m
                                                        theorem Law.satisfiesPhi_symm_law {α : Type u_1} {G : Type u_2} [Magma G] (φ : α → G) (E : MagmaLaw α) (h : satisfiesPhi φ E) :
                                                        theorem Law.satisfiesPhi_map {α : Type u_1} {β : Type u_2} {G : Type u_3} [Magma G] {φ : β → G} {f : α → β} {E : MagmaLaw α} :
                                                        theorem Law.satisfiesPhi_pmap {α : Type u_1} {β : Type u_2} {G : Type u_3} [Magma G] {φ : β → G} {ψ : α → G} (E : MagmaLaw α) (f : (a : α) → MagmaLaw.Mem a E → β) (H : ∀ (a : α) (h : MagmaLaw.Mem a E), φ (f a h) = ψ a) :
                                                        theorem Law.satisfiesPhi_pmap_mk {α : Type u_1} {G : Type u_2} [Magma G] {φ : α → G} {E : MagmaLaw α} (P : α → Prop) (hp : ∀ (a : α), MagmaLaw.Mem a E → P a) :
                                                        satisfiesPhi (fun (x : Subtype P) => φ ↑x) (E.pmap fun (a : α) (h : MagmaLaw.Mem a E) => ⟨a, ⋯⟩) ↔ satisfiesPhi φ E
                                                        theorem Law.satisfiesPhi_attach {α : Type u_1} {G : Type u_2} [Magma G] {φ : α → G} {E : MagmaLaw α} :
                                                        satisfiesPhi (fun (x : { a : α // MagmaLaw.Mem a E }) => φ ↑x) E.attach ↔ satisfiesPhi φ E
                                                        theorem Law.satisfiesPhi_symm {α : Type u_1} {G : Type u_2} [Magma G] (φ : α → G) (w₁ w₂ : FreeMagma α) (h : satisfiesPhi φ (w₁ ≃ w₂)) :
                                                        satisfiesPhi φ (w₂ ≃ w₁)
                                                        theorem Law.satisfiesPhi_evalHom {α G : Type} [Magma G] (φ : α → G) (E : MagmaLaw α) (f : G →◇ G) :
                                                        satisfiesPhi (⇑f ∘ φ) E ↔ f (E.lhs ⬝ φ) = f (E.rhs ⬝ φ)
                                                        theorem Law.equiv_satisfiesPhi {α : Type u_1} {G : Type u_2} {H : Type u_3} [Magma G] [Magma H] {φ : α → G} (e : G ≃◇ H) {E : MagmaLaw α} :
                                                        satisfiesPhi (⇑e ∘ φ) E ↔ satisfiesPhi φ E
                                                        theorem Law.satisfies_symm_law {α : Type u_1} {G : Type u_2} [Magma G] {E : MagmaLaw α} (h : G ⊧ E) :
                                                        G ⊧ E.symm
                                                        theorem Law.satisfies_map {α : Type u_1} {β : Type u_2} {G : Type u_3} [Magma G] (f : α → β) {E : MagmaLaw α} (h : G ⊧ E) :
                                                        theorem Law.satisfies_map_injective {α : Type u_1} {β : Type u_2} {G : Type u_3} [Magma G] (f : α → β) (hf : Function.Injective f) {E : MagmaLaw α} :
                                                        theorem Law.satisfies_map_equiv {α : Type u_1} {β : Type u_2} {G : Type u_3} [Magma G] (f : α ≃ β) {E : MagmaLaw α} :
                                                        G ⊧ MagmaLaw.map (⇑f) E ↔ G ⊧ E
                                                        theorem Law.satisfies_pmap_mk {α : Type u_1} {G : Type u_2} [DecidableEq α] [Magma G] {E : MagmaLaw α} (P : α → Prop) (hp : ∀ (a : α), MagmaLaw.Mem a E → P a) :
                                                        (G ⊧ E.pmap fun (a : α) (h : MagmaLaw.Mem a E) => ⟨a, ⋯⟩) ↔ G ⊧ E
                                                        theorem Law.satisfies_attach {α : Type u_1} {G : Type u_2} [DecidableEq α] [Magma G] {E : MagmaLaw α} :
                                                        G ⊧ E.attach ↔ G ⊧ E
                                                        theorem Law.satisfies_toFin {α : Type u_1} {G : Type u_2} [DecidableEq α] [Magma G] {E : MagmaLaw α} :
                                                        G ⊧ E.toFin ↔ G ⊧ E
                                                        theorem Law.satisfies_toNat {α : Type u_1} {G : Type u_2} [DecidableEq α] [Magma G] {E : MagmaLaw α} :
                                                        G ⊧ E.toNat ↔ G ⊧ E
                                                        theorem Law.satisfies_symm {α : Type u_1} {G : Type u_2} [Magma G] {w₁ w₂ : FreeMagma α} (h : G ⊧ w₁ ≃ w₂) :
                                                        G ⊧ w₂ ≃ w₁
                                                        theorem Law.satisfies_equiv {α : Type u_1} {G : Type u_2} {H : Type u_3} [Magma G] [Magma H] (e : G ≃◇ H) {E : MagmaLaw α} :
                                                        G ⊧ E ↔ H ⊧ E
                                                        theorem Law.satisfiesSet_symm {α : Type u_1} {G : Type u_2} [Magma G] {Γ : Ctx α} (h : G ⊧ Γ) :
                                                        G ⊧ (fun (x : MagmaLaw α) => x.symm) '' Γ
                                                        theorem Law.satisfiesSet_singleton {α : Type} {G : Type u_1} [Magma G] {E : MagmaLaw α} :
                                                        G ⊧ {E} ↔ G ⊧ E
                                                        theorem Law.satisfiesSet_equiv {α : Type u_1} {G : Type u_2} {H : Type u_3} [Magma G] [Magma H] (e : G ≃◇ H) {Γ : Ctx α} :
                                                        G ⊧ Γ ↔ H ⊧ Γ
                                                        theorem Law.satisfiesSet_toNat {α : Type u_1} {G : Type u_2} [DecidableEq α] [Magma G] {Γ : Ctx α} :
                                                        G ⊧ (fun (x : MagmaLaw α) => x.toNat) '' Γ ↔ G ⊧ Γ
                                                        theorem Law.models_symm_law {α : Type u_1} {Γ : Ctx α} {E : MagmaLaw α} (h : Γ ⊧ E) :
                                                        Γ ⊧ E.symm
                                                        theorem Law.models_symm {α : Type u_1} (Γ : Ctx α) (w₁ w₂ : FreeMagma α) (h : Γ ⊧ w₁ ≃ w₂) :
                                                        Γ ⊧ w₂ ≃ w₁
                                                        theorem Law.models_toNat {α : Type u_1} {β : Type u_2} [DecidableEq β] {Γ : Ctx α} {E : MagmaLaw β} :
                                                        Γ ⊧ E.toNat ↔ Γ ⊧ E
                                                        theorem Law.toNat_models {α : Type u_1} {β : Type u_2} [DecidableEq α] {Γ : Ctx α} {E : MagmaLaw β} :
                                                        (fun (x : MagmaLaw α) => x.toNat) '' Γ ⊧ E ↔ Γ ⊧ E
                                                        @[irreducible]
                                                        def Law.derive'_map {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β → γ} {Γ : Ctx α} {E : MagmaLaw β} :
                                                        Γ ⊢' E → Γ ⊢' MagmaLaw.map f E
                                                        Equations
                                                        Instances For
                                                          theorem Law.derive'_map_injective {α : Type u_1} {β : Type u_2} {γ : Type u_3} {f : β → γ} (hf : Function.Injective f) {Γ : Ctx α} {E : MagmaLaw β} :
                                                          def Law.derive'_pmap {α : Type u_1} {β : Type u_2} {γ : Type u_3} [DecidableEq β] {Γ : Ctx α} {E : MagmaLaw β} (f : (a : β) → MagmaLaw.Mem a E → γ) :
                                                          Γ ⊢' E → Γ ⊢' E.pmap f
                                                          Equations
                                                          Instances For
                                                            def Law.derive'_attach {α : Type u_1} {β : Type u_2} [DecidableEq β] {Γ : Ctx α} {E : MagmaLaw β} :
                                                            Γ ⊢' E → Γ ⊢' E.attach
                                                            Equations
                                                            Instances For
                                                              theorem Law.derive'_attach_iff {α : Type u_1} {β : Type u_2} [DecidableEq β] {Γ : Ctx α} {E : MagmaLaw β} :
                                                              theorem Law.derive'_toFin_iff {α : Type u_1} {β : Type u_2} [DecidableEq β] {Γ : Ctx α} {E : MagmaLaw β} :
                                                              theorem Law.derive'_toNat_iff {α : Type u_1} {β : Type u_2} [DecidableEq β] {Γ : Ctx α} {E : MagmaLaw β} :