Theorem: CauSeq.mul_not_equiv_zero
File: Mathlib/Data/Real/CauSeq.lean

tactic: have hlz : LimZero (f * g) := by simpa
state_before: α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this : LimZero (f * g - 0)
⊢ False

tactic: have hf' : ¬LimZero f := by simpa using show ¬LimZero (f - 0) from hf
state_before: α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this : LimZero (f * g - 0)
hlz : LimZero (f * g)
⊢ False

tactic: have hg' : ¬LimZero g := by simpa using show ¬LimZero (g - 0) from hg
state_before: α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
⊢ False

tactic: rcases abv_pos_of_not_limZero hf' with ⟨a1, ha1, N1, hN1⟩
state_before: α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
⊢ False

tactic: rcases abv_pos_of_not_limZero hg' with ⟨a2, ha2, N2, hN2⟩
state_before: case intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
a1 : α
ha1 : a1 > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → a1 ≤ abv (↑f j)
⊢ False

tactic: have : 0 < a1 * a2 := mul_pos ha1 ha2
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
a1 : α
ha1 : a1 > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → a1 ≤ abv (↑f j)
a2 : α
ha2 : a2 > 0
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → a2 ≤ abv (↑g j)
⊢ False

tactic: cases' hlz _ this with N hN
state_before: case intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this✝ : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
a1 : α
ha1 : a1 > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → a1 ≤ abv (↑f j)
a2 : α
ha2 : a2 > 0
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → a2 ≤ abv (↑g j)
this : 0 < a1 * a2
⊢ False

tactic: let i := max N (max N1 N2)
state_before: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this✝ : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
a1 : α
ha1 : a1 > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → a1 ≤ abv (↑f j)
a2 : α
ha2 : a2 > 0
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → a2 ≤ abv (↑g j)
this : 0 < a1 * a2
N : ℕ
hN : ∀ (j : ℕ), j ≥ N → abv (↑(f * g) j) < a1 * a2
⊢ False

tactic: have hN' := hN i (le_max_left _ _)
state_before: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this✝ : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
a1 : α
ha1 : a1 > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → a1 ≤ abv (↑f j)
a2 : α
ha2 : a2 > 0
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → a2 ≤ abv (↑g j)
this : 0 < a1 * a2
N : ℕ
hN : ∀ (j : ℕ), j ≥ N → abv (↑(f * g) j) < a1 * a2
i : ℕ := max N (max N1 N2)
⊢ False

tactic: have hN1' := hN1 i (le_trans (le_max_left _ _) (le_max_right _ _))
state_before: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this✝ : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
a1 : α
ha1 : a1 > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → a1 ≤ abv (↑f j)
a2 : α
ha2 : a2 > 0
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → a2 ≤ abv (↑g j)
this : 0 < a1 * a2
N : ℕ
hN : ∀ (j : ℕ), j ≥ N → abv (↑(f * g) j) < a1 * a2
i : ℕ := max N (max N1 N2)
hN' : abv (↑(f * g) i) < a1 * a2
⊢ False

tactic: have hN1' := hN2 i (le_trans (le_max_right _ _) (le_max_right _ _))
state_before: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this✝ : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
a1 : α
ha1 : a1 > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → a1 ≤ abv (↑f j)
a2 : α
ha2 : a2 > 0
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → a2 ≤ abv (↑g j)
this : 0 < a1 * a2
N : ℕ
hN : ∀ (j : ℕ), j ≥ N → abv (↑(f * g) j) < a1 * a2
i : ℕ := max N (max N1 N2)
hN' : abv (↑(f * g) i) < a1 * a2
hN1' : a1 ≤ abv (↑f i)
⊢ False

tactic: apply not_le_of_lt hN'
state_before: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this✝ : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
a1 : α
ha1 : a1 > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → a1 ≤ abv (↑f j)
a2 : α
ha2 : a2 > 0
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → a2 ≤ abv (↑g j)
this : 0 < a1 * a2
N : ℕ
hN : ∀ (j : ℕ), j ≥ N → abv (↑(f * g) j) < a1 * a2
i : ℕ := max N (max N1 N2)
hN' : abv (↑(f * g) i) < a1 * a2
hN1'✝ : a1 ≤ abv (↑f i)
hN1' : a2 ≤ abv (↑g i)
⊢ False

tactic: change _ ≤ abv (_ * _)
state_before: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this✝ : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
a1 : α
ha1 : a1 > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → a1 ≤ abv (↑f j)
a2 : α
ha2 : a2 > 0
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → a2 ≤ abv (↑g j)
this : 0 < a1 * a2
N : ℕ
hN : ∀ (j : ℕ), j ≥ N → abv (↑(f * g) j) < a1 * a2
i : ℕ := max N (max N1 N2)
hN' : abv (↑(f * g) i) < a1 * a2
hN1'✝ : a1 ≤ abv (↑f i)
hN1' : a2 ≤ abv (↑g i)
⊢ a1 * a2 ≤ abv (↑(f * g) i)

tactic: rw [abv_mul abv]
state_before: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this✝ : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
a1 : α
ha1 : a1 > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → a1 ≤ abv (↑f j)
a2 : α
ha2 : a2 > 0
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → a2 ≤ abv (↑g j)
this : 0 < a1 * a2
N : ℕ
hN : ∀ (j : ℕ), j ≥ N → abv (↑(f * g) j) < a1 * a2
i : ℕ := max N (max N1 N2)
hN' : abv (↑(f * g) i) < a1 * a2
hN1'✝ : a1 ≤ abv (↑f i)
hN1' : a2 ≤ abv (↑g i)
⊢ a1 * a2 ≤ abv (↑f i * ↑g i)

tactic: gcongr
state_before: case intro.intro.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this✝ : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
hg' : ¬LimZero g
a1 : α
ha1 : a1 > 0
N1 : ℕ
hN1 : ∀ (j : ℕ), j ≥ N1 → a1 ≤ abv (↑f j)
a2 : α
ha2 : a2 > 0
N2 : ℕ
hN2 : ∀ (j : ℕ), j ≥ N2 → a2 ≤ abv (↑g j)
this : 0 < a1 * a2
N : ℕ
hN : ∀ (j : ℕ), j ≥ N → abv (↑(f * g) j) < a1 * a2
i : ℕ := max N (max N1 N2)
hN' : abv (↑(f * g) i) < a1 * a2
hN1'✝ : a1 ≤ abv (↑f i)
hN1' : a2 ≤ abv (↑g i)
⊢ a1 * a2 ≤ abv (↑f i) * abv (↑g i)

tactic: simpa
state_before: α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this : LimZero (f * g - 0)
⊢ LimZero (f * g)

tactic: simpa using show ¬LimZero (f - 0) from hf
state_before: α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this : LimZero (f * g - 0)
hlz : LimZero (f * g)
⊢ ¬LimZero f

tactic: simpa using show ¬LimZero (g - 0) from hg
state_before: α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : ¬f ≈ 0
hg : ¬g ≈ 0
this : LimZero (f * g - 0)
hlz : LimZero (f * g)
hf' : ¬LimZero f
⊢ ¬LimZero g