@@ -5,27 +5,17 @@ Authors: Rémy Degenne, Paulo Rauber
55-/
66import Mathlib
77import LeanBandits.ForMathlib.CondDistrib
8+ import LeanBandits.ForMathlib.KernelCompositionLemmas
9+ import LeanBandits.ForMathlib.Traj
810
911/-!
1012# Bandit
11-
1213-/
1314
1415open MeasureTheory ProbabilityTheory Filter Real Finset
1516
1617open scoped ENNReal NNReal
1718
18- instance : Unique (Iic 0 ) := by simp only [mem_Iic, nonpos_iff_eq_zero]; exact Unique.subtypeEq 0
19-
20- lemma coe_default_Iic_zero : ((default : Iic 0 ) : ℕ) = 0 := by
21- calc _ = ((⟨0 , by simp⟩ : Iic 0 ) : ℕ) := by congr; exact (Unique.eq_default _).symm
22- _ = _ := by simp
23-
24- /-- Measurable equivalence between `Iic 0 → X i` and `X 0`. -/
25- def MeasurableEquiv.piIicZero (X : ℕ → Type *) [∀ n, MeasurableSpace (X n)] :
26- ((i : Iic 0 ) → X i) ≃ᵐ X 0 :=
27- (MeasurableEquiv.piUnique _).trans (coe_default_Iic_zero.symm ▸ MeasurableEquiv.refl _)
28-
2919namespace Bandits
3020
3121variable {α R : Type *} {mα : MeasurableSpace α} {mR : MeasurableSpace R}
@@ -84,22 +74,15 @@ deriving IsMarkovKernel
8474/-- Measure on the sequence of arms pulled and rewards observed generated by the bandit. -/
8575noncomputable
8676def trajMeasure (alg : Algorithm α R) (ν : Kernel α R) [IsMarkovKernel ν] : Measure (ℕ → α × R) :=
87- (traj alg ν 0 ) ∘ₘ ((alg.p0 ⊗ₘ ν).map (MeasurableEquiv.piIicZero (fun _ ↦ α × R)).symm)
77+ Kernel.trajMeasure (alg.p0 ⊗ₘ ν) (stepKernel alg ν)
78+ deriving IsProbabilityMeasure
8879
8980/-- Measure of an infinite stream of rewards from each arm. -/
9081noncomputable
9182def streamMeasure (ν : Kernel α R) [IsMarkovKernel ν] : Measure (ℕ → α → R) :=
9283 Measure.infinitePi fun _ ↦ Measure.infinitePi ν
9384deriving IsProbabilityMeasure
9485
95- instance (alg : Algorithm α R) (ν : Kernel α R) [IsMarkovKernel ν] :
96- IsProbabilityMeasure (trajMeasure alg ν) := by
97- rw [trajMeasure]
98- have : IsProbabilityMeasure
99- ((alg.p0 ⊗ₘ ν).map (MeasurableEquiv.piIicZero (fun _ ↦ α × R)).symm) :=
100- isProbabilityMeasure_map <| by fun_prop
101- infer_instance
102-
10386/-- Joint distribution of the sequence of arm pulled and rewards, and a stream of independent
10487rewards from all arms. -/
10588noncomputable
@@ -171,57 +154,6 @@ open Kernel Preorder
171154variable {X : ℕ → Type *} [∀ n, MeasurableSpace (X n)]
172155 {κ : (n : ℕ) → Kernel ((i : { x // x ∈ Iic n }) → X i) (X (n + 1 ))} [∀ n, IsMarkovKernel (κ n)]
173156
174- lemma Measure.compProd_map {X Y Z : Type *} {mX : MeasurableSpace X} {mY : MeasurableSpace Y}
175- {mZ : MeasurableSpace Z} {μ : Measure X} {κ : Kernel X Y} [SFinite μ] [IsSFiniteKernel κ]
176- {f : Y → Z} (hf : Measurable f) :
177- μ ⊗ₘ (κ.map f) = (μ ⊗ₘ κ).map (Prod.map id f) := by
178- calc μ ⊗ₘ (κ.map f)
179- _ = (Kernel.id ∥ₖ Kernel.deterministic f hf) ∘ₘ (Kernel.id ×ₖ κ) ∘ₘ μ := by
180- rw [Measure.comp_assoc, Kernel.parallelComp_comp_prod, Measure.compProd_eq_comp_prod,
181- Kernel.id_comp, Kernel.deterministic_comp_eq_map]
182- _ = (Kernel.id ∥ₖ Kernel.deterministic f hf) ∘ₘ (μ ⊗ₘ κ) := by rw [Measure.compProd_eq_comp_prod]
183- _ = (μ ⊗ₘ κ).map (Prod.map id f) := by
184- rw [Kernel.id, Kernel.deterministic_parallelComp_deterministic,
185- Measure.deterministic_comp_eq_map]
186-
187- lemma partialTraj_compProd_eq_traj_map_frestrictLe (a : ℕ) (x₀ : (i : Iic 0 ) → X i) :
188- (partialTraj κ 0 a x₀) ⊗ₘ (κ a) =
189- (traj κ 0 x₀).map (fun x ↦ (frestrictLe a x, x (a + 1 ))) := by
190- have h1 := partialTraj_compProd_traj (κ := κ) (zero_le a) x₀
191- have h2 : (fun x : Π n, X n ↦ (frestrictLe a x, x (a + 1 ))) =
192- (Prod.map id (fun x ↦ x (a + 1 ))) ∘ (fun x ↦ (frestrictLe a x, x)) := by ext <;> simp
193- rw [h2, ← Measure.map_map (by fun_prop) (by fun_prop), ← h1, ← Measure.compProd_map (by fun_prop)]
194- congr
195- have : (fun x : Π n, X n ↦ x (a + 1 )) =
196- (fun x : Π i : Iic (a + 1 ), X i ↦ x ⟨a+1 , by simp⟩) ∘ (frestrictLe (a + 1 )) := by ext; simp
197- rw [this, map_comp_right _ (by fun_prop) (by fun_prop), traj_map_frestrictLe,
198- partialTraj_succ_self, ← map_comp_right _ (by fun_prop) (by fun_prop)]
199- have : (fun x : Π i : Iic (a + 1 ), X i ↦ x ⟨a+1 , by simp⟩) ∘ IicProdIoc a (a + 1 )
200- = (MeasurableEquiv.piSingleton a).symm ∘ Prod.snd := by
201- ext; simp [_root_.IicProdIoc, MeasurableEquiv.piSingleton]
202- rw [this, map_comp_right _ (by fun_prop) (by fun_prop), ← snd_eq, snd_prod,
203- ← map_comp_right _ (by fun_prop) (by fun_prop)]
204- simp
205-
206- lemma traj_cond_lemma1 {a : ℕ} (μ₀ : Measure ((i : Iic 0 ) → X i)) [IsFiniteMeasure μ₀] :
207- (traj κ 0 ∘ₘ μ₀).map (fun x ↦ (frestrictLe a x, x (a + 1 )))
208- = (traj κ 0 ∘ₘ μ₀).map (frestrictLe a) ⊗ₘ κ a := by
209- rw [Measure.compProd_eq_comp_prod, Measure.map_comp _ _ (by fun_prop),
210- Measure.map_comp _ _ (by fun_prop), Measure.comp_assoc, traj_map_frestrictLe]
211- congr
212- ext x₀ : 1
213- rw [ProbabilityTheory.Kernel.comp_apply, ← Measure.compProd_eq_comp_prod]
214- symm
215- rw [Kernel.map_apply _ (by fun_prop)]
216- exact partialTraj_compProd_eq_traj_map_frestrictLe a x₀
217-
218- lemma condDistrib_lemma (μ₀ : Measure ((i : Iic 0 ) → X i)) [IsFiniteMeasure μ₀] (a : ℕ)
219- [Nonempty (X (a + 1 ))] [StandardBorelSpace (X (a + 1 ))] :
220- condDistrib (fun x ↦ x (a + 1 )) (frestrictLe a) (traj κ 0 ∘ₘ μ₀)
221- =ᵐ[(traj κ 0 ∘ₘ μ₀).map (frestrictLe a)] κ a := by
222- symm
223- exact condDistrib_ae_eq_of_measure_eq_compProd (by fun_prop) (by fun_prop) _ (traj_cond_lemma1 μ₀)
224-
225157lemma traj_zero_map_eval_zero :
226158 (Kernel.traj κ 0 ).map (fun h ↦ h 0 )
227159 = Kernel.deterministic (MeasurableEquiv.piIicZero X)
@@ -240,9 +172,7 @@ lemma condDistrib_arm_reward [StandardBorelSpace α] [Nonempty α] [StandardBore
240172 (alg : Algorithm α R) (ν : Kernel α R) [IsMarkovKernel ν] (n : ℕ) :
241173 condDistrib (fun h ↦ (arm (n + 1 ) h, reward (n + 1 ) h)) (hist n) (Bandit.trajMeasure alg ν)
242174 =ᵐ[(Bandit.trajMeasure alg ν).map (hist n)] Bandit.stepKernel alg ν n :=
243- condDistrib_lemma (X := fun _ ↦ α × R)
244- ((alg.p0 ⊗ₘ ν).map (MeasurableEquiv.piIicZero (fun _ ↦ α × R)).symm)
245- (κ := Bandit.stepKernel alg ν) n
175+ Kernel.condDistrib_trajMeasure_ae_eq_kernel
246176
247177lemma condDistrib_reward [StandardBorelSpace α] [Nonempty α] [StandardBorelSpace R] [Nonempty R]
248178 (alg : Algorithm α R) (ν : Kernel α R) [IsMarkovKernel ν] (n : ℕ) :
@@ -267,9 +197,9 @@ lemma hasLaw_step_zero
267197 HasLaw (fun h : ℕ → α × R ↦ h 0 ) (alg.p0 ⊗ₘ ν) (Bandit.trajMeasure alg ν) where
268198 aemeasurable := Measurable.aemeasurable (by fun_prop)
269199 map_eq := by
270- simp only [Bandit.trajMeasure]
200+ simp only [Bandit.trajMeasure, Kernel.trajMeasure ]
271201 rw [← Measure.deterministic_comp_eq_map (by fun_prop), Measure.comp_assoc,
272- Kernel.deterministic_comp_eq_map, Bandit.traj, traj_zero_map_eval_zero,
202+ Kernel.deterministic_comp_eq_map, traj_zero_map_eval_zero,
273203 Measure.deterministic_comp_eq_map, Measure.map_map (by fun_prop) (by fun_prop)]
274204 simp
275205
0 commit comments