Theorem: Valuation.subgroups_basis
File: Mathlib/Topology/Algebra/Valued/ValuationTopology.lean

Proof steps:
state_before: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
⊢ ∀ (i j : Γ₀ˣ), ∃ k, v.ltAddSubgroup k ≤ v.ltAddSubgroup i ⊓ v.ltAddSubgroup j
state_after: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ₀ γ₁ : Γ₀ˣ
⊢ ∃ k, v.ltAddSubgroup k ≤ v.ltAddSubgroup γ₀ ⊓ v.ltAddSubgroup γ₁
tactic: rintro γ₀ γ₁
state_before: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ₀ γ₁ : Γ₀ˣ
⊢ ∃ k, v.ltAddSubgroup k ≤ v.ltAddSubgroup γ₀ ⊓ v.ltAddSubgroup γ₁
state_after: case h
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ₀ γ₁ : Γ₀ˣ
⊢ v.ltAddSubgroup (min γ₀ γ₁) ≤ v.ltAddSubgroup γ₀ ⊓ v.ltAddSubgroup γ₁
tactic: use min γ₀ γ₁
state_before: case h
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ₀ γ₁ : Γ₀ˣ
⊢ v.ltAddSubgroup (min γ₀ γ₁) ≤ v.ltAddSubgroup γ₀ ⊓ v.ltAddSubgroup γ₁
state_after: case h
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ₀ γ₁ : Γ₀ˣ
⊢ ∀ (a : R), v a < ↑γ₀ → v a < ↑γ₁ → v a < ↑γ₀
tactic: simp only [ltAddSubgroup, Units.min_val, Units.val_le_val, lt_min_iff,
        AddSubgroup.mk_le_mk, setOf_subset_setOf, le_inf_iff, and_imp, imp_self, implies_true,
        forall_const, and_true]
state_before: case h
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ₀ γ₁ : Γ₀ˣ
⊢ ∀ (a : R), v a < ↑γ₀ → v a < ↑γ₁ → v a < ↑γ₀
state_after: no goals
tactic: tauto
state_before: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
⊢ ∀ (i : Γ₀ˣ), ∃ j, ↑(v.ltAddSubgroup j) * ↑(v.ltAddSubgroup j) ⊆ ↑(v.ltAddSubgroup i)
state_after: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ : Γ₀ˣ
⊢ ∃ j, ↑(v.ltAddSubgroup j) * ↑(v.ltAddSubgroup j) ⊆ ↑(v.ltAddSubgroup γ)
tactic: rintro γ
state_before: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ : Γ₀ˣ
⊢ ∃ j, ↑(v.ltAddSubgroup j) * ↑(v.ltAddSubgroup j) ⊆ ↑(v.ltAddSubgroup γ)
state_after: case intro
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ γ₀ : Γ₀ˣ
h : γ₀ * γ₀ ≤ γ
⊢ ∃ j, ↑(v.ltAddSubgroup j) * ↑(v.ltAddSubgroup j) ⊆ ↑(v.ltAddSubgroup γ)
tactic: cases' exists_square_le γ with γ₀ h
state_before: case intro
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ γ₀ : Γ₀ˣ
h : γ₀ * γ₀ ≤ γ
⊢ ∃ j, ↑(v.ltAddSubgroup j) * ↑(v.ltAddSubgroup j) ⊆ ↑(v.ltAddSubgroup γ)
state_after: case h
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ γ₀ : Γ₀ˣ
h : γ₀ * γ₀ ≤ γ
⊢ ↑(v.ltAddSubgroup γ₀) * ↑(v.ltAddSubgroup γ₀) ⊆ ↑(v.ltAddSubgroup γ)
tactic: use γ₀
state_before: case h
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ γ₀ : Γ₀ˣ
h : γ₀ * γ₀ ≤ γ
⊢ ↑(v.ltAddSubgroup γ₀) * ↑(v.ltAddSubgroup γ₀) ⊆ ↑(v.ltAddSubgroup γ)
state_after: case h.intro.intro.intro.intro
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ γ₀ : Γ₀ˣ
h : γ₀ * γ₀ ≤ γ
r : R
r_in : r ∈ ↑(v.ltAddSubgroup γ₀)
s : R
s_in : s ∈ ↑(v.ltAddSubgroup γ₀)
⊢ (fun x x_1 => x * x_1) r s ∈ ↑(v.ltAddSubgroup γ)
tactic: rintro - ⟨r, r_in, s, s_in, rfl⟩
state_before: case h.intro.intro.intro.intro
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
γ γ₀ : Γ₀ˣ
h : γ₀ * γ₀ ≤ γ
r : R
r_in : r ∈ ↑(v.ltAddSubgroup γ₀)
s : R
s_in : s ∈ ↑(v.ltAddSubgroup γ₀)
⊢ (fun x x_1 => x * x_1) r s ∈ ↑(v.ltAddSubgroup γ)
state_after: no goals
tactic: calc
        (v (r * s) : Γ₀) = v r * v s := Valuation.map_mul _ _ _
        _ < γ₀ * γ₀ := mul_lt_mul₀ r_in s_in
        _ ≤ γ := mod_cast h
