Skip to main content
teorth/PFR
Source indexedlemma · leanprover/lean4:v4.33.0-rc1

sum_dist_diff_le

PFR.Endgame · PFR/Endgame.lean:210 to 308

Source documentation

i=12A{U,V,W}(d[Xi0;AS]d[Xi0;Xi]) \sum_{i=1}^2 \sum_{A\in\{U,V,W\}} \big(d[X^0_i;A|S] - d[X^0_i;X_i]\big) is less than or equal to (63η)k+3(2ηkI1). \leq (6 - 3\eta) k + 3(2 \eta k - I_1).

Exact Lean statement

lemma sum_dist_diff_le [IsProbabilityMeasure (ℙ : Measure Ω)] [Module (ZMod 2) G] :
    c[U|S # U|S] + c[V|S # V|S] + c[W|S # W|S] ≤ (6 - 3 * p.η)*k + 3 * (2*p.η*k - I₁)

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma sum_dist_diff_le [IsProbabilityMeasure (ℙ : Measure Ω)] [Module (ZMod 2) G] :    c[U|S # U|S] + c[V|S # V|S] + c[W|S # W|S]  (6 - 3 * p.η)*k + 3 * (2*p.η*k - I₁) := by  let X₀₁ := p.X₀₁  let X₀₂ := p.X₀₂  have ineq1 : d[X₀₁ # U | S] - d[X₀₁ # X₁]  (H[S ; ℙ] - H[X₁ ; ℙ])/2 := by    have aux1 : H[S] + H[U] - H[X₁] - H[X₁' + X₂'] = H[S] - H[X₁] := by      rw [hU X₁ X₂ X₁' X₂' h₁ h₂ h_indep]; ring    have aux2 : d[X₀₁ # U | U + (X₁' + X₂')] - d[X₀₁ # X₁]             (H[U + (X₁' + X₂')] + H[U] - H[X₁] - H[X₁' + X₂']) / 2 :=      condRuzsaDist_diff_ofsum_le ℙ (hX := p.hmeas1) (hY := hX₁) (hZ := hX₂)      (Measurable.add hX₁' hX₂') (independenceCondition1 hX₁ hX₂ hX₁' hX₂' h_indep)    rw [ add_assoc, aux1] at aux2    linarith [aux2]  have ineq2 : d[X₀₂ # U | S] - d[X₀₂ # X₂]  (H[S ; ℙ] - H[X₂ ; ℙ])/2 := by    have aux1 : H[S] + H[U] - H[X₂] - H[X₁' + X₂'] = H[S] - H[X₂] := by      rw [hU X₁ X₂ X₁' X₂' h₁ h₂ h_indep] ; ring    have aux2 : d[X₀₂ # U | U + (X₁' + X₂')] - d[X₀₂ # X₂]             (H[U + (X₁' + X₂')] + H[U] - H[X₂] - H[X₁' + X₂']) / 2 := by      rw [(show U = X₂ + X₁ from add_comm _ _)]      apply condRuzsaDist_diff_ofsum_le ℙ (p.hmeas2) (hX₂) (hX₁)        (Measurable.add hX₁' hX₂') (independenceCondition2 hX₁ hX₂ hX₁' hX₂' h_indep)    rw [ add_assoc, aux1] at aux2    linarith [aux2]  have V_add_eq : V + (X₁ + X₂') = S := by abel  have ineq3 : d[X₀₁ # V | S] - d[X₀₁ # X₁]  (H[S ; ℙ] - H[X₁ ; ℙ])/2 := by    have aux2 : d[p.X₀₁ # V | V + (X₁ + X₂')] - d[p.X₀₁ # X₁']             (H[V + (X₁ + X₂')] + H[V] - H[X₁'] - H[X₁ + X₂']) / 2 :=      condRuzsaDist_diff_ofsum_le ℙ (p.hmeas1) (hX₁') (hX₂) (Measurable.add hX₁ hX₂')      (independenceCondition3 hX₁ hX₂ hX₁' hX₂' h_indep)    have aux1 : H[S] + H[V] - H[X₁'] - H[X₁ + X₂'] = H[S ; ℙ] - H[X₁ ; ℙ] := by      rw [hV X₁ X₂ X₁' X₂' h₁ h₂ h_indep, h₁.entropy_congr]; ring    rw [ h₁.rdist_congr_right p.hmeas1.aemeasurable, V_add_eq, aux1] at aux2    linarith [aux2]  have ineq4 : d[X₀₂ # V | S] - d[X₀₂ # X₂]  (H[S ; ℙ] - H[X₂ ; ℙ])/2 := by    have aux2 : d[p.X₀₂ # V | V + (X₁ + X₂')] - d[p.X₀₂ # X₂]             (H[V + (X₁ + X₂')] + H[V] - H[X₂] - H[X₁ + X₂']) / 2 := by      rw [(show V = X₂ + X₁' from add_comm _ _)]      apply condRuzsaDist_diff_ofsum_le ℙ (p.hmeas2) (hX₂) (hX₁') (Measurable.add hX₁ hX₂')        (independenceCondition4 hX₁ hX₂ hX₁' hX₂' h_indep)    have aux1 : H[S] + H[V] - H[X₂] - H[X₁ + X₂'] = H[S ; ℙ] - H[X₂ ; ℙ] := by      rw [hV X₁ X₂ X₁' X₂' h₁ h₂ h_indep]; ring    rw [V_add_eq, aux1] at aux2    linarith [aux2]  let W' := X₂ + X₂'  have ineq5 : d[X₀₁ # W | S] - d[X₀₁ # X₁]  (H[S ; ℙ] + H[W ; ℙ] - H[X₁ ; ℙ] - H[W' ; ℙ])/2 := by    have := condRuzsaDist_diff_ofsum_le ℙ p.hmeas1 hX₁ hX₁' (Measurable.add hX₂ hX₂')      (independenceCondition5 hX₁ hX₂ hX₁' hX₂' h_indep)    grind  have ineq6 : d[X₀₂ # W' | S] - d[X₀₂ # X₂]  (H[S ; ℙ] + H[W' ; ℙ] - H[X₂ ; ℙ] - H[W ; ℙ])/2 := by    have := condRuzsaDist_diff_ofsum_le ℙ p.hmeas2 hX₂ hX₂' (Measurable.add hX₁' hX₁)      (independenceCondition6 hX₁ hX₂ hX₁' hX₂' h_indep)    grind  have dist_eq : d[X₀₂ # W' | S] = d[X₀₂ # W | S] := by    have S_eq : S = (X₂ + X₂') + (X₁' + X₁) := by      rw [add_comm X₁' X₁, add_assoc _ X₂', add_comm X₂',  add_assoc X₂,  add_assoc X₂,        add_comm X₂]    rw [S_eq]    apply condRuzsaDist'_of_inj_map' p.hmeas2 (hX₂.add hX₂') (hX₁'.add hX₁)  -- Put everything together to bound the sum of the `c` terms  have ineq7 : c[U|S # U|S] + c[V|S # V|S] + c[W|S # W|S]     3 * H[S ; ℙ] - 3/2 * H[X₁ ; ℙ] -3/2 * H[X₂ ; ℙ] := by    have step₁ : c[U|S # U|S]  H[S ; ℙ] - (H[X₁ ; ℙ] + H[X₂ ; ℙ])/2 :=      calc        _ = (d[p.X₀₁ # U|S] - d[p.X₀₁ # X₁]) + (d[p.X₀₂ # U|S] - d[p.X₀₂ # X₂]) := by ring        _  (H[S ; ℙ] - H[X₁ ; ℙ])/2 + (H[S ; ℙ] - H[X₂ ; ℙ])/2 := add_le_add ineq1 ineq2        _ = H[S ; ℙ] - (H[X₁ ; ℙ] + H[X₂ ; ℙ])/2 := by ring    have step₂ : c[V|S # V|S]  H[S ; ℙ] - (H[X₁ ; ℙ] + H[X₂ ; ℙ])/2 :=      calc  c[V|S # V|S]        _ = d[p.X₀₁ # V|S] - d[p.X₀₁ # X₁] + (d[p.X₀₂ # V|S] - d[p.X₀₂ # X₂]) := by ring        _  (H[S ; ℙ] - H[X₁ ; ℙ])/2 + (H[S ; ℙ] - H[X₂ ; ℙ])/2 := add_le_add ineq3 ineq4        _ = H[S ; ℙ] - (H[X₁ ; ℙ] + H[X₂ ; ℙ])/2 := by ring    have step₃ : c[W|S # W|S]  H[S ; ℙ] - (H[X₁ ; ℙ] + H[X₂ ; ℙ])/2 :=      calc c[W|S # W|S] = (d[X₀₁ # W | S] - d[X₀₁ # X₁]) + (d[X₀₂ # W' | S] - d[X₀₂ # X₂]) :=          by rw [dist_eq]        _  (H[S ; ℙ] + H[W ; ℙ] - H[X₁ ; ℙ] - H[W' ; ℙ])/2          + (H[S ; ℙ] + H[W' ; ℙ] - H[X₂ ; ℙ] - H[W ; ℙ])/2 := add_le_add ineq5 ineq6        _ = H[S ; ℙ] - (H[X₁ ; ℙ] + H[X₂ ; ℙ])/2 := by ring    calc c[U|S # U|S] + c[V|S # V|S] + c[W|S # W|S]  (H[S ; ℙ] - (H[X₁ ; ℙ] + H[X₂ ; ℙ])/2) +      (H[S ; ℙ] - (H[X₁ ; ℙ] + H[X₂ ; ℙ])/2) + (H[S ; ℙ] - (H[X₁ ; ℙ] + H[X₂ ; ℙ])/2) :=        add_le_add (add_le_add step₁ step₂) step₃    _ = 3 * H[S ; ℙ] - 3/2 * H[X₁ ; ℙ] -3/2 * H[X₂ ; ℙ] := by ring  have h_indep' : iIndepFun ![X₁, X₂, X₂', X₁'] := by    refine .of_precomp (Equiv.swap (2 : Fin 4) 3).surjective ?_    convert h_indep using 1    ext x    fin_cases x ; all_goals { aesop }  have ineq8 : 3 * H[S ; ℙ]  3/2 * (H[X₁ ; ℙ] + H[X₂ ; ℙ]) + 3*(2+p.η)*k - 3*I₁ :=    calc 3 * H[S ; ℙ]  3 * (H[X₁ ; ℙ] / 2 + H[X₂ ; ℙ] / 2 + (2+p.η)*k - I₁) := by          gcongr          exact ent_ofsum_le p X₁ X₂ X₁' X₂' hX₁ hX₂ hX₁' hX₂' h₁ h₂ h_indep' h_min      _ = 3/2 * ( H[X₁ ; ℙ] + H[X₂ ; ℙ]) + 3*(2+p.η)*k - 3*I₁ := by ring  -- Final computation  calc        c[U|S # U|S] + c[V|S # V|S] + c[W|S # W|S]    _  3 * H[S ; ℙ] - 3/2 * H[X₁ ; ℙ] -3/2 * H[X₂ ; ℙ] := ineq7    _ = 3 * H[S ; ℙ] - (3/2 *(H[X₁ ; ℙ] + H[X₂ ; ℙ])) := by ring    _  (3/2 * ( H[X₁ ; ℙ] + H[X₂ ; ℙ]) + 3*(2+p.η)*k - 3*I₁) - (3/2 *(H[X₁ ; ℙ] + H[X₂ ; ℙ])) :=      sub_le_sub_right ineq8 _    _ = (6 - 3 * p.η)*k + 3 * (2*p.η*k - I₁) := by ring