Lean module · UCB
BanditRLProof.Algorithms.UCBArmStreamExpectedPullCount
# Expected pull counts for the recursive arm-stream UCB process This module connects the source-faithful one-sided index tails to the local selected-small/selected-large pull-count decomposition. It stays in ENNReal until a downstream Bochner-regret wrapper requests a Real expectation.
Module map
Imports
BanditRLProof.Algorithms.UCBArmStreamTail, BanditRLProof.Algorithms.ETCCountLemmas, BanditRLProof.Algorithms.ETCFiniteArmRewardLaw, BanditRLProof.Algorithms.ETCRealInfinitePiTail, BanditRLProof.ExpectationPullCount, BanditRLProof.MeasurablePullCountCast, BanditRLProof.RealKernelRegretPullCount
Imported by
BanditRLProof, BanditRLProof.Algorithms.UCBArmStreamAsymptotics, BanditRLProof.Algorithms.UCBRealLMLCompat
Declarations
Open an item to read its exact compact statement and source link. Detailed teaching notes are linked when registered.
theorem
BanditRLProof.UCB.armStreamAction_eq_initializationArm_of_lt
Compiled
During initialization the recursive process follows round robin exactly.
theorem armStreamAction_eq_initializationArm_of_lt {K : Nat} (hK : 0 < K) (c : Real) (stream : ArmRewardStream K) (t : Nat) (ht : t < K) : armStreamAction hK c stream t = initializationArm hK t
theorem
BanditRLProof.UCB.pullCount_armStreamAction_K_eq_one
Compiled
Every arm is pulled exactly once in the first full initialization cycle.
theorem pullCount_armStreamAction_K_eq_one {K : Nat} (hK : 0 < K) (c : Real) (stream : ArmRewardStream K) (arm : Fin K) : pullCount (armStreamAction hK c stream) arm K = 1
theorem
BanditRLProof.UCB.pullCount_armStreamAction_pos_of_K_le
Compiled
After initialization every arm has positive prior pull count.
theorem pullCount_armStreamAction_pos_of_K_le {K : Nat} (hK : 0 < K) (c : Real) (stream : ArmRewardStream K) (arm : Fin K) (t : Nat) (ht : K <= t) : 0 < pullCount (armStreamAction hK c stream) arm t
theorem
BanditRLProof.UCB.K_lt_of_one_lt_pullCount_armStreamAction
Compiled
A second pull cannot occur before the round-robin cycle is complete.
theorem K_lt_of_one_lt_pullCount_armStreamAction {K : Nat} (hK : 0 < K) (c : Real) (stream : ArmRewardStream K) (arm : Fin K) (t : Nat) (hcount : 1 < pullCount (armStreamAction hK c stream) arm t) : K < t
theorem
BanditRLProof.UCB.armStreamAction_eq_realIndexAction_of_K_le
Compiled
After initialization the recursive action is the native trace UCB argmax.
theorem armStreamAction_eq_realIndexAction_of_K_le {K : Nat} (hK : 0 < K) (c : Real) (stream : ArmRewardStream K) (t : Nat) (ht : K <= t) : armStreamAction hK c stream t = realIndexAction hK (armStreamAction hK c stream) (armStreamReward hK c stream) c t
theorem
BanditRLProof.UCB.realIndex_le_realIndex_armStreamAction_of_K_le
Compiled
The selected recursive action maximizes the actual random-width index.
theorem realIndex_le_realIndex_armStreamAction_of_K_le {K : Nat} (hK : 0 < K) (c : Real) (stream : ArmRewardStream K) (t : Nat) (ht : K <= t) (arm : Fin K) : realIndex (armStreamAction hK c stream) (armStreamReward hK c stream) c arm t <= realIndex (armStreamAction hK c stream) (armStreamReward hK c stream) c (armStreamAction hK c stream t) t
theorem
BanditRLProof.UCB.meanGap_le_two_realWidth_of_selected
Compiled
Good confidence inequalities force the selected arm gap below twice its width.
theorem meanGap_le_two_realWidth_of_selected {K : Nat} (hK : 0 < K) (c : Real) (stream : ArmRewardStream K) (t : Nat) (ht : K <= t) (trueMean : Fin K -> Real) (best chosen : Fin K) (hselected : armStreamAction hK c stream t = chosen) (hbest : trueMean best <= realEmpiricalMean (armStreamAction hK c stream) (armStreamReward hK c stream) best t + realWidth (armStreamAction hK c stream) c best t) (hchosen : realEmpiricalMean (armStreamAction hK c stream) (armStreamReward hK c stream) chosen t - realWidth (armStreamAction hK c stream) c chosen t <= trueMean chosen) : meanGap trueMean best chosen <= 2 * realWidth (armStreamAction hK c stream) c chosen t
theorem
BanditRLProof.UCB.pullCount_le_eight_scale_log_div_gap_sq
Compiled
Squaring the good-event gap inequality gives the standard UCB count bound.
theorem pullCount_le_eight_scale_log_div_gap_sq {K : Nat} (action : ActionTrace (Fin K)) (arm : Fin K) (scale gap : Real) (t : Nat) (hscale : 0 <= scale) (hgap : 0 < gap) (hcount : 0 < pullCount action arm t) (hgap_le : gap <= 2 * realWidth action scale arm t) : (pullCount action arm t : Real) <= 8 * scale * Real.log ((t + 1 : Nat) : Real) / gap ^ 2
def
BanditRLProof.UCB.realPullThreshold
Compiled
Real threshold used for the horizon-wide pull-count split.
noncomputable def realPullThreshold (c : Real) (sigma2 : NNReal) (gap : Real) (n : Nat) : Real
def
BanditRLProof.UCB.pullThreshold
Compiled
Integer split point: one more than the ceiling of the real threshold.
noncomputable def pullThreshold (c : Real) (sigma2 : NNReal) (gap : Real) (n : Nat) : Nat
def
BanditRLProof.UCB.indexTail
Compiled
The one-sided inverse-power tail budget at time `t`.
noncomputable def indexTail (c : Real) (t : Nat) : ENNReal
def
BanditRLProof.UCB.constSum
Compiled
Finite-horizon sum of the source-faithful one-sided index tails.
noncomputable def constSum (c : Real) (n : Nat) : ENNReal
def
BanditRLProof.UCB.selectedLargePullCountEvent
Compiled
A selected arm whose prior count has crossed the horizon threshold.
noncomputable def selectedLargePullCountEvent {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (gap : Real) (arm : Fin K) (n t : Nat) : Set (ArmRewardStream K)
def
BanditRLProof.UCB.lowerIndexFailure
Compiled
Lower-index failure for a fixed arm of the recursive process.
noncomputable def lowerIndexFailure {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (arm : Fin K) (mean : Real) (t : Nat) : Set (ArmRewardStream K)
def
BanditRLProof.UCB.upperIndexFailure
Compiled
Upper-index failure for a fixed arm of the recursive process.
noncomputable def upperIndexFailure {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (arm : Fin K) (mean : Real) (t : Nat) : Set (ArmRewardStream K)
theorem
BanditRLProof.UCB.selectedLargePullCountEvent_subset_lower_union_upper
Compiled
Crossing the horizon count threshold while selecting a positive-gap arm forces one of the two one-sided index failures used by the arm-stream tail module.
theorem selectedLargePullCountEvent_subset_lower_union_upper {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (nu : Kernel (Fin K) Real) (arm : Fin K) (n t : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hgap : 0 < realKernelGap nu arm) (ht : t < n) : selectedLargePullCountEvent hK c sigma2 (realKernelGap nu arm) arm n t ⊆ lowerIndexFailure hK c sigma2 (ETC.realKernelBestArm hK nu) (realKernelMean nu (ETC.realKernelBestArm hK nu)) t ∪ upperIndexFailure hK c sigma2 arm (realKernelMean nu arm) t
theorem
BanditRLProof.UCB.measure_selectedLargePullCountEvent_le_two_mul_indexTail
Compiled
The selected-large event has twice the one-sided inverse-power budget.
theorem measure_selectedLargePullCountEvent_le_two_mul_indexTail {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (arm : Fin K) (n t : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hgap : 0 < realKernelGap nu arm) (ht : t < n) (hsubGBest : HasSubgaussianMGF (fun reward => reward - realKernelMean nu (ETC.realKernelBestArm hK nu)) sigma2 (nu (ETC.realKernelBestArm hK nu))) (hsubGArm : HasSubgaussianMGF (fun reward => reward - realKernelMean nu arm) sigma2 (nu arm)) : armStreamMeasure nu (selectedLargePullCountEvent hK c sigma2 (realKernelGap nu arm) arm n t) <= 2 * indexTail c t
theorem
BanditRLProof.UCB.lintegral_selectedLargePullCount_indicator_sum_le_two_mul_constSum
Compiled
Finite-time selected-large indicators integrate to twice `constSum`.
theorem lintegral_selectedLargePullCount_indicator_sum_le_two_mul_constSum {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (arm : Fin K) (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hgap : 0 < realKernelGap nu arm) (hsubGBest : HasSubgaussianMGF (fun reward => reward - realKernelMean nu (ETC.realKernelBestArm hK nu)) sigma2 (nu (ETC.realKernelBestArm hK nu))) (hsubGArm : HasSubgaussianMGF (fun reward => reward - realKernelMean nu arm) sigma2 (nu arm)) : ∫⁻ stream : ArmRewardStream K, (Finset.range n).sum (fun t : Nat => if armStreamAction hK (c * (sigma2 : Real)) stream t = arm ∧ pullThreshold c sigma2 (realKernelGap nu arm) n <= pullCount (armStreamAction hK (c * (sigma2 : Real)) stream) arm t then (1 : ENNReal) else 0) ∂armStreamMeasure nu <= 2 * constSum c n
theorem
BanditRLProof.UCB.lintegral_natCast_pullCount_armStreamAction_le_threshold_add_two_mul_constSum
Compiled
ENNReal expected pull-count bound for one positive-gap arm of the concrete recursive UCB process.
theorem lintegral_natCast_pullCount_armStreamAction_le_threshold_add_two_mul_constSum {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (arm : Fin K) (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hgap : 0 < realKernelGap nu arm) (hsubGBest : HasSubgaussianMGF (fun reward => reward - realKernelMean nu (ETC.realKernelBestArm hK nu)) sigma2 (nu (ETC.realKernelBestArm hK nu))) (hsubGArm : HasSubgaussianMGF (fun reward => reward - realKernelMean nu arm) sigma2 (nu arm)) : ∫⁻ stream : ArmRewardStream K, (pullCount (armStreamAction hK (c * (sigma2 : Real)) stream) arm n : ENNReal) ∂armStreamMeasure nu <= (pullThreshold c sigma2 (realKernelGap nu arm) n : ENNReal) + 2 * constSum c n
theorem
BanditRLProof.UCB.indexTail_ne_top
Compiled
Every finite inverse-power tail budget is finite.
theorem indexTail_ne_top (c : Real) (t : Nat) : indexTail c t ≠ ∞
theorem
BanditRLProof.UCB.constSum_ne_top
Compiled
The finite-horizon inverse-power tail sum is finite.
theorem constSum_ne_top (c : Real) (n : Nat) : constSum c n ≠ ∞
theorem
BanditRLProof.UCB.integrable_real_pullCount_armStreamAction
Compiled
Real pull counts of the measurable recursive process are integrable.
theorem integrable_real_pullCount_armStreamAction {K : Nat} (hK : 0 < K) (c : Real) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (arm : Fin K) (n : Nat) : Integrable (fun stream : ArmRewardStream K => (pullCount (armStreamAction hK c stream) arm n : Real)) (armStreamMeasure nu)
theorem
BanditRLProof.UCB.integral_real_pullCount_armStreamAction_le_threshold_add_two_mul_constSum
Compiled
Real Bochner expected pull-count bound obtained from the ENNReal endpoint.
theorem integral_real_pullCount_armStreamAction_le_threshold_add_two_mul_constSum {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (arm : Fin K) (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hgap : 0 < realKernelGap nu arm) (hsubGBest : HasSubgaussianMGF (fun reward => reward - realKernelMean nu (ETC.realKernelBestArm hK nu)) sigma2 (nu (ETC.realKernelBestArm hK nu))) (hsubGArm : HasSubgaussianMGF (fun reward => reward - realKernelMean nu arm) sigma2 (nu arm)) : ∫ stream : ArmRewardStream K, (pullCount (armStreamAction hK (c * (sigma2 : Real)) stream) arm n : Real) ∂armStreamMeasure nu <= (pullThreshold c sigma2 (realKernelGap nu arm) n : Real) + 2 * (constSum c n).toReal
theorem
BanditRLProof.UCB.pullThreshold_cast_le_realPullThreshold_add_two
Compiled
The ceiling threshold is bounded by the exact LML real threshold plus two.
theorem pullThreshold_cast_le_realPullThreshold_add_two (c : Real) (sigma2 : NNReal) (gap : Real) (n : Nat) (hthreshold : 0 <= realPullThreshold c sigma2 gap n) : (pullThreshold c sigma2 gap n : Real) <= realPullThreshold c sigma2 gap n + 2
theorem
BanditRLProof.UCB.integral_real_pullCount_armStreamAction_le_realThreshold_add_two_add_two_mul_constSum
Compiled
LML-shaped Real expected pull-count bound without a ceiling term.
theorem integral_real_pullCount_armStreamAction_le_realThreshold_add_two_add_two_mul_constSum {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (arm : Fin K) (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hgap : 0 < realKernelGap nu arm) (hsubGBest : HasSubgaussianMGF (fun reward => reward - realKernelMean nu (ETC.realKernelBestArm hK nu)) sigma2 (nu (ETC.realKernelBestArm hK nu))) (hsubGArm : HasSubgaussianMGF (fun reward => reward - realKernelMean nu arm) sigma2 (nu arm)) : ∫ stream : ArmRewardStream K, (pullCount (armStreamAction hK (c * (sigma2 : Real)) stream) arm n : Real) ∂armStreamMeasure nu <= realPullThreshold c sigma2 (realKernelGap nu arm) n + 2 + 2 * (constSum c n).toReal
theorem
BanditRLProof.UCB.integral_realKernelRegret_armStreamAction_le_sum_gap_mul_realThreshold_add_two_add_two_mul_constSum
Compiled
Finite-arm expected regret bound for the concrete recursive arm-stream UCB process, in the same gap-weighted shape as the pinned LML route.
theorem integral_realKernelRegret_armStreamAction_le_sum_gap_mul_realThreshold_add_two_add_two_mul_constSum {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hsubG : forall arm : Fin K, HasSubgaussianMGF (fun reward => reward - realKernelMean nu arm) sigma2 (nu arm)) : ∫ stream : ArmRewardStream K, realKernelRegret nu (armStreamAction hK (c * (sigma2 : Real)) stream) n ∂armStreamMeasure nu <= (Finset.univ : Finset (Fin K)).sum (fun arm => realKernelGap nu arm * (realPullThreshold c sigma2 (realKernelGap nu arm) n + 2 + 2 * (constSum c n).toReal))
theorem
BanditRLProof.UCB.integral_realKernelRegret_armStreamAction_le_lml_sum
Compiled
Canonical arm-stream specialization of the pinned LML UCB regret theorem, with exactly the upstream gap-weighted finite-sum right-hand side.
theorem integral_realKernelRegret_armStreamAction_le_lml_sum {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hsubG : forall arm : Fin K, HasSubgaussianMGF (fun reward => reward - realKernelMean nu arm) sigma2 (nu arm)) : ∫ stream : ArmRewardStream K, realKernelRegret nu (armStreamAction hK (c * (sigma2 : Real)) stream) n ∂armStreamMeasure nu <= (Finset.univ : Finset (Fin K)).sum (fun arm => 8 * c * (sigma2 : Real) * Real.log ((n + 1 : Nat) : Real) / realKernelGap nu arm + realKernelGap nu arm * (2 + 2 * (constSum c n).toReal))
theorem
BanditRLProof.UCB.measurable_armStreamActionTrace
Compiled
The complete recursive arm-stream action trace is measurable.
theorem measurable_armStreamActionTrace {K : Nat} (hK : 0 < K) (c : Real) : Measurable (armStreamAction hK c : ArmRewardStream K -> ActionTrace (Fin K))
theorem
BanditRLProof.UCB.measurable_realKernelRegret_actionTrace
Compiled
Kernel regret is a measurable functional of a finite-arm action trace.
theorem measurable_realKernelRegret_actionTrace {K : Nat} (nu : Kernel (Fin K) Real) (n : Nat) : Measurable (fun action : ActionTrace (Fin K) => realKernelRegret nu action n)
theorem
BanditRLProof.UCB.integral_realKernelRegret_externalAction_le_lml_sum_of_identDistrib_armStreamAction
Compiled
Any external action process with the same complete action-trace law as the canonical arm-stream UCB process inherits its exact LML-shaped regret bound.
theorem integral_realKernelRegret_externalAction_le_lml_sum_of_identDistrib_armStreamAction {Omega : Type*} [MeasurableSpace Omega] {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (mu : Measure Omega) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (action : Omega -> ActionTrace (Fin K)) (hident : IdentDistrib action (armStreamAction hK (c * (sigma2 : Real))) mu (armStreamMeasure nu)) (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hsubG : forall arm : Fin K, HasSubgaussianMGF (fun reward => reward - realKernelMean nu arm) sigma2 (nu arm)) : integral mu (fun omega => realKernelRegret nu (action omega) n) <= (Finset.univ : Finset (Fin K)).sum (fun arm => 8 * c * (sigma2 : Real) * Real.log ((n + 1 : Nat) : Real) / realKernelGap nu arm + realKernelGap nu arm * (2 + 2 * (constSum c n).toReal))
theorem
BanditRLProof.UCB.identDistrib_action_armStreamAction_of_identDistrib_armStream
Compiled
An external action generated almost surely by the recursive UCB map inherits the canonical action-trace law from an identically distributed latent arm stream.
theorem identDistrib_action_armStreamAction_of_identDistrib_armStream {Omega : Type*} [MeasurableSpace Omega] {K : Nat} (hK : 0 < K) (c : Real) (mu : Measure Omega) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (armStream : Omega -> ArmRewardStream K) (action : Omega -> ActionTrace (Fin K)) (hstreamLaw : IdentDistrib armStream (id : ArmRewardStream K -> ArmRewardStream K) mu (armStreamMeasure nu)) (haction : ∀ᵐ omega ∂mu, action omega = armStreamAction hK c (armStream omega)) : IdentDistrib action (armStreamAction hK c) mu (armStreamMeasure nu)
theorem
BanditRLProof.UCB.integral_realKernelRegret_externalAction_le_lml_sum_of_identDistrib_armStream
Compiled
Exact LML-shaped regret for an external action generated from a latent arm stream with the canonical complete stream law.
theorem integral_realKernelRegret_externalAction_le_lml_sum_of_identDistrib_armStream {Omega : Type*} [MeasurableSpace Omega] {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (mu : Measure Omega) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (armStream : Omega -> ArmRewardStream K) (action : Omega -> ActionTrace (Fin K)) (hstreamLaw : IdentDistrib armStream (id : ArmRewardStream K -> ArmRewardStream K) mu (armStreamMeasure nu)) (haction : ∀ᵐ omega ∂mu, action omega = armStreamAction hK (c * (sigma2 : Real)) (armStream omega)) (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hsubG : forall arm : Fin K, HasSubgaussianMGF (fun reward => reward - realKernelMean nu arm) sigma2 (nu arm)) : integral mu (fun omega => realKernelRegret nu (action omega) n) <= (Finset.univ : Finset (Fin K)).sum (fun arm => 8 * c * (sigma2 : Real) * Real.log ((n + 1 : Nat) : Real) / realKernelGap nu arm + realKernelGap nu arm * (2 + 2 * (constSum c n).toReal))
theorem
BanditRLProof.UCB.identDistrib_action_of_identDistrib_actionRewardTrace
Compiled
Identical laws of complete action/reward trajectories imply identical laws of their action traces. This is the projection used by LML's `IsAlgEnvSeq.identDistrib_trajectory` route.
theorem identDistrib_action_of_identDistrib_actionRewardTrace {Omega Xi : Type*} [MeasurableSpace Omega] [MeasurableSpace Xi] {K : Nat} (mu : Measure Omega) (mu' : Measure Xi) (action : Omega -> ActionTrace (Fin K)) (reward : Omega -> RewardTrace Real) (action' : Xi -> ActionTrace (Fin K)) (reward' : Xi -> RewardTrace Real) (htrajectory : IdentDistrib (fun omega t => (action omega t, reward omega t)) (fun xi t => (action' xi t, reward' xi t)) mu mu') : IdentDistrib action action' mu mu'
theorem
BanditRLProof.UCB.integral_realKernelRegret_externalAction_le_lml_sum_of_identDistrib_actionRewardTrace
Compiled
Exact LML-shaped regret transported from an observable action/reward trajectory law matching the canonical recursive arm-stream UCB trajectory.
theorem integral_realKernelRegret_externalAction_le_lml_sum_of_identDistrib_actionRewardTrace {Omega : Type*} [MeasurableSpace Omega] {K : Nat} (hK : 0 < K) (c : Real) (sigma2 : NNReal) (mu : Measure Omega) (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (action : Omega -> ActionTrace (Fin K)) (reward : Omega -> RewardTrace Real) (htrajectory : IdentDistrib (fun omega t => (action omega t, reward omega t)) (fun stream t => (armStreamAction hK (c * (sigma2 : Real)) stream t, armStreamReward hK (c * (sigma2 : Real)) stream t)) mu (armStreamMeasure nu)) (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hsubG : forall arm : Fin K, HasSubgaussianMGF (fun x => x - realKernelMean nu arm) sigma2 (nu arm)) : integral mu (fun omega => realKernelRegret nu (action omega) n) <= (Finset.univ : Finset (Fin K)).sum (fun arm => 8 * c * (sigma2 : Real) * Real.log ((n + 1 : Nat) : Real) / realKernelGap nu arm + realKernelGap nu arm * (2 + 2 * (constSum c n).toReal))
theorem
BanditRLProof.UCB.integral_realKernelRegret_externalAction_le_lml_sum_of_common_actionReward_condDistrib
Compiled
Exact LML-shaped regret from upstream-style initial and successor action/reward conditional laws. The external process and the canonical arm-stream UCB process need only share the same initial pair marginal and the same history-indexed successor pair kernels; full trajectory `IdentDistrib` is then supplied by Ionescu-Tulcea/projective-limit uniqueness.
theorem integral_realKernelRegret_externalAction_le_lml_sum_of_common_actionReward_condDistrib {Omega : Type*} [MeasurableSpace Omega] {K : Nat} [NeZero K] (hK : 0 < K) (c : Real) (sigma2 : NNReal) (mu : Measure Omega) [IsFiniteMeasure mu] (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (action : Omega -> ActionTrace (Fin K)) (reward : Omega -> RewardTrace Real) (haction : forall t : Nat, Measurable (fun omega : Omega => action omega t)) (hreward : forall t : Nat, Measurable (fun omega : Omega => reward omega t)) (mu0 : Measure (Fin K × Real)) [IsProbabilityMeasure mu0] (pairKernel : (i : Nat) -> Kernel (History.FinitePairHistory (Fin K) Real i) (Fin K × Real)) [forall i, IsMarkovKernel (pairKernel i)] (hzero : Measure.map (fun omega : Omega => (action omega 0, reward omega 0)) mu = mu0) (hzeroCanonical : Measure.map (fun stream : ArmRewardStream K => (armStreamAction hK (c * (sigma2 : Real)) stream 0, armStreamReward hK (c * (sigma2 : Real)) stream 0)) (armStreamMeasure nu) = mu0) (hcond : forall i : Nat, condDistrib (fun omega : Omega => (action omega (i + 1), reward omega (i + 1))) (fun omega : Omega => History.finitePairHistoryOfTrace (action omega) (reward omega) i) mu =ᵐ[mu.map (fun omega : Omega => History.finitePairHistoryOfTrace (action omega) (reward omega) i)] pairKernel i) (hcondCanonical : forall i : Nat, condDistrib (fun stream : ArmRewardStream K => (armStreamAction hK (c * (sigma2 : Real)) stream (i + 1), armStreamReward hK (c * (sigma2 : Real)) stream (i + 1))) (fun stream : ArmRewardStream K => History.finitePairHistoryOfTrace (armStreamAction hK (c * (sigma2 : Real)) stream) (armStreamReward hK (c * (sigma2 : Real)) stream) i) (armStreamMeasure nu) =ᵐ[(armStreamMeasure nu).map (fun stream : ArmRewardStream K => History.finitePairHistoryOfTrace (armStreamAction hK (c * (sigma2 : Real)) stream) (armStreamReward hK (c * (sigma2 : Real)) stream) i)] pairKernel i) (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hsubG : forall arm : Fin K, HasSubgaussianMGF (fun x => x - realKernelMean nu arm) sigma2 (nu arm)) : integral mu (fun omega => realKernelRegret nu (action omega) n) <= (Finset.univ : Finset (Fin K)).sum (fun arm => 8 * c * (sigma2 : Real) * Real.log ((n + 1 : Nat) : Real) / realKernelGap nu arm + realKernelGap nu arm * (2 + 2 * (constSum c n).toReal))
theorem
BanditRLProof.UCB.identDistrib_actionRewardTrace_of_condDistrib_eq_armStream
Compiled
An external action/reward process has the same complete observable trajectory law as canonical arm-stream UCB when its initial pair marginal and every successor pair conditional distribution agree with the corresponding canonical ones. The canonical initial measure and kernel family are chosen internally.
theorem identDistrib_actionRewardTrace_of_condDistrib_eq_armStream {Omega : Type*} [MeasurableSpace Omega] {K : Nat} [NeZero K] (hK : 0 < K) (c : Real) (sigma2 : NNReal) (mu : Measure Omega) [IsFiniteMeasure mu] (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (action : Omega -> ActionTrace (Fin K)) (reward : Omega -> RewardTrace Real) (haction : forall t : Nat, Measurable (fun omega : Omega => action omega t)) (hreward : forall t : Nat, Measurable (fun omega : Omega => reward omega t)) (hzero : Measure.map (fun omega : Omega => (action omega 0, reward omega 0)) mu = Measure.map (fun stream : ArmRewardStream K => (armStreamAction hK (c * (sigma2 : Real)) stream 0, armStreamReward hK (c * (sigma2 : Real)) stream 0)) (armStreamMeasure nu)) (hcond : forall i : Nat, condDistrib (fun omega : Omega => (action omega (i + 1), reward omega (i + 1))) (fun omega : Omega => History.finitePairHistoryOfTrace (action omega) (reward omega) i) mu =ᵐ[mu.map (fun omega : Omega => History.finitePairHistoryOfTrace (action omega) (reward omega) i)] condDistrib (fun stream : ArmRewardStream K => (armStreamAction hK (c * (sigma2 : Real)) stream (i + 1), armStreamReward hK (c * (sigma2 : Real)) stream (i + 1))) (fun stream : ArmRewardStream K => History.finitePairHistoryOfTrace (armStreamAction hK (c * (sigma2 : Real)) stream) (armStreamReward hK (c * (sigma2 : Real)) stream) i) (armStreamMeasure nu)) : IdentDistrib (fun omega t => (action omega t, reward omega t)) (fun stream t => (armStreamAction hK (c * (sigma2 : Real)) stream t, armStreamReward hK (c * (sigma2 : Real)) stream t)) mu (armStreamMeasure nu)
theorem
BanditRLProof.UCB.identDistrib_actionRewardTrace_of_split_condDistrib_eq_armStream
Compiled
An external process has the canonical observable UCB trajectory law from the four split law surfaces used by LML's `IsAlgEnvSeq`: the initial action law, the initial feedback law given that action, the successor action law given finite pair history, and the successor feedback law given history and the next action. The canonical split kernels and their `compProd` pair kernels are chosen internally.
theorem identDistrib_actionRewardTrace_of_split_condDistrib_eq_armStream {Omega : Type*} [MeasurableSpace Omega] {K : Nat} [NeZero K] (hK : 0 < K) (c : Real) (sigma2 : NNReal) (mu : Measure Omega) [IsFiniteMeasure mu] (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (action : Omega -> ActionTrace (Fin K)) (reward : Omega -> RewardTrace Real) (haction : forall t : Nat, Measurable (fun omega : Omega => action omega t)) (hreward : forall t : Nat, Measurable (fun omega : Omega => reward omega t)) (hzeroAction : Measure.map (fun omega : Omega => action omega 0) mu = Measure.map (fun stream : ArmRewardStream K => armStreamAction hK (c * (sigma2 : Real)) stream 0) (armStreamMeasure nu)) (hzeroFeedback : condDistrib (fun omega : Omega => reward omega 0) (fun omega : Omega => action omega 0) mu =ᵐ[ mu.map (fun omega : Omega => action omega 0)] condDistrib (fun stream : ArmRewardStream K => armStreamReward hK (c * (sigma2 : Real)) stream 0) (fun stream : ArmRewardStream K => armStreamAction hK (c * (sigma2 : Real)) stream 0) (armStreamMeasure nu)) (hcondAction : forall i : Nat, condDistrib (fun omega : Omega => action omega (i + 1)) (fun omega : Omega => History.finitePairHistoryOfTrace (action omega) (reward omega) i) mu =ᵐ[ mu.map (fun omega : Omega => History.finitePairHistoryOfTrace (action omega) (reward omega) i)] condDistrib (fun stream : ArmRewardStream K => armStreamAction hK (c * (sigma2 : Real)) stream (i + 1)) (fun stream : ArmRewardStream K => History.finitePairHistoryOfTrace (armStreamAction hK (c * (sigma2 : Real)) stream) (armStreamReward hK (c * (sigma2 : Real)) stream) i) (armStreamMeasure nu)) (hcondFeedback : forall i : Nat, condDistrib (fun omega : Omega => reward omega (i + 1)) (fun omega : Omega => (History.finitePairHistoryOfTrace (action omega) (reward omega) i, action omega (i + 1))) mu =ᵐ[ mu.map (fun omega : Omega => (History.finitePairHistoryOfTrace (action omega) (reward omega) i, action omega (i + 1)))] condDistrib (fun stream : ArmRewardStream K => armStreamReward hK (c * (sigma2 : Real)) stream (i + 1)) (fun stream : ArmRewardStream K => (History.finitePairHistoryOfTrace (armStreamAction hK (c * (sigma2 : Real)) stream) (armStreamReward hK (c * (sigma2 : Real)) stream) i, armStreamAction hK (c * (sigma2 : Real)) stream (i + 1))) (armStreamMeasure nu)) : IdentDistrib (fun omega t => (action omega t, reward omega t)) (fun stream t => (armStreamAction hK (c * (sigma2 : Real)) stream t, armStreamReward hK (c * (sigma2 : Real)) stream t)) mu (armStreamMeasure nu)
theorem
BanditRLProof.UCB.integral_realKernelRegret_externalAction_le_lml_sum_of_split_condDistrib_eq_armStream
Compiled
Exact canonical arm-stream UCB regret from the four split action/feedback law fields corresponding to LML's `IsAlgEnvSeq` interface.
theorem integral_realKernelRegret_externalAction_le_lml_sum_of_split_condDistrib_eq_armStream {Omega : Type*} [MeasurableSpace Omega] {K : Nat} [NeZero K] (hK : 0 < K) (c : Real) (sigma2 : NNReal) (mu : Measure Omega) [IsFiniteMeasure mu] (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (action : Omega -> ActionTrace (Fin K)) (reward : Omega -> RewardTrace Real) (haction : forall t : Nat, Measurable (fun omega : Omega => action omega t)) (hreward : forall t : Nat, Measurable (fun omega : Omega => reward omega t)) (hzeroAction : Measure.map (fun omega : Omega => action omega 0) mu = Measure.map (fun stream : ArmRewardStream K => armStreamAction hK (c * (sigma2 : Real)) stream 0) (armStreamMeasure nu)) (hzeroFeedback : condDistrib (fun omega : Omega => reward omega 0) (fun omega : Omega => action omega 0) mu =ᵐ[ mu.map (fun omega : Omega => action omega 0)] condDistrib (fun stream : ArmRewardStream K => armStreamReward hK (c * (sigma2 : Real)) stream 0) (fun stream : ArmRewardStream K => armStreamAction hK (c * (sigma2 : Real)) stream 0) (armStreamMeasure nu)) (hcondAction : forall i : Nat, condDistrib (fun omega : Omega => action omega (i + 1)) (fun omega : Omega => History.finitePairHistoryOfTrace (action omega) (reward omega) i) mu =ᵐ[ mu.map (fun omega : Omega => History.finitePairHistoryOfTrace (action omega) (reward omega) i)] condDistrib (fun stream : ArmRewardStream K => armStreamAction hK (c * (sigma2 : Real)) stream (i + 1)) (fun stream : ArmRewardStream K => History.finitePairHistoryOfTrace (armStreamAction hK (c * (sigma2 : Real)) stream) (armStreamReward hK (c * (sigma2 : Real)) stream) i) (armStreamMeasure nu)) (hcondFeedback : forall i : Nat, condDistrib (fun omega : Omega => reward omega (i + 1)) (fun omega : Omega => (History.finitePairHistoryOfTrace (action omega) (reward omega) i, action omega (i + 1))) mu =ᵐ[ mu.map (fun omega : Omega => (History.finitePairHistoryOfTrace (action omega) (reward omega) i, action omega (i + 1)))] condDistrib (fun stream : ArmRewardStream K => armStreamReward hK (c * (sigma2 : Real)) stream (i + 1)) (fun stream : ArmRewardStream K => (History.finitePairHistoryOfTrace (armStreamAction hK (c * (sigma2 : Real)) stream) (armStreamReward hK (c * (sigma2 : Real)) stream) i, armStreamAction hK (c * (sigma2 : Real)) stream (i + 1))) (armStreamMeasure nu)) (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hsubG : forall arm : Fin K, HasSubgaussianMGF (fun x => x - realKernelMean nu arm) sigma2 (nu arm)) : integral mu (fun omega => realKernelRegret nu (action omega) n) <= (Finset.univ : Finset (Fin K)).sum (fun arm => 8 * c * (sigma2 : Real) * Real.log ((n + 1 : Nat) : Real) / realKernelGap nu arm + realKernelGap nu arm * (2 + 2 * (constSum c n).toReal))
theorem
BanditRLProof.UCB.integral_realKernelRegret_externalAction_le_lml_sum_of_condDistrib_eq_armStream
Compiled
Exact LML-shaped regret when the external initial and successor observable pair laws agree directly with canonical arm-stream UCB.
theorem integral_realKernelRegret_externalAction_le_lml_sum_of_condDistrib_eq_armStream {Omega : Type*} [MeasurableSpace Omega] {K : Nat} [NeZero K] (hK : 0 < K) (c : Real) (sigma2 : NNReal) (mu : Measure Omega) [IsFiniteMeasure mu] (nu : Kernel (Fin K) Real) [IsMarkovKernel nu] (action : Omega -> ActionTrace (Fin K)) (reward : Omega -> RewardTrace Real) (haction : forall t : Nat, Measurable (fun omega : Omega => action omega t)) (hreward : forall t : Nat, Measurable (fun omega : Omega => reward omega t)) (hzero : Measure.map (fun omega : Omega => (action omega 0, reward omega 0)) mu = Measure.map (fun stream : ArmRewardStream K => (armStreamAction hK (c * (sigma2 : Real)) stream 0, armStreamReward hK (c * (sigma2 : Real)) stream 0)) (armStreamMeasure nu)) (hcond : forall i : Nat, condDistrib (fun omega : Omega => (action omega (i + 1), reward omega (i + 1))) (fun omega : Omega => History.finitePairHistoryOfTrace (action omega) (reward omega) i) mu =ᵐ[mu.map (fun omega : Omega => History.finitePairHistoryOfTrace (action omega) (reward omega) i)] condDistrib (fun stream : ArmRewardStream K => (armStreamAction hK (c * (sigma2 : Real)) stream (i + 1), armStreamReward hK (c * (sigma2 : Real)) stream (i + 1))) (fun stream : ArmRewardStream K => History.finitePairHistoryOfTrace (armStreamAction hK (c * (sigma2 : Real)) stream) (armStreamReward hK (c * (sigma2 : Real)) stream) i) (armStreamMeasure nu)) (n : Nat) (hc : 0 < c) (hsigma2 : sigma2 ≠ 0) (hsubG : forall arm : Fin K, HasSubgaussianMGF (fun x => x - realKernelMean nu arm) sigma2 (nu arm)) : integral mu (fun omega => realKernelRegret nu (action omega) n) <= (Finset.univ : Finset (Fin K)).sum (fun arm => 8 * c * (sigma2 : Real) * Real.log ((n + 1 : Nat) : Real) / realKernelGap nu arm + realKernelGap nu arm * (2 + 2 * (constSum c n).toReal))