mathlib documentation

group_theory.monoid_localization

Localizations of commutative monoids

Localizing a commutative ring at one of its submonoids does not rely on the ring's addition, so we can generalize localizations to commutative monoids.

We characterize the localization of a commutative monoid M at a submonoid S up to isomorphism; that is, a commutative monoid N is the localization of M at S iff we can find a monoid homomorphism f : M →* N satisfying 3 properties:

  1. For all y ∈ S, f y is a unit;
  2. For all z : N, there exists (x, y) : M × S such that z * f y = f x;
  3. For all x, y : M, f x = f y iff there exists c ∈ S such that x * c = y * c.

Given such a localization map f : M →* N, we can define the surjection localization_map.mk' sending (x, y) : M × S to f x * (f y)⁻¹, and localization_map.lift, the homomorphism from N induced by a homomorphism from M which maps elements of S to invertible elements of the codomain. Similarly, given commutative monoids P, Q, a submonoid T of P and a localization map for T from P to Q, then a homomorphism g : M →* P such that g(S) ⊆ T induces a homomorphism of localizations, localization_map.map, from N to Q. We treat the special case of localizing away from an element in the sections away_map and away.

We also define the quotient of M × S by the unique congruence relation (equivalence relation preserving a binary operation) r such that for any other congruence relation s on M × S satisfying '∀ y ∈ S, (1, 1) ∼ (y, y) under s', we have that (x₁, y₁) ∼ (x₂, y₂) by s whenever (x₁, y₁) ∼ (x₂, y₂) by r. We show this relation is equivalent to the standard localization relation. This defines the localization as a quotient type, localization, but the majority of subsequent lemmas in the file are given in terms of localizations up to isomorphism, using maps which satisfy the characteristic predicate.

Implementation notes

In maths it is natural to reason up to isomorphism, but in Lean we cannot naturally rewrite one structure with an isomorphic one; one way around this is to isolate a predicate characterizing a structure up to isomorphism, and reason about things that satisfy the predicate.

The infimum form of the localization congruence relation is chosen as 'canonical' here, since it shortens some proofs.

To apply a localization map f as a function, we use f.to_map, as coercions don't work well for this structure.

To reason about the localization as a quotient type, use mk_eq_monoid_of_mk' and associated lemmas. These show the quotient map mk : M → S → localization S equals the surjection localization_map.mk' induced by the map monoid_of : localization_map S (localization S) (where of establishes the localization as a quotient type satisfies the characteristic predicate). The lemma mk_eq_monoid_of_mk' hence gives you access to the results in the rest of the file, which are about the localization_map.mk' induced by any localization map.

Tags

localization, monoid localization, quotient monoid, congruence relation, characteristic predicate, commutative monoid

@[nolint]
structure add_submonoid.localization_map {M : Type u_1} [add_comm_monoid M] (S : add_submonoid M) (N : Type u_2) [add_comm_monoid N] :
Type (max u_1 u_2)

The type of add_monoid homomorphisms satisfying the characteristic predicate: if f : M →+ N satisfies this predicate, then N is isomorphic to the localization of M at S.

The add_monoid hom underlying a localization_map of add_comm_monoids.

def submonoid.localization_map.to_monoid_hom {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] :

The monoid hom underlying a localization_map.

@[nolint]
structure submonoid.localization_map {M : Type u_1} [comm_monoid M] (S : submonoid M) (N : Type u_2) [comm_monoid N] :
Type (max u_1 u_2)

The type of monoid homomorphisms satisfying the characteristic predicate: if f : M →* N satisfies this predicate, then N is isomorphic to the localization of M at S.

def add_localization.r {M : Type u_1} [add_comm_monoid M] (S : add_submonoid M) :

The congruence relation on M × S, M an add_comm_monoid and S an add_submonoid of M, whose quotient is the localization of M at S, defined as the unique congruence relation on M × S such that for any other congruence relation s on M × S where for all y ∈ S, (0, 0) ∼ (y, y) under s, we have that (x₁, y₁) ∼ (x₂, y₂) by r implies (x₁, y₁) ∼ (x₂, y₂) by s.

def localization.r {M : Type u_1} [comm_monoid M] (S : submonoid M) :
con (M × S)

The congruence relation on M × S, M a comm_monoid and S a submonoid of M, whose quotient is the localization of M at S, defined as the unique congruence relation on M × S such that for any other congruence relation s on M × S where for all y ∈ S, (1, 1) ∼ (y, y) under s, we have that (x₁, y₁) ∼ (x₂, y₂) by r implies (x₁, y₁) ∼ (x₂, y₂) by s.

Equations
def add_localization.r' {M : Type u_1} [add_comm_monoid M] (S : add_submonoid M) :

An alternate form of the congruence relation on M × S, M a comm_monoid and S a submonoid of M, whose quotient is the localization of M at S.

def localization.r' {M : Type u_1} [comm_monoid M] (S : submonoid M) :
con (M × S)

An alternate form of the congruence relation on M × S, M a comm_monoid and S a submonoid of M, whose quotient is the localization of M at S.

Equations
theorem localization.r_eq_r' {M : Type u_1} [comm_monoid M] (S : submonoid M) :

