Documentation

MyProject.Green.Defs

Green's Relations Definitions #

This file defines Green's preorders and equivalence relations on semigroups.

We prove basic theorems, like Semigroup.rEquiv_lEquiv_comm, which are necessary for instantiating DEquiv as an equivalence relation with Semigroup.DEquiv.isEquivalence.

We also prove simp lemmas at the end of the file.

Main definitions #

In the following definitions, S is a semigroup and x y : S.

Green's Preorder Relations

We instantiate each preorder in the unbundled IsPreorder Class:

Green's Equivalence Relations

We define the 𝓑, 𝓛, 𝓙, 𝓗 relations as the symmetric closure of their corresponding preorders:

The 𝓓 relation is defined as the composition of 𝓑 and 𝓛:

Equivalence classes of elements as sets:

Main theorems #

We use the preceding theorem to prove that 𝓑, 𝓛, 𝓙, 𝓗 are equivalence relations.

We prove that ≀𝓑 and 𝓑 are compatible with left multiplication. That is, if x (≀)𝓑 y, then z * x (≀)𝓑 z * y. We also prove that ≀𝓛 and 𝓛 are compatible with right multiplication:

We prove that 𝓓 is closed under composition with 𝓛 and 𝓑. This allows us to prove that 𝓓 is transitive:

Implementation notes #

Because we defined 𝓗 as the symmetric closure of ≀𝓗, using simp [HEquiv] will change x 𝓗 y to x ≀𝓗 y ∧ y ≀𝓗 x. If you want to rewrite to x 𝓑 y ∧ x 𝓛 y, use HEquiv.iff_rEquiv_and_lEquiv.

The simp-tagged lemmas at the end of the file are able to close goals like x * y ≀𝓑 x by calling simp. Also, if you have a goal like x 𝓙 y, and a local hypothesis hr : x 𝓑 y, you can close this goal by simp [hr] or simp_all.

We also define two lemmas, le and ge, in the namespaces for 𝓑, 𝓛, 𝓙, 𝓗. These lemmas restrict hypotheses about equivalences to hypotheses about preorders. For example, if you have the goal x ≀𝓑 y and a hypothesis h : x 𝓑 y, you can close that goal with exact h.le. Similarly, if the goal is y ≀𝓑 x, you can use exact h.ge.

References #

TODO

Blueprint #

Green's Preorders #

def Semigroup.RPreorder {S : Type u_1} [Semigroup S] (x y : S) :

x is 𝓑-below y if x = y or there exists a z : S such that x = y * z

