[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤
        dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i)
          ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) j) ∧
      (fun i => (r a (last N))⁻¹ * r a i) j ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) i ∨
    (fun i => (r a (last N))⁻¹ * r a i) j ≤
        dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) j)
          ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i) ∧
      (fun i => (r a (last N))⁻¹ * r a i) i ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) j
[PROOFSTEP]
rcases a.h i j hij with (H | H)
[GOAL]
case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a i ≤ dist (c a i) (c a j) ∧ r a j ≤ τ * r a i
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤
        dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i)
          ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) j) ∧
      (fun i => (r a (last N))⁻¹ * r a i) j ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) i ∨
    (fun i => (r a (last N))⁻¹ * r a i) j ≤
        dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) j)
          ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i) ∧
      (fun i => (r a (last N))⁻¹ * r a i) i ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) j
[PROOFSTEP]
left
[GOAL]
case inl.h
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a i ≤ dist (c a i) (c a j) ∧ r a j ≤ τ * r a i
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤
      dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i)
        ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) j) ∧
    (fun i => (r a (last N))⁻¹ * r a i) j ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) i
[PROOFSTEP]
constructor
[GOAL]
case inl.h.left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a i ≤ dist (c a i) (c a j) ∧ r a j ≤ τ * r a i
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤
    dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i)
      ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) j)
[PROOFSTEP]
rw [dist_eq_norm, ← smul_sub, norm_smul, Real.norm_eq_abs, abs_of_nonneg (inv_nonneg.2 (a.rpos _).le)]
[GOAL]
case inl.h.left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a i ≤ dist (c a i) (c a j) ∧ r a j ≤ τ * r a i
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤ (r a (last N))⁻¹ * ‖c a i - c a (last N) - (c a j - c a (last N))‖
[PROOFSTEP]
refine' mul_le_mul_of_nonneg_left _ (inv_nonneg.2 (a.rpos _).le)
[GOAL]
case inl.h.left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a i ≤ dist (c a i) (c a j) ∧ r a j ≤ τ * r a i
⊢ r a i ≤ ‖c a i - c a (last N) - (c a j - c a (last N))‖
[PROOFSTEP]
rw [dist_eq_norm] at H
[GOAL]
case inl.h.left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
⊢ r a i ≤ ‖c a i - c a (last N) - (c a j - c a (last N))‖
[PROOFSTEP]
convert H.1 using 2
[GOAL]
case h.e'_4.h.e'_3
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
⊢ c a i - c a (last N) - (c a j - c a (last N)) = c a i - c a j
[PROOFSTEP]
abel
[GOAL]
case h.e'_4.h.e'_3
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
⊢ c a i - c a (last N) - (c a j - c a (last N)) = c a i - c a j
[PROOFSTEP]
abel
[GOAL]
case inl.h.right
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a i ≤ dist (c a i) (c a j) ∧ r a j ≤ τ * r a i
⊢ (fun i => (r a (last N))⁻¹ * r a i) j ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) i
[PROOFSTEP]
rw [← mul_assoc, mul_comm τ, mul_assoc]
[GOAL]
case inl.h.right
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a i ≤ dist (c a i) (c a j) ∧ r a j ≤ τ * r a i
⊢ (fun i => (r a (last N))⁻¹ * r a i) j ≤ (r a (last N))⁻¹ * (τ * r a i)
[PROOFSTEP]
refine' mul_le_mul_of_nonneg_left _ (inv_nonneg.2 (a.rpos _).le)
[GOAL]
case inl.h.right
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a i ≤ dist (c a i) (c a j) ∧ r a j ≤ τ * r a i
⊢ r a j ≤ τ * r a i
[PROOFSTEP]
exact H.2
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a j ≤ dist (c a j) (c a i) ∧ r a i ≤ τ * r a j
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤
        dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i)
          ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) j) ∧
      (fun i => (r a (last N))⁻¹ * r a i) j ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) i ∨
    (fun i => (r a (last N))⁻¹ * r a i) j ≤
        dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) j)
          ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i) ∧
      (fun i => (r a (last N))⁻¹ * r a i) i ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) j
[PROOFSTEP]
right
[GOAL]
case inr.h
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a j ≤ dist (c a j) (c a i) ∧ r a i ≤ τ * r a j
⊢ (fun i => (r a (last N))⁻¹ * r a i) j ≤
      dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) j)
        ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i) ∧
    (fun i => (r a (last N))⁻¹ * r a i) i ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) j
[PROOFSTEP]
constructor
[GOAL]
case inr.h.left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a j ≤ dist (c a j) (c a i) ∧ r a i ≤ τ * r a j
⊢ (fun i => (r a (last N))⁻¹ * r a i) j ≤
    dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) j)
      ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i)
[PROOFSTEP]
rw [dist_eq_norm, ← smul_sub, norm_smul, Real.norm_eq_abs, abs_of_nonneg (inv_nonneg.2 (a.rpos _).le)]
[GOAL]
case inr.h.left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a j ≤ dist (c a j) (c a i) ∧ r a i ≤ τ * r a j
⊢ (fun i => (r a (last N))⁻¹ * r a i) j ≤ (r a (last N))⁻¹ * ‖c a j - c a (last N) - (c a i - c a (last N))‖
[PROOFSTEP]
refine' mul_le_mul_of_nonneg_left _ (inv_nonneg.2 (a.rpos _).le)
[GOAL]
case inr.h.left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a j ≤ dist (c a j) (c a i) ∧ r a i ≤ τ * r a j
⊢ r a j ≤ ‖c a j - c a (last N) - (c a i - c a (last N))‖
[PROOFSTEP]
rw [dist_eq_norm] at H
[GOAL]
case inr.h.left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ r a j ≤ ‖c a j - c a (last N) - (c a i - c a (last N))‖
[PROOFSTEP]
convert H.1 using 2
[GOAL]
case h.e'_4.h.e'_3
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ c a j - c a (last N) - (c a i - c a (last N)) = c a j - c a i
[PROOFSTEP]
abel
[GOAL]
case h.e'_4.h.e'_3
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ c a j - c a (last N) - (c a i - c a (last N)) = c a j - c a i
[PROOFSTEP]
abel
[GOAL]
case inr.h.right
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a j ≤ dist (c a j) (c a i) ∧ r a i ≤ τ * r a j
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) j
[PROOFSTEP]
rw [← mul_assoc, mul_comm τ, mul_assoc]
[GOAL]
case inr.h.right
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a j ≤ dist (c a j) (c a i) ∧ r a i ≤ τ * r a j
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤ (r a (last N))⁻¹ * (τ * r a j)
[PROOFSTEP]
refine' mul_le_mul_of_nonneg_left _ (inv_nonneg.2 (a.rpos _).le)
[GOAL]
case inr.h.right
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i j : Fin (Nat.succ N)
hij : i ≠ j
H : r a j ≤ dist (c a j) (c a i) ∧ r a i ≤ τ * r a j
⊢ r a i ≤ τ * r a j
[PROOFSTEP]
exact H.2
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤
      dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i)
        ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) (last N)) ∧
    (fun i => (r a (last N))⁻¹ * r a i) (last N) ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) i
[PROOFSTEP]
have H := a.hlast i hi
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : r a i ≤ dist (c a i) (c a (last N)) ∧ r a (last N) ≤ τ * r a i
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤
      dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i)
        ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) (last N)) ∧
    (fun i => (r a (last N))⁻¹ * r a i) (last N) ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) i
[PROOFSTEP]
constructor
[GOAL]
case left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : r a i ≤ dist (c a i) (c a (last N)) ∧ r a (last N) ≤ τ * r a i
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤
    dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i)
      ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) (last N))
[PROOFSTEP]
rw [dist_eq_norm, ← smul_sub, norm_smul, Real.norm_eq_abs, abs_of_nonneg (inv_nonneg.2 (a.rpos _).le)]
[GOAL]
case left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : r a i ≤ dist (c a i) (c a (last N)) ∧ r a (last N) ≤ τ * r a i
⊢ (fun i => (r a (last N))⁻¹ * r a i) i ≤ (r a (last N))⁻¹ * ‖c a i - c a (last N) - (c a (last N) - c a (last N))‖
[PROOFSTEP]
refine' mul_le_mul_of_nonneg_left _ (inv_nonneg.2 (a.rpos _).le)
[GOAL]
case left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : r a i ≤ dist (c a i) (c a (last N)) ∧ r a (last N) ≤ τ * r a i
⊢ r a i ≤ ‖c a i - c a (last N) - (c a (last N) - c a (last N))‖
[PROOFSTEP]
rw [dist_eq_norm] at H
[GOAL]
case left
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : r a i ≤ ‖c a i - c a (last N)‖ ∧ r a (last N) ≤ τ * r a i
⊢ r a i ≤ ‖c a i - c a (last N) - (c a (last N) - c a (last N))‖
[PROOFSTEP]
convert H.1 using 2
[GOAL]
case h.e'_4.h.e'_3
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : r a i ≤ ‖c a i - c a (last N)‖ ∧ r a (last N) ≤ τ * r a i
⊢ c a i - c a (last N) - (c a (last N) - c a (last N)) = c a i - c a (last N)
[PROOFSTEP]
abel
[GOAL]
case h.e'_4.h.e'_3
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : r a i ≤ ‖c a i - c a (last N)‖ ∧ r a (last N) ≤ τ * r a i
⊢ c a i - c a (last N) - (c a (last N) - c a (last N)) = c a i - c a (last N)
[PROOFSTEP]
abel
[GOAL]
case right
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : r a i ≤ dist (c a i) (c a (last N)) ∧ r a (last N) ≤ τ * r a i
⊢ (fun i => (r a (last N))⁻¹ * r a i) (last N) ≤ τ * (fun i => (r a (last N))⁻¹ * r a i) i
[PROOFSTEP]
rw [← mul_assoc, mul_comm τ, mul_assoc]
[GOAL]
case right
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : r a i ≤ dist (c a i) (c a (last N)) ∧ r a (last N) ≤ τ * r a i
⊢ (fun i => (r a (last N))⁻¹ * r a i) (last N) ≤ (r a (last N))⁻¹ * (τ * r a i)
[PROOFSTEP]
refine' mul_le_mul_of_nonneg_left _ (inv_nonneg.2 (a.rpos _).le)
[GOAL]
case right
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : r a i ≤ dist (c a i) (c a (last N)) ∧ r a (last N) ≤ τ * r a i
⊢ r a (last N) ≤ τ * r a i
[PROOFSTEP]
exact H.2
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
⊢ dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i)
      ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) (last N)) ≤
    (fun i => (r a (last N))⁻¹ * r a i) i + (fun i => (r a (last N))⁻¹ * r a i) (last N)
[PROOFSTEP]
have H := a.inter i hi
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : dist (c a i) (c a (last N)) ≤ r a i + r a (last N)
⊢ dist ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) i)
      ((fun i => (r a (last N))⁻¹ • (c a i - c a (last N))) (last N)) ≤
    (fun i => (r a (last N))⁻¹ * r a i) i + (fun i => (r a (last N))⁻¹ * r a i) (last N)
