Skip to content

Commit 31dc860

Browse files
committed
Refactor TS.lean (in progress)
1 parent cbfd74b commit 31dc860

2 files changed

Lines changed: 442 additions & 520 deletions

File tree

‎LeanBandits/Bandit/SumRewards.lean‎

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,132 @@ lemma probReal_sumRewards_le_sumRewards_le [Fintype α] (h : IsAlgEnvSeq A R alg
559559

560560
section Subgaussian
561561

562+
/-! ### Sub-Gaussian concentration (δ-parameterized) -/
563+
564+
private lemma exp_neg_sq_div_eq_delta {σ2 : ℝ≥0} (hσ2 : σ2 ≠ 0)
565+
(k : ℕ) (hk : k ≠ 0) (δ : ℝ) (hδ : 0 < δ) (hδ1 : δ < 1) :
566+
ENNReal.ofReal (Real.exp (-(√(2 * k * ↑σ2 * Real.log (1 / δ)))^2 /
567+
(2 * k * ↑σ2))) = ENNReal.ofReal δ := by
568+
have hk_pos : (0 : ℝ) < k := Nat.cast_pos.mpr (Nat.pos_of_ne_zero hk)
569+
have hσ2_pos : (0 : ℝ) < ↑σ2 := NNReal.coe_pos.mpr (pos_iff_ne_zero.mpr hσ2)
570+
have hlog : 0 < Real.log (1 / δ) :=
571+
Real.log_pos (by rw [one_div]; exact one_lt_inv₀ hδ |>.mpr hδ1)
572+
rw [Real.sq_sqrt (by positivity)]
573+
simp only [neg_div, Real.exp_neg]
574+
rw [show 2 * (k : ℝ) * ↑σ2 * Real.log (1 / δ) / (2 * k * ↑σ2) =
575+
Real.log (1 / δ) from by field_simp [ne_of_gt hσ2_pos, ne_of_gt hk_pos]]
576+
rw [Real.exp_log (by positivity : (0 : ℝ) < 1 / δ), one_div, inv_inv]
577+
578+
omit [DecidableEq α] [StandardBorelSpace α] [Nonempty α] in
579+
/-- Claude: δ-parameterized one-sided concentration for the stream measure. Setting `δ = 1/(n+1)^c`
580+
recovers `todo` and `todo'` (case-split on `c = 0`) -/
581+
lemma streamMeasure_concentration_le_delta {σ2 : ℝ≥0} (hσ2 : σ2 ≠ 0)
582+
(hν : ∀ a, HasSubgaussianMGF (fun x ↦ x - (ν a)[id]) σ2 (ν a))
583+
(a : α) (k : ℕ) (hk : k ≠ 0) (δ : ℝ) (hδ : 0 < δ) (hδ1 : δ < 1) :
584+
streamMeasure ν {ω | (∑ m ∈ range k, ω m a) / k +
585+
√(2 * ↑σ2 * Real.log (1 / δ) / k) ≤ (ν a)[id]} ≤
586+
ENNReal.ofReal δ := by
587+
have hlog : 0 < Real.log (1 / δ) :=
588+
Real.log_pos (by rw [one_div]; exact one_lt_inv₀ hδ |>.mpr hδ1)
589+
calc
590+
streamMeasure ν {ω | (∑ m ∈ range k, ω m a) / k +
591+
√(2 * ↑σ2 * Real.log (1 / δ) / k) ≤ (ν a)[id]}
592+
_ = streamMeasure ν
593+
{ω | (∑ s ∈ range k, (ω s a - (ν a)[id])) / k ≤
594+
-√(2 * ↑σ2 * Real.log (1 / δ) / k)} := by
595+
congr with ω
596+
field_simp
597+
rw [Finset.sum_sub_distrib]
598+
simp
599+
grind
600+
_ = streamMeasure ν
601+
{ω | (∑ s ∈ range k, (ω s a - (ν a)[id])) ≤
602+
-√(2 * k * ↑σ2 * Real.log (1 / δ))} := by
603+
congr with ω
604+
field_simp
605+
congr! 2
606+
rw [Real.sqrt_div (by positivity : 0 ≤ 2 * ↑σ2 * Real.log (1 / δ)),
607+
show ↑k * 2 * ↑σ2 * Real.log (1 / δ) = ↑k * (2 * ↑σ2 * Real.log (1 / δ)) from by ring,
608+
Real.sqrt_mul (by positivity : (0 : ℝ) ≤ ↑k), ← mul_div_assoc,
609+
mul_div_right_comm, Real.div_sqrt]
610+
_ ≤ ENNReal.ofReal (Real.exp (-(√(2 * k * ↑σ2 * Real.log (1 / δ)))^2 /
611+
(2 * k * ↑σ2))) := by
612+
rw [← ofReal_measureReal]
613+
gcongr
614+
refine HasSubgaussianMGF.measure_sum_range_le_le_of_iIndepFun (c := σ2) ?_ ?_
615+
(by positivity)
616+
· exact (iIndepFun_eval_streamMeasure'' ν a).comp
617+
(fun i ω ↦ ω - (ν a)[id]) (fun _ ↦ by fun_prop)
618+
· intro i _; exact (hν a).congr_identDistrib
619+
((identDistrib_eval_eval_id_streamMeasure _ _ _).symm.sub_const _)
620+
_ = ENNReal.ofReal δ := exp_neg_sq_div_eq_delta hσ2 k hk δ hδ hδ1
621+
622+
omit [DecidableEq α] [StandardBorelSpace α] [Nonempty α] in
623+
lemma streamMeasure_concentration_ge_delta {σ2 : ℝ≥0} (hσ2 : σ2 ≠ 0)
624+
(hν : ∀ a, HasSubgaussianMGF (fun x ↦ x - (ν a)[id]) σ2 (ν a))
625+
(a : α) (k : ℕ) (hk : k ≠ 0) (δ : ℝ) (hδ : 0 < δ) (hδ1 : δ < 1) :
626+
streamMeasure ν {ω | (ν a)[id] ≤ (∑ m ∈ range k, ω m a) / k -
627+
√(2 * ↑σ2 * Real.log (1 / δ) / k)} ≤
628+
ENNReal.ofReal δ := by
629+
have hlog : 0 < Real.log (1 / δ) :=
630+
Real.log_pos (by rw [one_div]; exact one_lt_inv₀ hδ |>.mpr hδ1)
631+
calc
632+
streamMeasure ν {ω | (ν a)[id] ≤ (∑ m ∈ range k, ω m a) / k -
633+
√(2 * ↑σ2 * Real.log (1 / δ) / k)}
634+
_ = streamMeasure ν
635+
{ω | √(2 * ↑σ2 * Real.log (1 / δ) / k) ≤
636+
(∑ s ∈ range k, (ω s a - (ν a)[id])) / k} := by
637+
congr with ω
638+
field_simp
639+
rw [Finset.sum_sub_distrib]
640+
simp
641+
grind
642+
_ = streamMeasure ν
643+
{ω | √(2 * k * ↑σ2 * Real.log (1 / δ)) ≤
644+
(∑ s ∈ range k, (ω s a - (ν a)[id]))} := by
645+
congr with ω
646+
field_simp
647+
congr! 1
648+
rw [Real.sqrt_div (by positivity : 0 ≤ 2 * ↑σ2 * Real.log (1 / δ)),
649+
show 2 * ↑σ2 * Real.log (1 / δ) * ↑k = ↑k * (2 * ↑σ2 * Real.log (1 / δ)) from by ring,
650+
Real.sqrt_mul (by positivity : (0 : ℝ) ≤ ↑k), ← mul_div_assoc,
651+
mul_div_right_comm, Real.div_sqrt]
652+
_ ≤ ENNReal.ofReal (Real.exp (-(√(2 * k * ↑σ2 * Real.log (1 / δ)))^2 /
653+
(2 * k * ↑σ2))) := by
654+
rw [← ofReal_measureReal]
655+
gcongr
656+
refine HasSubgaussianMGF.measure_sum_range_ge_le_of_iIndepFun (c := σ2) ?_ ?_
657+
(by positivity)
658+
· exact (iIndepFun_eval_streamMeasure'' ν a).comp (fun i ω ↦ ω - (ν a)[id])
659+
(fun _ ↦ by fun_prop)
660+
· intro i _; exact (hν a).congr_identDistrib
661+
((identDistrib_eval_eval_id_streamMeasure _ _ _).symm.sub_const _)
662+
_ = ENNReal.ofReal δ := exp_neg_sq_div_eq_delta hσ2 k hk δ hδ hδ1
663+
664+
omit [DecidableEq α] [StandardBorelSpace α] [Nonempty α] in
665+
lemma streamMeasure_concentration_bound {σ2 : ℝ≥0} (hσ2 : σ2 ≠ 0)
666+
(hν : ∀ a, HasSubgaussianMGF (fun x ↦ x - (ν a)[id]) σ2 (ν a))
667+
(a : α) {δ : ℝ} (hδ : 0 < δ) (hδ1 : δ < 1) (m : ℕ) (hm : m ≠ 0) :
668+
streamMeasure ν {ω : ℕ → α → ℝ | ∑ i ∈ range m, ω i a ∈
669+
{x | x / m + √(2 * ↑σ2 * Real.log (1 / δ) / m) ≤ (ν a)[id]} ∪
670+
{x | (ν a)[id] ≤ x / m - √(2 * ↑σ2 * Real.log (1 / δ) / m)}} ≤
671+
ENNReal.ofReal (2 * δ) :=
672+
calc streamMeasure ν {ω : ℕ → α → ℝ | ∑ i ∈ range m, ω i a ∈
673+
{x | x / m + √(2 * ↑σ2 * Real.log (1 / δ) / m) ≤ (ν a)[id]} ∪
674+
{x | (ν a)[id] ≤ x / m - √(2 * ↑σ2 * Real.log (1 / δ) / m)}}
675+
≤ streamMeasure ν {ω | (∑ i ∈ range m, ω i a) / m +
676+
√(2 * ↑σ2 * Real.log (1 / δ) / m) ≤ (ν a)[id]} +
677+
streamMeasure ν {ω | (ν a)[id] ≤ (∑ i ∈ range m, ω i a) / m -
678+
√(2 * ↑σ2 * Real.log (1 / δ) / m)} := by
679+
apply (measure_mono (fun ω hω ↦ ?_)).trans (measure_union_le _ _)
680+
simp only [Set.mem_setOf_eq, Set.mem_union] at hω ⊢; exact hω
681+
_ ≤ ENNReal.ofReal δ + ENNReal.ofReal δ := by
682+
gcongr
683+
· exact streamMeasure_concentration_le_delta hσ2 hν a m hm δ hδ hδ1
684+
· exact streamMeasure_concentration_ge_delta hσ2 hν a m hm δ hδ hδ1
685+
_ = ENNReal.ofReal (2 * δ) := by
686+
rw [← ENNReal.ofReal_add (by positivity) (by positivity)]; ring_nf
687+
562688
omit [DecidableEq α] [StandardBorelSpace α] in
563689
lemma probReal_sum_le_sum_streamMeasure [Fintype α] {c : ℝ≥0}
564690
(hν : ∀ a, HasSubgaussianMGF (fun x ↦ x - (ν a)[id]) c (ν a)) (a : α) (m : ℕ) :

0 commit comments

Comments
 (0)