Theorem: DedekindDomain.FiniteAdeleRing.submodulesRingBasis
File: Mathlib/RingTheory/DedekindDomain/FiniteAdeleRing.lean

Proof steps:
state_before: R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
i j : ↥R⁰
⊢ Submodule.span (R_hat R K) {↑↑(i * j)} ≤ Submodule.span (R_hat R K) {↑↑i} ⊓ Submodule.span (R_hat R K) {↑↑j}
state_after: R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
i j : ↥R⁰
⊢ Submodule.span (R_hat R K) {↑↑i * ↑↑j} ≤ Submodule.span (R_hat R K) {↑↑i} ⊓ Submodule.span (R_hat R K) {↑↑j}
tactic: push_cast
state_before: R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
i j : ↥R⁰
⊢ Submodule.span (R_hat R K) {↑↑i * ↑↑j} ≤ Submodule.span (R_hat R K) {↑↑i} ⊓ Submodule.span (R_hat R K) {↑↑j}
state_after: R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
i j : ↥R⁰
⊢ (∃ a, a • ↑↑i = ↑↑i * ↑↑j) ∧ ∃ a, a • ↑↑j = ↑↑i * ↑↑j
tactic: simp only [le_inf_iff, Submodule.span_singleton_le_iff_mem, Submodule.mem_span_singleton]
state_before: R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
i j : ↥R⁰
⊢ (∃ a, a • ↑↑i = ↑↑i * ↑↑j) ∧ ∃ a, a • ↑↑j = ↑↑i * ↑↑j
state_after: no goals
tactic: exact ⟨⟨((j : R) : R_hat R K), by rw [mul_comm]; rfl⟩, ⟨((i : R) : R_hat R K), rfl⟩⟩
state_before: R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r : ↥R⁰
⊢ ∃ j, a • Submodule.span (R_hat R K) {↑↑j} ≤ Submodule.span (R_hat R K) {↑↑r}
state_after: case intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
⊢ ∃ j, a • Submodule.span (R_hat R K) {↑↑j} ≤ Submodule.span (R_hat R K) {↑↑r}
tactic: rcases mul_nonZeroDivisor_mem_finiteIntegralAdeles a with ⟨b, c, h⟩
state_before: case intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
⊢ ∃ j, a • Submodule.span (R_hat R K) {↑↑j} ≤ Submodule.span (R_hat R K) {↑↑r}
state_after: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
⊢ a • Submodule.span (R_hat R K) {↑↑(r * b)} ≤ Submodule.span (R_hat R K) {↑↑r}
tactic: use r * b
state_before: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
⊢ a • Submodule.span (R_hat R K) {↑↑(r * b)} ≤ Submodule.span (R_hat R K) {↑↑r}
state_after: case h.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
m : FiniteAdeleRing R K
hm : m ∈ ↑(Submodule.span (R_hat R K) {↑↑(r * b)})
⊢ (DistribMulAction.toLinearMap (R_hat R K) (FiniteAdeleRing R K) a) m ∈ Submodule.span (R_hat R K) {↑↑r}
tactic: rintro x ⟨m, hm, rfl⟩
state_before: case h.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
m : FiniteAdeleRing R K
hm : m ∈ ↑(Submodule.span (R_hat R K) {↑↑(r * b)})
⊢ (DistribMulAction.toLinearMap (R_hat R K) (FiniteAdeleRing R K) a) m ∈ Submodule.span (R_hat R K) {↑↑r}
state_after: case h.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
m : FiniteAdeleRing R K
hm : m ∈ Submodule.span (R_hat R K) {↑(↑r * ↑b)}
⊢ (DistribMulAction.toLinearMap (R_hat R K) (FiniteAdeleRing R K) a) m ∈ Submodule.span (R_hat R K) {↑↑r}
tactic: simp only [Submonoid.coe_mul, SetLike.mem_coe] at hm
state_before: case h.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
m : FiniteAdeleRing R K
hm : m ∈ Submodule.span (R_hat R K) {↑(↑r * ↑b)}
⊢ (DistribMulAction.toLinearMap (R_hat R K) (FiniteAdeleRing R K) a) m ∈ Submodule.span (R_hat R K) {↑↑r}
state_after: case h.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
m : FiniteAdeleRing R K
hm : ∃ a, a • ↑(↑r * ↑b) = m
⊢ ∃ a_1, a_1 • ↑↑r = (DistribMulAction.toLinearMap (R_hat R K) (FiniteAdeleRing R K) a) m
tactic: rw [Submodule.mem_span_singleton] at hm ⊢
state_before: case h.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
m : FiniteAdeleRing R K
hm : ∃ a, a • ↑(↑r * ↑b) = m
⊢ ∃ a_1, a_1 • ↑↑r = (DistribMulAction.toLinearMap (R_hat R K) (FiniteAdeleRing R K) a) m
state_after: case h.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
n : R_hat R K
⊢ ∃ a_1, a_1 • ↑↑r = (DistribMulAction.toLinearMap (R_hat R K) (FiniteAdeleRing R K) a) (n • ↑(↑r * ↑b))
tactic: rcases hm with ⟨n, rfl⟩
state_before: case h.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
n : R_hat R K
⊢ ∃ a_1, a_1 • ↑↑r = (DistribMulAction.toLinearMap (R_hat R K) (FiniteAdeleRing R K) a) (n • ↑(↑r * ↑b))
state_after: case h.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
n : R_hat R K
⊢ ∃ a_1, a_1 • ↑↑r = n • (a * ↑(↑r * ↑b))
tactic: simp only [LinearMapClass.map_smul, DistribMulAction.toLinearMap_apply, smul_eq_mul]
state_before: case h.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
n : R_hat R K
⊢ ∃ a_1, a_1 • ↑↑r = n • (a * ↑(↑r * ↑b))
state_after: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
n : R_hat R K
⊢ (n * c) • ↑↑r = n • (a * ↑(↑r * ↑b))
tactic: use n * c
state_before: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
n : R_hat R K
⊢ (n * c) • ↑↑r = n • (a * ↑(↑r * ↑b))
state_after: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
n : R_hat R K
⊢ (n * c) • ↑↑r = n • (a * (↑↑r * ↑↑b))
tactic: push_cast
state_before: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
n : R_hat R K
⊢ (n * c) • ↑↑r = n • (a * (↑↑r * ↑↑b))
state_after: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
n : R_hat R K
⊢ Algebra.toRingHom (n * c) * ↑↑r = Algebra.toRingHom n * ↑c * ↑↑r
tactic: rw [mul_left_comm, h, mul_comm _ (c : FiniteAdeleRing R K),
      Algebra.smul_def', Algebra.smul_def', ← mul_assoc]
