Skip to content

Commit 305c826

Browse files
committed
Finish h7. 6 more to go!
1 parent ddb6020 commit 305c826

File tree

2 files changed

+59
-25
lines changed

2 files changed

+59
-25
lines changed

PFR/BoundingMutual.lean

Lines changed: 51 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Mathlib.Algebra.BigOperators.Group.Multiset.Defs
2+
import PFR.Mathlib.Data.Fin.Basic
23
import PFR.MultiTauFunctional
34

45

@@ -17,13 +18,6 @@ universe u
1718
open MeasureTheory ProbabilityTheory
1819

1920

20-
/-- For Mathlib -/
21-
theorem Fin.cast_surjective {k l:ℕ} (h: k = l) : Function.Surjective (Fin.cast h) :=
22-
(rightInverse_cast h).surjective -- or `(finCongr h).surjective`
23-
24-
/-- For Mathlib -/
25-
theorem Fin.cast_bijective {k l:ℕ} (h: k = l) : Function.Bijective (Fin.cast h) :=
26-
⟨ cast_injective h, cast_surjective h ⟩ -- or `(finCongr h).bijective`
2721

2822
lemma multiDist_of_cast {m m' : ℕ} (h : m' = m) {Ω : Fin m → Type*}
2923
(hΩ : ∀ i, MeasureSpace (Ω i)) (hΩfin : ∀ i, IsFiniteMeasure (hΩ i).volume)
@@ -161,38 +155,70 @@ lemma mutual_information_le {G Ωₒ : Type u} [MeasureableFinGroup G] [MeasureS
161155
+ (H[S i j] - H[S i (j+one)]) / 2 := by
162156
sorry
163157

158+
have h4a (i: Fin p.m) : ∑ j ∈ Finset.Iio last, (H[S i j] - H[S i (j + one)]) = H[V i] - H[X' (i, last)] := by
159+
convert Finset.sum_range_sub' (fun k ↦ H[∑ j ∈ {j|j.val ≥ k}, X' (i,j)]) (p.m-1)
160+
. have (k:Fin p.m): S i k = ∑ j ∈ {j|j.val ≥ k.val}, X' (i,j) := by
161+
unfold S; congr
162+
ext ⟨ j, hj ⟩; obtain ⟨ k, hk ⟩ := k; simp
163+
simp_rw [this]
164+
convert Finset.sum_nbij (fun i ↦ i.val) (s := Finset.Iio last) _ _ _ _
165+
. intro ⟨ _, _ ⟩; simp [last]
166+
. intro ⟨ _, _⟩ _ ⟨ _, _ ⟩ _; simp
167+
. intro _ hi; simpa [last] using hi
168+
intro ⟨ j, hj ⟩ hj'
169+
simp [last, one] at hj' ⊢
170+
rcongr ⟨ k, hk ⟩
171+
have : (j+1) % p.m = j+1 := Nat.mod_eq_of_lt (by omega)
172+
simp [←Fin.val_fin_le, Fin.val_add, this]
173+
. ext ω; simp [V]
174+
ext ω; simp; symm; convert Finset.sum_singleton _ last
175+
ext ⟨ j, hk ⟩; simp [last]; omega
176+
164177
have h5 (i: Fin p.m) :
165178
∑ j ∈ .Iio last, d[ X' (i,j) # X' (i,j) | S i j ]
166179
≤ ∑ j ∈ .Iio last, d[ X' (i,j) # X' (i,j) ] + (H[V i] - H[X' (i, last)]) / 2 := calc
167180
_ ≤ ∑ j ∈ .Iio last, (d[ X' (i,j) # X' (i,j) ] + (H[S i j] - H[S i (j+one)]) / 2) := by
168181
apply Finset.sum_le_sum; intro j hj; exact h4 i hj
169182
_ = _ := by
170183
rw [Finset.sum_add_distrib, ←Finset.sum_div]; congr
171-
convert Finset.sum_range_sub' (fun k ↦ H[∑ j ∈ {j|j.val ≥ k}, X' (i,j)]) (p.m-1)
172-
. have (k:Fin p.m): S i k = ∑ j ∈ {j|j.val ≥ k.val}, X' (i,j) := by
173-
unfold S; congr
174-
ext ⟨ j, hj ⟩; obtain ⟨ k, hk ⟩ := k; simp
175-
simp_rw [this]
176-
convert Finset.sum_nbij (fun i ↦ i.val) (s := Finset.Iio last) _ _ _ _
177-
. intro ⟨ _, _ ⟩; simp [last]
178-
. intro ⟨ _, _⟩ _ ⟨ _, _ ⟩ _; simp
179-
. intro _ hi; simpa [last] using hi
180-
intro ⟨ j, hj ⟩ hj'
181-
simp [last, one] at hj' ⊢
182-
rcongr ⟨ k, hk ⟩
183-
have : (j+1) % p.m = j+1 := Nat.mod_eq_of_lt (by omega)
184-
simp [←Fin.val_fin_le, Fin.val_add, this]
185-
. ext ω; simp [V]
186-
ext ω; simp; symm; convert Finset.sum_singleton _ last
187-
ext ⟨ j, hk ⟩; simp [last]; omega
184+
exact h4a i
188185

