Theorem: Submonoid.LocalizationMap.map_comp_map
File: Mathlib/GroupTheory/MonoidLocalization.lean

tactic: ext z
state_before: M : Type u_6
inst✝⁵ : CommMonoid M
S : Submonoid M
N : Type u_4
inst✝⁴ : CommMonoid N
P : Type u_3
inst✝³ : CommMonoid P
f : LocalizationMap S N
g : M →* P
hg : ∀ (y : { x // x ∈ S }), IsUnit (↑g ↑y)
T : Submonoid P
hy : ∀ (y : { x // x ∈ S }), ↑g ↑y ∈ T
Q : Type u_5
inst✝² : CommMonoid Q
k : LocalizationMap T Q
A : Type u_1
inst✝¹ : CommMonoid A
U : Submonoid A
R : Type u_2
inst✝ : CommMonoid R
j : LocalizationMap U R
l : P →* A
hl : ∀ (w : { x // x ∈ T }), ↑l ↑w ∈ U
⊢ MonoidHom.comp (map k hl j) (map f hy k) = map f (_ : ∀ (x : { x // x ∈ S }), ↑(MonoidHom.comp l g) ↑x ∈ U) j

tactic: show j.toMap _ * _ = j.toMap (l _) * _
state_before: case h
M : Type u_6
inst✝⁵ : CommMonoid M
S : Submonoid M
N : Type u_4
inst✝⁴ : CommMonoid N
P : Type u_3
inst✝³ : CommMonoid P
f : LocalizationMap S N
g : M →* P
hg : ∀ (y : { x // x ∈ S }), IsUnit (↑g ↑y)
T : Submonoid P
hy : ∀ (y : { x // x ∈ S }), ↑g ↑y ∈ T
Q : Type u_5
inst✝² : CommMonoid Q
k : LocalizationMap T Q
A : Type u_1
inst✝¹ : CommMonoid A
U : Submonoid A
R : Type u_2
inst✝ : CommMonoid R
j : LocalizationMap U R
l : P →* A
hl : ∀ (w : { x // x ∈ T }), ↑l ↑w ∈ U
z : N
⊢ ↑(MonoidHom.comp (map k hl j) (map f hy k)) z =
    ↑(map f (_ : ∀ (x : { x // x ∈ S }), ↑(MonoidHom.comp l g) ↑x ∈ U) j) z

tactic: rw [mul_inv_left, ← mul_assoc, mul_inv_right]
state_before: case h
M : Type u_6
inst✝⁵ : CommMonoid M
S : Submonoid M
N : Type u_4
inst✝⁴ : CommMonoid N
P : Type u_3
inst✝³ : CommMonoid P
f : LocalizationMap S N
g : M →* P
hg : ∀ (y : { x // x ∈ S }), IsUnit (↑g ↑y)
T : Submonoid P
hy : ∀ (y : { x // x ∈ S }), ↑g ↑y ∈ T
Q : Type u_5
inst✝² : CommMonoid Q
k : LocalizationMap T Q
A : Type u_1
inst✝¹ : CommMonoid A
U : Submonoid A
R : Type u_2
inst✝ : CommMonoid R
j : LocalizationMap U R
l : P →* A
hl : ∀ (w : { x // x ∈ T }), ↑l ↑w ∈ U
z : N
⊢ ↑(toMap j) (↑l (sec k (↑(map f hy k) z)).fst) *
      ↑(↑(IsUnit.liftRight (MonoidHom.restrict (MonoidHom.comp (toMap j) l) T)
                (_ : ∀ (y : { x // x ∈ T }), IsUnit (↑(toMap j) ↑{ val := ↑l ↑y, property := (_ : ↑l ↑y ∈ U) })))
            (sec k (↑(map f hy k) z)).snd)⁻¹ =
    ↑(toMap j) (↑l (↑g (sec f z).fst)) *
      ↑(↑(IsUnit.liftRight (MonoidHom.restrict (MonoidHom.comp (toMap j) (MonoidHom.comp l g)) S)
                (_ :
                  ∀ (y : { x // x ∈ S }),
                    IsUnit
                      (↑(toMap j)
                        ↑{ val := ↑(MonoidHom.comp l g) ↑y, property := (_ : ↑(MonoidHom.comp l g) ↑y ∈ U) })))
            (sec f z).snd)⁻¹

tactic: show j.toMap _ * j.toMap (l (g _)) = j.toMap (l _) * _
state_before: case h
M : Type u_6
inst✝⁵ : CommMonoid M
S : Submonoid M
N : Type u_4
inst✝⁴ : CommMonoid N
P : Type u_3
inst✝³ : CommMonoid P
f : LocalizationMap S N
g : M →* P
hg : ∀ (y : { x // x ∈ S }), IsUnit (↑g ↑y)
T : Submonoid P
hy : ∀ (y : { x // x ∈ S }), ↑g ↑y ∈ T
Q : Type u_5
inst✝² : CommMonoid Q
k : LocalizationMap T Q
A : Type u_1
inst✝¹ : CommMonoid A
U : Submonoid A
R : Type u_2
inst✝ : CommMonoid R
j : LocalizationMap U R
l : P →* A
hl : ∀ (w : { x // x ∈ T }), ↑l ↑w ∈ U
z : N
⊢ ↑(toMap j) (↑l (sec k (↑(map f hy k) z)).fst) * ↑(MonoidHom.comp (toMap j) (MonoidHom.comp l g)) ↑(sec f z).snd =
    ↑(MonoidHom.comp (toMap j) l) ↑(sec k (↑(map f hy k) z)).snd * ↑(toMap j) (↑l (↑g (sec f z).fst))

tactic: rw [← j.toMap.map_mul, ← j.toMap.map_mul, ← l.map_mul, ← l.map_mul]
state_before: case h
M : Type u_6
inst✝⁵ : CommMonoid M
S : Submonoid M
N : Type u_4
inst✝⁴ : CommMonoid N
P : Type u_3
inst✝³ : CommMonoid P
f : LocalizationMap S N
g : M →* P
hg : ∀ (y : { x // x ∈ S }), IsUnit (↑g ↑y)
T : Submonoid P
hy : ∀ (y : { x // x ∈ S }), ↑g ↑y ∈ T
Q : Type u_5
inst✝² : CommMonoid Q
k : LocalizationMap T Q
A : Type u_1
inst✝¹ : CommMonoid A
U : Submonoid A
R : Type u_2
inst✝ : CommMonoid R
j : LocalizationMap U R
l : P →* A
hl : ∀ (w : { x // x ∈ T }), ↑l ↑w ∈ U
z : N
⊢ ↑(toMap j) (↑l (sec k (↑(map f hy k) z)).fst) * ↑(toMap j) (↑l (↑g ↑(sec f z).snd)) =
    ↑(toMap j) (↑l ↑(sec k (↑(map f hy k) z)).snd) * ↑(toMap j) (↑l (↑g (sec f z).fst))

tactic: exact
  k.comp_eq_of_eq hl j
    (by rw [k.toMap.map_mul, k.toMap.map_mul, sec_spec', mul_assoc, map_mul_right])
state_before: case h
M : Type u_6
inst✝⁵ : CommMonoid M
S : Submonoid M
N : Type u_4
inst✝⁴ : CommMonoid N
P : Type u_3
inst✝³ : CommMonoid P
f : LocalizationMap S N
g : M →* P
hg : ∀ (y : { x // x ∈ S }), IsUnit (↑g ↑y)
T : Submonoid P
hy : ∀ (y : { x // x ∈ S }), ↑g ↑y ∈ T
Q : Type u_5
inst✝² : CommMonoid Q
k : LocalizationMap T Q
A : Type u_1
inst✝¹ : CommMonoid A
U : Submonoid A
R : Type u_2
inst✝ : CommMonoid R
j : LocalizationMap U R
l : P →* A
hl : ∀ (w : { x // x ∈ T }), ↑l ↑w ∈ U
z : N
⊢ ↑(toMap j) (↑l ((sec k (↑(map f hy k) z)).fst * ↑g ↑(sec f z).snd)) =
    ↑(toMap j) (↑l (↑(sec k (↑(map f hy k) z)).snd * ↑g (sec f z).fst))

tactic: rw [k.toMap.map_mul, k.toMap.map_mul, sec_spec', mul_assoc, map_mul_right]
state_before: M : Type u_6
inst✝⁵ : CommMonoid M
S : Submonoid M
N : Type u_4
inst✝⁴ : CommMonoid N
P : Type u_3
inst✝³ : CommMonoid P
f : LocalizationMap S N
g : M →* P
hg : ∀ (y : { x // x ∈ S }), IsUnit (↑g ↑y)
T : Submonoid P
hy : ∀ (y : { x // x ∈ S }), ↑g ↑y ∈ T
Q : Type u_5
inst✝² : CommMonoid Q
k : LocalizationMap T Q
A : Type u_1
inst✝¹ : CommMonoid A
U : Submonoid A
R : Type u_2
inst✝ : CommMonoid R
j : LocalizationMap U R
l : P →* A
hl : ∀ (w : { x // x ∈ T }), ↑l ↑w ∈ U
z : N
⊢ ↑(toMap k) ((sec k (↑(map f hy k) z)).fst * ↑g ↑(sec f z).snd) =
    ↑(toMap k) (↑(sec k (↑(map f hy k) z)).snd * ↑g (sec f z).fst)