[PROOFSTEP]
rw [dist_eq_norm, ← smul_sub, norm_smul, Real.norm_eq_abs, abs_of_nonneg (inv_nonneg.2 (a.rpos _).le), ← mul_add]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : dist (c a i) (c a (last N)) ≤ r a i + r a (last N)
⊢ (r a (last N))⁻¹ * ‖c a i - c a (last N) - (c a (last N) - c a (last N))‖ ≤ (r a (last N))⁻¹ * (r a i + r a (last N))
[PROOFSTEP]
refine' mul_le_mul_of_nonneg_left _ (inv_nonneg.2 (a.rpos _).le)
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : dist (c a i) (c a (last N)) ≤ r a i + r a (last N)
⊢ ‖c a i - c a (last N) - (c a (last N) - c a (last N))‖ ≤ r a i + r a (last N)
[PROOFSTEP]
rw [dist_eq_norm] at H
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : ‖c a i - c a (last N)‖ ≤ r a i + r a (last N)
⊢ ‖c a i - c a (last N) - (c a (last N) - c a (last N))‖ ≤ r a i + r a (last N)
[PROOFSTEP]
convert H using 2
[GOAL]
case h.e'_3.h.e'_3
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : ‖c a i - c a (last N)‖ ≤ r a i + r a (last N)
⊢ c a i - c a (last N) - (c a (last N) - c a (last N)) = c a i - c a (last N)
[PROOFSTEP]
abel
[GOAL]
case h.e'_3.h.e'_3
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
i : Fin (N + 1)
hi : i < last N
H : ‖c a i - c a (last N)‖ ≤ r a i + r a (last N)
⊢ c a i - c a (last N) - (c a (last N) - c a (last N)) = c a i - c a (last N)
[PROOFSTEP]
abel
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
⊢ c (centerAndRescale a) (last N) = 0
[PROOFSTEP]
simp [SatelliteConfig.centerAndRescale]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N✝ : ℕ
τ✝ : ℝ
a✝ : SatelliteConfig E N✝ τ✝
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
⊢ r (centerAndRescale a) (last N) = 1
[PROOFSTEP]
simp [SatelliteConfig.centerAndRescale, inv_mul_cancel (a.rpos _).ne']
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
borelize E
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
let μ : Measure E := Measure.addHaar
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
let δ : ℝ := (1 : ℝ) / 2
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
let ρ : ℝ := (5 : ℝ) / 2
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
have ρpos : 0 < ρ := by norm_num [ρ]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
⊢ 0 < ρ
[PROOFSTEP]
norm_num [ρ]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
set A := ⋃ c ∈ s, ball (c : E) δ with hA
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
have D : Set.Pairwise (s : Set E) (Disjoint on fun c => ball (c : E) δ) :=
  by
  rintro c hc d hd hcd
  apply ball_disjoint_ball
  rw [dist_eq_norm]
  convert h c hc d hd hcd
  norm_num
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
⊢ Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
[PROOFSTEP]
rintro c hc d hd hcd
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
c : E
hc : c ∈ ↑s
d : E
hd : d ∈ ↑s
hcd : c ≠ d
⊢ (Disjoint on fun c => ball c δ) c d
[PROOFSTEP]
apply ball_disjoint_ball
[GOAL]
case h
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
c : E
hc : c ∈ ↑s
d : E
hd : d ∈ ↑s
hcd : c ≠ d
⊢ δ + δ ≤ dist c d
[PROOFSTEP]
rw [dist_eq_norm]
[GOAL]
case h
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
c : E
hc : c ∈ ↑s
d : E
hd : d ∈ ↑s
hcd : c ≠ d
⊢ δ + δ ≤ ‖c - d‖
[PROOFSTEP]
convert h c hc d hd hcd
[GOAL]
case h.e'_3
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
c : E
hc : c ∈ ↑s
d : E
hd : d ∈ ↑s
hcd : c ≠ d
⊢ δ + δ = 1
[PROOFSTEP]
norm_num
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
have A_subset : A ⊆ ball (0 : E) ρ := by
  refine' iUnion₂_subset fun x hx => _
  apply ball_subset_ball'
  calc
    δ + dist x 0 ≤ δ + 2 := by rw [dist_zero_right]; exact add_le_add le_rfl (hs x hx)
    _ = 5 / 2 := by norm_num [δ]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
⊢ A ⊆ ball 0 ρ
[PROOFSTEP]
refine' iUnion₂_subset fun x hx => _
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
x : E
hx : x ∈ s
⊢ ball x δ ⊆ ball 0 ρ
[PROOFSTEP]
apply ball_subset_ball'
[GOAL]
case h
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
x : E
hx : x ∈ s
⊢ δ + dist x 0 ≤ ρ
[PROOFSTEP]
calc
  δ + dist x 0 ≤ δ + 2 := by rw [dist_zero_right]; exact add_le_add le_rfl (hs x hx)
  _ = 5 / 2 := by norm_num [δ]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
x : E
hx : x ∈ s
⊢ δ + dist x 0 ≤ δ + 2
[PROOFSTEP]
rw [dist_zero_right]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
x : E
hx : x ∈ s
⊢ δ + ‖x‖ ≤ δ + 2
[PROOFSTEP]
exact add_le_add le_rfl (hs x hx)
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
x : E
hx : x ∈ s
⊢ δ + 2 = 5 / 2
[PROOFSTEP]
norm_num [δ]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
have I :
  (s.card : ℝ≥0∞) * ENNReal.ofReal (δ ^ finrank ℝ E) * μ (ball 0 1) ≤ ENNReal.ofReal (ρ ^ finrank ℝ E) * μ (ball 0 1) :=
  calc
    (s.card : ℝ≥0∞) * ENNReal.ofReal (δ ^ finrank ℝ E) * μ (ball 0 1) = μ A :=
      by
      rw [hA, measure_biUnion_finset D fun c _ => measurableSet_ball]
      have I : 0 < δ := by norm_num [δ]
      simp only [div_pow, μ.addHaar_ball_of_pos _ I]
      simp only [one_div, one_pow, Finset.sum_const, nsmul_eq_mul, mul_assoc]
    _ ≤ μ (ball (0 : E) ρ) := (measure_mono A_subset)
    _ = ENNReal.ofReal (ρ ^ finrank ℝ E) * μ (ball 0 1) := by simp only [μ.addHaar_ball_of_pos _ ρpos]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
⊢ ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) * ↑↑μ (ball 0 1) = ↑↑μ A
[PROOFSTEP]
rw [hA, measure_biUnion_finset D fun c _ => measurableSet_ball]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
⊢ ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) * ↑↑μ (ball 0 1) = Finset.sum s fun p => ↑↑μ (ball p δ)
[PROOFSTEP]
have I : 0 < δ := by norm_num [δ]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
⊢ 0 < δ
[PROOFSTEP]
norm_num [δ]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
I : 0 < δ
⊢ ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) * ↑↑μ (ball 0 1) = Finset.sum s fun p => ↑↑μ (ball p δ)
[PROOFSTEP]
simp only [div_pow, μ.addHaar_ball_of_pos _ I]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
I : 0 < δ
⊢ ↑(Finset.card s) * ENNReal.ofReal (1 ^ finrank ℝ E / 2 ^ finrank ℝ E) * ↑↑Measure.addHaar (ball 0 1) =
    Finset.sum s fun x => ENNReal.ofReal (1 ^ finrank ℝ E / 2 ^ finrank ℝ E) * ↑↑Measure.addHaar (ball 0 1)
[PROOFSTEP]
simp only [one_div, one_pow, Finset.sum_const, nsmul_eq_mul, mul_assoc]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
⊢ ↑↑μ (ball 0 ρ) = ENNReal.ofReal (ρ ^ finrank ℝ E) * ↑↑μ (ball 0 1)
[PROOFSTEP]
simp only [μ.addHaar_ball_of_pos _ ρpos]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
I :
  ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) * ↑↑μ (ball 0 1) ≤
    ENNReal.ofReal (ρ ^ finrank ℝ E) * ↑↑μ (ball 0 1)
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
have J : (s.card : ℝ≥0∞) * ENNReal.ofReal (δ ^ finrank ℝ E) ≤ ENNReal.ofReal (ρ ^ finrank ℝ E) :=
  (ENNReal.mul_le_mul_right (measure_ball_pos _ _ zero_lt_one).ne' measure_ball_lt_top.ne).1 I
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
I :
  ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) * ↑↑μ (ball 0 1) ≤
    ENNReal.ofReal (ρ ^ finrank ℝ E) * ↑↑μ (ball 0 1)
J : ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) ≤ ENNReal.ofReal (ρ ^ finrank ℝ E)
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
have K : (s.card : ℝ) ≤ (5 : ℝ) ^ finrank ℝ E :=
  by
  have := ENNReal.toReal_le_of_le_ofReal (pow_nonneg ρpos.le _) J
  simp [ENNReal.toReal_mul] at this
  simpa [div_eq_mul_inv, zero_le_two] using this
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
I :
  ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) * ↑↑μ (ball 0 1) ≤
    ENNReal.ofReal (ρ ^ finrank ℝ E) * ↑↑μ (ball 0 1)
J : ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) ≤ ENNReal.ofReal (ρ ^ finrank ℝ E)
⊢ ↑(Finset.card s) ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
have := ENNReal.toReal_le_of_le_ofReal (pow_nonneg ρpos.le _) J
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
I :
  ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) * ↑↑μ (ball 0 1) ≤
    ENNReal.ofReal (ρ ^ finrank ℝ E) * ↑↑μ (ball 0 1)
J : ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) ≤ ENNReal.ofReal (ρ ^ finrank ℝ E)
this : ENNReal.toReal (↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E)) ≤ ρ ^ finrank ℝ E
⊢ ↑(Finset.card s) ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
simp [ENNReal.toReal_mul] at this
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
I :
  ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) * ↑↑μ (ball 0 1) ≤
    ENNReal.ofReal (ρ ^ finrank ℝ E) * ↑↑μ (ball 0 1)
J : ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) ≤ ENNReal.ofReal (ρ ^ finrank ℝ E)
this : ↑(Finset.card s) * ENNReal.toReal (ENNReal.ofReal (2 ^ finrank ℝ E)⁻¹) ≤ 5 ^ finrank ℝ E / 2 ^ finrank ℝ E
⊢ ↑(Finset.card s) ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
simpa [div_eq_mul_inv, zero_le_two] using this
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this✝¹ : MeasurableSpace E := borel E
this✝ : BorelSpace E
μ : Measure E := Measure.addHaar
δ : ℝ := 1 / 2
ρ : ℝ := 5 / 2
ρpos : 0 < ρ
A : Set E := ⋃ (c : E) (_ : c ∈ s), ball c δ
hA : A = ⋃ (c : E) (_ : c ∈ s), ball c δ
D : Set.Pairwise (↑s) (Disjoint on fun c => ball c δ)
A_subset : A ⊆ ball 0 ρ
I :
  ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) * ↑↑μ (ball 0 1) ≤
    ENNReal.ofReal (ρ ^ finrank ℝ E) * ↑↑μ (ball 0 1)
