Theorem: IsLocalizedModule.map_iso_commute
File: Mathlib/Algebra/Module/LocalizedModule.lean

tactic: ext x
state_before: R : Type u_1
inst✝²⁷ : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝²⁶ : AddCommMonoid M
inst✝²⁵ : AddCommMonoid M'
inst✝²⁴ : AddCommMonoid M''
A : Type u_5
inst✝²³ : CommSemiring A
inst✝²² : Algebra R A
inst✝²¹ : Module A M'
inst✝²⁰ : IsLocalization S A
inst✝¹⁹ : Module R M
inst✝¹⁸ : Module R M'
inst✝¹⁷ : Module R M''
inst✝¹⁶ : IsScalarTower R A M'
f : M →ₗ[R] M'
g✝¹ : M →ₗ[R] M''
inst✝¹⁵ : IsLocalizedModule S f
N : Type ?u.1104783
N' : Type ?u.1104786
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup N'
inst✝¹² : Module R N
inst✝¹¹ : Module R N'
g✝ : N →ₗ[R] N'
inst✝¹⁰ : IsLocalizedModule S g✝
M₀ : Type u_6
M₀' : Type u_9
inst✝⁹ : AddCommGroup M₀
inst✝⁸ : AddCommGroup M₀'
inst✝⁷ : Module R M₀
inst✝⁶ : Module R M₀'
f₀ : M₀ →ₗ[R] M₀'
inst✝⁵ : IsLocalizedModule S f₀
M₁ : Type u_7
M₁' : Type u_8
inst✝⁴ : AddCommGroup M₁
inst✝³ : AddCommGroup M₁'
inst✝² : Module R M₁
inst✝¹ : Module R M₁'
f₁ : M₁ →ₗ[R] M₁'
inst✝ : IsLocalizedModule S f₁
g : M₀ →ₗ[R] M₁
⊢ (map S f₀ f₁) g ∘ₗ ↑(iso S f₀) = ↑(iso S f₁) ∘ₗ (map S (mkLinearMap S M₀) (mkLinearMap S M₁)) g
state_after: case h
R : Type u_1
inst✝²⁷ : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝²⁶ : AddCommMonoid M
inst✝²⁵ : AddCommMonoid M'
inst✝²⁴ : AddCommMonoid M''
A : Type u_5
inst✝²³ : CommSemiring A
inst✝²² : Algebra R A
inst✝²¹ : Module A M'
inst✝²⁰ : IsLocalization S A
inst✝¹⁹ : Module R M
inst✝¹⁸ : Module R M'
inst✝¹⁷ : Module R M''
inst✝¹⁶ : IsScalarTower R A M'
f : M →ₗ[R] M'
g✝¹ : M →ₗ[R] M''
inst✝¹⁵ : IsLocalizedModule S f
N : Type ?u.1104783
N' : Type ?u.1104786
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup N'
inst✝¹² : Module R N
inst✝¹¹ : Module R N'
g✝ : N →ₗ[R] N'
inst✝¹⁰ : IsLocalizedModule S g✝
M₀ : Type u_6
M₀' : Type u_9
inst✝⁹ : AddCommGroup M₀
inst✝⁸ : AddCommGroup M₀'
inst✝⁷ : Module R M₀
inst✝⁶ : Module R M₀'
f₀ : M₀ →ₗ[R] M₀'
inst✝⁵ : IsLocalizedModule S f₀
M₁ : Type u_7
M₁' : Type u_8
inst✝⁴ : AddCommGroup M₁
inst✝³ : AddCommGroup M₁'
inst✝² : Module R M₁
inst✝¹ : Module R M₁'
f₁ : M₁ →ₗ[R] M₁'
inst✝ : IsLocalizedModule S f₁
g : M₀ →ₗ[R] M₁
x : LocalizedModule S M₀
⊢ ((map S f₀ f₁) g ∘ₗ ↑(iso S f₀)) x = (↑(iso S f₁) ∘ₗ (map S (mkLinearMap S M₀) (mkLinearMap S M₁)) g) x

