Theorem: Besicovitch.SatelliteConfig.exists_normalized
File: Mathlib/MeasureTheory/Covering/BesicovitchVectorSpace.lean

tactic: 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
state_before: 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‖

tactic: refine' ⟨c', fun n => norm_c'_le n, fun i j inej => _⟩
state_before: 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‖

tactic: wlog hij : ‖a.c i‖ ≤ ‖a.c j‖ generalizing i j
state_before: 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‖

tactic: rcases le_or_lt ‖a.c j‖ 2 with (Hj | Hj)
state_before: 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‖

tactic: intro i
state_before: 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

tactic: simp only
state_before: 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

tactic: split_ifs with h
state_before: 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

tactic: by_cases hi : ‖a.c i‖ = 0 <;> field_simp [norm_smul, hi]
state_before: 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
i : Fin (Nat.succ N)
h : ¬‖c a i‖ ≤ 2
⊢ ‖(2 / ‖c a i‖) • c a i‖ ≤ 2

tactic: norm_num
state_before: 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

tactic: exact h
state_before: 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
i : Fin (Nat.succ N)
h : ‖c a i‖ ≤ 2
⊢ ‖c a i‖ ≤ 2

tactic: rw [norm_sub_rev]
state_before: 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‖

tactic: exact this j i inej.symm (le_of_not_le hij)
state_before: 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‖

tactic: simp_rw [Hj, hij.trans Hj, if_true]
state_before: 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‖

tactic: exact exists_normalized_aux1 a lastr hτ δ hδ1 hδ2 i j inej
state_before: 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‖

tactic: have H'j : ‖a.c j‖ ≤ 2 ↔ False := by simpa only [not_le, iff_false_iff] using Hj
state_before: 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‖

tactic: rcases le_or_lt ‖a.c i‖ 2 with (Hi | Hi)
state_before: 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‖

tactic: simpa only [not_le, iff_false_iff] using Hj
state_before: 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

tactic: simp_rw [Hi, if_true, H'j, if_false]
state_before: 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‖

tactic: exact exists_normalized_aux2 a lastc lastr hτ δ hδ1 hδ2 i j inej Hi Hj
state_before: 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‖

tactic: have H'i : ‖a.c i‖ ≤ 2 ↔ False := by simpa only [not_le, iff_false_iff] using Hi
state_before: 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‖

tactic: simp_rw [H'i, if_false, H'j, if_false]
state_before: 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‖

tactic: exact exists_normalized_aux3 a lastc lastr hτ δ hδ1 i j inej Hi hij
state_before: 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‖

tactic: simpa only [not_le, iff_false_iff] using Hi
state_before: 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