state_before: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
a : FiniteAdeleRing R K
r b : ↥R⁰
c : R_hat R K
h : a * ↑↑b = ↑c
n : R_hat R K
⊢ Algebra.toRingHom (n * c) * ↑↑r = Algebra.toRingHom n * ↑c * ↑↑r
state_after: no goals
tactic: rfl
state_before: R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
⊢ ↑(Submodule.span (R_hat R K) {↑↑r}) * ↑(Submodule.span (R_hat R K) {↑↑r}) ⊆ ↑(Submodule.span (R_hat R K) {↑↑r})
state_after: R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
x : FiniteAdeleRing R K
hx : x ∈ ↑(Submodule.span (R_hat R K) {↑↑r}) * ↑(Submodule.span (R_hat R K) {↑↑r})
⊢ x ∈ ↑(Submodule.span (R_hat R K) {↑↑r})
tactic: intro x hx
state_before: R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
x : FiniteAdeleRing R K
hx : x ∈ ↑(Submodule.span (R_hat R K) {↑↑r}) * ↑(Submodule.span (R_hat R K) {↑↑r})
⊢ x ∈ ↑(Submodule.span (R_hat R K) {↑↑r})
state_after: R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
x : FiniteAdeleRing R K
hx : ∃ x_1 ∈ ↑(Submodule.span (R_hat R K) {↑↑r}), ∃ y ∈ ↑(Submodule.span (R_hat R K) {↑↑r}), x_1 * y = x
⊢ x ∈ ↑(Submodule.span (R_hat R K) {↑↑r})
tactic: rw [mem_mul] at hx
state_before: R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
x : FiniteAdeleRing R K
hx : ∃ x_1 ∈ ↑(Submodule.span (R_hat R K) {↑↑r}), ∃ y ∈ ↑(Submodule.span (R_hat R K) {↑↑r}), x_1 * y = x
⊢ x ∈ ↑(Submodule.span (R_hat R K) {↑↑r})
state_after: case intro.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
a : FiniteAdeleRing R K
ha : a ∈ ↑(Submodule.span (R_hat R K) {↑↑r})
b : FiniteAdeleRing R K
hb : b ∈ ↑(Submodule.span (R_hat R K) {↑↑r})
⊢ a * b ∈ ↑(Submodule.span (R_hat R K) {↑↑r})
tactic: rcases hx with ⟨a, ha, b, hb, rfl⟩
state_before: case intro.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
a : FiniteAdeleRing R K
ha : a ∈ ↑(Submodule.span (R_hat R K) {↑↑r})
b : FiniteAdeleRing R K
hb : b ∈ ↑(Submodule.span (R_hat R K) {↑↑r})
⊢ a * b ∈ ↑(Submodule.span (R_hat R K) {↑↑r})
state_after: case intro.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
a b : FiniteAdeleRing R K
ha : ∃ a_1, a_1 • ↑↑r = a
hb : ∃ a, a • ↑↑r = b
⊢ ∃ a_1, a_1 • ↑↑r = a * b
tactic: simp only [SetLike.mem_coe, Submodule.mem_span_singleton] at ha hb ⊢
state_before: case intro.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
a b : FiniteAdeleRing R K
ha : ∃ a_1, a_1 • ↑↑r = a
hb : ∃ a, a • ↑↑r = b
⊢ ∃ a_1, a_1 • ↑↑r = a * b
state_after: case intro.intro.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
b : FiniteAdeleRing R K
hb : ∃ a, a • ↑↑r = b
m : R_hat R K
⊢ ∃ a, a • ↑↑r = m • ↑↑r * b
tactic: rcases ha with ⟨m, rfl⟩
state_before: case intro.intro.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
b : FiniteAdeleRing R K
hb : ∃ a, a • ↑↑r = b
m : R_hat R K
⊢ ∃ a, a • ↑↑r = m • ↑↑r * b
state_after: case intro.intro.intro.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
m n : R_hat R K
⊢ ∃ a, a • ↑↑r = m • ↑↑r * n • ↑↑r
tactic: rcases hb with ⟨n, rfl⟩
state_before: case intro.intro.intro.intro.intro.intro
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
m n : R_hat R K
⊢ ∃ a, a • ↑↑r = m • ↑↑r * n • ↑↑r
state_after: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
m n : R_hat R K
⊢ (m * n * ↑↑r) • ↑↑r = m • ↑↑r * n • ↑↑r
tactic: use m * n * (r : R)
state_before: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
m n : R_hat R K
⊢ (m * n * ↑↑r) • ↑↑r = m • ↑↑r * n • ↑↑r
state_after: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
m n : R_hat R K
⊢ Algebra.toRingHom m * Algebra.toRingHom n * Algebra.toRingHom ↑↑r * ↑↑r =
    Algebra.toRingHom m * ↑↑r * (Algebra.toRingHom n * ↑↑r)
tactic: simp only [Algebra.smul_def', map_mul]
state_before: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
m n : R_hat R K
⊢ Algebra.toRingHom m * Algebra.toRingHom n * Algebra.toRingHom ↑↑r * ↑↑r =
    Algebra.toRingHom m * ↑↑r * (Algebra.toRingHom n * ↑↑r)
state_after: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
m n : R_hat R K
⊢ Algebra.toRingHom m * Algebra.toRingHom n * (Algebra.toRingHom ↑↑r * ↑↑r) =
    Algebra.toRingHom m * Algebra.toRingHom n * (↑↑r * ↑↑r)
tactic: rw [mul_mul_mul_comm, mul_assoc]
state_before: case h
R : Type u_1
K : Type u_2
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
v : HeightOneSpectrum R
r : ↥R⁰
m n : R_hat R K
⊢ Algebra.toRingHom m * Algebra.toRingHom n * (Algebra.toRingHom ↑↑r * ↑↑r) =
    Algebra.toRingHom m * Algebra.toRingHom n * (↑↑r * ↑↑r)
state_after: no goals
tactic: rfl