have close_diff
    {x y ζ : ℚ} : x ⊢ζ⊣ y → ∃ (d : ℚ), y ≃ x + d ∧ abs d ≤ ζ
    := by
  intro (_ : x ⊢ζ⊣ y)
  show ∃ (d : ℚ), y ≃ x + d ∧ abs d ≤ ζ
  let d := y - x
  have : y ≃ x + d := calc
    _ ≃ y            := eqv_refl
    _ ≃ y + 0        := eqv_symm add_identR
    _ ≃ y + (-x + x) := add_substR (eqv_symm add_inverseL)
    _ ≃ (y + -x) + x := eqv_symm add_assoc
    _ ≃ (y - x) + x  := add_substL (eqv_symm sub_add_neg)
    _ ≃ d + x        := add_substL eqv_refl
    _ ≃ x + d        := add_comm
  have : abs d ≤ ζ := calc
    _ ≃ abs d       := eqv_refl
    _ ≃ abs (y - x) := eqv_refl
    _ ≃ dist y x    := eqv_symm dist_abs
    _ ≃ dist x y    := dist_comm
    _ ≤ ζ           := close_dist.mp ‹x ⊢ζ⊣ y›
  exact Exists.intro d (And.intro ‹y ≃ x + d› ‹abs d ≤ ζ›)
ℕ ℤ ℚ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Negation ℚ
inst✝⁷ : Subtraction ℚ
inst✝⁶ : Multiplication ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : MinMax ℚ
inst✝ : Metric ℚ
ε δ p q r s : ℚ
x✝¹ : p ⊢ε⊣ q
x✝ : r ⊢δ⊣ s
⊢ p * r ⊢ε * abs r + δ * abs p + ε * δ⊣ q * s
ℕ ℤ ℚ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Negation ℚ
inst✝⁷ : Subtraction ℚ
inst✝⁶ : Multiplication ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : MinMax ℚ
inst✝ : Metric ℚ
ε δ p q r s : ℚ
x✝¹ : p ⊢ε⊣ q
x✝ : r ⊢δ⊣ s
close_diff : ∀ {x y ζ : ℚ}, x ⊢ζ⊣ y → ∃ d, y ≃ x + d ∧ abs d ≤ ζ
⊢ p * r ⊢ε * abs r + δ * abs p + ε * δ⊣ q * s