BanditRLlib
Lean gate passed before this site build; local proof declarations are shown as compiled.

Lean module · Finite-horizon RL

BanditRLProof.RL.FiniteHorizonAdaptiveEpisodeBatchLaw

# Adaptive finite-horizon episode-batch laws This module replaces the independent finite product of episode batches by an Ionescu--Tulcea trajectory whose successor batch kernel may depend on the full finite batch history. A source records the selected Markov policy and the exact equality between its generated iid batch law and the configured history kernel. The resulting trajectory exposes both the regular conditional law of the next batch and a finite-horizon union bound for arbitrary measurable adapted bad events. This is a law and confidence-budget transport layer. It does not yet prove that an empirical optimistic-policy update is measurable, instantiate the bad events with policy-dependent count radii, bound cumulative bonuses, or identify the finite sum of expected regrets with realized online regret.

Module map

Declarations
27
Placeholders
0

Imports

BanditRLProof.RL.FiniteHorizonIIDMultiBatchCumulativeConfidenceRegret, BanditRLProof.RewardTraceLaw

Imported by

BanditRLProof, BanditRLProof.RL.FiniteHorizonAdaptiveEmpiricalOptimisticSource, BanditRLProof.RL.FiniteHorizonAdaptiveStochasticRewardTotalReturnConcentration, BanditRLProof.RL.FiniteHorizonEpisodeBatchStandardBorel

Declarations

Open an item to read its exact compact statement and source link. Detailed teaching notes are linked when registered.

abbrev BanditRLProof.FiniteHorizonRL.EpisodeBatchPrefix Compiled

Finite history through batch coordinate `n`.

abbrev EpisodeBatchPrefix (mdp : MDP State Action) (episodes n : Nat)
abbrev BanditRLProof.FiniteHorizonRL.EpisodeBatchTrajectory Compiled

Infinite batch trajectory used by the adaptive Ionescu--Tulcea law.

abbrev EpisodeBatchTrajectory (mdp : MDP State Action) (episodes : Nat)
structure BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource Compiled

An adaptive batch source. Coordinate zero is generated by `initialPolicy`. After observing the prefix through coordinate `n`, `successorPolicy n history` selects the policy for coordinate `n + 1`. `batchKernel_eq_iidEpisodeBatchMeasure` is the exact law transport contract: it also certifies that the history-indexed family is a measurable Markov kernel rather than merely a pointwise family of measures.

structure AdaptiveEpisodeBatchSource (mdp : MDP State Action) (initialState : Measure State) [IsProbabilityMeasure initialState] (episodes : Nat) where
def BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.trajectoryMeasure Compiled

The adaptive infinite batch-trajectory law.

noncomputable def trajectoryMeasure {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) : Measure (EpisodeBatchTrajectory mdp episodes)
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.trajectoryMeasure_map_eval_zero Compiled

Coordinate zero has the batch law of the configured initial policy.

theorem trajectoryMeasure_map_eval_zero {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) : source.trajectoryMeasure.map (Function.eval 0) = source.initialPolicy.iidEpisodeBatchMeasure initialState episodes
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.trajectoryMeasure_prefix_compProd Compiled

Every successor prefix/next-batch marginal is the compProd of the prefix law and the configured adaptive batch kernel.

