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

Lean module · Foundations

BanditRLProof.LeafLemmas

# Dependency-light leaf lemmas These lemmas are the first compiled ABRL leaf library. They deliberately avoid Mathlib imports while exposing stable theorem names that later Mathlib-backed tasks can replace, generalize, or upstream.

Module map

Declarations
37
Placeholders
0

Imports

BanditRLProof.Regret

Imported by

BanditRLProof, BanditRLProof.Algorithms.ETCTraceCountLemmas, BanditRLProof.ExpectationPullCount, BanditRLProof.MathlibWrappers, BanditRLProof.MeasurablePullCount

Declarations

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

theorem BanditRLProof.pullCount_one Compiled

No declaration docstring is present; use the chapter context and exact statement below.

@[simp] theorem pullCount_one : pullCount action a 1 = if action 0 = a then 1 else 0
theorem BanditRLProof.pullCount_succ_of_eq Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_succ_of_eq (h : action t = a) : pullCount action a (t + 1) = pullCount action a t + 1
theorem BanditRLProof.pullCount_succ_of_ne Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_succ_of_ne (h : action t ≠ a) : pullCount action a (t + 1) = pullCount action a t
theorem BanditRLProof.pullCount_le_succ Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_le_succ : pullCount action a t ≤ pullCount action a (t + 1)
theorem BanditRLProof.pullCount_succ_le_succ Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_succ_le_succ : pullCount action a (t + 1) ≤ pullCount action a t + 1
theorem BanditRLProof.pullCount_mono Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_mono {s t : Nat} (h : s ≤ t) : pullCount action a s ≤ pullCount action a t
theorem BanditRLProof.pullCount_le_time Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_le_time : pullCount action a t ≤ t
theorem BanditRLProof.pullCount_add_le Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_add_le (n : Nat) : pullCount action a (t + n) ≤ pullCount action a t + n
theorem BanditRLProof.pullCount_le_add Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_le_add : pullCount action a t ≤ pullCount action a (t + n)
theorem BanditRLProof.pullCount_eq_zero_of_forall_ne Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_eq_zero_of_forall_ne (h : ∀ s, s < t → action s ≠ a) : pullCount action a t = 0
theorem BanditRLProof.pullCount_eq_time_of_forall_eq Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_eq_time_of_forall_eq (h : ∀ s, s < t → action s = a) : pullCount action a t = t
theorem BanditRLProof.pullCount_pos_of_eq_before Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_pos_of_eq_before {s t : Nat} (hst : s < t) (h : action s = a) : 0 < pullCount action a t
theorem BanditRLProof.pullCount_eq_of_forall_lt Compiled

Pull counts depend only on the half-open action prefix `0, ..., t - 1`. This keeps later adaptive-policy wrappers from reproving the same induction when a history-generated trace is known to agree pointwise with an index-policy trace up to a finite horizon.

theorem pullCount_eq_of_forall_lt (action action' : ActionTrace Action) (a : Action) : forall t : Nat, (forall s : Nat, s < t -> action s = action' s) -> pullCount action a t = pullCount action' a t
theorem BanditRLProof.pullCount_const_self Compiled

No declaration docstring is present; use the chapter context and exact statement below.

@[simp] theorem pullCount_const_self (a : Action) (t : Nat) : pullCount (fun _ => a) a t = t
theorem BanditRLProof.pullCount_const_of_ne Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_const_of_ne (b : Action) (h : b ≠ a) (t : Nat) : pullCount (fun _ => b) a t = 0
theorem BanditRLProof.pullCount_add_eq_of_forall_ne_between Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_add_eq_of_forall_ne_between (n : Nat) (h : ∀ s, t ≤ s → s < t + n → action s ≠ a) : pullCount action a (t + n) = pullCount action a t
theorem BanditRLProof.pullCount_add_eq_add_of_forall_eq_between Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pullCount_add_eq_add_of_forall_eq_between (n : Nat) (h : ∀ s, t ≤ s → s < t + n → action s = a) : pullCount action a (t + n) = pullCount action a t + n
theorem BanditRLProof.pullCount_eq_list_filter_length Compiled

The recursive pull count equals the number of matching actions in the half-open time prefix `0, ..., t - 1`. This is intentionally a dependency-light `List.range` bridge. The Mathlib `Finset.range` cardinality wrapper is a separate downstream leaf.

