Theorem: IsLocalizedModule.isBaseChange
File: Mathlib/RingTheory/Localization/BaseChange.lean

tactic: obtain ⟨ℓ, rfl, h₂⟩ := IsLocalizedModule.is_universal S f g fun s ↦ by
  rw [← (Algebra.lsmul R (A := A) R Q).commutes]; exact (IsLocalization.map_units A s).map _
state_before: R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
A : Type u_2
inst✝¹¹ : CommRing A
inst✝¹⁰ : Algebra R A
inst✝⁹ : IsLocalization S A
M : Type u_3
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module A M
inst✝⁵ : IsScalarTower R A M
M' : Type u_4
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module A M'
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
Q : Type (max u_3 u_4 u_2)
x✝³ : AddCommMonoid Q
x✝² : Module R Q
x✝¹ : Module A Q
x✝ : IsScalarTower R A Q
g : M →ₗ[R] Q
⊢ ∃! g', ↑R g' ∘ₗ f = g
state_after: case intro.intro
R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
A : Type u_2
inst✝¹¹ : CommRing A
inst✝¹⁰ : Algebra R A
inst✝⁹ : IsLocalization S A
M : Type u_3
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module A M
inst✝⁵ : IsScalarTower R A M
M' : Type u_4
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module A M'
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
Q : Type (max u_3 u_4 u_2)
x✝³ : AddCommMonoid Q
x✝² : Module R Q
x✝¹ : Module A Q
x✝ : IsScalarTower R A Q
ℓ : M' →ₗ[R] Q
h₂ : ∀ (y : M' →ₗ[R] Q), (fun l => l ∘ₗ f = ℓ ∘ₗ f) y → y = ℓ
⊢ ∃! g', ↑R g' ∘ₗ f = ℓ ∘ₗ f

tactic: refine ⟨ℓ.extendScalarsOfIsLocalization S A, by simp, fun g'' h ↦ ?_⟩
state_before: case intro.intro
R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
A : Type u_2
inst✝¹¹ : CommRing A
inst✝¹⁰ : Algebra R A
inst✝⁹ : IsLocalization S A
M : Type u_3
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module A M
inst✝⁵ : IsScalarTower R A M
M' : Type u_4
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module A M'
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
Q : Type (max u_3 u_4 u_2)
x✝³ : AddCommMonoid Q
x✝² : Module R Q
x✝¹ : Module A Q
x✝ : IsScalarTower R A Q
ℓ : M' →ₗ[R] Q
h₂ : ∀ (y : M' →ₗ[R] Q), (fun l => l ∘ₗ f = ℓ ∘ₗ f) y → y = ℓ
⊢ ∃! g', ↑R g' ∘ₗ f = ℓ ∘ₗ f
state_after: case intro.intro
R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
A : Type u_2
inst✝¹¹ : CommRing A
inst✝¹⁰ : Algebra R A
inst✝⁹ : IsLocalization S A
M : Type u_3
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module A M
inst✝⁵ : IsScalarTower R A M
M' : Type u_4
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module A M'
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
Q : Type (max u_3 u_4 u_2)
x✝³ : AddCommMonoid Q
x✝² : Module R Q
x✝¹ : Module A Q
x✝ : IsScalarTower R A Q
ℓ : M' →ₗ[R] Q
h₂ : ∀ (y : M' →ₗ[R] Q), (fun l => l ∘ₗ f = ℓ ∘ₗ f) y → y = ℓ
g'' : M' →ₗ[A] Q
h : (fun g' => ↑R g' ∘ₗ f = ℓ ∘ₗ f) g''
⊢ g'' = LinearMap.extendScalarsOfIsLocalization S A ℓ

tactic: cases h₂ (LinearMap.restrictScalars R g'') h
state_before: case intro.intro
R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
A : Type u_2
inst✝¹¹ : CommRing A
inst✝¹⁰ : Algebra R A
inst✝⁹ : IsLocalization S A
M : Type u_3
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module A M
inst✝⁵ : IsScalarTower R A M
M' : Type u_4
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module A M'
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
Q : Type (max u_3 u_4 u_2)
x✝³ : AddCommMonoid Q
x✝² : Module R Q
x✝¹ : Module A Q
x✝ : IsScalarTower R A Q
ℓ : M' →ₗ[R] Q
h₂ : ∀ (y : M' →ₗ[R] Q), (fun l => l ∘ₗ f = ℓ ∘ₗ f) y → y = ℓ
g'' : M' →ₗ[A] Q
h : (fun g' => ↑R g' ∘ₗ f = ℓ ∘ₗ f) g''
⊢ g'' = LinearMap.extendScalarsOfIsLocalization S A ℓ
state_after: case intro.intro.refl
R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
A : Type u_2
inst✝¹¹ : CommRing A
inst✝¹⁰ : Algebra R A
inst✝⁹ : IsLocalization S A
M : Type u_3
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module A M
inst✝⁵ : IsScalarTower R A M
M' : Type u_4
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module A M'
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
Q : Type (max u_3 u_4 u_2)
x✝³ : AddCommMonoid Q
x✝² : Module R Q
x✝¹ : Module A Q
x✝ : IsScalarTower R A Q
g'' : M' →ₗ[A] Q
h₂ : ∀ (y : M' →ₗ[R] Q), (fun l => l ∘ₗ f = ↑R g'' ∘ₗ f) y → y = ↑R g''
h : ↑R g'' ∘ₗ f = ↑R g'' ∘ₗ f
⊢ g'' = LinearMap.extendScalarsOfIsLocalization S A (↑R g'')

tactic: rfl
state_before: case intro.intro.refl
R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
A : Type u_2
inst✝¹¹ : CommRing A
inst✝¹⁰ : Algebra R A
inst✝⁹ : IsLocalization S A
M : Type u_3
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module A M
inst✝⁵ : IsScalarTower R A M
M' : Type u_4
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module A M'
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
Q : Type (max u_3 u_4 u_2)
x✝³ : AddCommMonoid Q
x✝² : Module R Q
x✝¹ : Module A Q
x✝ : IsScalarTower R A Q
g'' : M' →ₗ[A] Q
h₂ : ∀ (y : M' →ₗ[R] Q), (fun l => l ∘ₗ f = ↑R g'' ∘ₗ f) y → y = ↑R g''
h : ↑R g'' ∘ₗ f = ↑R g'' ∘ₗ f
⊢ g'' = LinearMap.extendScalarsOfIsLocalization S A (↑R g'')
state_after: no goals

tactic: rw [← (Algebra.lsmul R (A := A) R Q).commutes]
state_before: R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
A : Type u_2
inst✝¹¹ : CommRing A
inst✝¹⁰ : Algebra R A
inst✝⁹ : IsLocalization S A
M : Type u_3
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module A M
inst✝⁵ : IsScalarTower R A M
M' : Type u_4
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module A M'
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
Q : Type (max u_3 u_4 u_2)
x✝³ : AddCommMonoid Q
x✝² : Module R Q
x✝¹ : Module A Q
x✝ : IsScalarTower R A Q
g : M →ₗ[R] Q
s : ↥S
⊢ IsUnit ((algebraMap R (Module.End R Q)) ↑s)
state_after: R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
A : Type u_2
inst✝¹¹ : CommRing A
inst✝¹⁰ : Algebra R A
inst✝⁹ : IsLocalization S A
M : Type u_3
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module A M
inst✝⁵ : IsScalarTower R A M
M' : Type u_4
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module A M'
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
Q : Type (max u_3 u_4 u_2)
x✝³ : AddCommMonoid Q
x✝² : Module R Q
x✝¹ : Module A Q
x✝ : IsScalarTower R A Q
g : M →ₗ[R] Q
s : ↥S
⊢ IsUnit ((Algebra.lsmul R R Q) ((algebraMap R A) ↑s))

tactic: exact (IsLocalization.map_units A s).map _
state_before: R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
A : Type u_2
inst✝¹¹ : CommRing A
inst✝¹⁰ : Algebra R A
inst✝⁹ : IsLocalization S A
M : Type u_3
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module A M
inst✝⁵ : IsScalarTower R A M
M' : Type u_4
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module A M'
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
Q : Type (max u_3 u_4 u_2)
x✝³ : AddCommMonoid Q
x✝² : Module R Q
x✝¹ : Module A Q
x✝ : IsScalarTower R A Q
g : M →ₗ[R] Q
s : ↥S
⊢ IsUnit ((Algebra.lsmul R R Q) ((algebraMap R A) ↑s))
state_after: no goals

tactic: simp
state_before: R : Type u_1
inst✝¹² : CommSemiring R
S : Submonoid R
A : Type u_2
inst✝¹¹ : CommRing A
inst✝¹⁰ : Algebra R A
inst✝⁹ : IsLocalization S A
M : Type u_3
inst✝⁸ : AddCommMonoid M
inst✝⁷ : Module R M
inst✝⁶ : Module A M
inst✝⁵ : IsScalarTower R A M
M' : Type u_4
inst✝⁴ : AddCommMonoid M'
inst✝³ : Module R M'
inst✝² : Module A M'
inst✝¹ : IsScalarTower R A M'
f : M →ₗ[R] M'
inst✝ : IsLocalizedModule S f
Q : Type (max u_3 u_4 u_2)
x✝³ : AddCommMonoid Q
x✝² : Module R Q
x✝¹ : Module A Q
x✝ : IsScalarTower R A Q
ℓ : M' →ₗ[R] Q
h₂ : ∀ (y : M' →ₗ[R] Q), (fun l => l ∘ₗ f = ℓ ∘ₗ f) y → y = ℓ
⊢ (fun g' => ↑R g' ∘ₗ f = ℓ ∘ₗ f) (LinearMap.extendScalarsOfIsLocalization S A ℓ)
state_after: no goals