J : ↑(Finset.card s) * ENNReal.ofReal (δ ^ finrank ℝ E) ≤ ENNReal.ofReal (ρ ^ finrank ℝ E)
K : ↑(Finset.card s) ≤ 5 ^ finrank ℝ E
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
exact_mod_cast K
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
⊢ multiplicity E ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
apply csSup_le
[GOAL]
case h₁
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
⊢ Set.Nonempty
    {N |
      ∃ s, Finset.card s = N ∧ (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧ ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖}
[PROOFSTEP]
refine' ⟨0, ⟨∅, by simp⟩⟩
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
⊢ Finset.card ∅ = 0 ∧ (∀ (c : E), c ∈ ∅ → ‖c‖ ≤ 2) ∧ ∀ (c : E), c ∈ ∅ → ∀ (d : E), d ∈ ∅ → c ≠ d → 1 ≤ ‖c - d‖
[PROOFSTEP]
simp
[GOAL]
case h₂
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
⊢ ∀ (b : ℕ),
    b ∈
        {N |
          ∃ s,
            Finset.card s = N ∧
              (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧ ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖} →
      b ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
rintro _ ⟨s, ⟨rfl, h⟩⟩
[GOAL]
case h₂.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
h : (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧ ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
exact Besicovitch.card_le_of_separated s h.1 h.2
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
⊢ Finset.card s ≤ multiplicity E
[PROOFSTEP]
apply le_csSup
[GOAL]
case h₁
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
⊢ BddAbove
    {N |
      ∃ s, Finset.card s = N ∧ (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧ ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖}
[PROOFSTEP]
refine' ⟨5 ^ finrank ℝ E, _⟩
[GOAL]
case h₁
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
⊢ 5 ^ finrank ℝ E ∈
    upperBounds
      {N |
        ∃ s,
          Finset.card s = N ∧ (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧ ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖}
[PROOFSTEP]
rintro _ ⟨s, ⟨rfl, h⟩⟩
[GOAL]
case h₁.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s✝ : Finset E
hs : ∀ (c : E), c ∈ s✝ → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s✝ → ∀ (d : E), d ∈ s✝ → c ≠ d → 1 ≤ ‖c - d‖
s : Finset E
h : (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧ ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
⊢ Finset.card s ≤ 5 ^ finrank ℝ E
[PROOFSTEP]
exact Besicovitch.card_le_of_separated s h.1 h.2
[GOAL]
case h₂
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
⊢ Finset.card s ∈
    {N |
      ∃ s, Finset.card s = N ∧ (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧ ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖}
[PROOFSTEP]
simp only [mem_setOf_eq, Ne.def]
[GOAL]
case h₂
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
⊢ ∃ s_1,
    Finset.card s_1 = Finset.card s ∧
      (∀ (c : E), c ∈ s_1 → ‖c‖ ≤ 2) ∧ ∀ (c : E), c ∈ s_1 → ∀ (d : E), d ∈ s_1 → ¬c = d → 1 ≤ ‖c - d‖
[PROOFSTEP]
exact ⟨s, rfl, hs, h's⟩
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
⊢ ∃ δ,
    0 < δ ∧
      δ < 1 ∧
        ∀ (s : Finset E),
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) →
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) → Finset.card s ≤ multiplicity E
[PROOFSTEP]
classical
  /- This follows from a compactness argument: otherwise, one could extract a converging
      subsequence, to obtain a `1`-separated set in the ball of radius `2` with cardinality
      `N = multiplicity E + 1`. To formalize this, we work with functions `Fin N → E`.
       -/
by_contra' h
set N := multiplicity E + 1 with hN
have : ∀ δ : ℝ, 0 < δ → ∃ f : Fin N → E, (∀ i : Fin N, ‖f i‖ ≤ 2) ∧ ∀ i j, i ≠ j → 1 - δ ≤ ‖f i - f j‖ :=
  by
  intro δ hδ
  rcases lt_or_le δ 1 with (hδ' | hδ')
  · rcases h δ hδ hδ' with ⟨s, hs, h's, s_card⟩
    obtain ⟨f, f_inj, hfs⟩ : ∃ f : Fin N → E, Function.Injective f ∧ range f ⊆ ↑s :=
      by
      have : Fintype.card (Fin N) ≤ s.card := by simp only [Fintype.card_fin]; exact s_card
      rcases Function.Embedding.exists_of_card_le_finset this with ⟨f, hf⟩
      exact ⟨f, f.injective, hf⟩
    simp only [range_subset_iff, Finset.mem_coe] at hfs
    refine' ⟨f, fun i => hs _ (hfs i), fun i j hij => h's _ (hfs i) _ (hfs j) (f_inj.ne hij)⟩
  ·
    exact
      ⟨fun _ => 0, fun i => by simp; norm_num, fun i j _ => by simpa only [norm_zero, sub_nonpos, sub_self]⟩
        -- For `δ > 0`, `F δ` is a function from `fin N` to the ball of radius `2` for which two points
          -- in the image are separated by `1 - δ`.
choose! F hF using this
have : ∃ f : Fin N → E, (∀ i : Fin N, ‖f i‖ ≤ 2) ∧ ∀ i j, i ≠ j → 1 ≤ ‖f i - f j‖ :=
  by
  obtain ⟨u, _, zero_lt_u, hu⟩ :
    ∃ u : ℕ → ℝ, (∀ m n : ℕ, m < n → u n < u m) ∧ (∀ n : ℕ, 0 < u n) ∧ Filter.Tendsto u Filter.atTop (𝓝 0) :=
    exists_seq_strictAnti_tendsto (0 : ℝ)
  have A : ∀ n, F (u n) ∈ closedBall (0 : Fin N → E) 2 :=
    by
    intro n
    simp only [pi_norm_le_iff_of_nonneg zero_le_two, mem_closedBall, dist_zero_right, (hF (u n) (zero_lt_u n)).left,
      forall_const]
  obtain ⟨f, fmem, φ, φ_mono, hf⟩ :
    ∃ f ∈ closedBall (0 : Fin N → E) 2, ∃ φ : ℕ → ℕ, StrictMono φ ∧ Tendsto ((F ∘ u) ∘ φ) atTop (𝓝 f) :=
    IsCompact.tendsto_subseq (isCompact_closedBall _ _) A
  refine' ⟨f, fun i => _, fun i j hij => _⟩
  · simp only [pi_norm_le_iff_of_nonneg zero_le_two, mem_closedBall, dist_zero_right] at fmem
    exact fmem i
  · have A : Tendsto (fun n => ‖F (u (φ n)) i - F (u (φ n)) j‖) atTop (𝓝 ‖f i - f j‖) :=
      ((hf.apply i).sub (hf.apply j)).norm
    have B : Tendsto (fun n => 1 - u (φ n)) atTop (𝓝 (1 - 0)) := tendsto_const_nhds.sub (hu.comp φ_mono.tendsto_atTop)
    rw [sub_zero] at B
    exact le_of_tendsto_of_tendsto' B A fun n => (hF (u (φ n)) (zero_lt_u _)).2 i j hij
rcases this with
  ⟨f, hf, h'f⟩
    -- the range of `f` contradicts the definition of `multiplicity E`.
have finj : Function.Injective f := by
  intro i j hij
  by_contra h
  have : 1 ≤ ‖f i - f j‖ := h'f i j h
  simp only [hij, norm_zero, sub_self] at this
  exact lt_irrefl _ (this.trans_lt zero_lt_one)
let s := Finset.image f Finset.univ
have s_card : s.card = N := by rw [Finset.card_image_of_injective _ finj]; exact Finset.card_fin N
have hs : ∀ c ∈ s, ‖c‖ ≤ 2 := by
  simp only [hf, forall_apply_eq_imp_iff', forall_const, forall_exists_index, Finset.mem_univ, Finset.mem_image,
    true_and]
have h's : ∀ c ∈ s, ∀ d ∈ s, c ≠ d → 1 ≤ ‖c - d‖ :=
  by
  simp only [forall_apply_eq_imp_iff', forall_exists_index, Finset.mem_univ, Finset.mem_image, Ne.def, exists_true_left,
    forall_apply_eq_imp_iff', forall_true_left, true_and]
  intro i j hij
  have : i ≠ j := fun h => by rw [h] at hij ; exact hij rfl
  exact h'f i j this
have : s.card ≤ multiplicity E := card_le_multiplicity hs h's
rw [s_card, hN] at this
exact lt_irrefl _ ((Nat.lt_succ_self (multiplicity E)).trans_le this)
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
⊢ ∃ δ,
    0 < δ ∧
      δ < 1 ∧
        ∀ (s : Finset E),
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) →
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) → Finset.card s ≤ multiplicity E
[PROOFSTEP]
by_contra' h
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
⊢ False
[PROOFSTEP]
set N := multiplicity E + 1 with hN
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
⊢ False
[PROOFSTEP]
have : ∀ δ : ℝ, 0 < δ → ∃ f : Fin N → E, (∀ i : Fin N, ‖f i‖ ≤ 2) ∧ ∀ i j, i ≠ j → 1 - δ ≤ ‖f i - f j‖ :=
  by
  intro δ hδ
  rcases lt_or_le δ 1 with (hδ' | hδ')
  · rcases h δ hδ hδ' with ⟨s, hs, h's, s_card⟩
    obtain ⟨f, f_inj, hfs⟩ : ∃ f : Fin N → E, Function.Injective f ∧ range f ⊆ ↑s :=
      by
      have : Fintype.card (Fin N) ≤ s.card := by simp only [Fintype.card_fin]; exact s_card
      rcases Function.Embedding.exists_of_card_le_finset this with ⟨f, hf⟩
      exact ⟨f, f.injective, hf⟩
    simp only [range_subset_iff, Finset.mem_coe] at hfs
    refine' ⟨f, fun i => hs _ (hfs i), fun i j hij => h's _ (hfs i) _ (hfs j) (f_inj.ne hij)⟩
  ·
    exact
      ⟨fun _ => 0, fun i => by simp; norm_num, fun i j _ => by simpa only [norm_zero, sub_nonpos, sub_self]⟩
        -- For `δ > 0`, `F δ` is a function from `fin N` to the ball of radius `2` for which two points
          -- in the image are separated by `1 - δ`.
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
⊢ ∀ (δ : ℝ), 0 < δ → ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖f i - f j‖
[PROOFSTEP]
intro δ hδ
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
⊢ ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖f i - f j‖
[PROOFSTEP]
rcases lt_or_le δ 1 with (hδ' | hδ')
[GOAL]
case inl
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : δ < 1
⊢ ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖f i - f j‖
[PROOFSTEP]
rcases h δ hδ hδ' with ⟨s, hs, h's, s_card⟩
[GOAL]
case inl.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : δ < 1
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖
s_card : multiplicity E < Finset.card s
⊢ ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖f i - f j‖
[PROOFSTEP]
obtain ⟨f, f_inj, hfs⟩ : ∃ f : Fin N → E, Function.Injective f ∧ range f ⊆ ↑s :=
  by
  have : Fintype.card (Fin N) ≤ s.card := by simp only [Fintype.card_fin]; exact s_card
  rcases Function.Embedding.exists_of_card_le_finset this with ⟨f, hf⟩
  exact ⟨f, f.injective, hf⟩
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : δ < 1
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖
s_card : multiplicity E < Finset.card s
⊢ ∃ f, Function.Injective f ∧ range f ⊆ ↑s
[PROOFSTEP]
have : Fintype.card (Fin N) ≤ s.card := by simp only [Fintype.card_fin]; exact s_card
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : δ < 1
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖
s_card : multiplicity E < Finset.card s
⊢ Fintype.card (Fin N) ≤ Finset.card s
[PROOFSTEP]
simp only [Fintype.card_fin]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : δ < 1
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖
s_card : multiplicity E < Finset.card s
⊢ multiplicity E + 1 ≤ Finset.card s
[PROOFSTEP]
exact s_card
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : δ < 1
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖
s_card : multiplicity E < Finset.card s
this : Fintype.card (Fin N) ≤ Finset.card s
⊢ ∃ f, Function.Injective f ∧ range f ⊆ ↑s
[PROOFSTEP]
rcases Function.Embedding.exists_of_card_le_finset this with ⟨f, hf⟩
[GOAL]
case intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : δ < 1
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖
s_card : multiplicity E < Finset.card s
this : Fintype.card (Fin N) ≤ Finset.card s
f : Fin N ↪ E
hf : range ↑f ⊆ ↑s
⊢ ∃ f, Function.Injective f ∧ range f ⊆ ↑s
[PROOFSTEP]
exact ⟨f, f.injective, hf⟩
[GOAL]
case inl.intro.intro.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : δ < 1
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖
s_card : multiplicity E < Finset.card s
f : Fin N → E
f_inj : Function.Injective f
hfs : range f ⊆ ↑s
⊢ ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖f i - f j‖
[PROOFSTEP]
simp only [range_subset_iff, Finset.mem_coe] at hfs
[GOAL]
case inl.intro.intro.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : δ < 1
s : Finset E
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖
s_card : multiplicity E < Finset.card s
f : Fin N → E
f_inj : Function.Injective f
hfs : ∀ (y : Fin (multiplicity E + 1)), f y ∈ s
⊢ ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖f i - f j‖
[PROOFSTEP]
refine' ⟨f, fun i => hs _ (hfs i), fun i j hij => h's _ (hfs i) _ (hfs j) (f_inj.ne hij)⟩
[GOAL]
case inr
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : 1 ≤ δ
⊢ ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖f i - f j‖
[PROOFSTEP]
exact
  ⟨fun _ => 0, fun i => by simp; norm_num, fun i j _ => by simpa only [norm_zero, sub_nonpos, sub_self]⟩
    -- For `δ > 0`, `F δ` is a function from `fin N` to the ball of radius `2` for which two points
      -- in the image are separated by `1 - δ`.
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : 1 ≤ δ
i : Fin N
⊢ ‖(fun x => 0) i‖ ≤ 2
[PROOFSTEP]
simp
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : 1 ≤ δ
i : Fin N
⊢ 0 ≤ 2
[PROOFSTEP]
norm_num
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
δ : ℝ
hδ : 0 < δ
hδ' : 1 ≤ δ
i j : Fin N
x✝ : i ≠ j
⊢ 1 - δ ≤ ‖(fun x => 0) i - (fun x => 0) j‖
[PROOFSTEP]
simpa only [norm_zero, sub_nonpos, sub_self]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
this : ∀ (δ : ℝ), 0 < δ → ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖f i - f j‖
⊢ False
[PROOFSTEP]
choose! F hF using this
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
⊢ False
[PROOFSTEP]
have : ∃ f : Fin N → E, (∀ i : Fin N, ‖f i‖ ≤ 2) ∧ ∀ i j, i ≠ j → 1 ≤ ‖f i - f j‖ :=
  by
  obtain ⟨u, _, zero_lt_u, hu⟩ :
    ∃ u : ℕ → ℝ, (∀ m n : ℕ, m < n → u n < u m) ∧ (∀ n : ℕ, 0 < u n) ∧ Filter.Tendsto u Filter.atTop (𝓝 0) :=
    exists_seq_strictAnti_tendsto (0 : ℝ)
  have A : ∀ n, F (u n) ∈ closedBall (0 : Fin N → E) 2 :=
    by
    intro n
    simp only [pi_norm_le_iff_of_nonneg zero_le_two, mem_closedBall, dist_zero_right, (hF (u n) (zero_lt_u n)).left,
      forall_const]
  obtain ⟨f, fmem, φ, φ_mono, hf⟩ :
    ∃ f ∈ closedBall (0 : Fin N → E) 2, ∃ φ : ℕ → ℕ, StrictMono φ ∧ Tendsto ((F ∘ u) ∘ φ) atTop (𝓝 f) :=
    IsCompact.tendsto_subseq (isCompact_closedBall _ _) A
  refine' ⟨f, fun i => _, fun i j hij => _⟩
  · simp only [pi_norm_le_iff_of_nonneg zero_le_two, mem_closedBall, dist_zero_right] at fmem
    exact fmem i
  · have A : Tendsto (fun n => ‖F (u (φ n)) i - F (u (φ n)) j‖) atTop (𝓝 ‖f i - f j‖) :=
      ((hf.apply i).sub (hf.apply j)).norm
    have B : Tendsto (fun n => 1 - u (φ n)) atTop (𝓝 (1 - 0)) := tendsto_const_nhds.sub (hu.comp φ_mono.tendsto_atTop)
    rw [sub_zero] at B
    exact le_of_tendsto_of_tendsto' B A fun n => (hF (u (φ n)) (zero_lt_u _)).2 i j hij
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
⊢ ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
[PROOFSTEP]
obtain ⟨u, _, zero_lt_u, hu⟩ :
  ∃ u : ℕ → ℝ, (∀ m n : ℕ, m < n → u n < u m) ∧ (∀ n : ℕ, 0 < u n) ∧ Filter.Tendsto u Filter.atTop (𝓝 0) :=
  exists_seq_strictAnti_tendsto (0 : ℝ)
[GOAL]
case intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
u : ℕ → ℝ
left✝ : ∀ (m n : ℕ), m < n → u n < u m
zero_lt_u : ∀ (n : ℕ), 0 < u n
hu : Tendsto u atTop (𝓝 0)
⊢ ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
[PROOFSTEP]
have A : ∀ n, F (u n) ∈ closedBall (0 : Fin N → E) 2 := by
  intro n
  simp only [pi_norm_le_iff_of_nonneg zero_le_two, mem_closedBall, dist_zero_right, (hF (u n) (zero_lt_u n)).left,
    forall_const]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
u : ℕ → ℝ
left✝ : ∀ (m n : ℕ), m < n → u n < u m
zero_lt_u : ∀ (n : ℕ), 0 < u n
hu : Tendsto u atTop (𝓝 0)
⊢ ∀ (n : ℕ), F (u n) ∈ closedBall 0 2
[PROOFSTEP]
intro n
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
u : ℕ → ℝ
left✝ : ∀ (m n : ℕ), m < n → u n < u m
zero_lt_u : ∀ (n : ℕ), 0 < u n
hu : Tendsto u atTop (𝓝 0)
n : ℕ
⊢ F (u n) ∈ closedBall 0 2
[PROOFSTEP]
simp only [pi_norm_le_iff_of_nonneg zero_le_two, mem_closedBall, dist_zero_right, (hF (u n) (zero_lt_u n)).left,
  forall_const]
[GOAL]
case intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
u : ℕ → ℝ
left✝ : ∀ (m n : ℕ), m < n → u n < u m
zero_lt_u : ∀ (n : ℕ), 0 < u n
hu : Tendsto u atTop (𝓝 0)
A : ∀ (n : ℕ), F (u n) ∈ closedBall 0 2
⊢ ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
[PROOFSTEP]
obtain ⟨f, fmem, φ, φ_mono, hf⟩ :
  ∃ f ∈ closedBall (0 : Fin N → E) 2, ∃ φ : ℕ → ℕ, StrictMono φ ∧ Tendsto ((F ∘ u) ∘ φ) atTop (𝓝 f) :=
  IsCompact.tendsto_subseq (isCompact_closedBall _ _) A
[GOAL]
case intro.intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
u : ℕ → ℝ
left✝ : ∀ (m n : ℕ), m < n → u n < u m
zero_lt_u : ∀ (n : ℕ), 0 < u n
hu : Tendsto u atTop (𝓝 0)
A : ∀ (n : ℕ), F (u n) ∈ closedBall 0 2
f : Fin N → E
fmem : f ∈ closedBall 0 2
φ : ℕ → ℕ
φ_mono : StrictMono φ
hf : Tendsto ((F ∘ u) ∘ φ) atTop (𝓝 f)
⊢ ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
[PROOFSTEP]
refine' ⟨f, fun i => _, fun i j hij => _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.refine'_1
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
u : ℕ → ℝ
left✝ : ∀ (m n : ℕ), m < n → u n < u m
zero_lt_u : ∀ (n : ℕ), 0 < u n
hu : Tendsto u atTop (𝓝 0)
A : ∀ (n : ℕ), F (u n) ∈ closedBall 0 2
f : Fin N → E
fmem : f ∈ closedBall 0 2
φ : ℕ → ℕ
φ_mono : StrictMono φ
hf : Tendsto ((F ∘ u) ∘ φ) atTop (𝓝 f)
i : Fin N
⊢ ‖f i‖ ≤ 2
[PROOFSTEP]
simp only [pi_norm_le_iff_of_nonneg zero_le_two, mem_closedBall, dist_zero_right] at fmem
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.refine'_1
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
u : ℕ → ℝ
left✝ : ∀ (m n : ℕ), m < n → u n < u m
zero_lt_u : ∀ (n : ℕ), 0 < u n
hu : Tendsto u atTop (𝓝 0)
A : ∀ (n : ℕ), F (u n) ∈ closedBall 0 2
f : Fin N → E
φ : ℕ → ℕ
φ_mono : StrictMono φ
hf : Tendsto ((F ∘ u) ∘ φ) atTop (𝓝 f)
i : Fin N
fmem : ∀ (i : Fin N), ‖f i‖ ≤ 2
⊢ ‖f i‖ ≤ 2
[PROOFSTEP]
exact fmem i
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.refine'_2
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
u : ℕ → ℝ
left✝ : ∀ (m n : ℕ), m < n → u n < u m
zero_lt_u : ∀ (n : ℕ), 0 < u n
hu : Tendsto u atTop (𝓝 0)
A : ∀ (n : ℕ), F (u n) ∈ closedBall 0 2
f : Fin N → E
fmem : f ∈ closedBall 0 2
φ : ℕ → ℕ
φ_mono : StrictMono φ
hf : Tendsto ((F ∘ u) ∘ φ) atTop (𝓝 f)
i j : Fin N
hij : i ≠ j
⊢ 1 ≤ ‖f i - f j‖
[PROOFSTEP]
have A : Tendsto (fun n => ‖F (u (φ n)) i - F (u (φ n)) j‖) atTop (𝓝 ‖f i - f j‖) :=
  ((hf.apply i).sub (hf.apply j)).norm
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.refine'_2
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
u : ℕ → ℝ
left✝ : ∀ (m n : ℕ), m < n → u n < u m
zero_lt_u : ∀ (n : ℕ), 0 < u n
hu : Tendsto u atTop (𝓝 0)
A✝ : ∀ (n : ℕ), F (u n) ∈ closedBall 0 2
f : Fin N → E
fmem : f ∈ closedBall 0 2
φ : ℕ → ℕ
φ_mono : StrictMono φ
hf : Tendsto ((F ∘ u) ∘ φ) atTop (𝓝 f)
i j : Fin N
hij : i ≠ j
A : Tendsto (fun n => ‖F (u (φ n)) i - F (u (φ n)) j‖) atTop (𝓝 ‖f i - f j‖)
⊢ 1 ≤ ‖f i - f j‖
[PROOFSTEP]
have B : Tendsto (fun n => 1 - u (φ n)) atTop (𝓝 (1 - 0)) := tendsto_const_nhds.sub (hu.comp φ_mono.tendsto_atTop)
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.refine'_2
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
u : ℕ → ℝ
left✝ : ∀ (m n : ℕ), m < n → u n < u m
zero_lt_u : ∀ (n : ℕ), 0 < u n
hu : Tendsto u atTop (𝓝 0)
A✝ : ∀ (n : ℕ), F (u n) ∈ closedBall 0 2
f : Fin N → E
fmem : f ∈ closedBall 0 2
φ : ℕ → ℕ
φ_mono : StrictMono φ
hf : Tendsto ((F ∘ u) ∘ φ) atTop (𝓝 f)
i j : Fin N
hij : i ≠ j
A : Tendsto (fun n => ‖F (u (φ n)) i - F (u (φ n)) j‖) atTop (𝓝 ‖f i - f j‖)
B : Tendsto (fun n => 1 - u (φ n)) atTop (𝓝 (1 - 0))
⊢ 1 ≤ ‖f i - f j‖
[PROOFSTEP]
rw [sub_zero] at B
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.refine'_2
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
u : ℕ → ℝ
left✝ : ∀ (m n : ℕ), m < n → u n < u m
zero_lt_u : ∀ (n : ℕ), 0 < u n
hu : Tendsto u atTop (𝓝 0)
A✝ : ∀ (n : ℕ), F (u n) ∈ closedBall 0 2
f : Fin N → E
fmem : f ∈ closedBall 0 2
φ : ℕ → ℕ
φ_mono : StrictMono φ
hf : Tendsto ((F ∘ u) ∘ φ) atTop (𝓝 f)
i j : Fin N
hij : i ≠ j
A : Tendsto (fun n => ‖F (u (φ n)) i - F (u (φ n)) j‖) atTop (𝓝 ‖f i - f j‖)
B : Tendsto (fun n => 1 - u (φ n)) atTop (𝓝 1)
⊢ 1 ≤ ‖f i - f j‖
[PROOFSTEP]
exact le_of_tendsto_of_tendsto' B A fun n => (hF (u (φ n)) (zero_lt_u _)).2 i j hij
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
this : ∃ f, (∀ (i : Fin N), ‖f i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
⊢ False
[PROOFSTEP]
rcases this with
  ⟨f, hf, h'f⟩
    -- the range of `f` contradicts the definition of `multiplicity E`.
[GOAL]
case intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
⊢ False
[PROOFSTEP]
have finj : Function.Injective f := by
  intro i j hij
  by_contra h
  have : 1 ≤ ‖f i - f j‖ := h'f i j h
  simp only [hij, norm_zero, sub_self] at this
  exact lt_irrefl _ (this.trans_lt zero_lt_one)
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
⊢ Function.Injective f
[PROOFSTEP]
intro i j hij
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
i j : Fin N
hij : f i = f j
⊢ i = j
[PROOFSTEP]
by_contra h
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h✝ :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
i j : Fin N
hij : f i = f j
h : ¬i = j
⊢ False
[PROOFSTEP]
have : 1 ≤ ‖f i - f j‖ := h'f i j h
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h✝ :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
i j : Fin N
hij : f i = f j
h : ¬i = j
this : 1 ≤ ‖f i - f j‖
⊢ False
[PROOFSTEP]
simp only [hij, norm_zero, sub_self] at this
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h✝ :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
i j : Fin N
hij : f i = f j
h : ¬i = j
this : 1 ≤ 0
⊢ False
[PROOFSTEP]
exact lt_irrefl _ (this.trans_lt zero_lt_one)
[GOAL]
case intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
⊢ False
[PROOFSTEP]
let s := Finset.image f Finset.univ
[GOAL]
case intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
⊢ False
[PROOFSTEP]
have s_card : s.card = N := by rw [Finset.card_image_of_injective _ finj]; exact Finset.card_fin N
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
⊢ Finset.card s = N
[PROOFSTEP]
rw [Finset.card_image_of_injective _ finj]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
⊢ Finset.card Finset.univ = N
[PROOFSTEP]
exact Finset.card_fin N
[GOAL]
case intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
⊢ False
[PROOFSTEP]
have hs : ∀ c ∈ s, ‖c‖ ≤ 2 := by
  simp only [hf, forall_apply_eq_imp_iff', forall_const, forall_exists_index, Finset.mem_univ, Finset.mem_image,
    true_and]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
⊢ ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
[PROOFSTEP]
simp only [hf, forall_apply_eq_imp_iff', forall_const, forall_exists_index, Finset.mem_univ, Finset.mem_image, true_and]
[GOAL]
case intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
⊢ False
[PROOFSTEP]
have h's : ∀ c ∈ s, ∀ d ∈ s, c ≠ d → 1 ≤ ‖c - d‖ :=
  by
  simp only [forall_apply_eq_imp_iff', forall_exists_index, Finset.mem_univ, Finset.mem_image, Ne.def, exists_true_left,
    forall_apply_eq_imp_iff', forall_true_left, true_and]
  intro i j hij
  have : i ≠ j := fun h => by rw [h] at hij ; exact hij rfl
  exact h'f i j this
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
⊢ ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
[PROOFSTEP]
simp only [forall_apply_eq_imp_iff', forall_exists_index, Finset.mem_univ, Finset.mem_image, Ne.def, exists_true_left,
  forall_apply_eq_imp_iff', forall_true_left, true_and]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
⊢ ∀ (a a_1 : Fin (multiplicity E + 1)), ¬f a = f a_1 → 1 ≤ ‖f a - f a_1‖
[PROOFSTEP]
intro i j hij
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
i j : Fin (multiplicity E + 1)
hij : ¬f i = f j
⊢ 1 ≤ ‖f i - f j‖
[PROOFSTEP]
have : i ≠ j := fun h => by rw [h] at hij ; exact hij rfl
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h✝ :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
i j : Fin (multiplicity E + 1)
hij : ¬f i = f j
h : i = j
⊢ False
[PROOFSTEP]
rw [h] at hij
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h✝ :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
i j : Fin (multiplicity E + 1)
hij : ¬f j = f j
h : i = j
⊢ False
[PROOFSTEP]
exact hij rfl
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
i j : Fin (multiplicity E + 1)
hij : ¬f i = f j
this : i ≠ j
⊢ 1 ≤ ‖f i - f j‖
[PROOFSTEP]
exact h'f i j this
[GOAL]
case intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
⊢ False
[PROOFSTEP]
have : s.card ≤ multiplicity E := card_le_multiplicity hs h's
[GOAL]
case intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this : Finset.card s ≤ multiplicity E
⊢ False
[PROOFSTEP]
rw [s_card, hN] at this
[GOAL]
case intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
h :
  ∀ (δ : ℝ),
    0 < δ →
      δ < 1 →
        ∃ s,
          (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) ∧
            (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) ∧ multiplicity E < Finset.card s
N : ℕ := multiplicity E + 1
hN : N = multiplicity E + 1
F : ℝ → Fin N → E
hF : ∀ (δ : ℝ), 0 < δ → (∀ (i : Fin N), ‖F δ i‖ ≤ 2) ∧ ∀ (i j : Fin N), i ≠ j → 1 - δ ≤ ‖F δ i - F δ j‖
f : Fin N → E
hf : ∀ (i : Fin N), ‖f i‖ ≤ 2
h'f : ∀ (i j : Fin N), i ≠ j → 1 ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = N
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 ≤ ‖c - d‖
this : multiplicity E + 1 ≤ multiplicity E
⊢ False
[PROOFSTEP]
exact lt_irrefl _ ((Nat.lt_succ_self (multiplicity E)).trans_le this)
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
⊢ 1 < goodτ E
[PROOFSTEP]
dsimp [goodτ, goodδ]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
⊢ 1 <
    1 +
      Exists.choose
          (_ :
            ∃ δ,
              0 < δ ∧
                δ < 1 ∧
                  ∀ (s : Finset E),
                    (∀ (c : E), c ∈ s → ‖c‖ ≤ 2) →
                      (∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - δ ≤ ‖c - d‖) →
                        Finset.card s ≤ multiplicity E) /
        4
[PROOFSTEP]
linarith [(exists_goodδ E).choose_spec.1]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
⊢ n ≤ multiplicity E
[PROOFSTEP]
classical
have finj : Function.Injective f := by
  intro i j hij
  by_contra h
  have : 1 - goodδ E ≤ ‖f i - f j‖ := h' i j h
  simp only [hij, norm_zero, sub_self] at this
  linarith [goodδ_lt_one E]
let s := Finset.image f Finset.univ
have s_card : s.card = n := by rw [Finset.card_image_of_injective _ finj]; exact Finset.card_fin n
have hs : ∀ c ∈ s, ‖c‖ ≤ 2 := by
  simp only [h, forall_apply_eq_imp_iff', forall_const, forall_exists_index, Finset.mem_univ, Finset.mem_image,
    imp_true_iff, true_and]
have h's : ∀ c ∈ s, ∀ d ∈ s, c ≠ d → 1 - goodδ E ≤ ‖c - d‖ :=
  by
  simp only [forall_apply_eq_imp_iff', forall_exists_index, Finset.mem_univ, Finset.mem_image, Ne.def, exists_true_left,
    forall_apply_eq_imp_iff', forall_true_left, true_and]
  intro i j hij
  have : i ≠ j := fun h => by rw [h] at hij ; exact hij rfl
  exact h' i j this
have : s.card ≤ multiplicity E := card_le_multiplicity_of_δ hs h's
rwa [s_card] at this
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
⊢ n ≤ multiplicity E
[PROOFSTEP]
have finj : Function.Injective f := by
  intro i j hij
  by_contra h
  have : 1 - goodδ E ≤ ‖f i - f j‖ := h' i j h
  simp only [hij, norm_zero, sub_self] at this
  linarith [goodδ_lt_one E]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
⊢ Function.Injective f
[PROOFSTEP]
intro i j hij
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
i j : Fin n
hij : f i = f j
⊢ i = j
[PROOFSTEP]
by_contra h
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h✝ : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
i j : Fin n
hij : f i = f j
h : ¬i = j
⊢ False
[PROOFSTEP]
have : 1 - goodδ E ≤ ‖f i - f j‖ := h' i j h
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h✝ : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
i j : Fin n
hij : f i = f j
h : ¬i = j
this : 1 - goodδ E ≤ ‖f i - f j‖
⊢ False
[PROOFSTEP]
simp only [hij, norm_zero, sub_self] at this
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h✝ : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
i j : Fin n
hij : f i = f j
h : ¬i = j
this : 1 - goodδ E ≤ 0
⊢ False
[PROOFSTEP]
linarith [goodδ_lt_one E]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
⊢ n ≤ multiplicity E
[PROOFSTEP]
let s := Finset.image f Finset.univ
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
⊢ n ≤ multiplicity E
[PROOFSTEP]
have s_card : s.card = n := by rw [Finset.card_image_of_injective _ finj]; exact Finset.card_fin n
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
⊢ Finset.card s = n
[PROOFSTEP]
rw [Finset.card_image_of_injective _ finj]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
⊢ Finset.card Finset.univ = n
[PROOFSTEP]
exact Finset.card_fin n
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = n
⊢ n ≤ multiplicity E
[PROOFSTEP]
have hs : ∀ c ∈ s, ‖c‖ ≤ 2 := by
  simp only [h, forall_apply_eq_imp_iff', forall_const, forall_exists_index, Finset.mem_univ, Finset.mem_image,
    imp_true_iff, true_and]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = n
⊢ ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
[PROOFSTEP]
simp only [h, forall_apply_eq_imp_iff', forall_const, forall_exists_index, Finset.mem_univ, Finset.mem_image,
  imp_true_iff, true_and]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = n
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
⊢ n ≤ multiplicity E
[PROOFSTEP]
have h's : ∀ c ∈ s, ∀ d ∈ s, c ≠ d → 1 - goodδ E ≤ ‖c - d‖ :=
  by
  simp only [forall_apply_eq_imp_iff', forall_exists_index, Finset.mem_univ, Finset.mem_image, Ne.def, exists_true_left,
    forall_apply_eq_imp_iff', forall_true_left, true_and]
  intro i j hij
  have : i ≠ j := fun h => by rw [h] at hij ; exact hij rfl
  exact h' i j this
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = n
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
⊢ ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - goodδ E ≤ ‖c - d‖
[PROOFSTEP]
simp only [forall_apply_eq_imp_iff', forall_exists_index, Finset.mem_univ, Finset.mem_image, Ne.def, exists_true_left,
  forall_apply_eq_imp_iff', forall_true_left, true_and]
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = n
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
⊢ ∀ (a a_1 : Fin n), ¬f a = f a_1 → 1 - goodδ E ≤ ‖f a - f a_1‖
[PROOFSTEP]
intro i j hij
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = n
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
i j : Fin n
hij : ¬f i = f j
⊢ 1 - goodδ E ≤ ‖f i - f j‖
[PROOFSTEP]
have : i ≠ j := fun h => by rw [h] at hij ; exact hij rfl
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h✝ : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = n
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
i j : Fin n
hij : ¬f i = f j
h : i = j
⊢ False
[PROOFSTEP]
rw [h] at hij
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h✝ : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = n
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
i j : Fin n
hij : ¬f j = f j
h : i = j
⊢ False
[PROOFSTEP]
exact hij rfl
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = n
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
i j : Fin n
hij : ¬f i = f j
this : i ≠ j
⊢ 1 - goodδ E ≤ ‖f i - f j‖
[PROOFSTEP]
exact h' i j this
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = n
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - goodδ E ≤ ‖c - d‖
⊢ n ≤ multiplicity E
[PROOFSTEP]
have : s.card ≤ multiplicity E := card_le_multiplicity_of_δ hs h's
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
n : ℕ
f : Fin n → E
h : ∀ (i : Fin n), ‖f i‖ ≤ 2
h' : ∀ (i j : Fin n), i ≠ j → 1 - goodδ E ≤ ‖f i - f j‖
finj : Function.Injective f
s : Finset E := Finset.image f Finset.univ
s_card : Finset.card s = n
hs : ∀ (c : E), c ∈ s → ‖c‖ ≤ 2
h's : ∀ (c : E), c ∈ s → ∀ (d : E), d ∈ s → c ≠ d → 1 - goodδ E ≤ ‖c - d‖
this : Finset.card s ≤ multiplicity E
⊢ n ≤ multiplicity E
[PROOFSTEP]
rwa [s_card] at this
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
⊢ 1 - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
have ah : ∀ i j, i ≠ j → a.r i ≤ ‖a.c i - a.c j‖ ∧ a.r j ≤ τ * a.r i ∨ a.r j ≤ ‖a.c j - a.c i‖ ∧ a.r i ≤ τ * a.r j := by
  simpa only [dist_eq_norm] using a.h
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
⊢ ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
[PROOFSTEP]
simpa only [dist_eq_norm] using a.h
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ 1 - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
have δnonneg : 0 ≤ δ := by linarith only [hτ, hδ1]
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ 0 ≤ δ
[PROOFSTEP]
linarith only [hτ, hδ1]
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
⊢ 1 - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
have D : 0 ≤ 1 - δ / 4 := by linarith only [hδ2]
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
⊢ 0 ≤ 1 - δ / 4
[PROOFSTEP]
linarith only [hδ2]
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
⊢ 1 - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
have τpos : 0 < τ := _root_.zero_lt_one.trans_le hτ
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
⊢ 1 - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
have I : (1 - δ / 4) * τ ≤ 1 :=
  calc
    (1 - δ / 4) * τ ≤ (1 - δ / 4) * (1 + δ / 4) := mul_le_mul_of_nonneg_left hδ1 D
    _ = (1 : ℝ) - δ ^ 2 / 16 := by ring
    _ ≤ 1 := by linarith only [sq_nonneg δ]
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
⊢ (1 - δ / 4) * (1 + δ / 4) = 1 - δ ^ 2 / 16
[PROOFSTEP]
ring
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
⊢ 1 - δ ^ 2 / 16 ≤ 1
[PROOFSTEP]
linarith only [sq_nonneg δ]
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
⊢ 1 - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
have J : 1 - δ ≤ 1 - δ / 4 := by linarith only [δnonneg]
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
⊢ 1 - δ ≤ 1 - δ / 4
[PROOFSTEP]
linarith only [δnonneg]
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
⊢ 1 - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
have K : 1 - δ / 4 ≤ τ⁻¹ := by rw [inv_eq_one_div, le_div_iff τpos]; exact I
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
⊢ 1 - δ / 4 ≤ τ⁻¹
[PROOFSTEP]
rw [inv_eq_one_div, le_div_iff τpos]
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
⊢ (1 - δ / 4) * τ ≤ 1
[PROOFSTEP]
exact I
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
⊢ 1 - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
suffices L : τ⁻¹ ≤ ‖a.c i - a.c j‖
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
L : τ⁻¹ ≤ ‖c a i - c a j‖
⊢ 1 - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
linarith only [J, K, L]
[GOAL]
case L
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
⊢ τ⁻¹ ≤ ‖c a i - c a j‖
[PROOFSTEP]
have hτ' : ∀ k, τ⁻¹ ≤ a.r k := by
  intro k
  rw [inv_eq_one_div, div_le_iff τpos, ← lastr, mul_comm]
  exact a.hlast' k hτ
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
⊢ ∀ (k : Fin (Nat.succ N)), τ⁻¹ ≤ r a k
[PROOFSTEP]
intro k
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
k : Fin (Nat.succ N)
⊢ τ⁻¹ ≤ r a k
[PROOFSTEP]
rw [inv_eq_one_div, div_le_iff τpos, ← lastr, mul_comm]
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
k : Fin (Nat.succ N)
⊢ r a (last N) ≤ τ * r a k
[PROOFSTEP]
exact a.hlast' k hτ
[GOAL]
case L
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
hτ' : ∀ (k : Fin (Nat.succ N)), τ⁻¹ ≤ r a k
⊢ τ⁻¹ ≤ ‖c a i - c a j‖
[PROOFSTEP]
rcases ah i j inej with (H | H)
[GOAL]
case L.inl
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
hτ' : ∀ (k : Fin (Nat.succ N)), τ⁻¹ ≤ r a k
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
⊢ τ⁻¹ ≤ ‖c a i - c a j‖
[PROOFSTEP]
apply le_trans _ H.1
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
hτ' : ∀ (k : Fin (Nat.succ N)), τ⁻¹ ≤ r a k
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
⊢ τ⁻¹ ≤ r a i
[PROOFSTEP]
exact hτ' i
[GOAL]
case L.inr
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
hτ' : ∀ (k : Fin (Nat.succ N)), τ⁻¹ ≤ r a k
H : r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ τ⁻¹ ≤ ‖c a i - c a j‖
[PROOFSTEP]
rw [norm_sub_rev]
[GOAL]
case L.inr
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
hτ' : ∀ (k : Fin (Nat.succ N)), τ⁻¹ ≤ r a k
H : r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ τ⁻¹ ≤ ‖c a j - c a i‖
[PROOFSTEP]
apply le_trans _ H.1
[GOAL]
E : Type u_1
inst✝ : NormedAddCommGroup E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
I : (1 - δ / 4) * τ ≤ 1
J : 1 - δ ≤ 1 - δ / 4
K : 1 - δ / 4 ≤ τ⁻¹
hτ' : ∀ (k : Fin (Nat.succ N)), τ⁻¹ ≤ r a k
H : r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ τ⁻¹ ≤ r a j
[PROOFSTEP]
exact hτ' j
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
⊢ 1 - δ ≤ ‖c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have ah : ∀ i j, i ≠ j → a.r i ≤ ‖a.c i - a.c j‖ ∧ a.r j ≤ τ * a.r i ∨ a.r j ≤ ‖a.c j - a.c i‖ ∧ a.r i ≤ τ * a.r j := by
  simpa only [dist_eq_norm] using a.h
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
⊢ ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
[PROOFSTEP]
simpa only [dist_eq_norm] using a.h
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ 1 - δ ≤ ‖c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have δnonneg : 0 ≤ δ := by linarith only [hτ, hδ1]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ 0 ≤ δ
[PROOFSTEP]
linarith only [hτ, hδ1]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
⊢ 1 - δ ≤ ‖c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have D : 0 ≤ 1 - δ / 4 := by linarith only [hδ2]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
⊢ 0 ≤ 1 - δ / 4
[PROOFSTEP]
linarith only [hδ2]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
⊢ 1 - δ ≤ ‖c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have τpos : 0 < τ := _root_.zero_lt_one.trans_le hτ
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
⊢ 1 - δ ≤ ‖c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have hcrj : ‖a.c j‖ ≤ a.r j + 1 := by simpa only [lastc, lastr, dist_zero_right] using a.inter' j
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
⊢ ‖c a j‖ ≤ r a j + 1
[PROOFSTEP]
simpa only [lastc, lastr, dist_zero_right] using a.inter' j
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
⊢ 1 - δ ≤ ‖c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have I : a.r i ≤ 2 := by
  rcases lt_or_le i (last N) with (H | H)
  · apply (a.hlast i H).1.trans
    simpa only [dist_eq_norm, lastc, sub_zero] using hi
  · have : i = last N := top_le_iff.1 H
    rw [this, lastr]
    exact one_le_two
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
⊢ r a i ≤ 2
[PROOFSTEP]
rcases lt_or_le i (last N) with (H | H)
[GOAL]
case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
H : i < last N
⊢ r a i ≤ 2
[PROOFSTEP]
apply (a.hlast i H).1.trans
[GOAL]
case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
H : i < last N
⊢ dist (c a i) (c a (last N)) ≤ 2
[PROOFSTEP]
simpa only [dist_eq_norm, lastc, sub_zero] using hi
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
H : last N ≤ i
⊢ r a i ≤ 2
[PROOFSTEP]
have : i = last N := top_le_iff.1 H
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
H : last N ≤ i
this : i = last N
⊢ r a i ≤ 2
[PROOFSTEP]
rw [this, lastr]
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
H : last N ≤ i
this : i = last N
⊢ 1 ≤ 2
[PROOFSTEP]
exact one_le_two
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
⊢ 1 - δ ≤ ‖c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have J : (1 - δ / 4) * τ ≤ 1 :=
  calc
    (1 - δ / 4) * τ ≤ (1 - δ / 4) * (1 + δ / 4) := mul_le_mul_of_nonneg_left hδ1 D
    _ = (1 : ℝ) - δ ^ 2 / 16 := by ring
    _ ≤ 1 := by linarith only [sq_nonneg δ]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
⊢ (1 - δ / 4) * (1 + δ / 4) = 1 - δ ^ 2 / 16
[PROOFSTEP]
ring
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
⊢ 1 - δ ^ 2 / 16 ≤ 1
[PROOFSTEP]
linarith only [sq_nonneg δ]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
⊢ 1 - δ ≤ ‖c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have A : a.r j - δ ≤ ‖a.c i - a.c j‖ := by
  rcases ah j i inej.symm with (H | H); · rw [norm_sub_rev]; linarith [H.1]
  have C : a.r j ≤ 4 :=
    calc
      a.r j ≤ τ * a.r i := H.2
      _ ≤ τ * 2 := (mul_le_mul_of_nonneg_left I τpos.le)
      _ ≤ 5 / 4 * 2 := (mul_le_mul_of_nonneg_right (by linarith only [hδ1, hδ2]) zero_le_two)
      _ ≤ 4 := by norm_num
  calc
    a.r j - δ ≤ a.r j - a.r j / 4 * δ := by
      refine' sub_le_sub le_rfl _
      refine' mul_le_of_le_one_left δnonneg _
      linarith only [C]
    _ = (1 - δ / 4) * a.r j := by ring
    _ ≤ (1 - δ / 4) * (τ * a.r i) := (mul_le_mul_of_nonneg_left H.2 D)
    _ ≤ 1 * a.r i := by rw [← mul_assoc]; apply mul_le_mul_of_nonneg_right J (a.rpos _).le
    _ ≤ ‖a.c i - a.c j‖ := by rw [one_mul]; exact H.1
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
⊢ r a j - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
rcases ah j i inej.symm with (H | H)
[GOAL]
case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ r a j - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
rw [norm_sub_rev]
[GOAL]
case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ r a j - δ ≤ ‖c a j - c a i‖
[PROOFSTEP]
linarith [H.1]
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
⊢ r a j - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
have C : a.r j ≤ 4 :=
  calc
    a.r j ≤ τ * a.r i := H.2
    _ ≤ τ * 2 := (mul_le_mul_of_nonneg_left I τpos.le)
    _ ≤ 5 / 4 * 2 := (mul_le_mul_of_nonneg_right (by linarith only [hδ1, hδ2]) zero_le_two)
    _ ≤ 4 := by norm_num
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
⊢ τ ≤ 5 / 4
[PROOFSTEP]
linarith only [hδ1, hδ2]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
⊢ 5 / 4 * 2 ≤ 4
[PROOFSTEP]
norm_num
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
C : r a j ≤ 4
⊢ r a j - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
calc
  a.r j - δ ≤ a.r j - a.r j / 4 * δ := by
    refine' sub_le_sub le_rfl _
    refine' mul_le_of_le_one_left δnonneg _
    linarith only [C]
  _ = (1 - δ / 4) * a.r j := by ring
  _ ≤ (1 - δ / 4) * (τ * a.r i) := (mul_le_mul_of_nonneg_left H.2 D)
  _ ≤ 1 * a.r i := by rw [← mul_assoc]; apply mul_le_mul_of_nonneg_right J (a.rpos _).le
  _ ≤ ‖a.c i - a.c j‖ := by rw [one_mul]; exact H.1
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
C : r a j ≤ 4
⊢ r a j - δ ≤ r a j - r a j / 4 * δ
[PROOFSTEP]
refine' sub_le_sub le_rfl _
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
C : r a j ≤ 4
⊢ r a j / 4 * δ ≤ δ
[PROOFSTEP]
refine' mul_le_of_le_one_left δnonneg _
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
C : r a j ≤ 4
⊢ r a j / 4 ≤ 1
[PROOFSTEP]
linarith only [C]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
C : r a j ≤ 4
⊢ r a j - r a j / 4 * δ = (1 - δ / 4) * r a j
[PROOFSTEP]
ring
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
C : r a j ≤ 4
⊢ (1 - δ / 4) * (τ * r a i) ≤ 1 * r a i
[PROOFSTEP]
rw [← mul_assoc]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
C : r a j ≤ 4
⊢ (1 - δ / 4) * τ * r a i ≤ 1 * r a i
[PROOFSTEP]
apply mul_le_mul_of_nonneg_right J (a.rpos _).le
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
C : r a j ≤ 4
⊢ 1 * r a i ≤ ‖c a i - c a j‖
[PROOFSTEP]
rw [one_mul]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
C : r a j ≤ 4
⊢ r a i ≤ ‖c a i - c a j‖
[PROOFSTEP]
exact H.1
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
A : r a j - δ ≤ ‖c a i - c a j‖
⊢ 1 - δ ≤ ‖c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
set d := (2 / ‖a.c j‖) • a.c j with hd
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
A : r a j - δ ≤ ‖c a i - c a j‖
d : E := (2 / ‖c a j‖) • c a j
hd : d = (2 / ‖c a j‖) • c a j
⊢ 1 - δ ≤ ‖c a i - d‖
[PROOFSTEP]
have : a.r j - δ ≤ ‖a.c i - d‖ + (a.r j - 1) :=
  calc
    a.r j - δ ≤ ‖a.c i - a.c j‖ := A
    _ ≤ ‖a.c i - d‖ + ‖d - a.c j‖ := by simp only [← dist_eq_norm, dist_triangle]
    _ ≤ ‖a.c i - d‖ + (a.r j - 1) := by
      apply add_le_add_left
      have A : 0 ≤ 1 - 2 / ‖a.c j‖ := by simpa [div_le_iff (zero_le_two.trans_lt hj)] using hj.le
      rw [← one_smul ℝ (a.c j), hd, ← sub_smul, norm_smul, norm_sub_rev, Real.norm_eq_abs, abs_of_nonneg A, sub_mul]
      field_simp [(zero_le_two.trans_lt hj).ne']
      linarith only [hcrj]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
A : r a j - δ ≤ ‖c a i - c a j‖
d : E := (2 / ‖c a j‖) • c a j
hd : d = (2 / ‖c a j‖) • c a j
⊢ ‖c a i - c a j‖ ≤ ‖c a i - d‖ + ‖d - c a j‖
[PROOFSTEP]
simp only [← dist_eq_norm, dist_triangle]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
A : r a j - δ ≤ ‖c a i - c a j‖
d : E := (2 / ‖c a j‖) • c a j
hd : d = (2 / ‖c a j‖) • c a j
⊢ ‖c a i - d‖ + ‖d - c a j‖ ≤ ‖c a i - d‖ + (r a j - 1)
[PROOFSTEP]
apply add_le_add_left
[GOAL]
case bc
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
A : r a j - δ ≤ ‖c a i - c a j‖
d : E := (2 / ‖c a j‖) • c a j
hd : d = (2 / ‖c a j‖) • c a j
⊢ ‖d - c a j‖ ≤ r a j - 1
[PROOFSTEP]
have A : 0 ≤ 1 - 2 / ‖a.c j‖ := by simpa [div_le_iff (zero_le_two.trans_lt hj)] using hj.le
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
A : r a j - δ ≤ ‖c a i - c a j‖
d : E := (2 / ‖c a j‖) • c a j
hd : d = (2 / ‖c a j‖) • c a j
⊢ 0 ≤ 1 - 2 / ‖c a j‖
[PROOFSTEP]
simpa [div_le_iff (zero_le_two.trans_lt hj)] using hj.le
[GOAL]
case bc
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
A✝ : r a j - δ ≤ ‖c a i - c a j‖
d : E := (2 / ‖c a j‖) • c a j
hd : d = (2 / ‖c a j‖) • c a j
A : 0 ≤ 1 - 2 / ‖c a j‖
⊢ ‖d - c a j‖ ≤ r a j - 1
[PROOFSTEP]
rw [← one_smul ℝ (a.c j), hd, ← sub_smul, norm_smul, norm_sub_rev, Real.norm_eq_abs, abs_of_nonneg A, sub_mul]
[GOAL]
case bc
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
A✝ : r a j - δ ≤ ‖c a i - c a j‖
d : E := (2 / ‖c a j‖) • c a j
hd : d = (2 / ‖c a j‖) • c a j
A : 0 ≤ 1 - 2 / ‖c a j‖
⊢ 1 * ‖c a j‖ - 2 / ‖c a j‖ * ‖c a j‖ ≤ r a j - 1
[PROOFSTEP]
field_simp [(zero_le_two.trans_lt hj).ne']
[GOAL]
case bc
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
A✝ : r a j - δ ≤ ‖c a i - c a j‖
d : E := (2 / ‖c a j‖) • c a j
hd : d = (2 / ‖c a j‖) • c a j
A : 0 ≤ 1 - 2 / ‖c a j‖
⊢ ‖c a j‖ ≤ r a j - 1 + 2
[PROOFSTEP]
linarith only [hcrj]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : ‖c a i‖ ≤ 2
hj : 2 < ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
D : 0 ≤ 1 - δ / 4
τpos : 0 < τ
hcrj : ‖c a j‖ ≤ r a j + 1
I : r a i ≤ 2
J : (1 - δ / 4) * τ ≤ 1
A : r a j - δ ≤ ‖c a i - c a j‖
d : E := (2 / ‖c a j‖) • c a j
hd : d = (2 / ‖c a j‖) • c a j
this : r a j - δ ≤ ‖c a i - d‖ + (r a j - 1)
⊢ 1 - δ ≤ ‖c a i - d‖
[PROOFSTEP]
linarith only [this]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
⊢ 1 - δ ≤ ‖(2 / ‖c a i‖) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have ah : ∀ i j, i ≠ j → a.r i ≤ ‖a.c i - a.c j‖ ∧ a.r j ≤ τ * a.r i ∨ a.r j ≤ ‖a.c j - a.c i‖ ∧ a.r i ≤ τ * a.r j := by
  simpa only [dist_eq_norm] using a.h
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
⊢ ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
[PROOFSTEP]
simpa only [dist_eq_norm] using a.h
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ 1 - δ ≤ ‖(2 / ‖c a i‖) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have δnonneg : 0 ≤ δ := by linarith only [hτ, hδ1]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ 0 ≤ δ
[PROOFSTEP]
linarith only [hτ, hδ1]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
⊢ 1 - δ ≤ ‖(2 / ‖c a i‖) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have hcrj : ‖a.c j‖ ≤ a.r j + 1 := by simpa only [lastc, lastr, dist_zero_right] using a.inter' j
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
⊢ ‖c a j‖ ≤ r a j + 1
[PROOFSTEP]
simpa only [lastc, lastr, dist_zero_right] using a.inter' j
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
⊢ 1 - δ ≤ ‖(2 / ‖c a i‖) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have A : a.r i ≤ ‖a.c i‖ :=
  by
  have : i < last N := by
    apply lt_top_iff_ne_top.2
    intro iN
    change i = last N at iN
    rw [iN, lastc, norm_zero] at hi
    exact lt_irrefl _ (zero_le_two.trans_lt hi)
  convert (a.hlast i this).1 using 1
  rw [dist_eq_norm, lastc, sub_zero]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
⊢ r a i ≤ ‖c a i‖
[PROOFSTEP]
have : i < last N := by
  apply lt_top_iff_ne_top.2
  intro iN
  change i = last N at iN
  rw [iN, lastc, norm_zero] at hi
  exact lt_irrefl _ (zero_le_two.trans_lt hi)
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
⊢ i < last N
[PROOFSTEP]
apply lt_top_iff_ne_top.2
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
⊢ i ≠ ⊤
[PROOFSTEP]
intro iN
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
iN : i = ⊤
⊢ False
[PROOFSTEP]
change i = last N at iN
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
iN : i = last N
⊢ False
[PROOFSTEP]
rw [iN, lastc, norm_zero] at hi
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < 0
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
iN : i = last N
⊢ False
[PROOFSTEP]
exact lt_irrefl _ (zero_le_two.trans_lt hi)
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
this : i < last N
⊢ r a i ≤ ‖c a i‖
[PROOFSTEP]
convert (a.hlast i this).1 using 1
[GOAL]
case h.e'_4
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
this : i < last N
⊢ ‖c a i‖ = dist (c a i) (c a (last N))
[PROOFSTEP]
rw [dist_eq_norm, lastc, sub_zero]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
A : r a i ≤ ‖c a i‖
⊢ 1 - δ ≤ ‖(2 / ‖c a i‖) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have hj : 2 < ‖a.c j‖ := hi.trans_le hij
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
hi : 2 < ‖c a i‖
hij : ‖c a i‖ ≤ ‖c a j‖
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
A : r a i ≤ ‖c a i‖
hj : 2 < ‖c a j‖
⊢ 1 - δ ≤ ‖(2 / ‖c a i‖) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
set s := ‖a.c i‖
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
⊢ 1 - δ ≤ ‖(2 / s) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have spos : 0 < s := zero_lt_two.trans hi
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
⊢ 1 - δ ≤ ‖(2 / s) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
set d := (s / ‖a.c j‖) • a.c j with hd
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
⊢ 1 - δ ≤ ‖(2 / s) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have I : ‖a.c j - a.c i‖ ≤ ‖a.c j‖ - s + ‖d - a.c i‖ :=
  calc
    ‖a.c j - a.c i‖ ≤ ‖a.c j - d‖ + ‖d - a.c i‖ := by simp [← dist_eq_norm, dist_triangle]
    _ = ‖a.c j‖ - ‖a.c i‖ + ‖d - a.c i‖ := by
      nth_rw 1 [← one_smul ℝ (a.c j)]
      rw [add_left_inj, hd, ← sub_smul, norm_smul, Real.norm_eq_abs, abs_of_nonneg, sub_mul, one_mul,
        div_mul_cancel _ (zero_le_two.trans_lt hj).ne']
      rwa [sub_nonneg, div_le_iff (zero_lt_two.trans hj), one_mul]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
⊢ ‖c a j - c a i‖ ≤ ‖c a j - d‖ + ‖d - c a i‖
[PROOFSTEP]
simp [← dist_eq_norm, dist_triangle]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
⊢ ‖c a j - d‖ + ‖d - c a i‖ = ‖c a j‖ - ‖c a i‖ + ‖d - c a i‖
[PROOFSTEP]
nth_rw 1 [← one_smul ℝ (a.c j)]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
⊢ ‖1 • c a j - d‖ + ‖d - c a i‖ = ‖c a j‖ - ‖c a i‖ + ‖d - c a i‖
[PROOFSTEP]
rw [add_left_inj, hd, ← sub_smul, norm_smul, Real.norm_eq_abs, abs_of_nonneg, sub_mul, one_mul,
  div_mul_cancel _ (zero_le_two.trans_lt hj).ne']
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
⊢ 0 ≤ 1 - s / ‖c a j‖
[PROOFSTEP]
rwa [sub_nonneg, div_le_iff (zero_lt_two.trans hj), one_mul]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
⊢ 1 - δ ≤ ‖(2 / s) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have J : a.r j - ‖a.c j - a.c i‖ ≤ s / 2 * δ :=
  calc
    a.r j - ‖a.c j - a.c i‖ ≤ s * (τ - 1) :=
      by
      rcases ah j i inej.symm with (H | H)
      ·
        calc
          a.r j - ‖a.c j - a.c i‖ ≤ 0 := sub_nonpos.2 H.1
          _ ≤ s * (τ - 1) := mul_nonneg spos.le (sub_nonneg.2 hτ)
      · rw [norm_sub_rev] at H
        calc
          a.r j - ‖a.c j - a.c i‖ ≤ τ * a.r i - a.r i := sub_le_sub H.2 H.1
          _ = a.r i * (τ - 1) := by ring
          _ ≤ s * (τ - 1) := mul_le_mul_of_nonneg_right A (sub_nonneg.2 hτ)
    _ ≤ s * (δ / 2) := (mul_le_mul_of_nonneg_left (by linarith only [δnonneg, hδ1]) spos.le)
    _ = s / 2 * δ := by ring
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
⊢ r a j - ‖c a j - c a i‖ ≤ s * (τ - 1)
[PROOFSTEP]
rcases ah j i inej.symm with (H | H)
[GOAL]
case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
H : r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
⊢ r a j - ‖c a j - c a i‖ ≤ s * (τ - 1)
[PROOFSTEP]
calc
  a.r j - ‖a.c j - a.c i‖ ≤ 0 := sub_nonpos.2 H.1
  _ ≤ s * (τ - 1) := mul_nonneg spos.le (sub_nonneg.2 hτ)
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
H : r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i
⊢ r a j - ‖c a j - c a i‖ ≤ s * (τ - 1)
[PROOFSTEP]
rw [norm_sub_rev] at H
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
H : r a i ≤ ‖c a j - c a i‖ ∧ r a j ≤ τ * r a i
⊢ r a j - ‖c a j - c a i‖ ≤ s * (τ - 1)
[PROOFSTEP]
calc
  a.r j - ‖a.c j - a.c i‖ ≤ τ * a.r i - a.r i := sub_le_sub H.2 H.1
  _ = a.r i * (τ - 1) := by ring
  _ ≤ s * (τ - 1) := mul_le_mul_of_nonneg_right A (sub_nonneg.2 hτ)
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
H : r a i ≤ ‖c a j - c a i‖ ∧ r a j ≤ τ * r a i
⊢ τ * r a i - r a i = r a i * (τ - 1)
[PROOFSTEP]
ring
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
⊢ τ - 1 ≤ δ / 2
[PROOFSTEP]
linarith only [δnonneg, hδ1]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
⊢ s * (δ / 2) = s / 2 * δ
[PROOFSTEP]
ring
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
⊢ 1 - δ ≤ ‖(2 / s) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
have invs_nonneg : 0 ≤ 2 / s := div_nonneg zero_le_two (zero_le_two.trans hi.le)
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
invs_nonneg : 0 ≤ 2 / s
⊢ 1 - δ ≤ ‖(2 / s) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
calc
  1 - δ = 2 / s * (s / 2 - s / 2 * δ) := by field_simp [spos.ne']; ring
  _ ≤ 2 / s * ‖d - a.c i‖ := (mul_le_mul_of_nonneg_left (by linarith only [hcrj, I, J, hi]) invs_nonneg)
  _ = ‖(2 / s) • a.c i - (2 / ‖a.c j‖) • a.c j‖ :=
    by
    conv_lhs => rw [norm_sub_rev, ← abs_of_nonneg invs_nonneg]
    rw [← Real.norm_eq_abs, ← norm_smul, smul_sub, hd, smul_smul]
    congr 3
    field_simp [spos.ne']
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
invs_nonneg : 0 ≤ 2 / s
⊢ 1 - δ = 2 / s * (s / 2 - s / 2 * δ)
[PROOFSTEP]
field_simp [spos.ne']
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
invs_nonneg : 0 ≤ 2 / s
⊢ (1 - δ) * (‖c a i‖ * 2) = 2 * (‖c a i‖ - ‖c a i‖ * δ)
[PROOFSTEP]
ring
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
invs_nonneg : 0 ≤ 2 / s
⊢ s / 2 - s / 2 * δ ≤ ‖d - c a i‖
[PROOFSTEP]
linarith only [hcrj, I, J, hi]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
invs_nonneg : 0 ≤ 2 / s
⊢ 2 / s * ‖d - c a i‖ = ‖(2 / s) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
conv_lhs => rw [norm_sub_rev, ← abs_of_nonneg invs_nonneg]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
invs_nonneg : 0 ≤ 2 / s
| 2 / s * ‖d - c a i‖
[PROOFSTEP]
rw [norm_sub_rev, ← abs_of_nonneg invs_nonneg]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
invs_nonneg : 0 ≤ 2 / s
| 2 / s * ‖d - c a i‖
[PROOFSTEP]
rw [norm_sub_rev, ← abs_of_nonneg invs_nonneg]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
invs_nonneg : 0 ≤ 2 / s
| 2 / s * ‖d - c a i‖
[PROOFSTEP]
rw [norm_sub_rev, ← abs_of_nonneg invs_nonneg]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
invs_nonneg : 0 ≤ 2 / s
⊢ |2 / s| * ‖c a i - d‖ = ‖(2 / s) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
rw [← Real.norm_eq_abs, ← norm_smul, smul_sub, hd, smul_smul]
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
invs_nonneg : 0 ≤ 2 / s
⊢ ‖(2 / s) • c a i - (2 / s * (s / ‖c a j‖)) • c a j‖ = ‖(2 / s) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
congr 3
[GOAL]
case e_a.e_a.e_a
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
i j : Fin (Nat.succ N)
inej : i ≠ j
ah :
  ∀ (i j : Fin (Nat.succ N)),
    i ≠ j → r a i ≤ ‖c a i - c a j‖ ∧ r a j ≤ τ * r a i ∨ r a j ≤ ‖c a j - c a i‖ ∧ r a i ≤ τ * r a j
δnonneg : 0 ≤ δ
hcrj : ‖c a j‖ ≤ r a j + 1
hj : 2 < ‖c a j‖
s : ℝ := ‖c a i‖
hi : 2 < s
hij : s ≤ ‖c a j‖
A : r a i ≤ s
spos : 0 < s
d : E := (s / ‖c a j‖) • c a j
hd : d = (s / ‖c a j‖) • c a j
I : ‖c a j - c a i‖ ≤ ‖c a j‖ - s + ‖d - c a i‖
J : r a j - ‖c a j - c a i‖ ≤ s / 2 * δ
invs_nonneg : 0 ≤ 2 / s
⊢ 2 / s * (s / ‖c a j‖) = 2 / ‖c a j‖
[PROOFSTEP]
field_simp [spos.ne']
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
⊢ ∃ c', (∀ (n : Fin (Nat.succ N)), ‖c' n‖ ≤ 2) ∧ ∀ (i j : Fin (Nat.succ N)), i ≠ j → 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
let c' : Fin N.succ → E := fun i => if ‖a.c i‖ ≤ 2 then a.c i else (2 / ‖a.c i‖) • a.c i
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
⊢ ∃ c', (∀ (n : Fin (Nat.succ N)), ‖c' n‖ ≤ 2) ∧ ∀ (i j : Fin (Nat.succ N)), i ≠ j → 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
have norm_c'_le : ∀ i, ‖c' i‖ ≤ 2 := by
  intro i
  simp only
  split_ifs with h; · exact h
  by_cases hi : ‖a.c i‖ = 0 <;> field_simp [norm_smul, hi]; norm_num
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
⊢ ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
[PROOFSTEP]
intro i
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
i : Fin (Nat.succ N)
⊢ ‖c' i‖ ≤ 2
[PROOFSTEP]
simp only
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
i : Fin (Nat.succ N)
⊢ ‖if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i‖ ≤ 2
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
i : Fin (Nat.succ N)
h : ‖c a i‖ ≤ 2
⊢ ‖c a i‖ ≤ 2
[PROOFSTEP]
exact h
[GOAL]
case neg
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
i : Fin (Nat.succ N)
h : ¬‖c a i‖ ≤ 2
⊢ ‖(2 / ‖c a i‖) • c a i‖ ≤ 2
[PROOFSTEP]
by_cases hi : ‖a.c i‖ = 0
[GOAL]
case pos
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
i : Fin (Nat.succ N)
h : ¬‖c a i‖ ≤ 2
hi : ‖c a i‖ = 0
⊢ ‖(2 / ‖c a i‖) • c a i‖ ≤ 2
[PROOFSTEP]
field_simp [norm_smul, hi]
[GOAL]
case neg
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
i : Fin (Nat.succ N)
h : ¬‖c a i‖ ≤ 2
hi : ¬‖c a i‖ = 0
⊢ ‖(2 / ‖c a i‖) • c a i‖ ≤ 2
[PROOFSTEP]
field_simp [norm_smul, hi]
[GOAL]
case pos
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
i : Fin (Nat.succ N)
h : ¬‖c a i‖ ≤ 2
hi : ‖c a i‖ = 0
⊢ 0 ≤ 2
[PROOFSTEP]
norm_num
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
⊢ ∃ c', (∀ (n : Fin (Nat.succ N)), ‖c' n‖ ≤ 2) ∧ ∀ (i j : Fin (Nat.succ N)), i ≠ j → 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
refine'
  ⟨c', fun n => norm_c'_le n, fun i j inej => _⟩
    -- up to exchanging `i` and `j`, one can assume `‖c i‖ ≤ ‖c j‖`.
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
⊢ 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
wlog hij : ‖a.c i‖ ≤ ‖a.c j‖ generalizing i j
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
this : ∀ (i j : Fin (Nat.succ N)), i ≠ j → ‖c a i‖ ≤ ‖c a j‖ → 1 - δ ≤ ‖c' i - c' j‖
hij : ¬‖c a i‖ ≤ ‖c a j‖
⊢ 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
rw [norm_sub_rev]
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
this : ∀ (i j : Fin (Nat.succ N)), i ≠ j → ‖c a i‖ ≤ ‖c a j‖ → 1 - δ ≤ ‖c' i - c' j‖
hij : ¬‖c a i‖ ≤ ‖c a j‖
⊢ 1 - δ ≤ ‖c' j - c' i‖
[PROOFSTEP]
exact this j i inej.symm (le_of_not_le hij)
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
⊢ 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
rcases le_or_lt ‖a.c j‖ 2 with
  (Hj | Hj)
    -- case `‖c j‖ ≤ 2` (and therefore also `‖c i‖ ≤ 2`)
[GOAL]
case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
Hj : ‖c a j‖ ≤ 2
⊢ 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
simp_rw [Hj, hij.trans Hj, if_true]
[GOAL]
case inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
Hj : ‖c a j‖ ≤ 2
⊢ 1 - δ ≤ ‖c a i - c a j‖
[PROOFSTEP]
exact exists_normalized_aux1 a lastr hτ δ hδ1 hδ2 i j inej
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
Hj : 2 < ‖c a j‖
⊢ 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
have H'j : ‖a.c j‖ ≤ 2 ↔ False := by simpa only [not_le, iff_false_iff] using Hj
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
Hj : 2 < ‖c a j‖
⊢ ‖c a j‖ ≤ 2 ↔ False
[PROOFSTEP]
simpa only [not_le, iff_false_iff] using Hj
[GOAL]
case inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
Hj : 2 < ‖c a j‖
H'j : ‖c a j‖ ≤ 2 ↔ False
⊢ 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
rcases le_or_lt ‖a.c i‖ 2 with (Hi | Hi)
[GOAL]
case inr.inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
Hj : 2 < ‖c a j‖
H'j : ‖c a j‖ ≤ 2 ↔ False
Hi : ‖c a i‖ ≤ 2
⊢ 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
simp_rw [Hi, if_true, H'j, if_false]
[GOAL]
case inr.inl
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
Hj : 2 < ‖c a j‖
H'j : ‖c a j‖ ≤ 2 ↔ False
Hi : ‖c a i‖ ≤ 2
⊢ 1 - δ ≤ ‖c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
exact exists_normalized_aux2 a lastc lastr hτ δ hδ1 hδ2 i j inej Hi Hj
[GOAL]
case inr.inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
Hj : 2 < ‖c a j‖
H'j : ‖c a j‖ ≤ 2 ↔ False
Hi : 2 < ‖c a i‖
⊢ 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
have H'i : ‖a.c i‖ ≤ 2 ↔ False := by simpa only [not_le, iff_false_iff] using Hi
[GOAL]
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
Hj : 2 < ‖c a j‖
H'j : ‖c a j‖ ≤ 2 ↔ False
Hi : 2 < ‖c a i‖
⊢ ‖c a i‖ ≤ 2 ↔ False
[PROOFSTEP]
simpa only [not_le, iff_false_iff] using Hi
[GOAL]
case inr.inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
Hj : 2 < ‖c a j‖
H'j : ‖c a j‖ ≤ 2 ↔ False
Hi : 2 < ‖c a i‖
H'i : ‖c a i‖ ≤ 2 ↔ False
⊢ 1 - δ ≤ ‖c' i - c' j‖
[PROOFSTEP]
simp_rw [H'i, if_false, H'j, if_false]
[GOAL]
case inr.inr
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℝ E
N : ℕ
τ : ℝ
a : SatelliteConfig E N τ
lastc : c a (last N) = 0
lastr : r a (last N) = 1
hτ : 1 ≤ τ
δ : ℝ
hδ1 : τ ≤ 1 + δ / 4
hδ2 : δ ≤ 1
c' : Fin (Nat.succ N) → E := fun i => if ‖c a i‖ ≤ 2 then c a i else (2 / ‖c a i‖) • c a i
norm_c'_le : ∀ (i : Fin (Nat.succ N)), ‖c' i‖ ≤ 2
i j : Fin (Nat.succ N)
inej : i ≠ j
hij : ‖c a i‖ ≤ ‖c a j‖
Hj : 2 < ‖c a j‖
H'j : ‖c a j‖ ≤ 2 ↔ False
Hi : 2 < ‖c a i‖
H'i : ‖c a i‖ ≤ 2 ↔ False
⊢ 1 - δ ≤ ‖(2 / ‖c a i‖) • c a i - (2 / ‖c a j‖) • c a j‖
[PROOFSTEP]
exact exists_normalized_aux3 a lastc lastr hτ δ hδ1 i j inej Hi hij
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
⊢ SatelliteConfig E (multiplicity E) (goodτ E) → False
[PROOFSTEP]
intro a
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
a : SatelliteConfig E (multiplicity E) (goodτ E)
⊢ False
[PROOFSTEP]
let b := a.centerAndRescale
[GOAL]
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
a : SatelliteConfig E (multiplicity E) (goodτ E)
b : SatelliteConfig E (multiplicity E) (goodτ E) := SatelliteConfig.centerAndRescale a
⊢ False
[PROOFSTEP]
rcases b.exists_normalized a.centerAndRescale_center a.centerAndRescale_radius (one_lt_goodτ E).le (goodδ E) le_rfl
    (goodδ_lt_one E).le with
  ⟨c', c'_le_two, hc'⟩
[GOAL]
case intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : FiniteDimensional ℝ E
a : SatelliteConfig E (multiplicity E) (goodτ E)
b : SatelliteConfig E (multiplicity E) (goodτ E) := SatelliteConfig.centerAndRescale a
c' : Fin (Nat.succ (multiplicity E)) → E
c'_le_two : ∀ (n : Fin (Nat.succ (multiplicity E))), ‖c' n‖ ≤ 2
hc' : ∀ (i j : Fin (Nat.succ (multiplicity E))), i ≠ j → 1 - goodδ E ≤ ‖c' i - c' j‖
⊢ False
[PROOFSTEP]
exact lt_irrefl _ ((Nat.lt_succ_self _).trans_le (le_multiplicity_of_δ_of_fin c' c'_le_two hc'))