@@ -16,25 +16,25 @@ A Bayesian stationary environment is an environment that draws a parameter `e :
1616`stationaryEnv (κ.sectR e)`. Following the "announced variables" mechanism of
1717`LeanMachineLearning/SequentialLearning/Announce.lean`, the parameter is not hidden: it is part of
1818the environment's move, and the algorithm is the one that ignores it. Concretely,
19- `bayesStationaryEnv Q κ : Environment (𝓔 × Unit) 𝓐 𝓨` announces `e` in every observation and runs
20- against `alg.comapObs Prod.snd `, for an `alg : Algorithm Unit 𝓐 𝓨`.
19+ `bayesStationaryEnv Q κ : Environment 𝓔 𝓐 𝓨` announces `e` as the observation of every round and
20+ runs against `alg.comapObs (fun _ ↦ ()) `, for an `alg : Algorithm Unit 𝓐 𝓨`.
2121
2222The predicate `IsBayesAlgEnvSeq` is not a new notion of run: it is `IsAlgEnvSeq` for that pair,
2323for the observation process that announces the parameter `E` at every round.
2424
2525## Main definitions
2626
2727* `bayesStationaryEnv Q κ`: the environment that draws a parameter from `Q` before the first
28- round, announces it in the first component of every observation , and returns feedback `κ (e, a)`
29- when the parameter is `e` and the action is `a`.
28+ round, announces it as the observation of every round , and returns feedback `κ (e, a)` when the
29+ parameter is `e` and the action is `a`.
3030* `IsBayesAlgEnvSeq Q κ alg E A Y P`: states that the parameter `E : Ω → 𝓔` has law `Q` and that
3131 the sequences of actions `A : ℕ → Ω → 𝓐` and feedbacks `Y : ℕ → Ω → 𝓨` are generated by the
3232 algorithm `alg : Algorithm Unit 𝓐 𝓨` interacting with `bayesStationaryEnv Q κ`, which it sees
33- through `Algorithm.comapObs Prod.snd `. Equivalently, `A` and `Y` are generated by `alg`
33+ through `Algorithm.comapObs (fun _ ↦ ()) `. Equivalently, `A` and `Y` are generated by `alg`
3434 interacting with the stationary environment `stationaryEnv (κ.sectR (E ω))`.
3535* `bayesTrajMeasure Q κ alg`: for any choice of probability measure `Q : Measure 𝓔`, Markov kernel
3636 `κ : Kernel (𝓔 × 𝓐) 𝓨`, and algorithm `alg : Algorithm Unit 𝓐 𝓨`, provides a probability measure
37- `P : Measure (ℕ → Round (𝓔 × Unit) 𝓐 𝓨)` on a space that carries `E`, `A`, and `Y` such that
37+ `P : Measure (ℕ → Round 𝓔 𝓐 𝓨)` on a space that carries `E`, `A`, and `Y` such that
3838 `IsBayesAlgEnvSeq Q κ alg E A Y P`.
3939* `bayesTrajMeasurePosterior Q κ alg n`: a `Kernel (Hist Unit 𝓐 𝓨 n) 𝓔` that represents the
4040 posterior over `E` given the history before time `n` (the `n` first rounds) under
@@ -44,8 +44,8 @@ for the observation process that announces the parameter `E` at every round.
4444
4545 ## Main results
4646
47- * `IsAlgEnvSeq.isBayesAlgEnvSeq`: a run of `alg.comapObs Prod.snd` against `bayesStationaryEnv Q κ`
48- is a Bayesian algorithm-environment sequence for the announced parameter.
47+ * `IsAlgEnvSeq.isBayesAlgEnvSeq`: a run of `alg.comapObs (fun _ ↦ ())` against
48+ `bayesStationaryEnv Q κ` is a Bayesian algorithm-environment sequence for the announced parameter.
4949* `ae_IsAlgEnvSeq h`: if `h : IsBayesAlgEnvSeq Q κ alg E A Y P`, for `Q`-almost every `e : 𝓔`,
5050 `IsAlgEnvSeq O' A' Y' alg (stationaryEnv (κ.sectR e)) (condDistrib (trajectory _ A Y) E P e)` for
5151 some sequence of actions `A' : ℕ → (ℕ → Round Unit 𝓐 𝓨) → 𝓐` and sequence of feedbacks
@@ -69,46 +69,44 @@ variable [MeasurableSpace 𝓔] [MeasurableSpace 𝓐] [MeasurableSpace 𝓨] [M
6969
7070section BayesEnv
7171
72- /-- The environment that draws a parameter `e : 𝓔` from `Q` before the first round, announces it in
73- the first component of every observation , and returns a feedback drawn from `κ (e, a)` when the
74- action is `a`. The algorithm is meant to ignore the announced parameter, that is, to run through
75- `Algorithm.comapObs Prod.snd `. -/
72+ /-- The environment that draws a parameter `e : 𝓔` from `Q` before the first round, announces it as
73+ the observation of every round , and returns a feedback drawn from `κ (e, a)` when the action is
74+ `a`. The algorithm is meant to ignore the announced parameter, that is, to run through
75+ `Algorithm.comapObs (fun _ ↦ ()) `. -/
7676noncomputable
7777def bayesStationaryEnv (Q : Measure 𝓔) [IsProbabilityMeasure Q] (κ : Kernel (𝓔 × 𝓐) 𝓨)
78- [IsMarkovKernel κ] : Environment (𝓔 × Unit) 𝓐 𝓨 where
78+ [IsMarkovKernel κ] : Environment 𝓔 𝓐 𝓨 where
7979 obs
80- | 0 => Kernel.const _ (Q.prod (Measure.dirac ()))
80+ | 0 => Kernel.const _ Q
8181 | _ + 1 => Kernel.deterministic (fun h ↦ (h 0 ).obs) (by fun_prop)
82- feedback _ := κ.comap (fun p ↦ (p.1 .2 . 1 , p.2 )) (by fun_prop)
82+ feedback _ := κ.comap (fun p ↦ (p.1 .2 , p.2 )) (by fun_prop)
8383 isMarkovKernel_obs n := by cases n <;> infer_instance
8484
8585variable {Q : Measure 𝓔} [IsProbabilityMeasure Q] {κ : Kernel (𝓔 × 𝓐) 𝓨} [IsMarkovKernel κ]
8686
8787@[simp]
88- lemma obs_bayesStationaryEnv_zero :
89- (bayesStationaryEnv Q κ).obs 0 = Kernel.const _ (Q.prod (Measure.dirac ())) := rfl
88+ lemma obs_bayesStationaryEnv_zero : (bayesStationaryEnv Q κ).obs 0 = Kernel.const _ Q := rfl
9089
9190@[simp]
9291lemma obs_bayesStationaryEnv_succ (n : ℕ) :
9392 (bayesStationaryEnv Q κ).obs (n + 1 )
94- = Kernel.deterministic (fun h : Hist (𝓔 × Unit) 𝓐 𝓨 (n + 1 ) ↦ (h 0 ).obs) (by fun_prop) := rfl
93+ = Kernel.deterministic (fun h : Hist 𝓔 𝓐 𝓨 (n + 1 ) ↦ (h 0 ).obs) (by fun_prop) := rfl
9594
9695@[simp]
9796lemma feedback_bayesStationaryEnv (n : ℕ) :
98- (bayesStationaryEnv Q κ).feedback n = κ.comap (fun p ↦ (p.1 .2 . 1 , p.2 )) (by fun_prop) := rfl
97+ (bayesStationaryEnv Q κ).feedback n = κ.comap (fun p ↦ (p.1 .2 , p.2 )) (by fun_prop) := rfl
9998
10099@[simp]
101- lemma obs0_bayesStationaryEnv : (bayesStationaryEnv Q κ).obs0 = Q.prod (Measure.dirac ()) := rfl
100+ lemma obs0_bayesStationaryEnv : (bayesStationaryEnv Q κ).obs0 = Q := rfl
102101
103102@[simp]
104- lemma ν0_bayesStationaryEnv :
105- (bayesStationaryEnv Q κ).ν0 = κ.comap (fun p ↦ (p.1 .1 , p.2 )) (by fun_prop) := rfl
103+ lemma ν0_bayesStationaryEnv : (bayesStationaryEnv Q κ).ν0 = κ := rfl
106104
107105end BayesEnv
108106
109- /-- Insert an announced parameter `e` into every round of an observable history. -/
110- def announceHist (e : 𝓔) {n : ℕ} (h : Hist Unit 𝓐 𝓨 n) : Hist (𝓔 × Unit) 𝓐 𝓨 n :=
111- fun i ↦ ((e, ()) , (h i).action, (h i).feedback)
107+ /-- Insert an announced parameter `e` as the observation of every round of an observable history. -/
108+ def announceHist (e : 𝓔) {n : ℕ} (h : Hist Unit 𝓐 𝓨 n) : Hist 𝓔 𝓐 𝓨 n :=
109+ fun i ↦ (e , (h i).action, (h i).feedback)
112110
113111@[fun_prop]
114112lemma measurable_announceHist (n : ℕ) :
@@ -123,13 +121,13 @@ interacting with an underlying environment that depends on `E` and `κ`
123121(`stationaryEnv (κ.sectR (E ω))`).
124122
125123This is `IsAlgEnvSeq` for the announcing environment `bayesStationaryEnv Q κ` and the algorithm
126- `alg.comapObs Prod.snd ` that ignores the announced parameter: the observation at every round is
127- `( E ω, ()) `. -/
124+ `alg.comapObs (fun _ ↦ ()) ` that ignores the announced parameter: the observation at every round
125+ is ` E ω`. -/
128126def IsBayesAlgEnvSeq (Q : Measure 𝓔) [IsProbabilityMeasure Q] (κ : Kernel (𝓔 × 𝓐) 𝓨)
129127 [IsMarkovKernel κ] (alg : Algorithm Unit 𝓐 𝓨)
130128 (E : Ω → 𝓔) (A : ℕ → Ω → 𝓐) (Y : ℕ → Ω → 𝓨)
131129 (P : Measure Ω) [IsProbabilityMeasure P] : Prop :=
132- IsAlgEnvSeq (fun _ ω ↦ (E ω, ())) A Y (alg.comapObs Prod.snd ) (bayesStationaryEnv Q κ) P
130+ IsAlgEnvSeq (fun _ ↦ E) A Y (alg.comapObs ( fun _ : 𝓔 ↦ ()) ) (bayesStationaryEnv Q κ) P
133131
134132namespace IsBayesAlgEnvSeq
135133
@@ -154,43 +152,38 @@ lemma mk (hasLaw_env : HasLaw E Q P)
154152 (measurable_action : ∀ n, Measurable (A n) := by fun_prop)
155153 (measurable_feedback : ∀ n, Measurable (Y n) := by fun_prop) :
156154 IsBayesAlgEnvSeq Q κ alg E A Y P := by
157- have hO : ∀ _ : ℕ, Measurable (fun ω ↦ ((E ω, ()) : 𝓔 × Unit)) :=
158- fun _ ↦ measurable_param.prodMk measurable_const
159- refine IsAlgEnvSeq.mk hO measurable_action measurable_feedback ?_ ?_ ?_
155+ refine IsAlgEnvSeq.mk (fun _ ↦ measurable_param) measurable_action measurable_feedback ?_ ?_ ?_
160156 · intro n
161157 cases n with
162158 | zero =>
163159 rw [history_zero, obs_bayesStationaryEnv_zero]
164- refine HasLaw.hasCondDistrib_const ⟨(hO 0 ).aemeasurable, ?_⟩
165- rw [Kernel.const_apply, Measure.prod_dirac, ← hasLaw_env.map_eq,
166- AEMeasurable.map_map_of_aemeasurable (by fun_prop) hasLaw_env.aemeasurable]
167- rfl
160+ exact hasLaw_env.hasCondDistrib_const
168161 | succ n =>
169162 rw [obs_bayesStationaryEnv_succ]
170163 exact hasCondDistrib_deterministic _
171- (measurable_history hO measurable_action measurable_feedback (n + 1 )).aemeasurable
172- (ae_of_all _ fun _ ↦ rfl)
164+ (measurable_history ( fun _ ↦ measurable_param) measurable_action measurable_feedback
165+ (n + 1 )).aemeasurable (ae_of_all _ fun _ ↦ rfl)
173166 · intro n
174167 exact HasCondDistrib.comp_right
175- (f := fun q : 𝓔 × (Hist Unit 𝓐 𝓨 n × Unit) ↦ (announceHist q.1 q.2 .1 , ( q.1 , q. 2 . 2 ) ))
168+ (f := fun q : 𝓔 × (Hist Unit 𝓐 𝓨 n × Unit) ↦ (announceHist q.1 q.2 .1 , q.1 ))
176169 (hf := by fun_prop)
177170 (Z := fun ω ↦ (E ω, (history (noObs Ω) A Y n ω, noObs Ω n ω)))
178171 (hasCondDistrib_action n)
179172 · intro n
180173 exact HasCondDistrib.comp_right
181174 (f := fun q : (Hist Unit 𝓐 𝓨 n × Unit) × (𝓔 × 𝓐) ↦
182- ((announceHist q.2 .1 q.1 .1 , ( q.2 .1 , q. 1 . 2 ) ), q.2 .2 ))
175+ ((announceHist q.2 .1 q.1 .1 , q.2 .1 ), q.2 .2 ))
183176 (hf := by fun_prop)
184177 (Z := fun ω ↦ ((history (noObs Ω) A Y n ω, noObs Ω n ω), (E ω, A n ω)))
185178 (hasCondDistrib_feedback n)
186179
187180/-- A Bayesian algorithm-environment sequence is an algorithm-environment sequence for the
188181announcing environment `bayesStationaryEnv Q κ`. -/
189182lemma isAlgEnvSeq (h : IsBayesAlgEnvSeq Q κ alg E A Y P) :
190- IsAlgEnvSeq (fun _ ω ↦ (E ω, ())) A Y (alg.comapObs Prod.snd ) (bayesStationaryEnv Q κ) P := h
183+ IsAlgEnvSeq (fun _ ↦ E) A Y (alg.comapObs ( fun _ : 𝓔 ↦ ()) ) (bayesStationaryEnv Q κ) P := h
191184
192185lemma measurable_param (h : IsBayesAlgEnvSeq Q κ alg E A Y P) : Measurable E :=
193- ( h.isAlgEnvSeq.measurable_obs 0 ).fst
186+ h.isAlgEnvSeq.measurable_obs 0
194187
195188lemma measurable_action (h : IsBayesAlgEnvSeq Q κ alg E A Y P) (n : ℕ) : Measurable (A n) :=
196189 h.isAlgEnvSeq.measurable_action n
@@ -202,22 +195,17 @@ lemma measurable_feedback (h : IsBayesAlgEnvSeq Q κ alg E A Y P) (n : ℕ) : Me
202195lemma hasLaw_env (h : IsBayesAlgEnvSeq Q κ alg E A Y P) : HasLaw E Q P := by
203196 have h0 := h.isAlgEnvSeq.hasCondDistrib_obs 0
204197 rw [history_zero] at h0
205- have h1 : HasLaw (fun ω ↦ (E ω, ())) (Q.prod (Measure.dirac ())) P := h0.hasLaw_of_const'
206- refine ⟨h.measurable_param.aemeasurable, ?_⟩
207- have h2 : E = Prod.fst ∘ (fun ω ↦ (E ω, ())) := rfl
208- rw [h2, ← Measure.map_map measurable_fst
209- (h.measurable_param.prodMk (measurable_const : Measurable fun _ : Ω ↦ ())), h1.map_eq]
210- exact Measure.fst_prod
198+ exact h0.hasLaw_of_const'
211199
212200/-- The action at time `n` has the correct conditional distribution given the parameter and the
213201history: it depends only on the history. -/
214202lemma hasCondDistrib_action (h : IsBayesAlgEnvSeq Q κ alg E A Y P) (n : ℕ) :
215203 HasCondDistrib (A n) (fun ω ↦ (E ω, (history (noObs Ω) A Y n ω, noObs Ω n ω)))
216204 ((alg.policy n).prodMkLeft _) P :=
217205 HasCondDistrib.comp_right
218- (f := fun p : Hist (𝓔 × Unit) 𝓐 𝓨 n × (𝓔 × Unit) ↦ (p.2 . 1 , (Hist.mapObs Prod.snd p.1 , p. 2 . 2 )))
206+ (f := fun p : Hist 𝓔 𝓐 𝓨 n × 𝓔 ↦ (p.2 , (Hist.mapObs ( fun _ ↦ ()) p.1 , () )))
219207 (hf := by fun_prop)
220- (Z := fun ω ↦ (history (fun _ ω ↦ (E ω, ())) A Y n ω, ( E ω, ()) ))
208+ (Z := fun ω ↦ (history (fun _ ↦ E) A Y n ω, E ω))
221209 (h.isAlgEnvSeq.hasCondDistrib_action n)
222210
223211/-- The feedback at time `n` has the correct conditional distribution given the history, the
@@ -226,10 +214,10 @@ lemma hasCondDistrib_feedback (h : IsBayesAlgEnvSeq Q κ alg E A Y P) (n : ℕ)
226214 HasCondDistrib (Y n) (fun ω ↦ ((history (noObs Ω) A Y n ω, noObs Ω n ω), (E ω, A n ω)))
227215 (κ.prodMkLeft _) P :=
228216 HasCondDistrib.comp_right
229- (f := fun p : (Hist (𝓔 × Unit) 𝓐 𝓨 n × (𝓔 × Unit) ) × 𝓐 ↦
230- ((Hist.mapObs Prod.snd p.1 .1 , p. 1 . 2 . 2 ) , (p.1 .2 . 1 , p.2 )))
217+ (f := fun p : (Hist 𝓔 𝓐 𝓨 n × 𝓔 ) × 𝓐 ↦
218+ ((Hist.mapObs ( fun _ ↦ ()) p.1 .1 , ()) , (p.1 .2 , p.2 )))
231219 (hf := by fun_prop)
232- (Z := fun ω ↦ ((history (fun _ ω ↦ (E ω, ())) A Y n ω, ( E ω, ()) ), A n ω))
220+ (Z := fun ω ↦ ((history (fun _ ↦ E) A Y n ω, E ω), A n ω))
233221 (h.isAlgEnvSeq.hasCondDistrib_feedback n)
234222
235223lemma hasCondDistrib_action' (h : IsBayesAlgEnvSeq Q κ alg E A Y P) (n : ℕ) :
@@ -325,16 +313,16 @@ end IsBayesAlgEnvSeq
325313section IsAlgEnvSeq
326314
327315variable {Q : Measure 𝓔} [IsProbabilityMeasure Q] {κ : Kernel (𝓔 × 𝓐) 𝓨} [IsMarkovKernel κ]
328- variable {alg : Algorithm Unit 𝓐 𝓨} {O : ℕ → Ω → 𝓔 × Unit } {A : ℕ → Ω → 𝓐} {Y : ℕ → Ω → 𝓨}
316+ variable {alg : Algorithm Unit 𝓐 𝓨} {O : ℕ → Ω → 𝓔} {A : ℕ → Ω → 𝓐} {Y : ℕ → Ω → 𝓨}
329317variable {P : Measure Ω} [IsProbabilityMeasure P]
330318
331319/-- Under `bayesStationaryEnv Q κ`, the announced parameter is almost surely the same at every
332320round. -/
333321lemma IsAlgEnvSeq.ae_obs_eq_obs_zero [StandardBorelSpace 𝓔]
334- (h : IsAlgEnvSeq O A Y (alg.comapObs Prod.snd ) (bayesStationaryEnv Q κ) P) (n : ℕ) :
335- ( fun ω ↦ (( O 0 ω). 1 , ())) =ᵐ[P] O n := by
322+ (h : IsAlgEnvSeq O A Y (alg.comapObs ( fun _ : 𝓔 ↦ ()) ) (bayesStationaryEnv Q κ) P) (n : ℕ) :
323+ O 0 =ᵐ[P] O n := by
336324 cases n with
337- | zero => exact ae_of_all _ fun _ ↦ rfl
325+ | zero => rfl
338326 | succ n =>
339327 have h1 := h.hasCondDistrib_obs (n + 1 )
340328 rw [obs_bayesStationaryEnv_succ] at h1
@@ -344,46 +332,40 @@ lemma IsAlgEnvSeq.ae_obs_eq_obs_zero [StandardBorelSpace 𝓔]
344332 rw [hω]
345333 simp [history_apply]
346334
347- /-- A run of `alg.comapObs Prod.snd` against the announcing environment `bayesStationaryEnv Q κ`
348- is a Bayesian algorithm-environment sequence for the announced parameter. -/
335+ /-- A run of `alg.comapObs (fun _ ↦ ())` against the announcing environment
336+ `bayesStationaryEnv Q κ` is a Bayesian algorithm-environment sequence for the announced
337+ parameter. -/
349338lemma IsAlgEnvSeq.isBayesAlgEnvSeq [StandardBorelSpace 𝓔]
350- (h : IsAlgEnvSeq O A Y (alg.comapObs Prod.snd) (bayesStationaryEnv Q κ) P) :
351- IsBayesAlgEnvSeq Q κ alg (fun ω ↦ (O 0 ω).1 ) A Y P :=
352- h.congr (fun _ ↦ (h.measurable_obs 0 ).fst.prodMk measurable_const)
353- h.measurable_action h.measurable_feedback h.ae_obs_eq_obs_zero
354- (fun _ ↦ .rfl) (fun _ ↦ .rfl)
339+ (h : IsAlgEnvSeq O A Y (alg.comapObs (fun _ : 𝓔 ↦ ())) (bayesStationaryEnv Q κ) P) :
340+ IsBayesAlgEnvSeq Q κ alg (O 0 ) A Y P :=
341+ h.congr (fun _ ↦ h.measurable_obs 0 ) h.measurable_action h.measurable_feedback
342+ h.ae_obs_eq_obs_zero (fun _ ↦ .rfl) (fun _ ↦ .rfl)
355343
356344end IsAlgEnvSeq
357345
358346namespace IT
359347
360348/-- A measure `P` on a measurable space that carries random variables `E`, `A`, and `Y` such that
361- `IsBayesAlgEnvSeq Q κ alg E A Y P`. -/
349+ `IsBayesAlgEnvSeq Q κ alg E A Y P`. The parameter is the observation of the first round,
350+ `IT.obs 0`. -/
362351noncomputable
363352def bayesTrajMeasure (Q : Measure 𝓔) [IsProbabilityMeasure Q] (κ : Kernel (𝓔 × 𝓐) 𝓨)
364- [IsMarkovKernel κ] (alg : Algorithm Unit 𝓐 𝓨) : Measure (ℕ → Round (𝓔 × Unit) 𝓐 𝓨) :=
365- trajMeasure (alg.comapObs Prod.snd ) (bayesStationaryEnv Q κ)
353+ [IsMarkovKernel κ] (alg : Algorithm Unit 𝓐 𝓨) : Measure (ℕ → Round 𝓔 𝓐 𝓨) :=
354+ trajMeasure (alg.comapObs ( fun _ : 𝓔 ↦ ()) ) (bayesStationaryEnv Q κ)
366355deriving IsProbabilityMeasure
367356
368- /-- The parameter announced by `bayesStationaryEnv Q κ`, read on the trajectory space. -/
369- def param (τ : ℕ → Round (𝓔 × Unit) 𝓐 𝓨) : 𝓔 := (IT.obs 0 τ).1
370-
371- @[fun_prop]
372- lemma measurable_param : Measurable (param (𝓔 := 𝓔) (𝓐 := 𝓐) (𝓨 := 𝓨)) := by
373- unfold param; fun_prop
374-
375357lemma isBayesAlgEnvSeq_bayesTrajMeasure [StandardBorelSpace 𝓔]
376358 (Q : Measure 𝓔) [IsProbabilityMeasure Q] (κ : Kernel (𝓔 × 𝓐) 𝓨) [IsMarkovKernel κ]
377359 (alg : Algorithm Unit 𝓐 𝓨) :
378- IsBayesAlgEnvSeq Q κ alg param action feedback (bayesTrajMeasure Q κ alg) :=
360+ IsBayesAlgEnvSeq Q κ alg (obs 0 ) action feedback (bayesTrajMeasure Q κ alg) :=
379361 (isAlgEnvSeq_trajMeasure _ _).isBayesAlgEnvSeq
380362
381363/-- A kernel that represents the posterior over `E` given the history before time `n`. -/
382364noncomputable
383365def bayesTrajMeasurePosterior [StandardBorelSpace 𝓔] [Nonempty 𝓔]
384366 (Q : Measure 𝓔) [IsProbabilityMeasure Q] (κ : Kernel (𝓔 × 𝓐) 𝓨) [IsMarkovKernel κ]
385367 (alg : Algorithm Unit 𝓐 𝓨) (n : ℕ) : Kernel (Hist Unit 𝓐 𝓨 n) 𝓔 :=
386- condDistrib param (history (noObs _) action feedback n) (bayesTrajMeasure Q κ alg)
368+ condDistrib (obs 0 ) (history (noObs _) action feedback n) (bayesTrajMeasure Q κ alg)
387369deriving IsMarkovKernel
388370
389371/-- The posterior given the empty history is the prior. -/
0 commit comments