theorem pullCount_eq_list_filter_length : pullCount action a t = ((List.range t).filter (fun s : Nat => decide (action s = a))).length
theorem BanditRLProof.sumRewards_succ_of_eq Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem sumRewards_succ_of_eq (h : action t = a) : sumRewards action reward a (t + 1) = sumRewards action reward a t + reward t
theorem BanditRLProof.sumRewards_succ_of_ne Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem sumRewards_succ_of_ne (hzero : ∀ x : Reward, x + 0 = x) (h : action t ≠ a) : sumRewards action reward a (t + 1) = sumRewards action reward a t
theorem BanditRLProof.sumRewards_eq_zero_of_forall_ne Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem sumRewards_eq_zero_of_forall_ne (hzero : ∀ x : Reward, x + 0 = x) (h : ∀ s, s < t → action s ≠ a) : sumRewards action reward a t = 0
theorem BanditRLProof.sumRewards_const_of_ne Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem sumRewards_const_of_ne (hzero : ∀ x : Reward, x + 0 = x) (b : Action) (h : b ≠ a) (t : Nat) : sumRewards (fun _ => b) reward a t = 0
theorem BanditRLProof.sumRewards_add_eq_of_forall_ne_between Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem sumRewards_add_eq_of_forall_ne_between (hzero : ∀ x : Reward, x + 0 = x) (n : Nat) (h : ∀ s, t ≤ s → s < t + n → action s ≠ a) : sumRewards action reward a (t + n) = sumRewards action reward a t
theorem BanditRLProof.sumRewards_eq_list_range_foldl Compiled

The recursive reward sum equals a left fold over the half-open time prefix. This bridge deliberately keeps the false-branch `+ 0` steps in the fold, so it does not require additive laws beyond the weak assumptions used by `sumRewards`.

theorem sumRewards_eq_list_range_foldl : sumRewards action reward a t = (List.range t).foldl (fun acc s => acc + if action s = a then reward s else 0) 0
theorem BanditRLProof.sumRewards_eq_list_range_filter_foldl Compiled

The reward sum can also drop nonmatching time steps from the list fold when the accumulator has a right-zero law. This is still dependency-light: it uses `List.range` and `List.filter`, not a Mathlib `Finset` sum.

theorem sumRewards_eq_list_range_filter_foldl (hzero : ∀ x : Reward, x + 0 = x) : sumRewards action reward a t = ((List.range t).filter (fun s : Nat => decide (action s = a))).foldl (fun acc s => acc + reward s) 0
theorem BanditRLProof.FiniteBanditModel.bestMean_eq_mean_bestArm Compiled

No declaration docstring is present; use the chapter context and exact statement below.

@[simp] theorem bestMean_eq_mean_bestArm (model : FiniteBanditModel K) : model.bestMean = model.mean model.bestArm
theorem BanditRLProof.FiniteBanditModel.gap_of_ne_bestArm Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem gap_of_ne_bestArm (model : FiniteBanditModel K) (arm : Fin K) (h : arm ≠ model.bestArm) : model.gap arm = model.bestMean - model.mean arm
theorem BanditRLProof.pseudoRegret_one Compiled

No declaration docstring is present; use the chapter context and exact statement below.

@[simp] theorem pseudoRegret_one : pseudoRegret model action 1 = model.gap (action 0)
theorem BanditRLProof.pseudoRegret_succ_of_bestArm Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pseudoRegret_succ_of_bestArm (h : action t = model.bestArm) : pseudoRegret model action (t + 1) = pseudoRegret model action t
theorem BanditRLProof.pseudoRegret_succ_of_gap_zero Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pseudoRegret_succ_of_gap_zero (h : model.gap (action t) = 0) : pseudoRegret model action (t + 1) = pseudoRegret model action t
theorem BanditRLProof.pseudoRegret_eq_zero_of_forall_bestArm Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pseudoRegret_eq_zero_of_forall_bestArm (h : ∀ s, s < t → action s = model.bestArm) : pseudoRegret model action t = 0
theorem BanditRLProof.pseudoRegret_eq_zero_of_forall_gap_zero Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pseudoRegret_eq_zero_of_forall_gap_zero (h : ∀ s, s < t → model.gap (action s) = 0) : pseudoRegret model action t = 0
theorem BanditRLProof.pseudoRegret_const_bestArm Compiled

No declaration docstring is present; use the chapter context and exact statement below.

@[simp] theorem pseudoRegret_const_bestArm : pseudoRegret model (fun _ => model.bestArm) t = 0
theorem BanditRLProof.pseudoRegret_const_of_gap_zero Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pseudoRegret_const_of_gap_zero (arm : Fin K) (h : model.gap arm = 0) : pseudoRegret model (fun _ => arm) t = 0
theorem BanditRLProof.pseudoRegret_add_eq_of_forall_bestArm_between Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pseudoRegret_add_eq_of_forall_bestArm_between (n : Nat) (h : ∀ s, t ≤ s → s < t + n → action s = model.bestArm) : pseudoRegret model action (t + n) = pseudoRegret model action t
theorem BanditRLProof.pseudoRegret_add_eq_of_forall_gap_zero_between Compiled

No declaration docstring is present; use the chapter context and exact statement below.

theorem pseudoRegret_add_eq_of_forall_gap_zero_between (n : Nat) (h : ∀ s, t ≤ s → s < t + n → model.gap (action s) = 0) : pseudoRegret model action (t + n) = pseudoRegret model action t
theorem BanditRLProof.pseudoRegret_eq_list_range_foldl Compiled

The recursive pseudo-regret equals a left fold over the half-open time prefix. This is the dependency-light `List.range` bridge for the Rat-valued regret accumulator. It matches the recursive bracketing directly.

theorem pseudoRegret_eq_list_range_foldl : pseudoRegret model action t = (List.range t).foldl (fun acc s => acc + model.gap (action s)) 0