Theorem: DedekindDomain.FiniteAdeleRing.mul_nonZeroDivisor_mem_finiteIntegralAdeles
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
a : FiniteAdeleRing R K
⊢ ∃ b c, a * ↑↑b = ↑c
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
a : FiniteAdeleRing R K
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
⊢ ∃ b c, a * ↑↑b = ↑c
tactic: let S := {v | a v ∉ adicCompletionIntegers K v}
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
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
⊢ ∃ b c, a * ↑↑b = ↑c
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
a : FiniteAdeleRing R K
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
⊢ ∃ b c, a * ↑↑b = ↑c
tactic: choose b hb h using adicCompletion.mul_nonZeroDivisor_mem_adicCompletionIntegers (R := R) (K := K)
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
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
⊢ ∃ b c, a * ↑↑b = ↑c
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
a : FiniteAdeleRing R K
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
p : R := ∏ᶠ (v : HeightOneSpectrum R) (_ : v ∈ S), b v ((fun v => ↑a v) v)
⊢ ∃ b c, a * ↑↑b = ↑c
tactic: let p := ∏ᶠ v ∈ S, b v (a v)
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
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
p : R := ∏ᶠ (v : HeightOneSpectrum R) (_ : v ∈ S), b v ((fun v => ↑a v) v)
hp : p ∈ R⁰
⊢ ∃ b c, a * ↑↑b = ↑c
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
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
p : R := ∏ᶠ (v : HeightOneSpectrum R) (_ : v ∈ S), b v ((fun v => ↑a v) v)
hp : p ∈ R⁰
⊢ ∃ c, a * ↑↑⟨p, hp⟩ = ↑c
tactic: use ⟨p, hp⟩
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
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
p : R := ∏ᶠ (v : HeightOneSpectrum R) (_ : v ∈ S), b v ((fun v => ↑a v) v)
hp : p ∈ R⁰
⊢ ∃ c, a * ↑↑⟨p, hp⟩ = ↑c
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
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
p : R := ∏ᶠ (v : HeightOneSpectrum R) (_ : v ∈ S), b v ((fun v => ↑a v) v)
hp : p ∈ R⁰
⊢ ∀ (v : HeightOneSpectrum R), (fun v => ↑(a * ↑↑⟨p, hp⟩) v) v ∈ adicCompletionIntegers K v
tactic: rw [exists_finiteIntegralAdele_iff]
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
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
p : R := ∏ᶠ (v : HeightOneSpectrum R) (_ : v ∈ S), b v ((fun v => ↑a v) v)
hp : p ∈ R⁰
⊢ ∀ (v : HeightOneSpectrum R), (fun v => ↑(a * ↑↑⟨p, hp⟩) v) v ∈ adicCompletionIntegers K v
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
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
p : R := ∏ᶠ (v : HeightOneSpectrum R) (_ : v ∈ S), b v ((fun v => ↑a v) v)
hp : p ∈ R⁰
v : HeightOneSpectrum R
⊢ (fun v => ↑(a * ↑↑⟨p, hp⟩) v) v ∈ adicCompletionIntegers K v
tactic: intro v
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
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
p : R := ∏ᶠ (v : HeightOneSpectrum R) (_ : v ∈ S), b v ((fun v => ↑a v) v)
hp : p ∈ R⁰
v : HeightOneSpectrum R
⊢ (fun v => ↑(a * ↑↑⟨p, hp⟩) v) v ∈ adicCompletionIntegers K v
state_after: case pos
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
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
p : R := ∏ᶠ (v : HeightOneSpectrum R) (_ : v ∈ S), b v ((fun v => ↑a v) v)
hp : p ∈ R⁰
v : HeightOneSpectrum R
hv : (fun v => ↑a v) v ∈ adicCompletionIntegers K v
⊢ (fun v => ↑(a * ↑↑⟨p, hp⟩) v) v ∈ adicCompletionIntegers K v

case neg
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
S : Set (HeightOneSpectrum R) := {v | (fun v => ↑a v) v ∉ adicCompletionIntegers K v}
b : (v : HeightOneSpectrum R) → adicCompletion K v → R
hb : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), b v a ∈ R⁰
h : ∀ (v : HeightOneSpectrum R) (a : adicCompletion K v), a * ↑(b v a) ∈ adicCompletionIntegers K v
p : R := ∏ᶠ (v : HeightOneSpectrum R) (_ : v ∈ S), b v ((fun v => ↑a v) v)
hp : p ∈ R⁰
v : HeightOneSpectrum R
hv : (fun v => ↑a v) v ∉ adicCompletionIntegers K v
⊢ (fun v => ↑(a * ↑↑⟨p, hp⟩) v) v ∈ adicCompletionIntegers K v
tactic: by_cases hv : a v ∈ adicCompletionIntegers K v