1
1
import Mathlib.Algebra.BigOperators.Group.Multiset.Defs
2
+ import PFR.Mathlib.Data.Fin.Basic
2
3
import PFR.MultiTauFunctional
3
4
4
5
@@ -17,13 +18,6 @@ universe u
17
18
open MeasureTheory ProbabilityTheory
18
19
19
20
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`
27
21
28
22
lemma multiDist_of_cast {m m' : ℕ} (h : m' = m) {Ω : Fin m → Type *}
29
23
(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
161
155
+ (H[S i j] - H[S i (j+one)]) / 2 := by
162
156
sorry
163
157
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
+
164
177
have h5 (i: Fin p.m) :
165
178
∑ j ∈ .Iio last, d[ X' (i,j) # X' (i,j) | S i j ]
166
179
≤ ∑ j ∈ .Iio last, d[ X' (i,j) # X' (i,j) ] + (H[V i] - H[X' (i, last)]) / 2 := calc
167
180
_ ≤ ∑ j ∈ .Iio last, (d[ X' (i,j) # X' (i,j) ] + (H[S i j] - H[S i (j+one)]) / 2 ) := by
168
181
apply Finset.sum_le_sum; intro j hj; exact h4 i hj
169
182
_ = _ := by
170
183
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
188
185
189
186
have h6 (i: Fin p.m) :
190
187
d[ X' (i, last) # V i ] ≤ d[ X' (i, last) # X' (i, last) ]
191
188
+ (H[V i] - H[X' (i, last)]) / 2 := by
192
189
sorry
193
190
194
191
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
196
222
197
223
have h8 (i: Fin p.m) : H[V i] ≤ H[ ∑ j, X j] + ∑ j, d[X' (i,j) # X' (i,j)] := by
198
224
sorry
0 commit comments