Lean source · namespace BFPP
Interleaving.lean
BFPP/Interleaving.lean · 86 lines
1import BFPP.OrdinalPairs23/-! # Affine isometric interleaving of two bounded channels -/45namespace BFPP67set_option autoImplicit false8open Set Order910universe u11variable {κ : Ordinal.{u}} [Fact (IsSuccLimit κ)]1213noncomputable def interleaveValue (a b : BoundedFamily (OrdinalIndex κ)) (i : OrdinalIndex κ) : ℝ := by14 classical15 exact if i.val % 2 = 0 then a (halfIndex κ i) else 4 + b (halfIndex κ i)1617noncomputable def interleave (a b : BoundedFamily (OrdinalIndex κ)) : BoundedFamily (OrdinalIndex κ) :=18 BoundedFamily.ofBound (interleaveValue a b) (‖a‖ + ‖b‖ + 4) (by19 intro i20 classical21 rw [Real.norm_eq_abs]22 dsimp [interleaveValue]23 split_ifs24 · have ha := a.abs_apply_le_norm (halfIndex κ i)25 linarith [norm_nonneg b]26 · calc27 |4 + b (halfIndex κ i)| ≤ |(4 : ℝ)| + |b (halfIndex κ i)| := abs_add_le _ _28 _ ≤ ‖a‖ + ‖b‖ + 4 := by29 have hb := b.abs_apply_le_norm (halfIndex κ i)30 norm_num31 linarith [norm_nonneg a])3233@[simp] theorem interleave_even (a b : BoundedFamily (OrdinalIndex κ)) (i : OrdinalIndex κ) :34 interleave a b (evenIndex κ i) = a i := by35 classical36 simp [interleave, interleaveValue]3738@[simp] theorem interleave_odd (a b : BoundedFamily (OrdinalIndex κ)) (i : OrdinalIndex κ) :39 interleave a b (oddIndex κ i) = 4 + b i := by40 classical41 simp [interleave, interleaveValue]4243theorem interleave_isometry :44 Isometry (fun p : BoundedFamily (OrdinalIndex κ) × BoundedFamily (OrdinalIndex κ) =>45 interleave p.1 p.2) := by46 classical47 apply isometry_iff_dist_eq.mpr48 intro p q49 apply le_antisymm50 · apply (BoundedFamily.dist_le_iff _ _ dist_nonneg).mpr51 intro i52 rcases index_eq_even_or_odd κ i with he | ho53 · rw [he, interleave_even, interleave_even]54 exact (p.1.abs_sub_apply_le_dist q.1 _).trans (le_max_left _ _)55 · rw [ho, interleave_odd, interleave_odd, add_sub_add_left_eq_sub]56 exact (p.2.abs_sub_apply_le_dist q.2 _).trans (le_max_right _ _)57 · apply max_le58 · apply (BoundedFamily.dist_le_iff _ _ dist_nonneg).mpr59 intro i60 rw [← interleave_even p.1 p.2 i, ← interleave_even q.1 q.2 i]61 exact BoundedFamily.abs_sub_apply_le_dist _ _ _62 · apply (BoundedFamily.dist_le_iff _ _ dist_nonneg).mpr63 intro i64 have h := BoundedFamily.abs_sub_apply_le_dist (interleave p.1 p.2) (interleave q.1 q.2)65 (oddIndex κ i)66 simpa only [interleave_odd, add_sub_add_left_eq_sub] using h6768theorem interleave_affine (a b a' b' : BoundedFamily (OrdinalIndex κ))69 (r s : ℝ) (hrs : r + s = 1) :70 interleave (r • a + s • a') (r • b + s • b') =71 r • interleave a b + s • interleave a' b' := by72 classical73 letI : TopologicalSpace (OrdinalIndex κ) := ⊥74 apply BoundedContinuousFunction.ext75 intro i76 rcases index_eq_even_or_odd κ i with he | ho77 · rw [he]78 simp only [BoundedContinuousFunction.add_apply, BoundedContinuousFunction.smul_apply,79 interleave_even]80 · rw [ho]81 simp only [BoundedContinuousFunction.add_apply, BoundedContinuousFunction.smul_apply,82 interleave_odd]83 change 4 + (r * b _ + s * b' _) = r * (4 + b _) + s * (4 + b' _)84 nlinarith [hrs]8586end BFPPSHA-256
2e89cdac6024a90efd538220a2661a3ac9688192100683f4f19a2552e60990df