tactic: refine induction_on (fun m s ↦ ((Module.End_isUnit_iff _).1 (map_units f₁ s)).1 ?_) x
state_before: case h
R : Type u_1
inst✝²⁷ : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝²⁶ : AddCommMonoid M
inst✝²⁵ : AddCommMonoid M'
inst✝²⁴ : AddCommMonoid M''
A : Type u_5
inst✝²³ : CommSemiring A
inst✝²² : Algebra R A
inst✝²¹ : Module A M'
inst✝²⁰ : IsLocalization S A
inst✝¹⁹ : Module R M
inst✝¹⁸ : Module R M'
inst✝¹⁷ : Module R M''
inst✝¹⁶ : IsScalarTower R A M'
f : M →ₗ[R] M'
g✝¹ : M →ₗ[R] M''
inst✝¹⁵ : IsLocalizedModule S f
N : Type ?u.1104783
N' : Type ?u.1104786
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup N'
inst✝¹² : Module R N
inst✝¹¹ : Module R N'
g✝ : N →ₗ[R] N'
inst✝¹⁰ : IsLocalizedModule S g✝
M₀ : Type u_6
M₀' : Type u_9
inst✝⁹ : AddCommGroup M₀
inst✝⁸ : AddCommGroup M₀'
inst✝⁷ : Module R M₀
inst✝⁶ : Module R M₀'
f₀ : M₀ →ₗ[R] M₀'
inst✝⁵ : IsLocalizedModule S f₀
M₁ : Type u_7
M₁' : Type u_8
inst✝⁴ : AddCommGroup M₁
inst✝³ : AddCommGroup M₁'
inst✝² : Module R M₁
inst✝¹ : Module R M₁'
f₁ : M₁ →ₗ[R] M₁'
inst✝ : IsLocalizedModule S f₁
g : M₀ →ₗ[R] M₁
x : LocalizedModule S M₀
⊢ ((map S f₀ f₁) g ∘ₗ ↑(iso S f₀)) x = (↑(iso S f₁) ∘ₗ (map S (mkLinearMap S M₀) (mkLinearMap S M₁)) g) x
state_after: case h
R : Type u_1
inst✝²⁷ : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝²⁶ : AddCommMonoid M
inst✝²⁵ : AddCommMonoid M'
inst✝²⁴ : AddCommMonoid M''
A : Type u_5
inst✝²³ : CommSemiring A
inst✝²² : Algebra R A
inst✝²¹ : Module A M'
inst✝²⁰ : IsLocalization S A
inst✝¹⁹ : Module R M
inst✝¹⁸ : Module R M'
inst✝¹⁷ : Module R M''
inst✝¹⁶ : IsScalarTower R A M'
f : M →ₗ[R] M'
g✝¹ : M →ₗ[R] M''
inst✝¹⁵ : IsLocalizedModule S f
N : Type ?u.1104783
N' : Type ?u.1104786
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup N'
inst✝¹² : Module R N
inst✝¹¹ : Module R N'
g✝ : N →ₗ[R] N'
inst✝¹⁰ : IsLocalizedModule S g✝
M₀ : Type u_6
M₀' : Type u_9
inst✝⁹ : AddCommGroup M₀
inst✝⁸ : AddCommGroup M₀'
inst✝⁷ : Module R M₀
inst✝⁶ : Module R M₀'
f₀ : M₀ →ₗ[R] M₀'
inst✝⁵ : IsLocalizedModule S f₀
M₁ : Type u_7
M₁' : Type u_8
inst✝⁴ : AddCommGroup M₁
inst✝³ : AddCommGroup M₁'
inst✝² : Module R M₁
inst✝¹ : Module R M₁'
f₁ : M₁ →ₗ[R] M₁'
inst✝ : IsLocalizedModule S f₁
g : M₀ →ₗ[R] M₁
x : LocalizedModule S M₀
m : M₀
s : ↥S
⊢ ((algebraMap R (Module.End R M₁')) ↑s) (((map S f₀ f₁) g ∘ₗ ↑(iso S f₀)) (LocalizedModule.mk m s)) =
    ((algebraMap R (Module.End R M₁')) ↑s)
      ((↑(iso S f₁) ∘ₗ (map S (mkLinearMap S M₀) (mkLinearMap S M₁)) g) (LocalizedModule.mk m s))

tactic: repeat rw [Module.algebraMap_end_apply, ← CompatibleSMul.map_smul, smul'_mk, ← mk_smul, mk_cancel]
state_before: case h
R : Type u_1
inst✝²⁷ : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝²⁶ : AddCommMonoid M
inst✝²⁵ : AddCommMonoid M'
inst✝²⁴ : AddCommMonoid M''
A : Type u_5
inst✝²³ : CommSemiring A
inst✝²² : Algebra R A
inst✝²¹ : Module A M'
inst✝²⁰ : IsLocalization S A
inst✝¹⁹ : Module R M
inst✝¹⁸ : Module R M'
inst✝¹⁷ : Module R M''
inst✝¹⁶ : IsScalarTower R A M'
f : M →ₗ[R] M'
g✝¹ : M →ₗ[R] M''
inst✝¹⁵ : IsLocalizedModule S f
N : Type ?u.1104783
N' : Type ?u.1104786
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup N'
inst✝¹² : Module R N
inst✝¹¹ : Module R N'
g✝ : N →ₗ[R] N'
inst✝¹⁰ : IsLocalizedModule S g✝
M₀ : Type u_6
M₀' : Type u_9
inst✝⁹ : AddCommGroup M₀
inst✝⁸ : AddCommGroup M₀'
inst✝⁷ : Module R M₀
inst✝⁶ : Module R M₀'
f₀ : M₀ →ₗ[R] M₀'
inst✝⁵ : IsLocalizedModule S f₀
M₁ : Type u_7
M₁' : Type u_8
inst✝⁴ : AddCommGroup M₁
inst✝³ : AddCommGroup M₁'
inst✝² : Module R M₁
inst✝¹ : Module R M₁'
f₁ : M₁ →ₗ[R] M₁'
inst✝ : IsLocalizedModule S f₁
g : M₀ →ₗ[R] M₁
x : LocalizedModule S M₀
m : M₀
s : ↥S
⊢ ((algebraMap R (Module.End R M₁')) ↑s) (((map S f₀ f₁) g ∘ₗ ↑(iso S f₀)) (LocalizedModule.mk m s)) =
    ((algebraMap R (Module.End R M₁')) ↑s)
      ((↑(iso S f₁) ∘ₗ (map S (mkLinearMap S M₀) (mkLinearMap S M₁)) g) (LocalizedModule.mk m s))
state_after: case h
R : Type u_1
inst✝²⁷ : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝²⁶ : AddCommMonoid M
inst✝²⁵ : AddCommMonoid M'
inst✝²⁴ : AddCommMonoid M''
A : Type u_5
inst✝²³ : CommSemiring A
inst✝²² : Algebra R A
inst✝²¹ : Module A M'
inst✝²⁰ : IsLocalization S A
inst✝¹⁹ : Module R M
inst✝¹⁸ : Module R M'
inst✝¹⁷ : Module R M''
inst✝¹⁶ : IsScalarTower R A M'
f : M →ₗ[R] M'
g✝¹ : M →ₗ[R] M''
inst✝¹⁵ : IsLocalizedModule S f
N : Type ?u.1104783
N' : Type ?u.1104786
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup N'
inst✝¹² : Module R N
inst✝¹¹ : Module R N'
g✝ : N →ₗ[R] N'
inst✝¹⁰ : IsLocalizedModule S g✝
M₀ : Type u_6
M₀' : Type u_9
inst✝⁹ : AddCommGroup M₀
inst✝⁸ : AddCommGroup M₀'
inst✝⁷ : Module R M₀
inst✝⁶ : Module R M₀'
f₀ : M₀ →ₗ[R] M₀'
inst✝⁵ : IsLocalizedModule S f₀
M₁ : Type u_7
M₁' : Type u_8
inst✝⁴ : AddCommGroup M₁
inst✝³ : AddCommGroup M₁'
inst✝² : Module R M₁
inst✝¹ : Module R M₁'
f₁ : M₁ →ₗ[R] M₁'
inst✝ : IsLocalizedModule S f₁
g : M₀ →ₗ[R] M₁
x : LocalizedModule S M₀
m : M₀
s : ↥S
⊢ ((map S f₀ f₁) g ∘ₗ ↑(iso S f₀)) (LocalizedModule.mk m 1) =
    (↑(iso S f₁) ∘ₗ (map S (mkLinearMap S M₀) (mkLinearMap S M₁)) g) (LocalizedModule.mk m 1)

tactic: simp
state_before: case h
R : Type u_1
inst✝²⁷ : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝²⁶ : AddCommMonoid M
inst✝²⁵ : AddCommMonoid M'
inst✝²⁴ : AddCommMonoid M''
A : Type u_5
inst✝²³ : CommSemiring A
inst✝²² : Algebra R A
inst✝²¹ : Module A M'
inst✝²⁰ : IsLocalization S A
inst✝¹⁹ : Module R M
inst✝¹⁸ : Module R M'
inst✝¹⁷ : Module R M''
inst✝¹⁶ : IsScalarTower R A M'
f : M →ₗ[R] M'
g✝¹ : M →ₗ[R] M''
inst✝¹⁵ : IsLocalizedModule S f
N : Type ?u.1104783
N' : Type ?u.1104786
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup N'
inst✝¹² : Module R N
inst✝¹¹ : Module R N'
g✝ : N →ₗ[R] N'
inst✝¹⁰ : IsLocalizedModule S g✝
M₀ : Type u_6
M₀' : Type u_9
inst✝⁹ : AddCommGroup M₀
inst✝⁸ : AddCommGroup M₀'
inst✝⁷ : Module R M₀
inst✝⁶ : Module R M₀'
f₀ : M₀ →ₗ[R] M₀'
inst✝⁵ : IsLocalizedModule S f₀
M₁ : Type u_7
M₁' : Type u_8
inst✝⁴ : AddCommGroup M₁
inst✝³ : AddCommGroup M₁'
inst✝² : Module R M₁
inst✝¹ : Module R M₁'
f₁ : M₁ →ₗ[R] M₁'
inst✝ : IsLocalizedModule S f₁
g : M₀ →ₗ[R] M₁
x : LocalizedModule S M₀
m : M₀
s : ↥S
⊢ ((map S f₀ f₁) g ∘ₗ ↑(iso S f₀)) (LocalizedModule.mk m 1) =
    (↑(iso S f₁) ∘ₗ (map S (mkLinearMap S M₀) (mkLinearMap S M₁)) g) (LocalizedModule.mk m 1)
state_after: case h
R : Type u_1
inst✝²⁷ : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝²⁶ : AddCommMonoid M
inst✝²⁵ : AddCommMonoid M'
inst✝²⁴ : AddCommMonoid M''
A : Type u_5
inst✝²³ : CommSemiring A
inst✝²² : Algebra R A
inst✝²¹ : Module A M'
inst✝²⁰ : IsLocalization S A
inst✝¹⁹ : Module R M
inst✝¹⁸ : Module R M'
inst✝¹⁷ : Module R M''
inst✝¹⁶ : IsScalarTower R A M'
f : M →ₗ[R] M'
g✝¹ : M →ₗ[R] M''
inst✝¹⁵ : IsLocalizedModule S f
N : Type ?u.1104783
N' : Type ?u.1104786
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup N'
inst✝¹² : Module R N
inst✝¹¹ : Module R N'
g✝ : N →ₗ[R] N'
inst✝¹⁰ : IsLocalizedModule S g✝
M₀ : Type u_6
M₀' : Type u_9
inst✝⁹ : AddCommGroup M₀
inst✝⁸ : AddCommGroup M₀'
inst✝⁷ : Module R M₀
inst✝⁶ : Module R M₀'
f₀ : M₀ →ₗ[R] M₀'
inst✝⁵ : IsLocalizedModule S f₀
M₁ : Type u_7
M₁' : Type u_8
inst✝⁴ : AddCommGroup M₁
inst✝³ : AddCommGroup M₁'
inst✝² : Module R M₁
inst✝¹ : Module R M₁'
f₁ : M₁ →ₗ[R] M₁'
inst✝ : IsLocalizedModule S f₁
g : M₀ →ₗ[R] M₁
x : LocalizedModule S M₀
m : M₀
s : ↥S
⊢ f₁ (g m) = fromLocalizedModule' S f₁ (((map S (mkLinearMap S M₀) (mkLinearMap S M₁)) g) (LocalizedModule.mk m 1))

tactic: simp [map, lift, iso_localizedModule_eq_refl, lift_mk]
state_before: case h
R : Type u_1
inst✝²⁷ : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝²⁶ : AddCommMonoid M
inst✝²⁵ : AddCommMonoid M'
inst✝²⁴ : AddCommMonoid M''
A : Type u_5
inst✝²³ : CommSemiring A
inst✝²² : Algebra R A
inst✝²¹ : Module A M'
inst✝²⁰ : IsLocalization S A
inst✝¹⁹ : Module R M
inst✝¹⁸ : Module R M'
inst✝¹⁷ : Module R M''
inst✝¹⁶ : IsScalarTower R A M'
f : M →ₗ[R] M'
g✝¹ : M →ₗ[R] M''
inst✝¹⁵ : IsLocalizedModule S f
N : Type ?u.1104783
N' : Type ?u.1104786
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup N'
inst✝¹² : Module R N
inst✝¹¹ : Module R N'
g✝ : N →ₗ[R] N'
inst✝¹⁰ : IsLocalizedModule S g✝
M₀ : Type u_6
M₀' : Type u_9
inst✝⁹ : AddCommGroup M₀
inst✝⁸ : AddCommGroup M₀'
inst✝⁷ : Module R M₀
inst✝⁶ : Module R M₀'
f₀ : M₀ →ₗ[R] M₀'
inst✝⁵ : IsLocalizedModule S f₀
M₁ : Type u_7
M₁' : Type u_8
inst✝⁴ : AddCommGroup M₁
inst✝³ : AddCommGroup M₁'
inst✝² : Module R M₁
inst✝¹ : Module R M₁'
f₁ : M₁ →ₗ[R] M₁'
inst✝ : IsLocalizedModule S f₁
g : M₀ →ₗ[R] M₁
x : LocalizedModule S M₀
m : M₀
s : ↥S
⊢ f₁ (g m) = fromLocalizedModule' S f₁ (((map S (mkLinearMap S M₀) (mkLinearMap S M₁)) g) (LocalizedModule.mk m 1))
state_after: no goals

tactic: rw [Module.algebraMap_end_apply, ← CompatibleSMul.map_smul, smul'_mk, ← mk_smul, mk_cancel]
state_before: case h
R : Type u_1
inst✝²⁷ : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝²⁶ : AddCommMonoid M
inst✝²⁵ : AddCommMonoid M'
inst✝²⁴ : AddCommMonoid M''
A : Type u_5
inst✝²³ : CommSemiring A
inst✝²² : Algebra R A
inst✝²¹ : Module A M'
inst✝²⁰ : IsLocalization S A
inst✝¹⁹ : Module R M
inst✝¹⁸ : Module R M'
inst✝¹⁷ : Module R M''
inst✝¹⁶ : IsScalarTower R A M'
f : M →ₗ[R] M'
g✝¹ : M →ₗ[R] M''
inst✝¹⁵ : IsLocalizedModule S f
N : Type ?u.1104783
N' : Type ?u.1104786
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup N'
inst✝¹² : Module R N
inst✝¹¹ : Module R N'
g✝ : N →ₗ[R] N'
inst✝¹⁰ : IsLocalizedModule S g✝
M₀ : Type u_6
M₀' : Type u_9
inst✝⁹ : AddCommGroup M₀
inst✝⁸ : AddCommGroup M₀'
inst✝⁷ : Module R M₀
inst✝⁶ : Module R M₀'
f₀ : M₀ →ₗ[R] M₀'
inst✝⁵ : IsLocalizedModule S f₀
M₁ : Type u_7
M₁' : Type u_8
inst✝⁴ : AddCommGroup M₁
inst✝³ : AddCommGroup M₁'
inst✝² : Module R M₁
inst✝¹ : Module R M₁'
f₁ : M₁ →ₗ[R] M₁'
inst✝ : IsLocalizedModule S f₁
g : M₀ →ₗ[R] M₁
x : LocalizedModule S M₀
m : M₀
s : ↥S
⊢ ((map S f₀ f₁) g ∘ₗ ↑(iso S f₀)) (LocalizedModule.mk m 1) =
    ((algebraMap R (Module.End R M₁')) ↑s)
      ((↑(iso S f₁) ∘ₗ (map S (mkLinearMap S M₀) (mkLinearMap S M₁)) g) (LocalizedModule.mk m s))
state_after: case h
R : Type u_1
inst✝²⁷ : CommSemiring R
S : Submonoid R
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝²⁶ : AddCommMonoid M
inst✝²⁵ : AddCommMonoid M'
inst✝²⁴ : AddCommMonoid M''
A : Type u_5
inst✝²³ : CommSemiring A
inst✝²² : Algebra R A
inst✝²¹ : Module A M'
inst✝²⁰ : IsLocalization S A
inst✝¹⁹ : Module R M
inst✝¹⁸ : Module R M'
inst✝¹⁷ : Module R M''
inst✝¹⁶ : IsScalarTower R A M'
f : M →ₗ[R] M'
g✝¹ : M →ₗ[R] M''
inst✝¹⁵ : IsLocalizedModule S f
N : Type ?u.1104783
N' : Type ?u.1104786
inst✝¹⁴ : AddCommGroup N
inst✝¹³ : AddCommGroup N'
inst✝¹² : Module R N
inst✝¹¹ : Module R N'
g✝ : N →ₗ[R] N'
inst✝¹⁰ : IsLocalizedModule S g✝
M₀ : Type u_6
M₀' : Type u_9
inst✝⁹ : AddCommGroup M₀
inst✝⁸ : AddCommGroup M₀'
inst✝⁷ : Module R M₀
inst✝⁶ : Module R M₀'
f₀ : M₀ →ₗ[R] M₀'
inst✝⁵ : IsLocalizedModule S f₀
M₁ : Type u_7
M₁' : Type u_8
inst✝⁴ : AddCommGroup M₁
inst✝³ : AddCommGroup M₁'
inst✝² : Module R M₁
inst✝¹ : Module R M₁'
f₁ : M₁ →ₗ[R] M₁'
inst✝ : IsLocalizedModule S f₁
g : M₀ →ₗ[R] M₁
x : LocalizedModule S M₀
m : M₀
s : ↥S
⊢ ((map S f₀ f₁) g ∘ₗ ↑(iso S f₀)) (LocalizedModule.mk m 1) =
    (↑(iso S f₁) ∘ₗ (map S (mkLinearMap S M₀) (mkLinearMap S M₁)) g) (LocalizedModule.mk m 1)