189186
have h6 (i: Fin p.m) :
190187
d[ X' (i, last) # V i ] ≤ d[ X' (i, last) # X' (i, last) ]
191188
+ (H[V i] - H[X' (i, last)]) / 2 := by
192189
sorry
193190

194191
have h7 : I₀/p.η ≤ p.m * k + p.m * ∑ i, d[X i # X i] + ∑ i, H[V i] - ∑ i, H[X i] := by
195-
sorry
192+
rw [div_le_iff₀' hη]
193+
apply h1.trans
194+
calc
195+
_ ≤ ∑ j ∈ .Iio last, (p.η * (k + ∑ i, d[ X' (i,j) # X' (i,j) | S i j ])) + p.η * ∑ i, d[ X' (i, last) # V i ] := by gcongr with j hj; exact h2 hj
196+
_ ≤ p.η * (↑↑last * k + ∑ i, (∑ j ∈ .Iio last, d[ X' (i,j) # X' (i,j) ] + (H[V i] - H[X' (i, last)]) / 2)) +
197+
p.η * ∑ i, (d[ X' (i, last) # X' (i, last) ] + (H[V i] - H[X' (i, last)]) / 2) := by
198+
simp [←Finset.mul_sum, Finset.sum_add_distrib]; rw [Finset.sum_comm]; gcongr
199+
. rw [←Finset.sum_add_distrib]; apply Finset.sum_le_sum; intro i _; exact h5 i
200+
rw [←Finset.sum_add_distrib]; apply Finset.sum_le_sum; intro i _; exact h6 i
201+
_ = p.η * (↑↑last * k + ∑ i, (∑ j ∈ .Iio last, d[ X' (i,j) # X' (i,j) ] + d[ X' (i, last) # X' (i, last) ]) + ∑ i, H[V i] - ∑ i, H[X' (i, last)]) := by
202+
simp_rw [Finset.sum_add_distrib, ←Finset.sum_div, Finset.sum_sub_distrib]; ring
203+
_ = p.η * (↑↑last * k + ∑ j, (∑ i, d[ X' (i,j) # X' (i,j) ]) + ∑ i, H[V i] - ∑ i, H[X' (i, last)]) := by
204+
rw [Finset.sum_comm]
205+
rcongr i
206+
convert Finset.sum_erase_add _ _ _ using 3
207+
. ext ⟨ j, hj ⟩; simp [last]; omega
208+
. infer_instance
209+
simp
210+
_ = p.η * (↑↑last * k + (∑ j:Fin p.m, (∑ i, d[ X i # X i ])) + ∑ i, H[V i] - ∑ i, H[X i]) := by
211+
congr 2
212+
. congr; ext j; obtain ⟨ e, he ⟩ := hperm j
213+
convert Equiv.sum_comp e _ with i _
214+
apply IdentDistrib.rdist_congr <;> exact IdentDistrib.comp (u := fun x ↦ x i) he (by fun_prop)
215+
obtain ⟨ e, he ⟩ := hperm last
216+
convert Equiv.sum_comp e _ with i _
217+
apply IdentDistrib.entropy_congr <;> exact IdentDistrib.comp (u := fun x ↦ x i) he (by fun_prop)
218+
_ ≤ _ := by
219+
simp [last]; gcongr
220+
. apply multiDist_nonneg _ inferInstance _ (by fun_prop)
221+
omega
196222

197223
have h8 (i: Fin p.m) : H[V i] ≤ H[ ∑ j, X j] + ∑ j, d[X' (i,j) # X' (i,j)] := by
198224
sorry

PFR/Mathlib/Data/Fin/Basic.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import Mathlib.Data.Fin.Basic
2+
3+
theorem Fin.cast_surjective {k l:ℕ} (h: k = l) : Function.Surjective (Fin.cast h) :=
4+
(rightInverse_cast h).surjective -- or `(finCongr h).surjective`
5+
6+
/-- For Mathlib -/
7+
theorem Fin.cast_bijective {k l:ℕ} (h: k = l) : Function.Bijective (Fin.cast h) :=
8+
⟨ cast_injective h, cast_surjective h ⟩ -- or `(finCongr h).bijective`

0 commit comments

Comments
 (0)