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

tactic: replace h₃ := fun x =>
  Iff.intro (h₃ x) fun ⟨⟨m, hm⟩, e⟩ =>
    (h₁ m hm).mul_left_cancel <| by
      rw [← Algebra.smul_def]
      simpa [Submonoid.smul_def] using f.congr_arg e
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 → ∃ m, m • x = 0
⊢ IsLocalizedModule M f.toLinearMap
state_after: 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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
⊢ IsLocalizedModule M f.toLinearMap

tactic: constructor
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
⊢ IsLocalizedModule M f.toLinearMap
state_after: case map_units
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
⊢ ∀ (x : ↥M), IsUnit ((algebraMap R (Module.End R S')) ↑x)

case surj'
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
⊢ ∀ (y : S'), ∃ x, x.2 • y = f.toLinearMap x.1

case exists_of_eq
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
⊢ ∀ {x₁ x₂ : S}, f.toLinearMap x₁ = f.toLinearMap x₂ → ∃ c, c • x₁ = c • x₂

tactic: rw [← Algebra.smul_def]
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 → ∃ m, m • x = 0
x : S
x✝ : ∃ m, m • x = 0
m : R
hm : m ∈ M
e : ⟨m, hm⟩ • x = 0
⊢ (algebraMap R S') m * f x = (algebraMap R S') m * 0
state_after: 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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 → ∃ m, m • x = 0
x : S
x✝ : ∃ m, m • x = 0
m : R
hm : m ∈ M
e : ⟨m, hm⟩ • x = 0
⊢ m • f x = (algebraMap R S') m * 0

tactic: simpa [Submonoid.smul_def] using f.congr_arg e
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 → ∃ m, m • x = 0
x : S
x✝ : ∃ m, m • x = 0
m : R
hm : m ∈ M
e : ⟨m, hm⟩ • x = 0
⊢ m • f x = (algebraMap R S') m * 0
state_after: no goals

tactic: intro x
state_before: case map_units
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
⊢ ∀ (x : ↥M), IsUnit ((algebraMap R (Module.End R S')) ↑x)
state_after: case map_units
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
⊢ IsUnit ((algebraMap R (Module.End R S')) ↑x)

tactic: rw [Module.End_isUnit_iff]
state_before: case map_units
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
⊢ IsUnit ((algebraMap R (Module.End R S')) ↑x)
state_after: case map_units
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
⊢ Function.Bijective ⇑((algebraMap R (Module.End R S')) ↑x)

tactic: constructor
state_before: case map_units
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
⊢ Function.Bijective ⇑((algebraMap R (Module.End R S')) ↑x)
state_after: case map_units.left
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
⊢ Function.Injective ⇑((algebraMap R (Module.End R S')) ↑x)

case map_units.right
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
⊢ Function.Surjective ⇑((algebraMap R (Module.End R S')) ↑x)

tactic: rintro a b (e : x • a = x • b)
state_before: case map_units.left
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
⊢ Function.Injective ⇑((algebraMap R (Module.End R S')) ↑x)
state_after: case map_units.left
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
a b : S'
e : x • a = x • b
⊢ a = b

tactic: simp_rw [Submonoid.smul_def, Algebra.smul_def] at e
state_before: case map_units.left
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
a b : S'
e : x • a = x • b
⊢ a = b
state_after: case map_units.left
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
a b : S'
e : (algebraMap R S') ↑x * a = (algebraMap R S') ↑x * b
⊢ a = b

tactic: exact (h₁ x x.2).mul_left_cancel e
state_before: case map_units.left
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
a b : S'
e : (algebraMap R S') ↑x * a = (algebraMap R S') ↑x * b
⊢ a = b
state_after: no goals

tactic: intro a
state_before: case map_units.right
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
⊢ Function.Surjective ⇑((algebraMap R (Module.End R S')) ↑x)
state_after: case map_units.right
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
a : S'
⊢ ∃ a_1, ((algebraMap R (Module.End R S')) ↑x) a_1 = a

tactic: refine ⟨((h₁ x x.2).unit⁻¹ : _) * a, ?_⟩
state_before: case map_units.right
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
a : S'
⊢ ∃ a_1, ((algebraMap R (Module.End R S')) ↑x) a_1 = a
state_after: case map_units.right
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
a : S'
⊢ ((algebraMap R (Module.End R S')) ↑x) (↑⋯.unit⁻¹ * a) = a

tactic: rw [Module.algebraMap_end_apply, Algebra.smul_def, ← mul_assoc, IsUnit.mul_val_inv, one_mul]
state_before: case map_units.right
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x : ↥M
a : S'
⊢ ((algebraMap R (Module.End R S')) ↑x) (↑⋯.unit⁻¹ * a) = a
state_after: no goals

tactic: exact h₂
state_before: case surj'
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
⊢ ∀ (y : S'), ∃ x, x.2 • y = f.toLinearMap x.1
state_after: no goals

tactic: intros x y
state_before: case exists_of_eq
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
⊢ ∀ {x₁ x₂ : S}, f.toLinearMap x₁ = f.toLinearMap x₂ → ∃ c, c • x₁ = c • x₂
state_after: case exists_of_eq
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x y : S
⊢ f.toLinearMap x = f.toLinearMap y → ∃ c, c • x = c • y

tactic: dsimp only [AlgHom.toLinearMap_apply]
state_before: case exists_of_eq
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x y : S
⊢ f.toLinearMap x = f.toLinearMap y → ∃ c, c • x = c • y
state_after: case exists_of_eq
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x y : S
⊢ f x = f y → ∃ c, c • x = c • y

tactic: rw [← sub_eq_zero, ← map_sub, h₃]
state_before: case exists_of_eq
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x y : S
⊢ f x = f y → ∃ c, c • x = c • y
state_after: case exists_of_eq
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x y : S
⊢ (∃ m, m • (x - y) = 0) → ∃ c, c • x = c • y

tactic: simp_rw [smul_sub, sub_eq_zero]
state_before: case exists_of_eq
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x y : S
⊢ (∃ m, m • (x - y) = 0) → ∃ c, c • x = c • y
state_after: case exists_of_eq
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x y : S
⊢ (∃ m, m • x = m • y) → ∃ c, c • x = c • y

tactic: exact id
state_before: case exists_of_eq
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''
M₀ : Type ?u.1242802
M₀' : Type ?u.1242805
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.1244871
M₁' : Type ?u.1244874
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.1246940
M₂' : Type ?u.1246943
inst✝⁹ : AddCommGroup M₂
inst✝⁸ : AddCommGroup M₂'
inst✝⁷ : Module R✝ M₂
inst✝⁶ : Module R✝ M₂'
f₂ : M₂ →ₗ[R✝] M₂'
inst✝⁵ : IsLocalizedModule S✝ f₂
R : Type u_6
S : Type u_7
S' : Type u_8
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : CommRing S'
inst✝¹ : Algebra R S
inst✝ : Algebra R S'
M : Submonoid R
f : S →ₐ[R] S'
h₁ : ∀ x ∈ M, IsUnit ((algebraMap R S') x)
h₂ : ∀ (y : S'), ∃ x, x.2 • y = f x.1
h₃ : ∀ (x : S), f x = 0 ↔ ∃ m, m • x = 0
x y : S
⊢ (∃ m, m • x = m • y) → ∃ c, c • x = c • y
state_after: no goals