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 EP 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 EP 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 β} :