@@ -23,6 +23,9 @@ export Approx (approx)
2323/-- `0 : A` is conservative, and `0` only approximates `0` -/
2424class ApproxZero (A R : Type ) [Zero R] [Zero A] [Approx A R] where
2525 approx_zero : approx (0 : A) (0 : R)
26+
27+ /-- `0 : A` only approximates `0` -/
28+ class ApproxZeroIff (A R : Type ) [Zero R] [Zero A] [Approx A R] where
2629 approx_zero_imp : ∀ (x : R), approx (0 : A) x → x = 0
2730
2831/-- `1 : A` is conservative -/
@@ -87,20 +90,19 @@ export ApproxSMul (approx_smul)
8790
8891attribute [simp] approx_zero approx_one
8992
90- lemma approx_zero_iff [Approx A R] [Zero A] [Zero R] [ApproxZero A R] (x : R) :
93+ lemma approx_zero_iff [Approx A R] [Zero A] [Zero R] [ApproxZero A R] [ApproxZeroIff A R] (x : R) :
9194 approx (0 : A) x ↔ x = 0 := by
9295 constructor
93- · apply ApproxZero .approx_zero_imp
96+ · apply ApproxZeroIff .approx_zero_imp
9497 · intro x0; rw [x0]; exact approx_zero
9598
9699/-!
97100## Everything approximates itself
98101-/
99102
100103instance : Approx R R where approx x y := x = y
101- instance [Zero R] : ApproxZero R R where
102- approx_zero := by simp only [approx]
103- approx_zero_imp x a := by simp only [approx] at a; simp only [a]
104+ instance [Zero R] : ApproxZero R R where approx_zero := by simp only [approx]
105+ instance [Zero R] : ApproxZeroIff R R where approx_zero_imp x a := by rw [approx] at a; rw [a]
104106instance [One R] : ApproxOne R R where approx_one := by simp only [approx]
105107instance [Neg R] : ApproxNeg R R where approx_neg := by simp only [approx]; aesop
106108instance [Add R] : ApproxAdd R R where approx_add := by simp only [approx]; aesop
0 commit comments