Equations
Instances For
    @[simp]
    theorem Semigroup.RPreorder.refl {S : Type u_1} [Semigroup S] (x : S) :
    theorem Semigroup.RPreorder.trans {S : Type u_1} [Semigroup S] {x y z : S} (hxy : x ≀𝓑 y) (hyz : y ≀𝓑 z) :

    ≀𝓑 is a Preorder

    def Semigroup.LPreorder {S : Type u_1} [Semigroup S] (x y : S) :

    x is 𝓛-below y if x = y or there exists a z : S such that x = z * y

    Equations
    Instances For
      @[simp]
      theorem Semigroup.LPreorder.refl {S : Type u_1} [Semigroup S] (x : S) :
      theorem Semigroup.LPreorder.trans {S : Type u_1} [Semigroup S] {x y z : S} (hxy : x ≀𝓛 y) (hyz : y ≀𝓛 z) :

      ≀𝓛 is a Preorder

      def Semigroup.JPreorder {S : Type u_1} [Semigroup S] (x y : S) :

      x is 𝓙-below y if there exists w v : WithOne S such that ↑x = w * ↑y * v

      Equations
      Instances For
        @[simp]
        theorem Semigroup.JPreorder.refl {S : Type u_1} [Semigroup S] (x : S) :
        theorem Semigroup.JPreorder.trans {S : Type u_1} [Semigroup S] {x y z : S} (hxy : x ≀𝓙 y) (hyz : y ≀𝓙 z) :

        The 𝓙-preorder is a preorder.

        def Semigroup.HPreorder {S : Type u_1} [Semigroup S] (x y : S) :

        x is 𝓗-below y if x ≀𝓑 y and x ≀𝓛 y

        Equations
        Instances For
          @[simp]
          theorem Semigroup.HPreorder.refl {S : Type u_1} [Semigroup S] (x : S) :
          theorem Semigroup.HPreorder.trans {S : Type u_1} [Semigroup S] {x y z : S} (hxy : x ≀𝓗 y) (hyz : y ≀𝓗 z) :

          ≀𝓗 is a Preorder

          Green's Equivalences (except 𝓓) #

          def IsPreorder.SymmClosure {Ξ± : Type u_1} (p : Ξ± β†’ Ξ± β†’ Prop) [h : IsPreorder Ξ± p] :
          Equivalence fun (x y : α) => p x y ∧ p y x

          The symmetric closure of a preorder is an equivalence relation.

          Equations
          • β‹― = β‹―
          Instances For
            def Semigroup.REquiv {S : Type u_1} [Semigroup S] (x y : S) :

            Green's 𝓑 equivalence relation: the symmetric closure of the 𝓑-preorder.

            Equations
            Instances For
              theorem Semigroup.REquiv.isEquivalence {S : Type u_1} [Semigroup S] :
              Equivalence fun (x y : S) => x 𝓑 y

              The 𝓑 relation is an equivalence relation.

              @[simp]
              theorem Semigroup.REquiv.refl {S : Type u_1} [Semigroup S] (x : S) :
              @[simp]
              theorem Semigroup.REquiv.symm {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓑 y) :
              theorem Semigroup.REquiv.trans {S : Type u_1} [Semigroup S] {x y z : S} (h₁ : x 𝓑 y) (hβ‚‚ : y 𝓑 z) :
              def Semigroup.REquiv.set {S : Type u_1} [Semigroup S] (x : S) :
              Set S

              The set of all elements 𝓑-related to x.

              Equations
              Instances For
                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  def Semigroup.LEquiv {S : Type u_1} [Semigroup S] (x y : S) :

                  Green's 𝓛 equivalence relation: the symmetric closure of the 𝓛-preorder.

                  Equations
                  Instances For
                    theorem Semigroup.LEquiv.isEquivalence {S : Type u_1} [Semigroup S] :
                    Equivalence fun (x y : S) => x 𝓛 y

                    The 𝓛 relation is an equivalence relation.

                    @[simp]
                    theorem Semigroup.LEquiv.refl {S : Type u_1} [Semigroup S] (x : S) :
                    @[simp]
                    theorem Semigroup.LEquiv.symm {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓛 y) :
                    theorem Semigroup.LEquiv.trans {S : Type u_1} [Semigroup S] {x y z : S} (h₁ : x 𝓛 y) (hβ‚‚ : y 𝓛 z) :
                    def Semigroup.LEquiv.set {S : Type u_1} [Semigroup S] (x : S) :
                    Set S

                    The set of all elements 𝓛-related to x.

                    Equations
                    Instances For
                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        def Semigroup.JEquiv {S : Type u_1} [Semigroup S] (x y : S) :

                        Green's 𝓙 equivalence relation: the symmetric closure of the 𝓙-preorder.

                        Equations
                        Instances For
                          theorem Semigroup.JEquiv.isEquivalence {S : Type u_1} [Semigroup S] :
                          Equivalence fun (x y : S) => x 𝓙 y

                          The 𝓙 relation is an equivalence relation.

                          @[simp]
                          theorem Semigroup.JEquiv.refl {S : Type u_1} [Semigroup S] (x : S) :
                          @[simp]
                          theorem Semigroup.JEquiv.symm {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓙 y) :
                          theorem Semigroup.JEquiv.trans {S : Type u_1} [Semigroup S] {x y z : S} (h₁ : x 𝓙 y) (hβ‚‚ : y 𝓙 z) :
                          def Semigroup.JEquiv.set {S : Type u_1} [Semigroup S] (x : S) :
                          Set S

                          The set of all elements 𝓙-related to x.

                          Equations
                          Instances For
                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              def Semigroup.HEquiv {S : Type u_1} [Semigroup S] (x y : S) :

                              Green's 𝓗 equivalence relation: the symmetric closure of the 𝓗-preorder.

                              Equations
                              Instances For
                                theorem Semigroup.HEquiv.isEquivalence {S : Type u_1} [Semigroup S] :
                                Equivalence fun (x y : S) => x 𝓗 y

                                The 𝓗 relation is an equivalence relation.

                                @[simp]
                                theorem Semigroup.HEquiv.refl {S : Type u_1} [Semigroup S] (x : S) :
                                @[simp]
                                theorem Semigroup.HEquiv.symm {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓗 y) :
                                theorem Semigroup.HEquiv.trans {S : Type u_1} [Semigroup S] {x y z : S} (h₁ : x 𝓗 y) (hβ‚‚ : y 𝓗 z) :
                                def Semigroup.HEquiv.set {S : Type u_1} [Semigroup S] (x : S) :
                                Set S

                                The set of all elements 𝓗-related to x.

                                Equations
                                Instances For
                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For

                                    The 𝓗 equivalence relation is the intersection of 𝓑 and 𝓛 equivalences.

                                    𝓑 𝓛 Theorems #

                                    @[simp]
                                    theorem Semigroup.RPreorder.lmult_compat {S : Type u_1} [Semigroup S] (x y z : S) (h : x ≀𝓑 y) :

                                    The 𝓑-preorder is compatible with left multiplication.

                                    @[simp]
                                    theorem Semigroup.REquiv.lmult_compat {S : Type u_1} [Semigroup S] (x y z : S) (h : x 𝓑 y) :
                                    z * x 𝓑 z * y

                                    The 𝓑 equivalence is compatible with left multiplication.

                                    @[simp]
                                    theorem Semigroup.LPreorder.rmult_compat {S : Type u_1} [Semigroup S] (x y z : S) (h : x ≀𝓛 y) :

                                    The 𝓛-preorder is compatible with right multiplication.

                                    @[simp]
                                    theorem Semigroup.LEquiv.rmult_compat {S : Type u_1} [Semigroup S] (x y z : S) (h : x 𝓛 y) :
                                    x * z 𝓛 y * z

                                    The 𝓛 equivalence is compatible with right multiplication.

                                    The 𝓑 and 𝓛 relations commute under composition.

                                    Green's D relation #

                                    def Semigroup.DEquiv {S : Type u_1} [Semigroup S] :
                                    S β†’ S β†’ Prop

                                    Green's 𝓓 equivalence relation: defined as the composition of 𝓑 and 𝓛.

                                    Equations
                                    Instances For
                                      @[simp]
                                      theorem Semigroup.DEquiv.refl {S : Type u_1} [Semigroup S] (x : S) :
                                      @[simp]
                                      theorem Semigroup.DEquiv.symm {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓓 y) :
                                      theorem Semigroup.DEquiv.closed_under_lEquiv {S : Type u_1} [Semigroup S] {x y z : S} (hd : x 𝓓 y) (hl : y 𝓛 z) :

                                      The 𝓓 relation is closed under composition with 𝓛.

                                      theorem Semigroup.DEquiv.closed_under_rEquiv {S : Type u_1} [Semigroup S] {x y z : S} (hd : x 𝓓 y) (hl : y 𝓑 z) :

                                      The 𝓓 relation is closed under composition with 𝓑.

                                      theorem Semigroup.DEquiv.trans {S : Type u_1} [Semigroup S] {x y z : S} (h1 : x 𝓓 y) (h2 : y 𝓓 z) :
                                      theorem Semigroup.DEquiv.isEquivalence {S : Type u_1} [Semigroup S] :
                                      Equivalence fun (x y : S) => x 𝓓 y

                                      The 𝓓 relation is an equivalence relation.

                                      def Semigroup.DEquiv.set {S : Type u_1} [Semigroup S] (x : S) :
                                      Set S
                                      Equations
                                      Instances For
                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For

                                          Simp Lemmas #

                                          @[simp]
                                          theorem Semigroup.RPreorder.to_jEquiv {S : Type u_1} [Semigroup S] {x y : S} (h : x ≀𝓑 y) :

                                          x ≀𝓑 y implies x ≀𝓙 y

                                          @[simp]
                                          theorem Semigroup.LPreorder.to_jEquiv {S : Type u_1} [Semigroup S] {x y : S} (h : x ≀𝓛 y) :

                                          x ≀𝓛 y implies x ≀𝓙 y

                                          @[simp]
                                          theorem Semigroup.REquiv.to_jEquiv {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓑 y) :

                                          x 𝓑 y implies x 𝓙 y

                                          @[simp]
                                          theorem Semigroup.LEquiv.to_jEquiv {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓛 y) :

                                          x 𝓛 y implies x 𝓙 y

                                          @[simp]
                                          theorem Semigroup.DEquiv.to_jEquiv {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓓 y) :

                                          x 𝓓 y implies x 𝓙 y

                                          @[simp]
                                          theorem Semigroup.RPreorder.mul_right_self {S : Type u_1} [Semigroup S] {x y : S} :

                                          x * y is always 𝓑-below x

                                          @[simp]
                                          theorem Semigroup.LPreorder.mul_left_self {S : Type u_1} [Semigroup S] {x y : S} :

                                          x * y is always 𝓛-below y

                                          @[simp]
                                          theorem Semigroup.JPreorder.mul_sandwich_self {S : Type u_1} [Semigroup S] {x y z : S} :

                                          x * y * z is always 𝓙-below y

                                          @[simp]
                                          theorem Semigroup.REquiv.of_preorder_mul_right {S : Type u_1} [Semigroup S] {x y : S} (h : x ≀𝓑 x * y) :
                                          x 𝓑 x * y

                                          x ≀𝓑 x * y implies x 𝓑 x * y

                                          @[simp]
                                          theorem Semigroup.LEquiv.of_preorder_mul_left {S : Type u_1} [Semigroup S] {x y : S} (h : x ≀𝓛 y * x) :
                                          x 𝓛 y * x

                                          x ≀𝓛 y * x implies x 𝓛 y * x

                                          @[simp]
                                          theorem Semigroup.JEquiv.of_preorder_mul_sandwich {S : Type u_1} [Semigroup S] {x y z : S} (h : x ≀𝓙 y * x * z) :
                                          x 𝓙 y * x * z

                                          x ≀𝓙 y * x * z implies x 𝓙 y * x * z

                                          @[simp]
                                          theorem Semigroup.REquiv.right_cancel {S : Type u_1} [Semigroup S] {x y z : S} (h : x 𝓑 x * y * z) :
                                          x 𝓑 x * y

                                          If x 𝓑 x * y * z, then x 𝓑 x * y.

                                          @[simp]
                                          theorem Semigroup.REquiv.right_extend {S : Type u_1} [Semigroup S] {x y z : S} (h : x 𝓑 x * y * z) :
                                          x * y 𝓑 x * y * z

                                          If x 𝓑 x * y * z, then x * y 𝓑 x * y * z.

                                          @[simp]
                                          theorem Semigroup.LEquiv.left_cancel {S : Type u_1} [Semigroup S] {x y z : S} (h : x 𝓛 z * y * x) :
                                          x 𝓛 y * x

                                          If x 𝓛 z * y * x, then x 𝓛 y * x.

                                          @[simp]
                                          theorem Semigroup.LEquiv.left_extend {S : Type u_1} [Semigroup S] {x y z : S} (h : x 𝓛 z * y * x) :
                                          y * x 𝓛 z * y * x

                                          If x 𝓛 z * y * x, then y * x 𝓛 z * y * x.

                                          le and ge lemmas #

                                          @[simp]
                                          theorem Semigroup.REquiv.le {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓑 y) :
                                          @[simp]
                                          theorem Semigroup.REquiv.ge {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓑 y) :
                                          @[simp]
                                          theorem Semigroup.LEquiv.le {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓛 y) :
                                          @[simp]
                                          theorem Semigroup.LEquiv.ge {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓛 y) :
                                          @[simp]
                                          theorem Semigroup.JEquiv.le {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓙 y) :
                                          @[simp]
                                          theorem Semigroup.JEquiv.ge {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓙 y) :
                                          @[simp]
                                          theorem Semigroup.HEquiv.le {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓗 y) :
                                          @[simp]
                                          theorem Semigroup.HEquiv.ge {S : Type u_1} [Semigroup S] {x y : S} (h : x 𝓗 y) :