Skip to content

Commit eb2cbd0

Browse files
committed
wip
1 parent 7d5074e commit eb2cbd0

1 file changed

Lines changed: 93 additions & 5 deletions

File tree

ArkLib/Data/CodingTheory/JohnsonBound/Lemmas.lean

Lines changed: 93 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,18 @@ private lemma K_eq_sum {α : F} : K B i α = ∑ (x : B), if x.1 i = α then 1 e
5050
private lemma sum_choose_K' [Zero F]
5151
(h_card : 2 ≤ (Fintype.card F))
5252
:
53-
((Finset.univ (α := F)).card - 1 : ℚ)
54-
* choose_2 ((B.card - K B i 0)/((Finset.univ (α := F)).card-1))
55-
≤ ∑ (α : F) with α ≠ 0, choose_2 (K B i α) := by
53+
(Fintype.card (α := F) - 1) * choose_2 ((B.card - K B i 0) / (Fintype.card (α := F) - 1)) ≤
54+
∑ (α : F) with α ≠ 0, choose_2 (K B i α) := by
55+
5656
rw [←sum_K_eq_card (i := i)]
57-
simp
57+
simp
5858
have h_univ : Finset.univ = insert 0 ({x : F | x ≠ 0} : Finset F) := by
5959
ext x
6060
simp
6161
tauto
6262
rw [h_univ, Finset.sum_insert (by simp)]
6363
field_simp
64+
6465
have h : ((∑ x ∈ {x | ¬x = 0}, ↑(K B i x)) : ℚ) / (↑(Fintype.card F) - 1)
6566
= ∑ x ∈ {x : F | ¬x = 0}, ((1 : ℚ)/((Fintype.card F) - 1)) * ↑(K B i x) := by
6667
rw [Finset.sum_div]
@@ -131,6 +132,93 @@ private lemma sum_choose_K' [Zero F]
131132
tauto
132133
rw [h]
133134

135+
private lemma sum_choose_K'' [Zero F]
136+
(h_card : 2 ≤ (Fintype.card F))
137+
:
138+
(Fintype.card (α := F) - 1) * choose_2 ((B.card - K B i 0) / (Fintype.card (α := F) - 1)) ≤
139+
∑ (α : F) with α ≠ 0, choose_2 (K B i α) := by
140+
rw [←sum_K_eq_card (i := i), Nat.cast_sum]
141+
set X₁ : ℚ := Fintype.card F - 1
142+
set X₂ := K B i
143+
suffices X₁ * choose_2 ((∑ x with x ≠ 0, ↑(X₂ x)) / X₁) ≤
144+
∑ α with α ≠ 0, choose_2 ↑(X₂ α) by
145+
convert this
146+
rw [Finset.sum_eq_sum_diff_singleton_add (i := 0) (by simp)]
147+
ring_nf; apply Finset.sum_congr (Finset.ext _) <;> simp
148+
149+
150+
151+
have h : ((∑ x ∈ {x : F | ¬x = 0}, ↑(K B i x)) : ℚ) / (↑(Fintype.card F) - 1)
152+
= ∑ x ∈ {x : F | ¬x = 0}, ((1 : ℚ)/((Fintype.card F) - 1)) * ↑(K B i x) := by
153+
rw [Finset.sum_div]
154+
congr
155+
field_simp
156+
rw [h]
157+
158+
let w : F → ℚ := fun _ => (1 : ℚ) / (↑(Fintype.card F) - 1)
159+
let p : F → ℚ := fun x => K B i x
160+
have h : ∑ x ∈ {x : F | ¬x = 0}, ((1 : ℚ)/((Fintype.card F) - 1)) * ↑(K B i x)
161+
= ∑ x ∈ {x : F | ¬x = 0}, w x • p x := by simp [w, p]
162+
rw [h]
163+
rw [mul_comm]
164+
apply le_trans
165+
rewrite [mul_le_mul_right (by field_simp; linarith)]
166+
apply ConvexOn.map_sum_le choose_2_convex (by {
167+
simp [w]
168+
intro i _
169+
linarith
170+
})
171+
(by {
172+
simp [w]
173+
have h : (Finset.univ (α := F)).card = Fintype.card F := by rfl
174+
conv =>
175+
congr
176+
congr
177+
rfl
178+
rw [←h, h_univ]
179+
rfl
180+
rfl
181+
simp
182+
rw [Field.mul_inv_cancel]
183+
simp
184+
rw [←ne_eq]
185+
rw [←Finset.nonempty_iff_ne_empty]
186+
simp [Finset.Nonempty]
187+
have h_two := (Finset.one_lt_card (s := Finset.univ (α := F))).1 (by omega)
188+
rcases h_two with ⟨a, ha, b, hb, hab⟩
189+
by_cases h_ne_a : a ≠ 0 <;> try tauto
190+
simp at h_ne_a
191+
rw [h_ne_a] at hab
192+
tauto
193+
})
194+
(by simp)
195+
rw [mul_comm]
196+
simp [w, p]
197+
rw [Finset.mul_sum]
198+
conv =>
199+
lhs
200+
congr
201+
rfl
202+
ext α
203+
rw [←mul_assoc]
204+
rw [Field.mul_inv_cancel _ (by {
205+
intro contr
206+
have contr : (↑(Fintype.card F) : ℚ) = 1 := by
207+
rw [←zero_add 1, ←contr]
208+
field_simp
209+
simp at contr
210+
omega
211+
})]
212+
rw [one_mul]
213+
rfl
214+
have h : ({x ∈ insert 0 ({x | ¬x = 0} : Finset F) | ¬x = 0} : Finset F)
215+
= ({ x : F | ¬ x = 0 } : Finset F) :=
216+
by
217+
ext x
218+
simp
219+
tauto
220+
rw [h]
221+
134222
private def sum_choose_K_i (B : Finset (Fin n → F)) (i : Fin n) : ℚ :=
135223
∑ (α : F), choose_2 (K B i α)
136224

@@ -825,7 +913,7 @@ protected lemma johnson_bound_lemma [Field F] {B : Finset (Fin n → F)} {v : Fi
825913
- (1 - ((Fintype.card F : ℚ) / (Fintype.card F - 1)) * (d B/n))) ≤
826914
((Fintype.card F : ℚ) / (Fintype.card F - 1)) * d B/n := by
827915
rw [lin_shift_e (B := B) (by omega)]
828-
rw [lin_shift_d v h_B]
916+
rw [lin_shift_d h_B]
829917
rw [lin_shift_card (B := B) (v := v)]
830918
exact johnson_bound₀ h_n (by {
831919
rw [←lin_shift_card (B := B)]

0 commit comments

Comments
 (0)