The congruence relation used to localize a comm_monoid at a submonoid can be expressed equivalently as an infimum (see localization.r) or explicitly (see localization.r').

The additive congruence relation used to localize an add_comm_monoid at a submonoid can be expressed equivalently as an infimum (see add_localization.r) or explicitly (see add_localization.r').

theorem add_localization.r_iff_exists {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {x y : M × S} :
(add_localization.r S) x y ∃ (c : S), x.fst + (y.snd) + c = y.fst + (x.snd) + c

theorem localization.r_iff_exists {M : Type u_1} [comm_monoid M] {S : submonoid M} {x y : M × S} :
(localization.r S) x y ∃ (c : S), ((x.fst) * (y.snd)) * c = ((y.fst) * (x.snd)) * c

def localization {M : Type u_1} [comm_monoid M] :
submonoid MType u_1

The localization of a comm_monoid at one of its submonoids (as a quotient type).

Equations
def add_localization {M : Type u_1} [add_comm_monoid M] :
add_submonoid MType u_1

The localization of an add_comm_monoid at one of its submonoids (as a quotient type).

@[instance]

def localization.mk {M : Type u_1} [comm_monoid M] {S : submonoid M} :
M → S → localization S

Given a comm_monoid M and submonoid S, mk sends x : M, y ∈ S to the equivalence class of (x, y) in the localization of M at S.

Equations
def add_localization.mk {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} :
M → S → add_localization S

Given an add_comm_monoid M and submonoid S, mk sends x : M, y ∈ S to the equivalence class of (x, y) in the localization of M at S.

theorem add_localization.ind {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {p : add_localization S → Prop} (H : ∀ (y : M × S), p (add_localization.mk y.fst y.snd)) (x : add_localization S) :
p x

theorem localization.ind {M : Type u_1} [comm_monoid M] {S : submonoid M} {p : localization S → Prop} (H : ∀ (y : M × S), p (localization.mk y.fst y.snd)) (x : localization S) :
p x

theorem localization.induction_on {M : Type u_1} [comm_monoid M] {S : submonoid M} {p : localization S → Prop} (x : localization S) :
(∀ (y : M × S), p (localization.mk y.fst y.snd))p x

theorem add_localization.induction_on {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {p : add_localization S → Prop} (x : add_localization S) :
(∀ (y : M × S), p (add_localization.mk y.fst y.snd))p x

theorem localization.induction_on₂ {M : Type u_1} [comm_monoid M] {S : submonoid M} {p : localization Slocalization S → Prop} (x y : localization S) :
(∀ (x y : M × S), p (localization.mk x.fst x.snd) (localization.mk y.fst y.snd))p x y

theorem add_localization.induction_on₂ {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {p : add_localization Sadd_localization S → Prop} (x y : add_localization S) :
(∀ (x y : M × S), p (add_localization.mk x.fst x.snd) (add_localization.mk y.fst y.snd))p x y

theorem add_localization.induction_on₃ {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {p : add_localization Sadd_localization Sadd_localization S → Prop} (x y z : add_localization S) :
(∀ (x y z : M × S), p (add_localization.mk x.fst x.snd) (add_localization.mk y.fst y.snd) (add_localization.mk z.fst z.snd))p x y z

theorem localization.induction_on₃ {M : Type u_1} [comm_monoid M] {S : submonoid M} {p : localization Slocalization Slocalization S → Prop} (x y z : localization S) :
(∀ (x y z : M × S), p (localization.mk x.fst x.snd) (localization.mk y.fst y.snd) (localization.mk z.fst z.snd))p x y z

theorem localization.one_rel {M : Type u_1} [comm_monoid M] {S : submonoid M} (y : S) :

theorem add_localization.zero_rel {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} (y : S) :

theorem localization.r_of_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {x y : M × S} :
(y.fst) * (x.snd) = (x.fst) * (y.snd)(localization.r S) x y

theorem add_localization.r_of_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {x y : M × S} :
y.fst + (x.snd) = x.fst + (y.snd)(add_localization.r S) x y

def add_monoid_hom.to_localization_map {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : M →+ N) :
(∀ (y : S), is_add_unit (f y))(∀ (z : N), ∃ (x : M × S), z + f (x.snd) = f x.fst)(∀ (x y : M), f x = f y ∃ (c : S), x + c = y + c)S.localization_map N

Makes a localization map from an add_comm_monoid hom satisfying the characteristic predicate.

def monoid_hom.to_localization_map {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : M →* N) :
(∀ (y : S), is_unit (f y))(∀ (z : N), ∃ (x : M × S), z * f (x.snd) = f x.fst)(∀ (x y : M), f x = f y ∃ (c : S), x * c = y * c)S.localization_map N

Makes a localization map from a comm_monoid hom satisfying the characteristic predicate.

Equations
def add_submonoid.localization_map.to_map {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] :

Short for to_add_monoid_hom; used to apply a localization map as a function.

def submonoid.localization_map.to_map {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] :

Short for to_monoid_hom; used to apply a localization map as a function.

@[ext]
theorem add_submonoid.localization_map.ext {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {f g : S.localization_map N} :
(∀ (x : M), (f.to_map) x = (g.to_map) x)f = g

@[ext]
theorem submonoid.localization_map.ext {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {f g : S.localization_map N} :
(∀ (x : M), (f.to_map) x = (g.to_map) x)f = g

theorem submonoid.localization_map.ext_iff {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {f g : S.localization_map N} :
f = g ∀ (x : M), (f.to_map) x = (g.to_map) x

theorem add_submonoid.localization_map.ext_iff {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {f g : S.localization_map N} :
f = g ∀ (x : M), (f.to_map) x = (g.to_map) x

theorem submonoid.localization_map.map_units {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (y : S) :

theorem add_submonoid.localization_map.map_units {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (y : S) :

theorem submonoid.localization_map.surj {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (z : N) :
∃ (x : M × S), z * (f.to_map) (x.snd) = (f.to_map) x.fst

theorem add_submonoid.localization_map.surj {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (z : N) :
∃ (x : M × S), z + (f.to_map) (x.snd) = (f.to_map) x.fst

theorem submonoid.localization_map.eq_iff_exists {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) {x y : M} :
(f.to_map) x = (f.to_map) y ∃ (c : S), x * c = y * c

theorem add_submonoid.localization_map.eq_iff_exists {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) {x y : M} :
(f.to_map) x = (f.to_map) y ∃ (c : S), x + c = y + c

def submonoid.localization_map.sec {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] :
S.localization_map NN → M × S

Given a localization map f : M →* N, a section function sending z : N to some (x, y) : M × S such that f x * (f y)⁻¹ = z.

Equations
def add_submonoid.localization_map.sec {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] :
S.localization_map NN → M × S

Given a localization map f : M →+ N, a section function sending z : N to some (x, y) : M × S such that f x - f y = z.

theorem submonoid.localization_map.sec_spec {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {f : S.localization_map N} (z : N) :
z * (f.to_map) ((f.sec z).snd) = (f.to_map) (f.sec z).fst

theorem add_submonoid.localization_map.sec_spec {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {f : S.localization_map N} (z : N) :
z + (f.to_map) ((f.sec z).snd) = (f.to_map) (f.sec z).fst

theorem submonoid.localization_map.sec_spec' {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {f : S.localization_map N} (z : N) :
(f.to_map) (f.sec z).fst = ((f.to_map) ((f.sec z).snd)) * z

theorem add_submonoid.localization_map.sec_spec' {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {f : S.localization_map N} (z : N) :
(f.to_map) (f.sec z).fst = (f.to_map) ((f.sec z).snd) + z

theorem add_submonoid.localization_map.add_neg_left {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {f : M →+ N} (h : ∀ (y : S), is_add_unit (f y)) (y : S) (w z : N) :

Given an add_monoid hom f : M →+ N and submonoid S ⊆ M such that f(S) ⊆ add_units N, for all w : M, z : N and y ∈ S, we have w - f y = z ↔ w = f y + z.

theorem submonoid.localization_map.mul_inv_left {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {f : M →* N} (h : ∀ (y : S), is_unit (f y)) (y : S) (w z : N) :
w * ((is_unit.lift_right (f.mrestrict S) h) y)⁻¹ = z w = (f y) * z

Given a monoid hom f : M →* N and submonoid S ⊆ M such that f(S) ⊆ units N, for all w : M, z : N and y ∈ S, we have w * (f y)⁻¹ = z ↔ w = f y * z.

theorem submonoid.localization_map.mul_inv_right {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {f : M →* N} (h : ∀ (y : S), is_unit (f y)) (y : S) (w z : N) :

Given a monoid hom f : M →* N and submonoid S ⊆ M such that f(S) ⊆ units N, for all w : M, z : N and y ∈ S, we have z = w * (f y)⁻¹ ↔ z * f y = w.

theorem add_submonoid.localization_map.add_neg_right {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {f : M →+ N} (h : ∀ (y : S), is_add_unit (f y)) (y : S) (w z : N) :

Given an add_monoid hom f : M →+ N and submonoid S ⊆ M such that f(S) ⊆ add_units N, for all w : M, z : N and y ∈ S, we have z = w - f y ↔ z + f y = w.

@[simp]
theorem add_submonoid.localization_map.add_neg {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {f : M →+ N} (h : ∀ (y : S), is_add_unit (f y)) {x₁ x₂ : M} {y₁ y₂ : S} :
f x₁ + -(is_add_unit.lift_right (f.mrestrict S) h) y₁ = f x₂ + -(is_add_unit.lift_right (f.mrestrict S) h) y₂ f (x₁ + y₂) = f (x₂ + y₁)

Given an add_monoid hom f : M →+ N and submonoid S ⊆ M such that f(S) ⊆ add_units N, for all x₁ x₂ : M and y₁, y₂ ∈ S, we have f x₁ - f y₁ = f x₂ - f y₂ ↔ f (x₁ + y₂) = f (x₂ + y₁).

@[simp]
theorem submonoid.localization_map.mul_inv {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {f : M →* N} (h : ∀ (y : S), is_unit (f y)) {x₁ x₂ : M} {y₁ y₂ : S} :
(f x₁) * ((is_unit.lift_right (f.mrestrict S) h) y₁)⁻¹ = (f x₂) * ((is_unit.lift_right (f.mrestrict S) h) y₂)⁻¹ f (x₁ * y₂) = f (x₂ * y₁)

Given a monoid hom f : M →* N and submonoid S ⊆ M such that f(S) ⊆ units N, for all x₁ x₂ : M and y₁, y₂ ∈ S, we have f x₁ * (f y₁)⁻¹ = f x₂ * (f y₂)⁻¹ ↔ f (x₁ * y₂) = f (x₂ * y₁).

theorem add_submonoid.localization_map.neg_inj {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {f : M →+ N} (hf : ∀ (y : S), is_add_unit (f y)) {y z : S} :

Given an add_monoid hom f : M →+ N and submonoid S ⊆ M such that f(S) ⊆ add_units N, for all y, z ∈ S, we have - (f y) = - (f z) → f y = f z.

theorem submonoid.localization_map.inv_inj {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {f : M →* N} (hf : ∀ (y : S), is_unit (f y)) {y z : S} :

Given a monoid hom f : M →* N and submonoid S ⊆ M such that f(S) ⊆ units N, for all y, z ∈ S, we have (f y)⁻¹ = (f z)⁻¹ → f y = f z.

theorem add_submonoid.localization_map.neg_unique {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {f : M →+ N} (h : ∀ (y : S), is_add_unit (f y)) {y : S} {z : N} :

Given an add_monoid hom f : M →+ N and submonoid S ⊆ M such that f(S) ⊆ add_units N, for all y ∈ S, - (f y) is unique.

theorem submonoid.localization_map.inv_unique {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {f : M →* N} (h : ∀ (y : S), is_unit (f y)) {y : S} {z : N} :
(f y) * z = 1((is_unit.lift_right (f.mrestrict S) h) y)⁻¹ = z

Given a monoid hom f : M →* N and submonoid S ⊆ M such that f(S) ⊆ units N, for all y ∈ S, (f y)⁻¹ is unique.

theorem submonoid.localization_map.map_right_cancel {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) {x y : M} {c : S} :
(f.to_map) ((c) * x) = (f.to_map) ((c) * y)(f.to_map) x = (f.to_map) y

theorem add_submonoid.localization_map.map_right_cancel {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) {x y : M} {c : S} :
(f.to_map) (c + x) = (f.to_map) (c + y)(f.to_map) x = (f.to_map) y

theorem submonoid.localization_map.map_left_cancel {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) {x y : M} {c : S} :
(f.to_map) (x * c) = (f.to_map) (y * c)(f.to_map) x = (f.to_map) y

theorem add_submonoid.localization_map.map_left_cancel {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) {x y : M} {c : S} :
(f.to_map) (x + c) = (f.to_map) (y + c)(f.to_map) x = (f.to_map) y

def add_submonoid.localization_map.mk' {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] :
S.localization_map NM → S → N

Given a localization map f : M →+ N, the surjection sending (x, y) : M × S to f x - f y.

def submonoid.localization_map.mk' {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] :
S.localization_map NM → S → N

Given a localization map f : M →* N, the surjection sending (x, y) : M × S to f x * (f y)⁻¹.

Equations
theorem submonoid.localization_map.mk'_mul {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x₁ x₂ : M) (y₁ y₂ : S) :
f.mk' (x₁ * x₂) (y₁ * y₂) = (f.mk' x₁ y₁) * f.mk' x₂ y₂

theorem add_submonoid.localization_map.mk'_add {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x₁ x₂ : M) (y₁ y₂ : S) :
f.mk' (x₁ + x₂) (y₁ + y₂) = f.mk' x₁ y₁ + f.mk' x₂ y₂

theorem add_submonoid.localization_map.mk'_zero {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x : M) :
f.mk' x 0 = (f.to_map) x

theorem submonoid.localization_map.mk'_one {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x : M) :
f.mk' x 1 = (f.to_map) x

@[simp]
theorem add_submonoid.localization_map.mk'_sec {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (z : N) :
f.mk' (f.sec z).fst (f.sec z).snd = z

Given a localization map f : M →+ N for a submonoid S ⊆ M, for all z : N we have that if x : M, y ∈ S are such that z + f y = f x, then f x - f y = z.

@[simp]
theorem submonoid.localization_map.mk'_sec {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (z : N) :
f.mk' (f.sec z).fst (f.sec z).snd = z

Given a localization map f : M →* N for a submonoid S ⊆ M, for all z : N we have that if x : M, y ∈ S are such that z * f y = f x, then f x * (f y)⁻¹ = z.

theorem submonoid.localization_map.mk'_surjective {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (z : N) :
∃ (x : M) (y : S), f.mk' x y = z

theorem add_submonoid.localization_map.mk'_surjective {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (z : N) :
∃ (x : M) (y : S), f.mk' x y = z

theorem add_submonoid.localization_map.mk'_spec {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
f.mk' x y + (f.to_map) y = (f.to_map) x

theorem submonoid.localization_map.mk'_spec {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
(f.mk' x y) * (f.to_map) y = (f.to_map) x

theorem submonoid.localization_map.mk'_spec' {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
((f.to_map) y) * f.mk' x y = (f.to_map) x

theorem add_submonoid.localization_map.mk'_spec' {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
(f.to_map) y + f.mk' x y = (f.to_map) x

theorem add_submonoid.localization_map.eq_mk'_iff_add_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) {x : M} {y : S} {z : N} :
z = f.mk' x y z + (f.to_map) y = (f.to_map) x

theorem submonoid.localization_map.eq_mk'_iff_mul_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) {x : M} {y : S} {z : N} :
z = f.mk' x y z * (f.to_map) y = (f.to_map) x

theorem add_submonoid.localization_map.mk'_eq_iff_eq_add {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) {x : M} {y : S} {z : N} :
f.mk' x y = z (f.to_map) x = z + (f.to_map) y

theorem submonoid.localization_map.mk'_eq_iff_eq_mul {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) {x : M} {y : S} {z : N} :
f.mk' x y = z (f.to_map) x = z * (f.to_map) y

theorem submonoid.localization_map.mk'_eq_iff_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) {x₁ x₂ : M} {y₁ y₂ : S} :
f.mk' x₁ y₁ = f.mk' x₂ y₂ (f.to_map) (x₁ * y₂) = (f.to_map) (x₂ * y₁)

theorem add_submonoid.localization_map.mk'_eq_iff_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) {x₁ x₂ : M} {y₁ y₂ : S} :
f.mk' x₁ y₁ = f.mk' x₂ y₂ (f.to_map) (x₁ + y₂) = (f.to_map) (x₂ + y₁)

theorem submonoid.localization_map.eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) {a₁ b₁ : M} {a₂ b₂ : S} :
f.mk' a₁ a₂ = f.mk' b₁ b₂ ∃ (c : S), (a₁ * b₂) * c = (b₁ * a₂) * c

theorem add_submonoid.localization_map.eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) {a₁ b₁ : M} {a₂ b₂ : S} :
f.mk' a₁ a₂ = f.mk' b₁ b₂ ∃ (c : S), a₁ + b₂ + c = b₁ + a₂ + c

theorem add_submonoid.localization_map.eq' {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) {a₁ b₁ : M} {a₂ b₂ : S} :
f.mk' a₁ a₂ = f.mk' b₁ b₂ (add_localization.r S) (a₁, a₂) (b₁, b₂)

theorem submonoid.localization_map.eq' {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) {a₁ b₁ : M} {a₂ b₂ : S} :
f.mk' a₁ a₂ = f.mk' b₁ b₂ (localization.r S) (a₁, a₂) (b₁, b₂)

theorem submonoid.localization_map.eq_iff_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) (g : S.localization_map P) {x y : M} :
(f.to_map) x = (f.to_map) y (g.to_map) x = (g.to_map) y

theorem add_submonoid.localization_map.eq_iff_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) (g : S.localization_map P) {x y : M} :
(f.to_map) x = (f.to_map) y (g.to_map) x = (g.to_map) y

theorem submonoid.localization_map.mk'_eq_iff_mk'_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) (g : S.localization_map P) {x₁ x₂ : M} {y₁ y₂ : S} :
f.mk' x₁ y₁ = f.mk' x₂ y₂ g.mk' x₁ y₁ = g.mk' x₂ y₂

theorem add_submonoid.localization_map.mk'_eq_iff_mk'_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) (g : S.localization_map P) {x₁ x₂ : M} {y₁ y₂ : S} :
f.mk' x₁ y₁ = f.mk' x₂ y₂ g.mk' x₁ y₁ = g.mk' x₂ y₂

theorem add_submonoid.localization_map.exists_of_sec_mk' {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
∃ (c : S), x + ((f.sec (f.mk' x y)).snd) + c = (f.sec (f.mk' x y)).fst + y + c

Given a localization map f : M →+ N for a submonoid S ⊆ M, for all x₁ : M and y₁ ∈ S, if x₂ : M, y₂ ∈ S are such that (f x₁ - f y₁) + f y₂ = f x₂, then there exists c ∈ S such that x₁ + y₂ + c = x₂ + y₁ + c.

theorem submonoid.localization_map.exists_of_sec_mk' {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
∃ (c : S), (x * ((f.sec (f.mk' x y)).snd)) * c = (((f.sec (f.mk' x y)).fst) * y) * c

Given a localization map f : M →* N for a submonoid S ⊆ M, for all x₁ : M and y₁ ∈ S, if x₂ : M, y₂ ∈ S are such that f x₁ * (f y₁)⁻¹ * f y₂ = f x₂, then there exists c ∈ S such that x₁ * y₂ * c = x₂ * y₁ * c.

theorem add_submonoid.localization_map.mk'_eq_of_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) {a₁ b₁ : M} {a₂ b₂ : S} :
b₁ + a₂ = a₁ + b₂f.mk' a₁ a₂ = f.mk' b₁ b₂

theorem submonoid.localization_map.mk'_eq_of_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) {a₁ b₁ : M} {a₂ b₂ : S} :
b₁ * a₂ = a₁ * b₂f.mk' a₁ a₂ = f.mk' b₁ b₂

@[simp]
theorem add_submonoid.localization_map.mk'_self' {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (y : S) :
f.mk' y y = 0

@[simp]
theorem submonoid.localization_map.mk'_self' {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (y : S) :
f.mk' y y = 1

@[simp]
theorem add_submonoid.localization_map.mk'_self {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x : M) (H : x S) :
f.mk' x x, H⟩ = 0

@[simp]
theorem submonoid.localization_map.mk'_self {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x : M) (H : x S) :
f.mk' x x, H⟩ = 1

theorem submonoid.localization_map.mul_mk'_eq_mk'_of_mul {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x₁ x₂ : M) (y : S) :
((f.to_map) x₁) * f.mk' x₂ y = f.mk' (x₁ * x₂) y

theorem add_submonoid.localization_map.add_mk'_eq_mk'_of_add {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x₁ x₂ : M) (y : S) :
(f.to_map) x₁ + f.mk' x₂ y = f.mk' (x₁ + x₂) y

theorem add_submonoid.localization_map.mk'_add_eq_mk'_of_add {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x₁ x₂ : M) (y : S) :
f.mk' x₂ y + (f.to_map) x₁ = f.mk' (x₁ + x₂) y

theorem submonoid.localization_map.mk'_mul_eq_mk'_of_mul {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x₁ x₂ : M) (y : S) :
(f.mk' x₂ y) * (f.to_map) x₁ = f.mk' (x₁ * x₂) y

theorem add_submonoid.localization_map.add_mk'_zero_eq_mk' {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
(f.to_map) x + f.mk' 0 y = f.mk' x y

theorem submonoid.localization_map.mul_mk'_one_eq_mk' {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
((f.to_map) x) * f.mk' 1 y = f.mk' x y

@[simp]
theorem submonoid.localization_map.mk'_mul_cancel_right {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
f.mk' (x * y) y = (f.to_map) x

@[simp]
theorem add_submonoid.localization_map.mk'_add_cancel_right {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
f.mk' (x + y) y = (f.to_map) x

theorem add_submonoid.localization_map.mk'_add_cancel_left {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
f.mk' (y + x) y = (f.to_map) x

theorem submonoid.localization_map.mk'_mul_cancel_left {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x : M) (y : S) :
f.mk' ((y) * x) y = (f.to_map) x

theorem add_submonoid.localization_map.is_unit_comp {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) (j : N →+ P) (y : S) :

theorem submonoid.localization_map.is_unit_comp {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) (j : N →* P) (y : S) :

theorem submonoid.localization_map.eq_of_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) {x y : M} :
(f.to_map) x = (f.to_map) yg x = g y

Given a localization map f : M →* N for a submonoid S ⊆ M and a map of comm_monoids g : M →* P such that g(S) ⊆ units P, f x = f y → g x = g y for all x y : M.

theorem add_submonoid.localization_map.eq_of_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) {x y : M} :
(f.to_map) x = (f.to_map) yg x = g y

Given a localization map f : M →+ N for a submonoid S ⊆ M and a map of add_comm_monoids g : M →+ P such that g(S) ⊆ add_units P, f x = f y → g x = g y for all x y : M.

theorem submonoid.localization_map.comp_eq_of_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} {T : submonoid P} {Q : Type u_4} [comm_monoid Q] (hg : ∀ (y : S), g y T) (k : T.localization_map Q) {x y : M} :
(f.to_map) x = (f.to_map) y(k.to_map) (g x) = (k.to_map) (g y)

Given comm_monoids M, P, localization maps f : M →* N, k : P →* Q for submonoids S, T respectively, and g : M →* P such that g(S) ⊆ T, f x = f y implies k (g x) = k (g y).

theorem add_submonoid.localization_map.comp_eq_of_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} {T : add_submonoid P} {Q : Type u_4} [add_comm_monoid Q] (hg : ∀ (y : S), g y T) (k : T.localization_map Q) {x y : M} :
(f.to_map) x = (f.to_map) y(k.to_map) (g x) = (k.to_map) (g y)

Given add_comm_monoids M, P, localization maps f : M →+ N, k : P →+ Q for submonoids S, T respectively, and g : M →+ P such that g(S) ⊆ T, f x = f y implies k (g x) = k (g y).

def submonoid.localization_map.lift {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} :
(∀ (y : S), is_unit (g y))N →* P

Given a localization map f : M →* N for a submonoid S ⊆ M and a map of comm_monoids g : M →* P such that g y is invertible for all y : S, the homomorphism induced from N to P sending z : N to g x * (g y)⁻¹, where (x, y) : M × S are such that z = f x * (f y)⁻¹.

Equations
def add_submonoid.localization_map.lift {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} :
(∀ (y : S), is_add_unit (g y))N →+ P

Given a localization map f : M →+ N for a submonoid S ⊆ M and a map of add_comm_monoids g : M →+ P such that g y is invertible for all y : S, the homomorphism induced from N to P sending z : N to g x - g y, where (x, y) : M × S are such that z = f x - f y.

theorem submonoid.localization_map.lift_mk' {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) (x : M) (y : S) :
(f.lift hg) (f.mk' x y) = (g x) * ((is_unit.lift_right (g.mrestrict S) hg) y)⁻¹

Given a localization map f : M →* N for a submonoid S ⊆ M and a map of comm_monoids g : M →* P such that g y is invertible for all y : S, the homomorphism induced from N to P maps f x * (f y)⁻¹ to g x * (g y)⁻¹ for all x : M, y ∈ S.

theorem add_submonoid.localization_map.lift_mk' {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) (x : M) (y : S) :
(f.lift hg) (f.mk' x y) = g x + -(is_add_unit.lift_right (g.mrestrict S) hg) y

Given a localization map f : M →+ N for a submonoid S ⊆ M and a map of add_comm_monoids g : M →+ P such that g y is invertible for all y : S, the homomorphism induced from N to P maps f x - f y to g x - g y for all x : M, y ∈ S.

theorem submonoid.localization_map.lift_spec {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) (z : N) (v : P) :
(f.lift hg) z = v g (f.sec z).fst = (g ((f.sec z).snd)) * v

Given a localization map f : M →* N for a submonoid S ⊆ M, if a comm_monoid map g : M →* P induces a map f.lift hg : N →* P then for all z : N, v : P, we have f.lift hg z = v ↔ g x = g y * v, where x : M, y ∈ S are such that z * f y = f x.

theorem add_submonoid.localization_map.lift_spec {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) (z : N) (v : P) :
(f.lift hg) z = v g (f.sec z).fst = g ((f.sec z).snd) + v

Given a localization map f : M →+ N for a submonoid S ⊆ M, if an add_comm_monoid map g : M →+ P induces a map f.lift hg : N →+ P then for all z : N, v : P, we have f.lift hg z = v ↔ g x = g y + v, where x : M, y ∈ S are such that z + f y = f x.

theorem submonoid.localization_map.lift_spec_mul {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) (z : N) (w v : P) :
((f.lift hg) z) * w = v (g (f.sec z).fst) * w = (g ((f.sec z).snd)) * v

Given a localization map f : M →* N for a submonoid S ⊆ M, if a comm_monoid map g : M →* P induces a map f.lift hg : N →* P then for all z : N, v w : P, we have f.lift hg z * w = v ↔ g x * w = g y * v, where x : M, y ∈ S are such that z * f y = f x.

theorem add_submonoid.localization_map.lift_spec_add {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) (z : N) (w v : P) :
(f.lift hg) z + w = v g (f.sec z).fst + w = g ((f.sec z).snd) + v

Given a localization map f : M →+ N for a submonoid S ⊆ M, if an add_comm_monoid map g : M →+ P induces a map f.lift hg : N →+ P then for all z : N, v w : P, we have f.lift hg z + w = v ↔ g x + w = g y + v, where x : M, y ∈ S are such that z + f y = f x.

theorem add_submonoid.localization_map.lift_mk'_spec {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) (x : M) (v : P) (y : S) :
(f.lift hg) (f.mk' x y) = v g x = g y + v

theorem submonoid.localization_map.lift_mk'_spec {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) (x : M) (v : P) (y : S) :
(f.lift hg) (f.mk' x y) = v g x = (g y) * v

theorem submonoid.localization_map.lift_mul_right {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) (z : N) :
((f.lift hg) z) * g ((f.sec z).snd) = g (f.sec z).fst

Given a localization map f : M →* N for a submonoid S ⊆ M, if a comm_monoid map g : M →* P induces a map f.lift hg : N →* P then for all z : N, we have f.lift hg z * g y = g x, where x : M, y ∈ S are such that z * f y = f x.

theorem add_submonoid.localization_map.lift_add_right {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) (z : N) :
(f.lift hg) z + g ((f.sec z).snd) = g (f.sec z).fst

Given a localization map f : M →+ N for a submonoid S ⊆ M, if an add_comm_monoid map g : M →+ P induces a map f.lift hg : N →+ P then for all z : N, we have f.lift hg z + g y = g x, where x : M, y ∈ S are such that z + f y = f x.

theorem add_submonoid.localization_map.lift_add_left {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) (z : N) :
g ((f.sec z).snd) + (f.lift hg) z = g (f.sec z).fst

Given a localization map f : M →+ N for a submonoid S ⊆ M, if an add_comm_monoid map g : M →+ P induces a map f.lift hg : N →+ P then for all z : N, we have g y + f.lift hg z = g x, where x : M, y ∈ S are such that z + f y = f x.

theorem submonoid.localization_map.lift_mul_left {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) (z : N) :
(g ((f.sec z).snd)) * (f.lift hg) z = g (f.sec z).fst

Given a localization map f : M →* N for a submonoid S ⊆ M, if a comm_monoid map g : M →* P induces a map f.lift hg : N →* P then for all z : N, we have g y * f.lift hg z = g x, where x : M, y ∈ S are such that z * f y = f x.

@[simp]
theorem submonoid.localization_map.lift_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) (x : M) :
(f.lift hg) ((f.to_map) x) = g x

@[simp]
theorem add_submonoid.localization_map.lift_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) (x : M) :
(f.lift hg) ((f.to_map) x) = g x

theorem submonoid.localization_map.lift_eq_iff {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) {x y : M × S} :
(f.lift hg) (f.mk' x.fst x.snd) = (f.lift hg) (f.mk' y.fst y.snd) g ((x.fst) * (y.snd)) = g ((y.fst) * (x.snd))

theorem add_submonoid.localization_map.lift_eq_iff {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) {x y : M × S} :
(f.lift hg) (f.mk' x.fst x.snd) = (f.lift hg) (f.mk' y.fst y.snd) g (x.fst + (y.snd)) = g (y.fst + (x.snd))

@[simp]
theorem add_submonoid.localization_map.lift_comp {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) :
(f.lift hg).comp f.to_map = g

@[simp]
theorem submonoid.localization_map.lift_comp {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) :
(f.lift hg).comp f.to_map = g

@[simp]
theorem add_submonoid.localization_map.lift_of_comp {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) (j : N →+ P) :
f.lift _ = j

@[simp]
theorem submonoid.localization_map.lift_of_comp {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) (j : N →* P) :
f.lift _ = j

theorem submonoid.localization_map.epic_of_localization_map {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {j k : N →* P} :
(∀ (a : M), (j.comp f.to_map) a = (k.comp f.to_map) a)j = k

theorem add_submonoid.localization_map.epic_of_localization_map {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {j k : N →+ P} :
(∀ (a : M), (j.comp f.to_map) a = (k.comp f.to_map) a)j = k

theorem add_submonoid.localization_map.lift_unique {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) {j : N →+ P} :
(∀ (x : M), j ((f.to_map) x) = g x)f.lift hg = j

theorem submonoid.localization_map.lift_unique {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) {j : N →* P} :
(∀ (x : M), j ((f.to_map) x) = g x)f.lift hg = j

@[simp]
theorem add_submonoid.localization_map.lift_id {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (x : N) :
(f.lift _) x = x

@[simp]
theorem submonoid.localization_map.lift_id {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (x : N) :
(f.lift _) x = x

@[simp]
theorem add_submonoid.localization_map.lift_left_inverse {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {k : S.localization_map P} (z : N) :
(k.lift _) ((f.lift _) z) = z

@[simp]
theorem submonoid.localization_map.lift_left_inverse {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {k : S.localization_map P} (z : N) :
(k.lift _) ((f.lift _) z) = z

Given two localization maps f : M →* N, k : M →* P for a submonoid S ⊆ M, the hom from P to N induced by f is left inverse to the hom from N to P induced by k.

theorem add_submonoid.localization_map.lift_surjective_iff {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) :
function.surjective (f.lift hg) ∀ (v : P), ∃ (x : M × S), v + g (x.snd) = g x.fst

theorem submonoid.localization_map.lift_surjective_iff {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) :
function.surjective (f.lift hg) ∀ (v : P), ∃ (x : M × S), v * g (x.snd) = g x.fst

theorem submonoid.localization_map.lift_injective_iff {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} (hg : ∀ (y : S), is_unit (g y)) :
function.injective (f.lift hg) ∀ (x y : M), (f.to_map) x = (f.to_map) y g x = g y

theorem add_submonoid.localization_map.lift_injective_iff {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} (hg : ∀ (y : S), is_add_unit (g y)) :
function.injective (f.lift hg) ∀ (x y : M), (f.to_map) x = (f.to_map) y g x = g y

def add_submonoid.localization_map.map {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} {T : add_submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [add_comm_monoid Q] :

Given a add_comm_monoid homomorphism g : M →+ P where for submonoids S ⊆ M, T ⊆ P we have g(S) ⊆ T, the induced add_monoid homomorphism from the localization of M at S to the localization of P at T: if f : M →+ N and k : P →+ Q are localization maps for S and T respectively, we send z : N to k (g x) - k (g y), where (x, y) : M × S are such that z = f x - f y.

def submonoid.localization_map.map {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} {T : submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [comm_monoid Q] :

Given a comm_monoid homomorphism g : M →* P where for submonoids S ⊆ M, T ⊆ P we have g(S) ⊆ T, the induced monoid homomorphism from the localization of M at S to the localization of P at T: if f : M →* N and k : P →* Q are localization maps for S and T respectively, we send z : N to k (g x) * (k (g y))⁻¹, where (x, y) : M × S are such that z = f x * (f y)⁻¹.

Equations
theorem submonoid.localization_map.map_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} {T : submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} (x : M) :
(f.map hy k) ((f.to_map) x) = (k.to_map) (g x)

theorem add_submonoid.localization_map.map_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} {T : add_submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} (x : M) :
(f.map hy k) ((f.to_map) x) = (k.to_map) (g x)

@[simp]
theorem add_submonoid.localization_map.map_comp {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} {T : add_submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} :
(f.map hy k).comp f.to_map = k.to_map.comp g

@[simp]
theorem submonoid.localization_map.map_comp {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} {T : submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} :
(f.map hy k).comp f.to_map = k.to_map.comp g

theorem add_submonoid.localization_map.map_mk' {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} {T : add_submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} (x : M) (y : S) :
(f.map hy k) (f.mk' x y) = k.mk' (g x) g y, _⟩

theorem submonoid.localization_map.map_mk' {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} {T : submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} (x : M) (y : S) :
(f.map hy k) (f.mk' x y) = k.mk' (g x) g y, _⟩

theorem add_submonoid.localization_map.map_spec {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} {T : add_submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} (z : N) (u : Q) :
(f.map hy k) z = u (k.to_map) (g (f.sec z).fst) = (k.to_map) (g ((f.sec z).snd)) + u

Given localization maps f : M →+ N, k : P →+ Q for submonoids S, T respectively, if an add_comm_monoid homomorphism g : M →+ P induces a f.map hy k : N →+ Q, then for all z : N, u : Q, we have f.map hy k z = u ↔ k (g x) = k (g y) + u where x : M, y ∈ S are such that z + f y = f x.

theorem submonoid.localization_map.map_spec {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} {T : submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} (z : N) (u : Q) :
(f.map hy k) z = u (k.to_map) (g (f.sec z).fst) = ((k.to_map) (g ((f.sec z).snd))) * u

Given localization maps f : M →* N, k : P →* Q for submonoids S, T respectively, if a comm_monoid homomorphism g : M →* P induces a f.map hy k : N →* Q, then for all z : N, u : Q, we have f.map hy k z = u ↔ k (g x) = k (g y) * u where x : M, y ∈ S are such that z * f y = f x.

theorem submonoid.localization_map.map_mul_right {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} {T : submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} (z : N) :
((f.map hy k) z) * (k.to_map) (g ((f.sec z).snd)) = (k.to_map) (g (f.sec z).fst)

Given localization maps f : M →* N, k : P →* Q for submonoids S, T respectively, if a comm_monoid homomorphism g : M →* P induces a f.map hy k : N →* Q, then for all z : N, we have f.map hy k z * k (g y) = k (g x) where x : M, y ∈ S are such that z * f y = f x.

theorem add_submonoid.localization_map.map_add_right {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} {T : add_submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} (z : N) :
(f.map hy k) z + (k.to_map) (g ((f.sec z).snd)) = (k.to_map) (g (f.sec z).fst)

Given localization maps f : M →+ N, k : P →+ Q for submonoids S, T respectively, if an add_comm_monoid homomorphism g : M →+ P induces a f.map hy k : N →+ Q, then for all z : N, we have f.map hy k z + k (g y) = k (g x) where x : M, y ∈ S are such that z + f y = f x.

theorem add_submonoid.localization_map.map_add_left {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} {T : add_submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} (z : N) :
(k.to_map) (g ((f.sec z).snd)) + (f.map hy k) z = (k.to_map) (g (f.sec z).fst)

Given localization maps f : M →+ N, k : P →+ Q for submonoids S, T respectively, if an add_comm_monoid homomorphism g : M →+ P induces a f.map hy k : N →+ Q, then for all z : N, we have k (g y) + f.map hy k z = k (g x) where x : M, y ∈ S are such that z + f y = f x.

theorem submonoid.localization_map.map_mul_left {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} {T : submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} (z : N) :
((k.to_map) (g ((f.sec z).snd))) * (f.map hy k) z = (k.to_map) (g (f.sec z).fst)

Given localization maps f : M →* N, k : P →* Q for submonoids S, T respectively, if a comm_monoid homomorphism g : M →* P induces a f.map hy k : N →* Q, then for all z : N, we have k (g y) * f.map hy k z = k (g x) where x : M, y ∈ S are such that z * f y = f x.

@[simp]
theorem add_submonoid.localization_map.map_id {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] (f : S.localization_map N) (z : N) :
(f.map _ f) z = z

@[simp]
theorem submonoid.localization_map.map_id {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) (z : N) :
(f.map _ f) z = z

theorem add_submonoid.localization_map.map_comp_map {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} {T : add_submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} {A : Type u_5} [add_comm_monoid A] {U : add_submonoid A} {R : Type u_6} [add_comm_monoid R] (j : U.localization_map R) {l : P →+ A} (hl : ∀ (w : T), l w U) :
(k.map hl j).comp (f.map hy k) = f.map _ j

If add_comm_monoid homs g : M →+ P, l : P →+ A induce maps of localizations, the composition of the induced maps equals the map of localizations induced by l ∘ g.

theorem submonoid.localization_map.map_comp_map {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} {T : submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} {A : Type u_5} [comm_monoid A] {U : submonoid A} {R : Type u_6} [comm_monoid R] (j : U.localization_map R) {l : P →* A} (hl : ∀ (w : T), l w U) :
(k.map hl j).comp (f.map hy k) = f.map _ j

If comm_monoid homs g : M →* P, l : P →* A induce maps of localizations, the composition of the induced maps equals the map of localizations induced by l ∘ g.

theorem add_submonoid.localization_map.map_map {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {g : M →+ P} {T : add_submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} {A : Type u_5} [add_comm_monoid A] {U : add_submonoid A} {R : Type u_6} [add_comm_monoid R] (j : U.localization_map R) {l : P →+ A} (hl : ∀ (w : T), l w U) (x : N) :
(k.map hl j) ((f.map hy k) x) = (f.map _ j) x

If add_comm_monoid homs g : M →+ P, l : P →+ A induce maps of localizations, the composition of the induced maps equals the map of localizations induced by l ∘ g.

theorem submonoid.localization_map.map_map {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {g : M →* P} {T : submonoid P} (hy : ∀ (y : S), g y T) {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} {A : Type u_5} [comm_monoid A] {U : submonoid A} {R : Type u_6} [comm_monoid R] (j : U.localization_map R) {l : P →* A} (hl : ∀ (w : T), l w U) (x : N) :
(k.map hl j) ((f.map hy k) x) = (f.map _ j) x

If comm_monoid homs g : M →* P, l : P →* A induce maps of localizations, the composition of the induced maps equals the map of localizations induced by l ∘ g.

def submonoid.localization_map.away_map {M : Type u_1} [comm_monoid M] (x : M) (N' : Type u_2) [comm_monoid N'] :
Type (max u_1 u_2)

Given x : M, the type of comm_monoid homomorphisms f : M →* N such that N is isomorphic to the localization of M at the submonoid generated by x.

Equations
def add_submonoid.localization_map.away_map {M : Type u_1} [add_comm_monoid M] (x : M) (N' : Type u_2) [add_comm_monoid N'] :
Type (max u_1 u_2)

Given x : M, the type of add_comm_monoid homomorphisms f : M →+ N such that N is isomorphic to the localization of M at the submonoid generated by x.

def submonoid.localization_map.away_map.inv_self {M : Type u_1} [comm_monoid M] {N : Type u_2} [comm_monoid N] (x : M) :

Given x : M and a localization map F : M →* N away from x, inv_self is (F x)⁻¹.

Equations
def submonoid.localization_map.away_map.lift {M : Type u_1} [comm_monoid M] {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] {g : M →* P} (x : M) :

Given x : M, a localization map F : M →* N away from x, and a map of comm_monoids g : M →* P such that g x is invertible, the homomorphism induced from N to P sending z : N to g y * (g x)⁻ⁿ, where y : M, n : ℕ are such that z = F y * (F x)⁻ⁿ.

Equations
@[simp]
theorem submonoid.localization_map.away_map.lift_eq {M : Type u_1} [comm_monoid M] {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] {g : M →* P} (x : M) (F : submonoid.localization_map.away_map x N) (hg : is_unit (g x)) (a : M) :

@[simp]

def submonoid.localization_map.away_to_away_right {M : Type u_1} [comm_monoid M] {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (x : M) (F : submonoid.localization_map.away_map x N) (y : M) :

Given x y : M and localization maps F : M →* N, G : M →* P away from x and x * y respectively, the homomorphism induced from N to P.

Equations

Given x : A and a localization map F : A →+ B away from x, neg_self is - (F x).

Equations
def add_submonoid.localization_map.away_map.lift {A : Type u_4} [add_comm_monoid A] (x : A) {B : Type u_5} [add_comm_monoid B] (F : add_submonoid.localization_map.away_map x B) {C : Type u_6} [add_comm_monoid C] {g : A →+ C} :
is_add_unit (g x)B →+ C

Given x : A, a localization map F : A →+ B away from x, and a map of add_comm_monoids g : A →+ C such that g x is invertible, the homomorphism induced from B to C sending z : B to g y - n • g x, where y : A, n : ℕ are such that z = F y - n • F x.

Equations

Given x y : A and localization maps F : A →+ B, G : A →+ C away from x and x + y respectively, the homomorphism induced from B to C.

Equations
def add_submonoid.localization_map.add_equiv_of_localizations {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] :

If f : M →+ N and k : M →+ R are localization maps for a submonoid S, we get an isomorphism of N and R.

def submonoid.localization_map.mul_equiv_of_localizations {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] :

If f : M →* N and k : M →* P are localization maps for a submonoid S, we get an isomorphism of N and P.

Equations
@[simp]
theorem submonoid.localization_map.mul_equiv_of_localizations_apply {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {k : S.localization_map P} {x : N} :

theorem add_submonoid.localization_map.add_equiv_of_localizations_apply {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {k : S.localization_map P} {x : N} :

@[simp]
theorem submonoid.localization_map.mul_equiv_of_localizations_symm_apply {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {k : S.localization_map P} {x : P} :

If f : M →+ N is a localization map for a submonoid S and k : N ≃+ P is an isomorphism of add_comm_monoids, k ∘ f is a localization map for M at S.

def submonoid.localization_map.of_mul_equiv_of_localizations {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] :

If f : M →* N is a localization map for a submonoid S and k : N ≃* P is an isomorphism of comm_monoids, k ∘ f is a localization map for M at S.

Equations
theorem add_submonoid.localization_map.of_add_equiv_of_localizations_apply {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {k : N ≃+ P} (x : M) :

@[simp]
theorem submonoid.localization_map.of_mul_equiv_of_localizations_apply {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {k : N ≃* P} (x : M) :

theorem submonoid.localization_map.symm_comp_of_mul_equiv_of_localizations_apply {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {k : N ≃* P} (x : M) :

theorem submonoid.localization_map.symm_comp_of_mul_equiv_of_localizations_apply' {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {k : P ≃* N} (x : M) :

theorem add_submonoid.localization_map.of_add_equiv_of_localizations_eq_iff_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {k : N ≃+ P} {x : M} {y : P} :

theorem submonoid.localization_map.of_mul_equiv_of_localizations_eq_iff_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {k : N ≃* P} {x : M} {y : P} :

@[simp]
theorem submonoid.localization_map.mul_equiv_of_localizations_left_inv_apply {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {k : N ≃* P} (x : N) :

theorem submonoid.localization_map.of_mul_equiv_of_localizations_comp {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {Q : Type u_4} [comm_monoid Q] {k : N ≃* P} {j : P ≃* Q} :

Given comm_monoids M, P and submonoids S ⊆ M, T ⊆ P, if f : M →* N is a localization map for S and k : P ≃* M is an isomorphism of comm_monoids such that k(T) = S, f ∘ k is a localization map for T.

def submonoid.localization_map.of_mul_equiv_of_dom {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {k : P ≃* M} :

Given comm_monoids M, P and submonoids S ⊆ M, T ⊆ P, if f : M →* N is a localization map for S and k : P ≃* M is an isomorphism of comm_monoids such that k(T) = S, f ∘ k is a localization map for T.

Equations
theorem add_submonoid.localization_map.of_add_equiv_of_dom_apply {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {T : add_submonoid P} {k : P ≃+ M} (H : add_submonoid.map k.to_add_monoid_hom T = S) (x : P) :

@[simp]
theorem submonoid.localization_map.of_mul_equiv_of_dom_apply {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {k : P ≃* M} (H : submonoid.map k.to_monoid_hom T = S) (x : P) :

theorem submonoid.localization_map.of_mul_equiv_of_dom_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {k : P ≃* M} (H : submonoid.map k.to_monoid_hom T = S) :

theorem add_submonoid.localization_map.of_add_equiv_of_dom_comp_symm {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {T : add_submonoid P} {k : P ≃+ M} (H : add_submonoid.map k.to_add_monoid_hom T = S) (x : M) :

theorem submonoid.localization_map.of_mul_equiv_of_dom_comp_symm {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {k : P ≃* M} (H : submonoid.map k.to_monoid_hom T = S) (x : M) :

theorem add_submonoid.localization_map.of_add_equiv_of_dom_comp {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {T : add_submonoid P} {k : M ≃+ P} (H : add_submonoid.map k.symm.to_add_monoid_hom T = S) (x : M) :

theorem submonoid.localization_map.of_mul_equiv_of_dom_comp {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {k : M ≃* P} (H : submonoid.map k.symm.to_monoid_hom T = S) (x : M) :

@[simp]
theorem submonoid.localization_map.of_mul_equiv_of_dom_id {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] (f : S.localization_map N) :

A special case of f ∘ id = f, f a localization map.

@[simp]

A special case of f ∘ id = f, f a localization map.

def submonoid.localization_map.mul_equiv_of_mul_equiv {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {Q : Type u_4} [comm_monoid Q] (k : T.localization_map Q) {j : M ≃* P} :

Given localization maps f : M →* N, k : P →* U for submonoids S, T respectively, an isomorphism j : M ≃* P such that j(S) = T induces an isomorphism of localizations N ≃* U.

Equations
def add_submonoid.localization_map.add_equiv_of_add_equiv {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {T : add_submonoid P} {Q : Type u_4} [add_comm_monoid Q] (k : T.localization_map Q) {j : M ≃+ P} :

Given localization maps f : M →+ N, k : P →+ U for submonoids S, T respectively, an isomorphism j : M ≃+ P such that j(S) = T induces an isomorphism of localizations N ≃+ U.

@[simp]
theorem add_submonoid.localization_map.add_equiv_of_add_equiv_eq_map_apply {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {T : add_submonoid P} {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} {j : M ≃+ P} (H : add_submonoid.map j.to_add_monoid_hom S = T) (x : N) :
(f.add_equiv_of_add_equiv k H) x = (f.map _ k) x

@[simp]
theorem submonoid.localization_map.mul_equiv_of_mul_equiv_eq_map_apply {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} {j : M ≃* P} (H : submonoid.map j.to_monoid_hom S = T) (x : N) :
(f.mul_equiv_of_mul_equiv k H) x = (f.map _ k) x

theorem add_submonoid.localization_map.add_equiv_of_add_equiv_eq_map {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {T : add_submonoid P} {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} {j : M ≃+ P} (H : add_submonoid.map j.to_add_monoid_hom S = T) :

theorem submonoid.localization_map.mul_equiv_of_mul_equiv_eq_map {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} {j : M ≃* P} (H : submonoid.map j.to_monoid_hom S = T) :

@[simp]
theorem add_submonoid.localization_map.add_equiv_of_add_equiv_eq {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {T : add_submonoid P} {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} {j : M ≃+ P} (H : add_submonoid.map j.to_add_monoid_hom S = T) (x : M) :

@[simp]
theorem submonoid.localization_map.mul_equiv_of_mul_equiv_eq {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} {j : M ≃* P} (H : submonoid.map j.to_monoid_hom S = T) (x : M) :

@[simp]
theorem add_submonoid.localization_map.add_equiv_of_add_equiv_mk' {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {T : add_submonoid P} {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} {j : M ≃+ P} (H : add_submonoid.map j.to_add_monoid_hom S = T) (x : M) (y : S) :
(f.add_equiv_of_add_equiv k H) (f.mk' x y) = k.mk' (j x) j y, _⟩

@[simp]
theorem submonoid.localization_map.mul_equiv_of_mul_equiv_mk' {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} {j : M ≃* P} (H : submonoid.map j.to_monoid_hom S = T) (x : M) (y : S) :
(f.mul_equiv_of_mul_equiv k H) (f.mk' x y) = k.mk' (j x) j y, _⟩

theorem add_submonoid.localization_map.of_add_equiv_of_add_equiv_apply {M : Type u_1} [add_comm_monoid M] {S : add_submonoid M} {N : Type u_2} [add_comm_monoid N] {P : Type u_3} [add_comm_monoid P] (f : S.localization_map N) {T : add_submonoid P} {Q : Type u_4} [add_comm_monoid Q] {k : T.localization_map Q} {j : M ≃+ P} (H : add_submonoid.map j.to_add_monoid_hom S = T) (x : M) :

@[simp]
theorem submonoid.localization_map.of_mul_equiv_of_mul_equiv_apply {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} {j : M ≃* P} (H : submonoid.map j.to_monoid_hom S = T) (x : M) :

theorem submonoid.localization_map.of_mul_equiv_of_mul_equiv {M : Type u_1} [comm_monoid M] {S : submonoid M} {N : Type u_2} [comm_monoid N] {P : Type u_3} [comm_monoid P] (f : S.localization_map N) {T : submonoid P} {Q : Type u_4} [comm_monoid Q] {k : T.localization_map Q} {j : M ≃* P} (H : submonoid.map j.to_monoid_hom S = T) :