theorem trajectoryMeasure_prefix_compProd {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (n : Nat) : source.trajectoryMeasure.map (Preorder.frestrictLe n) ⊗ₘ source.batchKernel n = source.trajectoryMeasure.map (fun trajectory => (Preorder.frestrictLe n trajectory, trajectory (n + 1)))
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.trajectoryMeasure_condDistrib Compiled

The next batch conditioned on the full finite prefix has the configured history-dependent Markov kernel.

theorem trajectoryMeasure_condDistrib {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} [StandardBorelSpace (EpisodeBatch mdp episodes)] (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (n : Nat) : ProbabilityTheory.condDistrib (fun trajectory : EpisodeBatchTrajectory mdp episodes => trajectory (n + 1)) (Preorder.frestrictLe n) source.trajectoryMeasure =ᶠ[ ae (source.trajectoryMeasure.map (Preorder.frestrictLe n))] source.batchKernel n
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.trajectoryMeasure_condDistrib_eq_iidEpisodeBatchMeasure Compiled

The next batch conditioned on the finite prefix is exactly the generated iid batch law of the policy selected from that prefix.

theorem trajectoryMeasure_condDistrib_eq_iidEpisodeBatchMeasure {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} [StandardBorelSpace (EpisodeBatch mdp episodes)] (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (n : Nat) : ProbabilityTheory.condDistrib (fun trajectory : EpisodeBatchTrajectory mdp episodes => trajectory (n + 1)) (Preorder.frestrictLe n) source.trajectoryMeasure =ᶠ[ ae (source.trajectoryMeasure.map (Preorder.frestrictLe n))] fun history => (source.successorPolicy n history).iidEpisodeBatchMeasure initialState episodes
def BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.initialBadEvent Compiled

Pull an initial-coordinate event back to the adaptive trajectory.

def initialBadEvent {mdp : MDP State Action} {episodes : Nat} (bad : Set (EpisodeBatch mdp episodes)) : Set (EpisodeBatchTrajectory mdp episodes)
def BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.successorBadEvent Compiled

Pull a prefix-dependent successor event back to the adaptive trajectory.

def successorBadEvent {mdp : MDP State Action} {episodes : Nat} (n : Nat) (bad : Set (EpisodeBatchPrefix mdp episodes n × EpisodeBatch mdp episodes)) : Set (EpisodeBatchTrajectory mdp episodes)
def BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.roundBadEvent Compiled

Round-indexed adapted bad event, with a separate coordinate-zero event.

def roundBadEvent {mdp : MDP State Action} {episodes : Nat} (initialBad : Set (EpisodeBatch mdp episodes)) (successorBad : (n : Nat) -> Set (EpisodeBatchPrefix mdp episodes n × EpisodeBatch mdp episodes)) : Nat -> Set (EpisodeBatchTrajectory mdp episodes) | 0 => initialBadEvent initialBad | n + 1 => successorBadEvent n (successorBad n) /-- Union of the first `rounds` adapted bad events. -/ def finiteHorizonBadEvent {mdp : MDP State Action} {episodes : Nat} (rounds : Nat) (initialBad : Set (EpisodeBatch mdp episodes)) (successorBad : (n : Nat) -> Set (EpisodeBatchPrefix mdp episodes n × EpisodeBatch mdp episodes)) : Set (EpisodeBatchTrajectory mdp episodes)
def BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.finiteHorizonBadEvent Compiled

Union of the first `rounds` adapted bad events.

def finiteHorizonBadEvent {mdp : MDP State Action} {episodes : Nat} (rounds : Nat) (initialBad : Set (EpisodeBatch mdp episodes)) (successorBad : (n : Nat) -> Set (EpisodeBatchPrefix mdp episodes n × EpisodeBatch mdp episodes)) : Set (EpisodeBatchTrajectory mdp episodes)
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.measurableSet_roundBadEvent Compiled

Measurability of every pulled-back adapted round event.

theorem measurableSet_roundBadEvent {mdp : MDP State Action} {episodes : Nat} {initialBad : Set (EpisodeBatch mdp episodes)} {successorBad : (n : Nat) -> Set (EpisodeBatchPrefix mdp episodes n × EpisodeBatch mdp episodes)} (hinitial : MeasurableSet initialBad) (hsuccessor : forall n, MeasurableSet (successorBad n)) (round : Nat) : MeasurableSet (roundBadEvent initialBad successorBad round)
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.measurableSet_finiteHorizonBadEvent Compiled

Measurability of the finite adapted bad-event union.

theorem measurableSet_finiteHorizonBadEvent {mdp : MDP State Action} {episodes rounds : Nat} {initialBad : Set (EpisodeBatch mdp episodes)} {successorBad : (n : Nat) -> Set (EpisodeBatchPrefix mdp episodes n × EpisodeBatch mdp episodes)} (hinitial : MeasurableSet initialBad) (hsuccessor : forall n, n + 1 < rounds -> MeasurableSet (successorBad n)) : MeasurableSet (finiteHorizonBadEvent rounds initialBad successorBad)
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.trajectoryMeasure_initialBadEvent Compiled

Exact mass of a pulled-back coordinate-zero event.

theorem trajectoryMeasure_initialBadEvent {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) {bad : Set (EpisodeBatch mdp episodes)} (hbad : MeasurableSet bad) : source.trajectoryMeasure (initialBadEvent bad) = source.initialPolicy.iidEpisodeBatchMeasure initialState episodes bad
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.trajectoryMeasure_successorBadEvent_le Compiled

An adapted successor event inherits a uniform bound on every history fiber.

theorem trajectoryMeasure_successorBadEvent_le {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (n : Nat) {bad : Set (EpisodeBatchPrefix mdp episodes n × EpisodeBatch mdp episodes)} (hbad : MeasurableSet bad) (budget : ENNReal) (hfiber : forall history, source.batchKernel n history (Prod.mk history ⁻¹' bad) <= budget) : source.trajectoryMeasure (successorBadEvent n bad) <= budget
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.trajectoryMeasure_roundBadEvent_le Compiled

Every adapted round event inherits the supplied local budget.

theorem trajectoryMeasure_roundBadEvent_le {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) {initialBad : Set (EpisodeBatch mdp episodes)} {successorBad : (n : Nat) -> Set (EpisodeBatchPrefix mdp episodes n × EpisodeBatch mdp episodes)} (rounds : Nat) (hinitial : MeasurableSet initialBad) (hsuccessor : forall n, n + 1 < rounds -> MeasurableSet (successorBad n)) (budget : ENNReal) (hinitial_le : source.initialPolicy.iidEpisodeBatchMeasure initialState episodes initialBad <= budget) (hsuccessor_le : forall n, n + 1 < rounds -> forall history, source.batchKernel n history (Prod.mk history ⁻¹' successorBad n) <= budget) (round : Fin rounds) : source.trajectoryMeasure (roundBadEvent initialBad successorBad round) <= budget
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.trajectoryMeasure_finiteHorizonBadEvent_le Compiled

Finite-horizon adaptive union bound with equal confidence shares `delta / rounds`. Independence between batches is not assumed.

theorem trajectoryMeasure_finiteHorizonBadEvent_le {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (rounds : Nat) (hrounds : 0 < rounds) (delta : Real) {initialBad : Set (EpisodeBatch mdp episodes)} {successorBad : (n : Nat) -> Set (EpisodeBatchPrefix mdp episodes n × EpisodeBatch mdp episodes)} (hinitial : MeasurableSet initialBad) (hsuccessor : forall n, n + 1 < rounds -> MeasurableSet (successorBad n)) (hinitial_le : source.initialPolicy.iidEpisodeBatchMeasure initialState episodes initialBad <= ENNReal.ofReal (multiBatchLocalDelta rounds delta)) (hsuccessor_le : forall n, n + 1 < rounds -> forall history, source.batchKernel n history (Prod.mk history ⁻¹' successorBad n) <= ENNReal.ofReal (multiBatchLocalDelta rounds delta)) : source.trajectoryMeasure (finiteHorizonBadEvent rounds initialBad successorBad) <= ENNReal.ofReal delta
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.trajectoryMeasure_conditionalLaw_and_finiteHorizonBadEvent_le Compiled

Terminal adaptive law-and-budget package: every successor conditional law is the generated iid batch law of the history-selected policy, and arbitrary measurable adapted local events obey one global finite-horizon delta budget.

theorem trajectoryMeasure_conditionalLaw_and_finiteHorizonBadEvent_le {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} [StandardBorelSpace (EpisodeBatch mdp episodes)] (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (rounds : Nat) (hrounds : 0 < rounds) (delta : Real) {initialBad : Set (EpisodeBatch mdp episodes)} {successorBad : (n : Nat) -> Set (EpisodeBatchPrefix mdp episodes n × EpisodeBatch mdp episodes)} (hinitial : MeasurableSet initialBad) (hsuccessor : forall n, n + 1 < rounds -> MeasurableSet (successorBad n)) (hinitial_le : source.initialPolicy.iidEpisodeBatchMeasure initialState episodes initialBad <= ENNReal.ofReal (multiBatchLocalDelta rounds delta)) (hsuccessor_le : forall n, n + 1 < rounds -> forall history, source.batchKernel n history (Prod.mk history ⁻¹' successorBad n) <= ENNReal.ofReal (multiBatchLocalDelta rounds delta)) : (forall n, ProbabilityTheory.condDistrib (fun trajectory : EpisodeBatchTrajectory mdp episodes => trajectory (n + 1)) (Preorder.frestrictLe n) source.trajectoryMeasure =ᶠ[ ae (source.trajectoryMeasure.map (Preorder.frestrictLe n))] fun history => (source.successorPolicy n history).iidEpisodeBatchMeasure initialState episodes) ∧ MeasurableSet (finiteHorizonBadEvent rounds initialBad successorBad) ∧ source.trajectoryMeasure (finiteHorizonBadEvent rounds initialBad successorBad) <= ENNReal.ofReal delta
def BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.initialSimultaneousCountBadEvent Compiled

Count-confidence event for the initial policy's coordinate-zero batch.

def initialSimultaneousCountBadEvent {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (rounds : Nat) (delta : Real) : Set (EpisodeBatch mdp episodes)
def BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.successorSimultaneousCountBadEvent Compiled

Prefix/next-batch count event for the policy selected from that prefix.

def successorSimultaneousCountBadEvent {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (rounds : Nat) (delta : Real) (n : Nat) : Set (EpisodeBatchPrefix mdp episodes n × EpisodeBatch mdp episodes)
def BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.adaptiveSimultaneousCountBadEvent Compiled

The finite-horizon union of initial and history-selected simultaneous count events on the adaptive batch trajectory.

def adaptiveSimultaneousCountBadEvent {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (rounds : Nat) (delta : Real) : Set (EpisodeBatchTrajectory mdp episodes)
def BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.policyAt Compiled

Policy used at a batch coordinate of one adaptive trajectory.

def policyAt {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (trajectory : EpisodeBatchTrajectory mdp episodes) : Nat -> MarkovPolicy mdp | 0 => source.initialPolicy | n + 1 => source.successorPolicy n (Preorder.frestrictLe n trajectory) omit [Nonempty State] [Nonempty Action] in /-- The initial count event receives the common local confidence share. -/ theorem initialSimultaneousCountBadEvent_le {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (rounds : Nat) (hrounds : 0 < rounds) (hepisodes : 0 < episodes) (delta : Real) (hdelta : 0 < delta) (hdelta_le_one : delta <= 1) : source.initialPolicy.iidEpisodeBatchMeasure initialState episodes (source.initialSimultaneousCountBadEvent rounds delta) <= ENNReal.ofReal (multiBatchLocalDelta rounds delta)
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.initialSimultaneousCountBadEvent_le Compiled

The initial count event receives the common local confidence share.

theorem initialSimultaneousCountBadEvent_le {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (rounds : Nat) (hrounds : 0 < rounds) (hepisodes : 0 < episodes) (delta : Real) (hdelta : 0 < delta) (hdelta_le_one : delta <= 1) : source.initialPolicy.iidEpisodeBatchMeasure initialState episodes (source.initialSimultaneousCountBadEvent rounds delta) <= ENNReal.ofReal (multiBatchLocalDelta rounds delta)
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.successorSimultaneousCountBadEvent_fiber_le Compiled

Every history fiber of the selected-policy successor count event receives the same local confidence share.

theorem successorSimultaneousCountBadEvent_fiber_le {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (rounds : Nat) (hrounds : 0 < rounds) (hepisodes : 0 < episodes) (delta : Real) (hdelta : 0 < delta) (hdelta_le_one : delta <= 1) (n : Nat) (history : EpisodeBatchPrefix mdp episodes n) : source.batchKernel n history (Prod.mk history ⁻¹' source.successorSimultaneousCountBadEvent rounds delta n) <= ENNReal.ofReal (multiBatchLocalDelta rounds delta)
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.measurableSet_adaptiveSimultaneousCountBadEvent Compiled

Measurability of the adaptive simultaneous-count union.

theorem measurableSet_adaptiveSimultaneousCountBadEvent {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (rounds : Nat) (delta : Real) (hsuccessor : forall n, n + 1 < rounds -> MeasurableSet (source.successorSimultaneousCountBadEvent rounds delta n)) : MeasurableSet (source.adaptiveSimultaneousCountBadEvent rounds delta)
theorem BanditRLProof.FiniteHorizonRL.AdaptiveEpisodeBatchSource.trajectoryMeasure_adaptiveSimultaneousCountConfidence Compiled

Adaptive global-delta simultaneous count confidence. Outside one measurable finite-horizon event, every realized batch satisfies the strict count deviation bound relative to the policy selected from its preceding history.

theorem trajectoryMeasure_adaptiveSimultaneousCountConfidence {mdp : MDP State Action} {initialState : Measure State} [IsProbabilityMeasure initialState] {episodes : Nat} (source : AdaptiveEpisodeBatchSource mdp initialState episodes) (rounds : Nat) (hrounds : 0 < rounds) (hepisodes : 0 < episodes) (delta : Real) (hdelta : 0 < delta) (hdelta_le_one : delta <= 1) (hsuccessor : forall n, n + 1 < rounds -> MeasurableSet (source.successorSimultaneousCountBadEvent rounds delta n)) : MeasurableSet (source.adaptiveSimultaneousCountBadEvent rounds delta) ∧ source.trajectoryMeasure (source.adaptiveSimultaneousCountBadEvent rounds delta) <= ENNReal.ofReal delta ∧ forall trajectory, trajectory ∉ source.adaptiveSimultaneousCountBadEvent rounds delta -> forall round : Fin rounds, forall coordinate : CountCoordinate mdp, |coordinate.deviation (source.policyAt trajectory round) initialState (trajectory round)| < simultaneousCountConfidenceRadius mdp episodes (multiBatchLocalDelta rounds delta)