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
    @[reducible, inline]
    Equations
    Instances For
      Equations
      instance Law.instToStringMagmaLaw {α : Type u_1} [ToString α] :
      Equations
      @[reducible, inline]
      abbrev Ctx (α : Type u_1) :
      Type u_1
      Equations
      Instances For
        instance Ctx.Membership (α : Type u_1) :
        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
                                            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 β} :