state_before: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
⊢ ∀ (x : R) (i : Γ₀ˣ), ∃ j, ↑(v.ltAddSubgroup j) ⊆ (fun x_1 => x * x_1) ⁻¹' ↑(v.ltAddSubgroup i)
state_after: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
x : R
γ : Γ₀ˣ
⊢ ∃ j, ↑(v.ltAddSubgroup j) ⊆ (fun x_1 => x * x_1) ⁻¹' ↑(v.ltAddSubgroup γ)
tactic: rintro x γ
state_before: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
x : R
γ : Γ₀ˣ
⊢ ∃ j, ↑(v.ltAddSubgroup j) ⊆ (fun x_1 => x * x_1) ⁻¹' ↑(v.ltAddSubgroup γ)
state_after: case inl
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
x : R
γ : Γ₀ˣ
Hx : v x = 0
⊢ ∃ j, ↑(v.ltAddSubgroup j) ⊆ (fun x_1 => x * x_1) ⁻¹' ↑(v.ltAddSubgroup γ)

case inr.intro
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
x : R
γ γx : Γ₀ˣ
Hx : v x = ↑γx
⊢ ∃ j, ↑(v.ltAddSubgroup j) ⊆ (fun x_1 => x * x_1) ⁻¹' ↑(v.ltAddSubgroup γ)
tactic: rcases GroupWithZero.eq_zero_or_unit (v x) with (Hx | ⟨γx, Hx⟩)
state_before: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
⊢ ∀ (x : R) (i : Γ₀ˣ), ∃ j, ↑(v.ltAddSubgroup j) ⊆ (fun x_1 => x_1 * x) ⁻¹' ↑(v.ltAddSubgroup i)
state_after: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
x : R
γ : Γ₀ˣ
⊢ ∃ j, ↑(v.ltAddSubgroup j) ⊆ (fun x_1 => x_1 * x) ⁻¹' ↑(v.ltAddSubgroup γ)
tactic: rintro x γ
state_before: R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
x : R
γ : Γ₀ˣ
⊢ ∃ j, ↑(v.ltAddSubgroup j) ⊆ (fun x_1 => x_1 * x) ⁻¹' ↑(v.ltAddSubgroup γ)
state_after: case inl
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
x : R
γ : Γ₀ˣ
Hx : v x = 0
⊢ ∃ j, ↑(v.ltAddSubgroup j) ⊆ (fun x_1 => x_1 * x) ⁻¹' ↑(v.ltAddSubgroup γ)

case inr.intro
R : Type u
inst✝¹ : Ring R
Γ₀ : Type v
inst✝ : LinearOrderedCommGroupWithZero Γ₀
v : Valuation R Γ₀
x : R
γ γx : Γ₀ˣ
Hx : v x = ↑γx
⊢ ∃ j, ↑(v.ltAddSubgroup j) ⊆ (fun x_1 => x_1 * x) ⁻¹' ↑(v.ltAddSubgroup γ)
tactic: rcases GroupWithZero.eq_zero_or_unit (v x) with (Hx | ⟨γx, Hx⟩)