Documentation

Mathlib.GroupTheory.OreLocalization.Basic

Localization over left Ore sets. #

This file defines the localization of a monoid over a left Ore set and proves its universal mapping property.

Notation #

Introduces the notation R[S⁻¹] for the Ore localization of a monoid R at a right Ore subset S. Also defines a new heterogeneous division notation r /ₒ s for a numerator r : R and a denominator s : S.

References #

Tags #

localization, Ore, non-commutative

Implementation detail #

Some of the declarations are marked reducible to avoid diamonds with Mathlib/Algebra/Module/LocalizedModule/Basic.lean. This causes a significant performance regression, most notabaly in Mathlib/AlgebraicGeometry/AffineSpace.lean. Also see https://github.com/leanprover-community/mathlib4/pull/31862.

We shall investigate if there are ways to improve performances. For example by introducing typeclasses to unify the two constructions on this and LocalizedModule, or by marking some downstream constructions (e.g. Spec.structureSheaf) as irreducible.

def OreLocalization.oreEqv {R : Type u_1} [Monoid R] (S : Submonoid R) [OreSet S] (X : Type u_2) [MulAction R X] :
Setoid (X × S)

The setoid on R × S used for the Ore localization.

Equations
Instances For
    def AddOreLocalization.oreEqv {R : Type u_1} [AddMonoid R] (S : AddSubmonoid R) [AddOreSet S] (X : Type u_2) [AddAction R X] :
    Setoid (X × S)

    The setoid on R × S used for the Ore localization.

    Equations
    Instances For
      def OreLocalization {R : Type u_1} [Monoid R] (S : Submonoid R) [OreLocalization.OreSet S] (X : Type u_2) [MulAction R X] :
      Type (max u_1 u_2)

      The Ore localization of a monoid and a submonoid fulfilling the Ore condition.

      Equations
      Instances For
        def AddOreLocalization {R : Type u_1} [AddMonoid R] (S : AddSubmonoid R) [AddOreLocalization.AddOreSet S] (X : Type u_2) [AddAction R X] :
        Type (max u_1 u_2)

        The Ore localization of an additive monoid and a submonoid fulfilling the Ore condition.

        Equations
        Instances For

          The Ore localization of a monoid and a submonoid fulfilling the Ore condition.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            def OreLocalization.oreDiv {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] (r : X) (s : S) :

            The division in the Ore localization X[S⁻¹], as a fraction of an element of X and S.

            Equations
            Instances For
              def AddOreLocalization.oreSub {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] (r : X) (s : S) :

              The subtraction in the Ore localization, as a difference of an element of X and S.

              Equations
              Instances For

                The division in the Ore localization X[S⁻¹], as a fraction of an element of X and S.

                Equations
                Instances For

                  The subtraction in the Ore localization, as a difference of an element of X and S.

                  Equations
                  Instances For
                    theorem OreLocalization.ind {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] {β : OreLocalization S XProp} (c : ∀ (r : X) (s : S), β (r /ₒ s)) (q : OreLocalization S X) :
                    β q
                    theorem AddOreLocalization.ind {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] {β : AddOreLocalization S XProp} (c : ∀ (r : X) (s : S), β (r -ₒ s)) (q : AddOreLocalization S X) :
                    β q
                    theorem OreLocalization.oreDiv_eq_iff {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] {r₁ r₂ : X} {s₁ s₂ : S} :
                    r₁ /ₒ s₁ = r₂ /ₒ s₂ ∃ (u : S) (v : R), u r₂ = v r₁ u * s₂ = v * s₁
                    theorem AddOreLocalization.oreSub_eq_iff {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] {r₁ r₂ : X} {s₁ s₂ : S} :
                    r₁ -ₒ s₁ = r₂ -ₒ s₂ ∃ (u : S) (v : R), u +ᵥ r₂ = v +ᵥ r₁ u + s₂ = v + s₁
                    theorem OreLocalization.expand {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] (r : X) (s : S) (t : R) (hst : t * s S) :
                    r /ₒ s = t r /ₒ t * s, hst

                    A fraction r /ₒ s is equal to its expansion by an arbitrary factor t if t * s ∈ S.

                    theorem AddOreLocalization.expand {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] (r : X) (s : S) (t : R) (hst : t + s S) :
                    r -ₒ s = (t +ᵥ r) -ₒ t + s, hst

                    A difference r -ₒ s is equal to its expansion by an arbitrary translation t if t + s ∈ S.

                    theorem OreLocalization.expand' {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] (r : X) (s s' : S) :
                    r /ₒ s = s' r /ₒ (s' * s)

                    A fraction is equal to its expansion by a factor from S.

                    theorem AddOreLocalization.expand' {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] (r : X) (s s' : S) :
                    r -ₒ s = (s' +ᵥ r) -ₒ (s' + s)

                    A difference is equal to its expansion by a summand from S.

                    theorem OreLocalization.eq_of_num_factor_eq {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {r r' r₁ r₂ : R} {s t : S} (h : t * r = t * r') :
                    r₁ * r * r₂ /ₒ s = r₁ * r' * r₂ /ₒ s

                    Fractions which differ by a factor of the numerator can be proven equal if those factors expand to equal elements of R.

                    theorem AddOreLocalization.eq_of_num_factor_eq {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {r r' r₁ r₂ : R} {s t : S} (h : t + r = t + r') :
                    r₁ + r + r₂ -ₒ s = r₁ + r' + r₂ -ₒ s

                    Differences whose minuends differ by a common summand can be proven equal if those summands expand to equal elements of R.

                    def OreLocalization.liftExpand {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_3} [MulAction R X] {C : Sort u_2} (P : XSC) (hP : ∀ (r : X) (t : R) (s : S) (ht : t * s S), P r s = P (t r) t * s, ht) :
                    OreLocalization S XC

                    A function or predicate over X and S can be lifted to X[S⁻¹] if it is invariant under expansion on the left.

                    Equations
                    Instances For
                      def AddOreLocalization.liftExpand {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_3} [AddAction R X] {C : Sort u_2} (P : XSC) (hP : ∀ (r : X) (t : R) (s : S) (ht : t + s S), P r s = P (t +ᵥ r) t + s, ht) :

                      A function or predicate over X and S can be lifted to the localization if it is invariant under expansion on the left.

                      Equations
                      Instances For
                        @[simp]
                        theorem OreLocalization.liftExpand_of {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_3} [MulAction R X] {C : Sort u_2} {P : XSC} {hP : ∀ (r : X) (t : R) (s : S) (ht : t * s S), P r s = P (t r) t * s, ht} (r : X) (s : S) :
                        liftExpand P hP (r /ₒ s) = P r s
                        @[simp]
                        theorem AddOreLocalization.liftExpand_of {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_3} [AddAction R X] {C : Sort u_2} {P : XSC} {hP : ∀ (r : X) (t : R) (s : S) (ht : t + s S), P r s = P (t +ᵥ r) t + s, ht} (r : X) (s : S) :
                        liftExpand P hP (r -ₒ s) = P r s
                        def OreLocalization.lift₂Expand {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_3} [MulAction R X] {C : Sort u_2} (P : XSXSC) (hP : ∀ (r₁ : X) (t₁ : R) (s₁ : S) (ht₁ : t₁ * s₁ S) (r₂ : X) (t₂ : R) (s₂ : S) (ht₂ : t₂ * s₂ S), P r₁ s₁ r₂ s₂ = P (t₁ r₁) t₁ * s₁, ht₁ (t₂ r₂) t₂ * s₂, ht₂) :

                        A version of liftExpand used to simultaneously lift functions with two arguments in X[S⁻¹].

                        Equations
                        Instances For
                          def AddOreLocalization.lift₂Expand {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_3} [AddAction R X] {C : Sort u_2} (P : XSXSC) (hP : ∀ (r₁ : X) (t₁ : R) (s₁ : S) (ht₁ : t₁ + s₁ S) (r₂ : X) (t₂ : R) (s₂ : S) (ht₂ : t₂ + s₂ S), P r₁ s₁ r₂ s₂ = P (t₁ +ᵥ r₁) t₁ + s₁, ht₁ (t₂ +ᵥ r₂) t₂ + s₂, ht₂) :

                          A version of liftExpand used to simultaneously lift functions with two arguments.

                          Equations
                          Instances For
                            @[simp]
                            theorem OreLocalization.lift₂Expand_of {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_3} [MulAction R X] {C : Sort u_2} {P : XSXSC} {hP : ∀ (r₁ : X) (t₁ : R) (s₁ : S) (ht₁ : t₁ * s₁ S) (r₂ : X) (t₂ : R) (s₂ : S) (ht₂ : t₂ * s₂ S), P r₁ s₁ r₂ s₂ = P (t₁ r₁) t₁ * s₁, ht₁ (t₂ r₂) t₂ * s₂, ht₂} (r₁ : X) (s₁ : S) (r₂ : X) (s₂ : S) :
                            lift₂Expand P hP (r₁ /ₒ s₁) (r₂ /ₒ s₂) = P r₁ s₁ r₂ s₂
                            @[simp]
                            theorem AddOreLocalization.lift₂Expand_of {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_3} [AddAction R X] {C : Sort u_2} {P : XSXSC} {hP : ∀ (r₁ : X) (t₁ : R) (s₁ : S) (ht₁ : t₁ + s₁ S) (r₂ : X) (t₂ : R) (s₂ : S) (ht₂ : t₂ + s₂ S), P r₁ s₁ r₂ s₂ = P (t₁ +ᵥ r₁) t₁ + s₁, ht₁ (t₂ +ᵥ r₂) t₂ + s₂, ht₂} (r₁ : X) (s₁ : S) (r₂ : X) (s₂ : S) :
                            lift₂Expand P hP (r₁ -ₒ s₁) (r₂ -ₒ s₂) = P r₁ s₁ r₂ s₂
                            @[reducible, inline]
                            abbrev OreLocalization.smul {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] (y : OreLocalization S R) (x : OreLocalization S X) :

                            The scalar multiplication on the Ore localization of monoids.

                            Equations
                            Instances For
                              @[reducible, inline]
                              abbrev AddOreLocalization.vadd {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] (y : AddOreLocalization S R) (x : AddOreLocalization S X) :

                              the vector addition on the Ore localization of additive monoids.

                              Equations
                              Instances For
                                theorem OreLocalization.oreDiv_smul_oreDiv {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] {r₁ : R} {r₂ : X} {s₁ s₂ : S} :
                                (r₁ /ₒ s₁) (r₂ /ₒ s₂) = oreNum r₁ s₂ r₂ /ₒ (oreDenom r₁ s₂ * s₁)
                                theorem AddOreLocalization.oreSub_vadd_oreSub {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] {r₁ : R} {r₂ : X} {s₁ s₂ : S} :
                                (r₁ -ₒ s₁) +ᵥ r₂ -ₒ s₂ = (oreMin r₁ s₂ +ᵥ r₂) -ₒ (oreSubtra r₁ s₂ + s₁)
                                theorem OreLocalization.oreDiv_mul_oreDiv {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {r₁ r₂ : R} {s₁ s₂ : S} :
                                r₁ /ₒ s₁ * (r₂ /ₒ s₂) = oreNum r₁ s₂ * r₂ /ₒ (oreDenom r₁ s₂ * s₁)
                                theorem AddOreLocalization.oreSub_add_oreSub {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {r₁ r₂ : R} {s₁ s₂ : S} :
                                r₁ -ₒ s₁ + (r₂ -ₒ s₂) = oreMin r₁ s₂ + r₂ -ₒ (oreSubtra r₁ s₂ + s₁)
                                theorem OreLocalization.oreDiv_smul_char {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] (r₁ : R) (r₂ : X) (s₁ s₂ : S) (r' : R) (s' : S) (huv : s' * r₁ = r' * s₂) :
                                (r₁ /ₒ s₁) (r₂ /ₒ s₂) = r' r₂ /ₒ (s' * s₁)

                                A characterization lemma for the scalar multiplication on the Ore localization, allowing for a choice of Ore numerator and Ore denominator.

                                theorem AddOreLocalization.oreSub_vadd_char {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] (r₁ : R) (r₂ : X) (s₁ s₂ : S) (r' : R) (s' : S) (huv : s' + r₁ = r' + s₂) :
                                (r₁ -ₒ s₁) +ᵥ r₂ -ₒ s₂ = (r' +ᵥ r₂) -ₒ (s' + s₁)

                                A characterization lemma for the vector addition on the Ore localization, allowing for a choice of Ore minuend and Ore subtrahend.

                                theorem OreLocalization.oreDiv_mul_char {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] (r₁ r₂ : R) (s₁ s₂ : S) (r' : R) (s' : S) (huv : s' * r₁ = r' * s₂) :
                                r₁ /ₒ s₁ * (r₂ /ₒ s₂) = r' * r₂ /ₒ (s' * s₁)

                                A characterization lemma for the multiplication on the Ore localization, allowing for a choice of Ore numerator and Ore denominator.

                                theorem AddOreLocalization.oreSub_add_char {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] (r₁ r₂ : R) (s₁ s₂ : S) (r' : R) (s' : S) (huv : s' + r₁ = r' + s₂) :
                                r₁ -ₒ s₁ + (r₂ -ₒ s₂) = r' + r₂ -ₒ (s' + s₁)

                                A characterization lemma for the addition on the Ore localization, allowing for a choice of Ore minuend and Ore subtrahend.

                                def OreLocalization.oreDivSMulChar' {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] (r₁ : R) (r₂ : X) (s₁ s₂ : S) :
                                (r' : R) ×' (s' : S) ×' s' * r₁ = r' * s₂ (r₁ /ₒ s₁) (r₂ /ₒ s₂) = r' r₂ /ₒ (s' * s₁)

                                Another characterization lemma for the scalar multiplication on the Ore localization delivering Ore witnesses and conditions bundled in a sigma type.

                                Equations
                                Instances For
                                  def AddOreLocalization.oreSubVAddChar' {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] (r₁ : R) (r₂ : X) (s₁ s₂ : S) :
                                  (r' : R) ×' (s' : S) ×' s' + r₁ = r' + s₂ (r₁ -ₒ s₁) +ᵥ r₂ -ₒ s₂ = (r' +ᵥ r₂) -ₒ (s' + s₁)

                                  Another characterization lemma for the vector addition on the Ore localization delivering Ore witnesses and conditions bundled in a sigma type.

                                  Equations
                                  Instances For
                                    def OreLocalization.oreDivMulChar' {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] (r₁ r₂ : R) (s₁ s₂ : S) :
                                    (r' : R) ×' (s' : S) ×' s' * r₁ = r' * s₂ r₁ /ₒ s₁ * (r₂ /ₒ s₂) = r' * r₂ /ₒ (s' * s₁)

                                    Another characterization lemma for the multiplication on the Ore localization delivering Ore witnesses and conditions bundled in a sigma type.

                                    Equations
                                    Instances For
                                      def AddOreLocalization.oreSubAddChar' {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] (r₁ r₂ : R) (s₁ s₂ : S) :
                                      (r' : R) ×' (s' : S) ×' s' + r₁ = r' + s₂ r₁ -ₒ s₁ + (r₂ -ₒ s₂) = r' + r₂ -ₒ (s' + s₁)

                                      Another characterization lemma for the addition on the Ore localization delivering Ore witnesses and conditions bundled in a sigma type.

                                      Equations
                                      Instances For
                                        @[irreducible]
                                        def OreLocalization.one {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] [One X] :

                                        1 in the localization, defined as 1 /ₒ 1.

                                        Equations
                                        Instances For
                                          @[irreducible]
                                          def AddOreLocalization.zero {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] [Zero X] :

                                          0 in the additive localization, defined as 0 -ₒ 0.

                                          Equations
                                          Instances For
                                            instance OreLocalization.instOne {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] [One X] :
                                            Equations
                                            theorem OreLocalization.one_def {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] [One X] :
                                            1 = 1 /ₒ 1
                                            theorem AddOreLocalization.zero_def {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] [Zero X] :
                                            0 = 0 -ₒ 0
                                            @[simp]
                                            theorem OreLocalization.div_eq_one' {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {r : R} (hr : r S) :
                                            r /ₒ r, hr = 1
                                            @[simp]
                                            theorem AddOreLocalization.sub_eq_zero' {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {r : R} (hr : r S) :
                                            r -ₒ r, hr = 0
                                            @[simp]
                                            theorem OreLocalization.div_eq_one {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {s : S} :
                                            s /ₒ s = 1
                                            @[simp]
                                            theorem AddOreLocalization.sub_eq_zero {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {s : S} :
                                            s -ₒ s = 0
                                            theorem OreLocalization.one_smul {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] (x : OreLocalization S X) :
                                            1 x = x
                                            theorem AddOreLocalization.zero_vadd {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] (x : AddOreLocalization S X) :
                                            0 +ᵥ x = x
                                            theorem OreLocalization.one_mul {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] (x : OreLocalization S R) :
                                            1 * x = x
                                            theorem AddOreLocalization.zero_add {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] (x : AddOreLocalization S R) :
                                            0 + x = x
                                            theorem OreLocalization.mul_one {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] (x : OreLocalization S R) :
                                            x * 1 = x
                                            theorem AddOreLocalization.add_zero {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] (x : AddOreLocalization S R) :
                                            x + 0 = x
                                            theorem OreLocalization.mul_smul {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] (x y : OreLocalization S R) (z : OreLocalization S X) :
                                            (x * y) z = x y z
                                            theorem AddOreLocalization.add_vadd {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] (x y : AddOreLocalization S R) (z : AddOreLocalization S X) :
                                            (x + y) +ᵥ z = x +ᵥ y +ᵥ z
                                            theorem OreLocalization.mul_assoc {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] (x y z : OreLocalization S R) :
                                            x * y * z = x * (y * z)
                                            theorem AddOreLocalization.add_assoc {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] (x y z : AddOreLocalization S R) :
                                            x + y + z = x + (y + z)
                                            @[reducible, inline]
                                            abbrev OreLocalization.npow {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] :

                                            npow of OreLocalization

                                            Equations
                                            Instances For
                                              @[reducible, inline]

                                              nsmul of AddOreLocalization

                                              Equations
                                              Instances For
                                                instance OreLocalization.instMonoid {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] :
                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                theorem OreLocalization.mul_inv {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] (s s' : S) :
                                                s /ₒ s' * (s' /ₒ s) = 1
                                                theorem AddOreLocalization.add_neg {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] (s s' : S) :
                                                s -ₒ s' + (s' -ₒ s) = 0
                                                @[simp]
                                                theorem OreLocalization.one_div_smul {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] {r : X} {s t : S} :
                                                (1 /ₒ t) (r /ₒ s) = r /ₒ (s * t)
                                                @[simp]
                                                theorem AddOreLocalization.zero_sub_vadd {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] {r : X} {s t : S} :
                                                (0 -ₒ t) +ᵥ r -ₒ s = r -ₒ (s + t)
                                                @[simp]
                                                theorem OreLocalization.one_div_mul {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {r : R} {s t : S} :
                                                1 /ₒ t * (r /ₒ s) = r /ₒ (s * t)
                                                @[simp]
                                                theorem AddOreLocalization.zero_sub_add {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {r : R} {s t : S} :
                                                0 -ₒ t + (r -ₒ s) = r -ₒ (s + t)
                                                @[simp]
                                                theorem OreLocalization.smul_cancel {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] {r : X} {s t : S} :
                                                (s /ₒ t) (r /ₒ s) = r /ₒ t
                                                @[simp]
                                                theorem AddOreLocalization.vadd_cancel {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] {r : X} {s t : S} :
                                                (s -ₒ t) +ᵥ r -ₒ s = r -ₒ t
                                                @[simp]
                                                theorem OreLocalization.mul_cancel {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {r : R} {s t : S} :
                                                s /ₒ t * (r /ₒ s) = r /ₒ t
                                                @[simp]
                                                theorem AddOreLocalization.add_cancel {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {r : R} {s t : S} :
                                                s -ₒ t + (r -ₒ s) = r -ₒ t
                                                @[simp]
                                                theorem OreLocalization.smul_cancel' {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] {r₁ : R} {r₂ : X} {s t : S} :
                                                (r₁ * s /ₒ t) (r₂ /ₒ s) = r₁ r₂ /ₒ t
                                                @[simp]
                                                theorem AddOreLocalization.vadd_cancel' {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] {r₁ : R} {r₂ : X} {s t : S} :
                                                (r₁ + s -ₒ t) +ᵥ r₂ -ₒ s = (r₁ +ᵥ r₂) -ₒ t
                                                @[simp]
                                                theorem OreLocalization.mul_cancel' {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {r₁ r₂ : R} {s t : S} :
                                                r₁ * s /ₒ t * (r₂ /ₒ s) = r₁ * r₂ /ₒ t
                                                @[simp]
                                                theorem AddOreLocalization.add_cancel' {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {r₁ r₂ : R} {s t : S} :
                                                r₁ + s -ₒ t + (r₂ -ₒ s) = r₁ + r₂ -ₒ t
                                                @[simp]
                                                theorem OreLocalization.smul_div_one {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [MulAction R X] {p : R} {r : X} {s : S} :
                                                (p /ₒ s) (r /ₒ 1) = p r /ₒ s
                                                @[simp]
                                                theorem AddOreLocalization.vadd_sub_zero {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {X : Type u_2} [AddAction R X] {p : R} {r : X} {s : S} :
                                                (p -ₒ s) +ᵥ r -ₒ 0 = (p +ᵥ r) -ₒ s
                                                @[simp]
                                                theorem OreLocalization.mul_div_one {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {p r : R} {s : S} :
                                                p /ₒ s * (r /ₒ 1) = p * r /ₒ s
                                                @[simp]
                                                theorem AddOreLocalization.add_sub_zero {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {p r : R} {s : S} :
                                                p -ₒ s + (r -ₒ 0) = p + r -ₒ s
                                                def OreLocalization.numeratorUnit {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] (s : S) :

                                                The fraction s /ₒ 1 as a unit in R[S⁻¹], where s : S.

                                                Equations
                                                Instances For

                                                  The difference s -ₒ 0 as an additive unit.

                                                  Equations
                                                  Instances For
                                                    @[reducible, inline]

                                                    The multiplicative homomorphism from R to R[S⁻¹], mapping r : R to the fraction r /ₒ 1.

                                                    Equations
                                                    Instances For
                                                      @[reducible, inline]

                                                      The additive homomorphism from R to AddOreLocalization R S, mapping r : R to the difference r -ₒ 0.

                                                      Equations
                                                      Instances For
                                                        theorem OreLocalization.numeratorHom_apply {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {r : R} :
                                                        theorem OreLocalization.numerator_isUnit {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] (s : S) :
                                                        def OreLocalization.universalMulHom {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {T : Type u_2} [Monoid T] (f : R →* T) (fS : S →* Tˣ) (hf : ∀ (s : S), f s = (fS s)) :

                                                        The universal lift from a morphism R →* T, which maps elements of S to units of T, to a morphism R[S⁻¹] →* T.

                                                        Equations
                                                        Instances For
                                                          def AddOreLocalization.universalAddHom {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {T : Type u_2} [AddMonoid T] (f : R →+ T) (fS : S →+ AddUnits T) (hf : ∀ (s : S), f s = (fS s)) :

                                                          The universal lift from a morphism R →+ T, which maps elements of S to additive-units of T, to a morphism AddOreLocalization R S →+ T.

                                                          Equations
                                                          • One or more equations did not get rendered due to their size.
                                                          Instances For
                                                            theorem OreLocalization.universalMulHom_apply {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {T : Type u_2} [Monoid T] (f : R →* T) (fS : S →* Tˣ) (hf : ∀ (s : S), f s = (fS s)) {r : R} {s : S} :
                                                            (universalMulHom f fS hf) (r /ₒ s) = (fS s)⁻¹ * f r
                                                            theorem AddOreLocalization.universalAddHom_apply {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {T : Type u_2} [AddMonoid T] (f : R →+ T) (fS : S →+ AddUnits T) (hf : ∀ (s : S), f s = (fS s)) {r : R} {s : S} :
                                                            (universalAddHom f fS hf) (r -ₒ s) = ↑(-fS s) + f r
                                                            theorem OreLocalization.universalMulHom_commutes {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {T : Type u_2} [Monoid T] (f : R →* T) (fS : S →* Tˣ) (hf : ∀ (s : S), f s = (fS s)) {r : R} :
                                                            (universalMulHom f fS hf) (numeratorHom r) = f r
                                                            theorem AddOreLocalization.universalAddHom_commutes {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {T : Type u_2} [AddMonoid T] (f : R →+ T) (fS : S →+ AddUnits T) (hf : ∀ (s : S), f s = (fS s)) {r : R} :
                                                            (universalAddHom f fS hf) (numeratorHom r) = f r
                                                            theorem OreLocalization.universalMulHom_unique {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {T : Type u_2} [Monoid T] (f : R →* T) (fS : S →* Tˣ) (hf : ∀ (s : S), f s = (fS s)) (φ : OreLocalization S R →* T) (huniv : ∀ (r : R), φ (numeratorHom r) = f r) :
                                                            φ = universalMulHom f fS hf

                                                            The universal morphism universalMulHom is unique.

                                                            theorem AddOreLocalization.universalAddHom_unique {R : Type u_1} [AddMonoid R] {S : AddSubmonoid R} [AddOreSet S] {T : Type u_2} [AddMonoid T] (f : R →+ T) (fS : S →+ AddUnits T) (hf : ∀ (s : S), f s = (fS s)) (φ : AddOreLocalization S R →+ T) (huniv : ∀ (r : R), φ (numeratorHom r) = f r) :
                                                            φ = universalAddHom f fS hf

                                                            The universal morphism universalAddHom is unique.

                                                            @[irreducible]
                                                            def OreLocalization.hsmul {R : Type u_1} {M : Type u_3} {X : Type u_4} [Monoid M] {S : Submonoid M} [OreSet S] [MulAction M X] [SMul R M] (c : R) :

                                                            Scalar multiplication in a monoid localization.

                                                            Equations
                                                            Instances For
                                                              @[irreducible]
                                                              def AddOreLocalization.hvadd {R : Type u_1} {M : Type u_3} {X : Type u_4} [AddMonoid M] {S : AddSubmonoid M} [AddOreSet S] [AddAction M X] [VAdd R M] (c : R) :

                                                              Vector addition in an additive monoid localization.

                                                              Equations
                                                              Instances For
                                                                theorem OreLocalization.smul_oreDiv {R : Type u_1} {M : Type u_3} {X : Type u_4} [Monoid M] {S : Submonoid M} [OreSet S] [MulAction M X] [SMul R X] [SMul R M] [IsScalarTower R M M] [IsScalarTower R M X] (r : R) (x : X) (s : S) :
                                                                r (x /ₒ s) = oreNum (r 1) s x /ₒ oreDenom (r 1) s
                                                                theorem AddOreLocalization.vadd_oreSub {R : Type u_1} {M : Type u_3} {X : Type u_4} [AddMonoid M] {S : AddSubmonoid M} [AddOreSet S] [AddAction M X] [VAdd R X] [VAdd R M] [VAddAssocClass R M M] [VAddAssocClass R M X] (r : R) (x : X) (s : S) :
                                                                r +ᵥ x -ₒ s = (oreMin (r +ᵥ 0) s +ᵥ x) -ₒ oreSubtra (r +ᵥ 0) s
                                                                @[simp]
                                                                theorem OreLocalization.oreDiv_one_smul {M : Type u_3} {X : Type u_4} [Monoid M] {S : Submonoid M} [OreSet S] [MulAction M X] (r : M) (x : OreLocalization S X) :
                                                                (r /ₒ 1) x = r x
                                                                @[simp]
                                                                theorem AddOreLocalization.oreSub_zero_vadd {M : Type u_3} {X : Type u_4} [AddMonoid M] {S : AddSubmonoid M} [AddOreSet S] [AddAction M X] (r : M) (x : AddOreLocalization S X) :
                                                                (r -ₒ 0) +ᵥ x = r +ᵥ x
                                                                theorem OreLocalization.smul_one_smul {R : Type u_1} {M : Type u_3} {X : Type u_4} [Monoid M] {S : Submonoid M} [OreSet S] [MulAction M X] [SMul R X] [SMul R M] [IsScalarTower R M M] [IsScalarTower R M X] (r : R) (x : OreLocalization S X) :
                                                                (r 1) x = r x
                                                                theorem AddOreLocalization.vadd_zero_vadd {R : Type u_1} {M : Type u_3} {X : Type u_4} [AddMonoid M] {S : AddSubmonoid M} [AddOreSet S] [AddAction M X] [VAdd R X] [VAdd R M] [VAddAssocClass R M M] [VAddAssocClass R M X] (r : R) (x : AddOreLocalization S X) :
                                                                (r +ᵥ 0) +ᵥ x = r +ᵥ x
                                                                theorem OreLocalization.smul_one_oreDiv_one_smul {R : Type u_1} {M : Type u_3} {X : Type u_4} [Monoid M] {S : Submonoid M} [OreSet S] [MulAction M X] [SMul R X] [SMul R M] [IsScalarTower R M M] [IsScalarTower R M X] (r : R) (x : OreLocalization S X) :
                                                                (r 1 /ₒ 1) x = r x
                                                                theorem AddOreLocalization.vadd_zero_oreSub_zero_vadd {R : Type u_1} {M : Type u_3} {X : Type u_4} [AddMonoid M] {S : AddSubmonoid M} [AddOreSet S] [AddAction M X] [VAdd R X] [VAdd R M] [VAddAssocClass R M M] [VAddAssocClass R M X] (r : R) (x : AddOreLocalization S X) :
                                                                ((r +ᵥ 0) -ₒ 0) +ᵥ x = r +ᵥ x
                                                                instance OreLocalization.instIsScalarTower {R : Type u_1} {R' : Type u_2} {M : Type u_3} {X : Type u_4} [Monoid M] {S : Submonoid M} [OreSet S] [MulAction M X] [SMul R X] [SMul R M] [IsScalarTower R M M] [IsScalarTower R M X] [SMul R' X] [SMul R' M] [IsScalarTower R' M M] [IsScalarTower R' M X] [SMul R R'] [IsScalarTower R R' M] :
                                                                instance AddOreLocalization.instVAddAssocClass {R : Type u_1} {R' : Type u_2} {M : Type u_3} {X : Type u_4} [AddMonoid M] {S : AddSubmonoid M} [AddOreSet S] [AddAction M X] [VAdd R X] [VAdd R M] [VAddAssocClass R M M] [VAddAssocClass R M X] [VAdd R' X] [VAdd R' M] [VAddAssocClass R' M M] [VAddAssocClass R' M X] [VAdd R R'] [VAddAssocClass R R' M] :
                                                                instance OreLocalization.instSMulCommClass {R : Type u_1} {R' : Type u_2} {M : Type u_3} {X : Type u_4} [Monoid M] {S : Submonoid M} [OreSet S] [MulAction M X] [SMul R X] [SMul R M] [IsScalarTower R M M] [IsScalarTower R M X] [SMul R' X] [SMul R' M] [IsScalarTower R' M M] [IsScalarTower R' M X] [SMulCommClass R R' M] :
                                                                instance AddOreLocalization.instVAddCommClass {R : Type u_1} {R' : Type u_2} {M : Type u_3} {X : Type u_4} [AddMonoid M] {S : AddSubmonoid M} [AddOreSet S] [AddAction M X] [VAdd R X] [VAdd R M] [VAddAssocClass R M M] [VAddAssocClass R M X] [VAdd R' X] [VAdd R' M] [VAddAssocClass R' M M] [VAddAssocClass R' M X] [VAddCommClass R R' M] :
                                                                instance OreLocalization.instIsScalarTower_1 {R : Type u_1} {M : Type u_3} {X : Type u_4} [Monoid M] {S : Submonoid M} [OreSet S] [MulAction M X] [SMul R X] [SMul R M] [IsScalarTower R M M] [IsScalarTower R M X] :
                                                                instance OreLocalization.instSMulCommClass_1 {R : Type u_1} {M : Type u_3} {X : Type u_4} [Monoid M] {S : Submonoid M} [OreSet S] [MulAction M X] [SMul R X] [SMul R M] [IsScalarTower R M M] [IsScalarTower R M X] [SMulCommClass R M M] :
                                                                instance OreLocalization.instMulActionOfIsScalarTower {M : Type u_3} {X : Type u_4} [Monoid M] {S : Submonoid M} [OreSet S] [MulAction M X] {R : Type u_5} [Monoid R] [MulAction R M] [IsScalarTower R M M] [MulAction R X] [IsScalarTower R M X] :
                                                                Equations
                                                                theorem OreLocalization.smul_oreDiv_one {R : Type u_1} {M : Type u_3} {X : Type u_4} [Monoid M] {S : Submonoid M} [OreSet S] [MulAction M X] [SMul R X] [SMul R M] [IsScalarTower R M M] [IsScalarTower R M X] (r : R) (x : X) :
                                                                r (x /ₒ 1) = r x /ₒ 1
                                                                theorem AddOreLocalization.vadd_oreSub_zero {R : Type u_1} {M : Type u_3} {X : Type u_4} [AddMonoid M] {S : AddSubmonoid M} [AddOreSet S] [AddAction M X] [VAdd R X] [VAdd R M] [VAddAssocClass R M M] [VAddAssocClass R M X] (r : R) (x : X) :
                                                                r +ᵥ x -ₒ 0 = (r +ᵥ x) -ₒ 0
                                                                theorem OreLocalization.oreDiv_mul_oreDiv_comm {R : Type u_1} [CommMonoid R] {S : Submonoid R} [OreSet S] {r₁ r₂ : R} {s₁ s₂ : S} :
                                                                r₁ /ₒ s₁ * (r₂ /ₒ s₂) = r₁ * r₂ /ₒ (s₁ * s₂)
                                                                theorem AddOreLocalization.oreSub_add_oreSub_comm {R : Type u_1} [AddCommMonoid R] {S : AddSubmonoid R} [AddOreSet S] {r₁ r₂ : R} {s₁ s₂ : S} :
                                                                r₁ -ₒ s₁ + (r₂ -ₒ s₂) = r₁ + r₂ -ₒ (s₁ + s₂)
                                                                @[irreducible]
                                                                def OreLocalization.zero {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [Zero X] [MulAction R X] :

                                                                0 in the localization, defined as 0 /ₒ 1.

                                                                Equations
                                                                Instances For
                                                                  instance OreLocalization.instZero {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [Zero X] [MulAction R X] :
                                                                  Equations
                                                                  theorem OreLocalization.zero_def {R : Type u_1} [Monoid R] {S : Submonoid R} [OreSet S] {X : Type u_2} [Zero X] [MulAction R X] :
                                                                  0 = 0 /ₒ 1