Samplinglib
Lean gate not recorded for this source state main · 0e31a3cda412

FiniteRGOProgram: mathematical reading route

Read the statements and derivations in source order. Every result has its own optional Lean statement and proof. Source assumptions, library reuse and unproved boundaries are kept explicit.

  1. Finite threshold-absorbed RGO execution, terminal marginal and ideal recovery
ASTIS mathematical exposition

Finite threshold-absorbed RGO execution, terminal marginal and ideal recovery

AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.FiniteRGOProgram.finite_rgo_program · theorem · Teaching coverage

Statement

Let E be a finite-dimensional real inner-product Borel space, mu a probability measure, and S the state space of tuples (b,u,k,h) with nonnegative precision b, center u, natural count k and padded E-valued sequence h. Fix measurable a:S to R, positive at every state, and a nonnegative threshold B. Define F(s,y) by b_new=b+1/a(s), u_new=(b*u+y/a(s))/b_new, k_new=k+1 and h_new=(y,h(0),h(1),...). There exist Markov target and observation kernels T,H, before every choice of Markov Q,L, with T(s) the mu tilt by -b*norm(x-u)^2/2 and H(s) its actual Gaussian smoothing at standard deviation sqrt(a(s)). For each Q,L there are a Markov transition P and Markov output kernels R_n. P(s) is the point mass at s if B<=b and the F(s,.) pushforward of Q(s) otherwise. R_0=L; R_(n+1)(s) is L(s) if B<=b and the Q(s) integral of R_n(F(s,y)) otherwise. At stopped states every R_n(s)=L(s). The actual finite path kernel started at s, advanced by P for n transitions, projected to its final state and followed by L equals R_n. If Q=H and L=T, every R_n=T.

\[R_{n+1}(s)=\begin{cases}L(s),&B\le b(s),\\\int R_n(F(s,y))\,Q(s)(dy),&b(s)<B,\end{cases}\qquad Q=H,\ L=T\ \Longrightarrow\ R_n=T.\]

All objects and hypotheses

  • E has its Borel measurable structure and is finite-dimensional over the reals; mu is any probability measure, with no density or moment assumption.
  • S is the product of nonnegative real precision, E, natural count and the countable product E^N. The update is explicit; no history validity is inferred for arbitrary starting count/sequence.
  • a is measurable and strictly positive at every state, including stopped states. Source maps such as a=(eta+tau)/beta_A remain to be instantiated.
  • B is nonnegative. The paper uses the positive inverse terminal variance; B=0 is a valid immediate-stop generalization.
  • Q and L are arbitrary Markov kernels. The same globally constructed T,H precede them, and the constructed P is used for every finite depth.
  • At a finite cap the remaining call is represented by L even if the threshold was not reached. Exact ideal recovery uses both Q=H and L=T; no approximation or runtime bound follows.

Mathematical proof

1. Make the parameter and history update measurable

The nonnegative new precision is b+1/a(s), positive because a(s)>0. Inversion, scalar multiplication and addition make the weighted center measurable. Incrementing the count is measurable. Each coordinate of the prepended sequence is either the new observation or a coordinate of the old sequence, so the entire countable-product update F is measurable.

\[F((b,u,k,h),y)=\left(b+a(s)^{-1},\frac{bu+a(s)^{-1}y}{b+a(s)^{-1}},k+1,(y,h_0,h_1,\ldots)\right).\]
Corresponding Lean step

Local measurable_program_update; Measurable.prodMk, Measurable.subtype_mk, measurable_pi_lambda and coordinate cases.

2. Derive ideal posterior consistency from the actual updated target

Apply StateDependentRGO to the current precision and center maps. Its globally measurable T,H and retained-state posterior use exactly the updated quadratic parameters. Consequently the posterior at (s,y), after discarding its retained s coordinate, equals T(F(s,y)). Evaluate the proved joint recovery at the point mass state law and integrate event sections. This yields T composed with the ideal state transition C_H equals T; this identity is proved rather than assumed.

\[C_H(s)=F(s,\cdot)_\#H(s),\qquad \int T(F(s,y))\,H(s)(dy)=T(s).\]
Corresponding Lean step

Local ideal_state_transition; StateDependentRGO.state_dependent_recovery, Measure.bind_apply, Measure.lintegral_compProd and lintegral_map.

3. Construct the actual stopped transition and recursive outputs

The terminal set D={s:B<=b(s)} is measurable. Push Q(s) through F(s,.) to obtain the continuing transition C_Q. Use the identity kernel on D and C_Q outside D. Both branches are Markov. Define R_n=L composed with P^n. Kernel composition preserves the Markov property. The identity branch gives R_n(s)=L(s) at stopped states by induction. On the continuing branch, the pushforward integral gives exactly the recursive call under Q(s).

\[P(s)=\begin{cases}\delta_s,&s\in D,\\F(s,\cdot)_\#Q(s),&s\notin D,\end{cases}\qquad R_n=L\circ_k P^n.\]
Corresponding Lean step

Local absorbing_program and main hCQf; Kernel.piecewise, Kernel.map, Kernel.comp_assoc, Measure.dirac_bind, Measure.bind_apply, lintegral_map.

4. Identify the endpoint of the actual finite state path

For a path through time k, the next-state kernel is P evaluated at its last coordinate. Mathlib partialTraj constructs the finite trajectory kernel from these measurable Markov kernels. Induction using the successor decomposition shows that its final-coordinate marginal is P^n after reading the initial coordinate. Composing with the singleton initial path at s removes that coordinate adapter. Following the final state by L therefore gives the same R_n as recursive evaluation.

\[\kappa_k(h)=P(h_k),\qquad (\operatorname{last}_n)_\#\operatorname{Path}_{0:n}(s)=P^n(s),\qquad L\circ_k\operatorname{EndPath}_n=R_n.\]
Corresponding Lean step

Local endpoint_path; Kernel.partialTraj, partialTraj_succ_eq_comp, map_partialTraj_succ_self, comp_deterministic_eq_comap and deterministic_comp_deterministic.

5. Preserve ideal recovery through absorption and every finite cap

In the ideal case C_Q=C_H. The continuing branch preserves T by the already proved posterior consistency, and the stopped identity branch preserves T trivially. Thus T composed with the same absorbed transition P equals T. Induction on kernel powers gives T composed with P^n equals T for every n, including zero. Substituting the ideal terminal kernel L=T in the previously constructed R_n proves the claimed recovery.

\[T\circ_k P=T\quad\Longrightarrow\quad T\circ_k P^n=T\quad\Longrightarrow\quad R_n=T\ \ (Q=H,\ L=T).\]
Corresponding Lean step

Local absorbing_invariant; actual hTC from ideal_state_transition, kernel extensionality, pow_succ and Kernel.comp_assoc.

Lean statement · finite_rgo_program

Actual finite threshold-absorbed recursive kernel and finite path endpoint, with ideal recovery derived from the explicit quadratic update.

Braces mark parameters Lean can infer; square brackets request structures such as a measurable space or probability measure. Named hypotheses are mathematical premises, not facts established by this declaration. Section parameters are described in the mathematical hypotheses above; the module link retains their exact source context.

theorem finite_rgo_program (μ : Measure E) [IsProbabilityMeasure μ]
    (a : ProgramState E → ℝ) (ha : Measurable a) (ha0 : ∀ s, 0 < a s)
    (threshold : ℝ≥0) :
    let F : ProgramState E × E → ProgramState E := fun p =>
      (⟨(p.1.1 : ℝ)+(a p.1)⁻¹, add_nonneg p.1.1.coe_nonneg (le_of_lt (inv_pos.mpr (ha0 p.1)))⟩,
       ((p.1.1 : ℝ)+(a p.1)⁻¹)⁻¹ • ((p.1.1 : ℝ) • p.1.2.1+(a p.1)⁻¹ • p.2),
       p.1.2.2.1+1, fun n => Nat.casesOn n p.2 p.1.2.2.2)
    ∃ (T H : Kernel (ProgramState E) E), IsMarkovKernel T ∧ IsMarkovKernel H ∧
      (∀ s, T s = μ.tilted (fun x => -((s.1 : ℝ)/2)*‖x-s.2.1‖^2)) ∧
      (∀ s, H s = GaussianSmoothing.gaussianSmoothing (T s) (Real.sqrt (a s))) ∧
      ∀ (Q L : Kernel (ProgramState E) E), IsMarkovKernel Q → IsMarkovKernel L →
      ∃ (P : Kernel (ProgramState E) (ProgramState E)) (R : ℕ → Kernel (ProgramState E) E),
        IsMarkovKernel P ∧ (∀ n, IsMarkovKernel (R n)) ∧
        (∀ s, P s = if threshold ≤ s.1 then Measure.dirac s else (Q s).map (fun y => F (s,y))) ∧
        R 0 = L ∧
        (∀ n s, R (n+1) s = if threshold ≤ s.1 then L s else
          (Q s).bind (fun y => R n (F (s,y)))) ∧
        (∀ n s, threshold ≤ s.1 → R n s = L s) ∧
        (∀ n : ℕ,
          let κ : (k : ℕ) → Kernel (Π _ : Iic k, ProgramState E) (ProgramState E) := fun k =>
            P.comap (fun h => h ⟨k, mem_Iic.mpr le_rfl⟩) (by fun_prop)
          L ∘ₖ (((Kernel.partialTraj (X := fun _ => ProgramState E) κ 0 n).map
            (fun h => h ⟨n, mem_Iic.mpr le_rfl⟩)).comap
            (fun (s : ProgramState E) (_ : Iic 0) => s) (by fun_prop)) = R n) ∧
        (Q = H → L = T → ∀ n, R n = T)

Exact module and namespace context

Lean proof · finite_rgo_program

Prove update measurability, derive posterior consistency, construct absorbed transition powers, identify finite trajectory endpoint and induct on ideal invariance.

Braces mark parameters Lean can infer; square brackets request structures such as a measurable space or probability measure. Named hypotheses are mathematical premises, not facts established by this declaration. Section parameters are described in the mathematical hypotheses above; the module link retains their exact source context.

theorem finite_rgo_program (μ : Measure E) [IsProbabilityMeasure μ]
    (a : ProgramState E → ℝ) (ha : Measurable a) (ha0 : ∀ s, 0 < a s)
    (threshold : ℝ≥0) :
    let F : ProgramState E × E → ProgramState E := fun p =>
      (⟨(p.1.1 : ℝ)+(a p.1)⁻¹, add_nonneg p.1.1.coe_nonneg (le_of_lt (inv_pos.mpr (ha0 p.1)))⟩,
       ((p.1.1 : ℝ)+(a p.1)⁻¹)⁻¹ • ((p.1.1 : ℝ) • p.1.2.1+(a p.1)⁻¹ • p.2),
       p.1.2.2.1+1, fun n => Nat.casesOn n p.2 p.1.2.2.2)
    ∃ (T H : Kernel (ProgramState E) E), IsMarkovKernel T ∧ IsMarkovKernel H ∧
      (∀ s, T s = μ.tilted (fun x => -((s.1 : ℝ)/2)*‖x-s.2.1‖^2)) ∧
      (∀ s, H s = GaussianSmoothing.gaussianSmoothing (T s) (Real.sqrt (a s))) ∧
      ∀ (Q L : Kernel (ProgramState E) E), IsMarkovKernel Q → IsMarkovKernel L →
      ∃ (P : Kernel (ProgramState E) (ProgramState E)) (R : ℕ → Kernel (ProgramState E) E),
        IsMarkovKernel P ∧ (∀ n, IsMarkovKernel (R n)) ∧
        (∀ s, P s = if threshold ≤ s.1 then Measure.dirac s else (Q s).map (fun y => F (s,y))) ∧
        R 0 = L ∧
        (∀ n s, R (n+1) s = if threshold ≤ s.1 then L s else
          (Q s).bind (fun y => R n (F (s,y)))) ∧
        (∀ n s, threshold ≤ s.1 → R n s = L s) ∧
        (∀ n : ℕ,
          let κ : (k : ℕ) → Kernel (Π _ : Iic k, ProgramState E) (ProgramState E) := fun k =>
            P.comap (fun h => h ⟨k, mem_Iic.mpr le_rfl⟩) (by fun_prop)
          L ∘ₖ (((Kernel.partialTraj (X := fun _ => ProgramState E) κ 0 n).map
            (fun h => h ⟨n, mem_Iic.mpr le_rfl⟩)).comap
            (fun (s : ProgramState E) (_ : Iic 0) => s) (by fun_prop)) = R n) ∧
        (Q = H → L = T → ∀ n, R n = T) := by
  classical
  have endpoint_path (C : Kernel (ProgramState E) (ProgramState E)) [IsMarkovKernel C] (n : ℕ) :
      let κ : (k : ℕ) → Kernel (Π _ : Iic k, (ProgramState E)) (ProgramState E) := fun k =>
        C.comap (fun h => h ⟨k, mem_Iic.mpr le_rfl⟩) (by fun_prop)
      ((Kernel.partialTraj (X := fun _ => (ProgramState E)) κ 0 n).map (fun h => h ⟨n, mem_Iic.mpr le_rfl⟩)).comap
        (fun (s : (ProgramState E)) (_ : Iic 0) => s) (by fun_prop) = C ^ n := by
    intro κ
    have hκ : ∀ k, IsMarkovKernel (κ k) := fun k => by dsimp [κ]; infer_instance
    let := hκ
    have hm (n : ℕ) : (Kernel.partialTraj (X := fun _ => (ProgramState E)) κ 0 n).map (fun h => h ⟨n, mem_Iic.mpr le_rfl⟩) =
        (C ^ n) ∘ₖ Kernel.deterministic (fun h : Π _ : Iic 0, (ProgramState E) => h ⟨0, mem_Iic.mpr le_rfl⟩)
          (by fun_prop) := by
      induction n with
      | zero =>
        rw [Kernel.partialTraj_self, Kernel.id_map (by fun_prop), pow_zero]
        exact (Kernel.id_comp _).symm
      | succ n ih =>
        rw [Kernel.partialTraj_succ_eq_comp (Nat.zero_le n), Kernel.map_comp,
          Kernel.map_partialTraj_succ_self]
        change (C.comap _ _) ∘ₖ Kernel.partialTraj (X := fun _ => (ProgramState E)) κ 0 n = _
        rw [← Kernel.comp_map, ih, ← Kernel.comp_assoc, _root_.pow_succ']
        rfl
    rw [hm, ← Kernel.comp_deterministic_eq_comap, Kernel.comp_assoc,
      Kernel.deterministic_comp_deterministic]
    change (C ^ n) ∘ₖ Kernel.id = C ^ n
    exact Kernel.comp_id _
  have measurable_program_update (a : ProgramState E → ℝ) (ha : Measurable a)
      (ha0 : ∀ s, 0 < a s) :
      let F : ProgramState E × E → ProgramState E := fun p =>
        (⟨(p.1.1 : ℝ)+(a p.1)⁻¹, add_nonneg p.1.1.coe_nonneg (le_of_lt (inv_pos.mpr (ha0 p.1)))⟩,
         ((p.1.1 : ℝ)+(a p.1)⁻¹)⁻¹ • ((p.1.1 : ℝ) • p.1.2.1+(a p.1)⁻¹ • p.2),
         p.1.2.2.1+1, fun n => Nat.casesOn n p.2 p.1.2.2.2)
      Measurable F := by
    intro F
    apply Measurable.prodMk
    · exact Measurable.subtype_mk (by fun_prop)
    · apply Measurable.prodMk
      · fun_prop
      · apply Measurable.prodMk
        · fun_prop
        · apply measurable_pi_lambda
          intro n
          cases n <;> fun_prop
  have absorbing_program (D : Set (ProgramState E)) [DecidablePred (· ∈ D)] (hD : MeasurableSet D)
      (C : Kernel (ProgramState E) (ProgramState E)) [IsMarkovKernel C] (L : Kernel (ProgramState E) E) [IsMarkovKernel L] :
      let P : Kernel (ProgramState E) (ProgramState E) := Kernel.piecewise hD Kernel.id C
      let R : ℕ → Kernel (ProgramState E) E := fun n => L ∘ₖ (P ^ n)
      (∀ n, IsMarkovKernel (R n)) ∧ R 0 = L ∧
        (∀ n s, s ∈ D → R n s = L s) ∧
        (∀ n s, R (n+1) s = if s ∈ D then L s else (C s).bind (R n)) := by
    classical
    intro P R
    have hP : IsMarkovKernel P := by dsimp [P]; infer_instance
    let := hP
    have hp (n : ℕ) : IsMarkovKernel (P ^ n) := by
      induction n with
      | zero => change IsMarkovKernel Kernel.id; infer_instance
      | succ n ih =>
        let := ih
        rw [pow_succ]
        change IsMarkovKernel ((P ^ n) ∘ₖ P)
        infer_instance
    have hR (n : ℕ) : IsMarkovKernel (R n) := by
      let := hp n
      dsimp [R]
      infer_instance
    have hz : R 0 = L := by
      change L ∘ₖ Kernel.id = L
      exact Kernel.comp_id L
    have hstep (n : ℕ) : R (n+1) = (R n) ∘ₖ P := by
      dsimp only [R]
      rw [pow_succ]
      exact (Kernel.comp_assoc L (P ^ n) P).symm
    have hstop (n : ℕ) (s : (ProgramState E)) (hs : s ∈ D) : R n s = L s := by
      induction n with
      | zero => rw [hz]
      | succ n ih =>
        rw [hstep, Kernel.comp_apply]
        have hPs : P s = Measure.dirac s := by
          dsimp only [P]
          rw [Kernel.piecewise_apply, if_pos hs, Kernel.id_apply]
        rw [hPs, Measure.dirac_bind (R n).measurable]
        exact ih
    refine ⟨hR,hz,hstop,?_⟩
    intro n s
    by_cases hs : s ∈ D
    · rw [if_pos hs]
      exact hstop (n+1) s hs
    · rw [if_neg hs, hstep, Kernel.comp_apply]
      have hPs : P s = C s := by
        dsimp only [P]
        rw [Kernel.piecewise_apply, if_neg hs]
      rw [hPs]
  have ideal_state_transition (μ : Measure E) [IsProbabilityMeasure μ]
      (a : ProgramState E → ℝ) (ha : Measurable a) (ha0 : ∀ s, 0 < a s) :
      let F : ProgramState E × E → ProgramState E := fun p =>
        (⟨(p.1.1 : ℝ)+(a p.1)⁻¹, add_nonneg p.1.1.coe_nonneg (le_of_lt (inv_pos.mpr (ha0 p.1)))⟩,
         ((p.1.1 : ℝ)+(a p.1)⁻¹)⁻¹ • ((p.1.1 : ℝ) • p.1.2.1+(a p.1)⁻¹ • p.2),
         p.1.2.2.1+1, fun n => Nat.casesOn n p.2 p.1.2.2.2)
      ∃ (T H : Kernel (ProgramState E) E) (C : Kernel (ProgramState E) (ProgramState E)),
        IsMarkovKernel T ∧ IsMarkovKernel H ∧ IsMarkovKernel C ∧
        (∀ s, T s = μ.tilted (fun x => -((s.1 : ℝ)/2)*‖x-s.2.1‖^2)) ∧
        (∀ s, H s = GaussianSmoothing.gaussianSmoothing (T s) (Real.sqrt (a s))) ∧
        (∀ s, C s = (H s).map (fun y => F (s,y))) ∧ T ∘ₖ C = T := by
    intro F
    have hF : Measurable F := measurable_program_update a ha ha0
    obtain ⟨T,H,B,hT,hH,hB,hTf,hHf,hBpost,hBupd,hrec⟩ :=
      StateDependentRGO.state_dependent_recovery μ (fun s : ProgramState E => (s.1 : ℝ)) a
        (fun s => s.2.1) (by fun_prop) ha (by fun_prop) (fun s => s.1.coe_nonneg) ha0
    let := hT
    let := hH
    let := hB
    let C := (Kernel.id ×ₖ H).map F
    have hC : IsMarkovKernel C := Kernel.IsMarkovKernel.map _ hF
    let := hC
    have hCf (s : ProgramState E) : C s = (H s).map (fun y => F (s,y)) := by
      dsimp only [C]
      rw [Kernel.map_apply _ hF, Kernel.prod_apply, Kernel.id_apply, Measure.dirac_prod,
        Measure.map_map hF (by fun_prop)]
      rfl
    have hBf (s : ProgramState E) (y : E) : B (s,y) =
        (T (F (s,y))).map (Prod.mk s) := by
      rw [hBupd,hTf]
      rfl
    refine ⟨T,H,C,hT,hH,hC,hTf,hHf,hCf,?_⟩
    ext s t ht
    have hst : MeasurableSet (Prod.snd ⁻¹' t : Set (ProgramState E × E)) := ht.preimage measurable_snd
    have heq := congrArg (fun m : Measure (ProgramState E × E) => m (Prod.snd ⁻¹' t))
      (hrec (Measure.dirac s) inferInstance)
    rw [Measure.bind_apply hst B.aemeasurable, Measure.lintegral_compProd (B.measurable_coe hst),
      Measure.compProd_apply hst] at heq
    simp only [lintegral_dirac] at heq
    rw [Kernel.comp_apply' _ _ _ ht, hCf, lintegral_map (T.measurable_coe ht)
      (show Measurable (fun y : E => F (s,y)) from hF.comp measurable_prodMk_left)]
    convert heq using 1
    · apply lintegral_congr
      intro y
      rw [hBf,Measure.map_apply (by fun_prop) hst]
      rfl
    · rfl
  have absorbing_invariant (D : Set (ProgramState E)) [DecidablePred (· ∈ D)]
      (hD : MeasurableSet D) (C : Kernel (ProgramState E) (ProgramState E)) [IsMarkovKernel C]
      (T : Kernel (ProgramState E) E) [IsMarkovKernel T] (hTC : T ∘ₖ C = T) :
      let P : Kernel (ProgramState E) (ProgramState E) := Kernel.piecewise hD Kernel.id C
      ∀ n : ℕ, T ∘ₖ (P ^ n) = T := by
    intro P
    have hP : IsMarkovKernel P := by dsimp [P]; infer_instance
    let := hP
    have hTP : T ∘ₖ P = T := by
      ext s t ht
      rw [Kernel.comp_apply]
      by_cases hs : s ∈ D
      · have hPs : P s = Measure.dirac s := by
          dsimp only [P]
          rw [Kernel.piecewise_apply, if_pos hs, Kernel.id_apply]
        rw [hPs, Measure.dirac_bind T.measurable]
      · have hPs : P s = C s := by
          dsimp only [P]
          rw [Kernel.piecewise_apply, if_neg hs]
        rw [hPs]
        exact congrArg (fun K : Kernel (ProgramState E) E => K s t) hTC
    intro n
    induction n with
    | zero => exact Kernel.comp_id T
    | succ n ih =>
      rw [pow_succ]
      change T ∘ₖ ((P ^ n) ∘ₖ P) = T
      rw [← Kernel.comp_assoc, ih, hTP]
  intro F
  have hF : Measurable F := measurable_program_update a ha ha0
  obtain ⟨T,H,C,hT,hH,hC,hTf,hHf,hCf,hTC⟩ := ideal_state_transition μ a ha ha0
  let := hT
  let := hH
  let := hC
  refine ⟨T,H,hT,hH,hTf,hHf,?_⟩
  intro Q L hQ hL
  let := hQ
  let := hL
  let D : Set (ProgramState E) := {s | threshold ≤ s.1}
  have hD : MeasurableSet D := measurableSet_le measurable_const measurable_fst
  let CQ := (Kernel.id ×ₖ Q).map F
  have hCQ : IsMarkovKernel CQ := Kernel.IsMarkovKernel.map _ hF
  let := hCQ
  have hCQf (s : ProgramState E) : CQ s = (Q s).map (fun y => F (s,y)) := by
    dsimp only [CQ]
    rw [Kernel.map_apply _ hF, Kernel.prod_apply, Kernel.id_apply, Measure.dirac_prod,
      Measure.map_map hF (by fun_prop)]
    rfl
  let P := Kernel.piecewise hD Kernel.id CQ
  let R : ℕ → Kernel (ProgramState E) E := fun n => L ∘ₖ (P ^ n)
  have hP : IsMarkovKernel P := by dsimp [P]; infer_instance
  let := hP
  obtain ⟨hR,hzero,hstop,hstep⟩ := absorbing_program D hD CQ L
  refine ⟨P,R,hP,hR,?_,hzero,?_,hstop,?_,?_⟩
  · intro s
    dsimp only [P]
    rw [Kernel.piecewise_apply, Kernel.id_apply, hCQf]
    rfl
  · intro n s
    change (L ∘ₖ (P ^ (n+1))) s = _
    rw [hstep]
    by_cases hs : threshold ≤ s.1
    · rw [if_pos (show s ∈ D from hs), if_pos hs]
    · rw [if_neg (show s ∉ D from hs), if_neg hs, hCQf]
      apply Measure.ext
      intro t ht
      rw [Measure.bind_apply ht (R n).aemeasurable,
        Measure.bind_apply ht (show AEMeasurable (fun y : E => R n (F (s,y))) (Q s) from ((R n).measurable.comp (hF.comp measurable_prodMk_left)).aemeasurable)]
      exact lintegral_map ((R n).measurable_coe ht)
        (show Measurable (fun y : E => F (s,y)) from hF.comp measurable_prodMk_left)
  · intro n κ
    rw [endpoint_path P n]
  · intro hQeq hLeq n
    have hCQeq : CQ = C := by
      ext s t ht
      rw [hCQf, hQeq, hCf]
    change L ∘ₖ (P ^ n) = T
    rw [hLeq]
    exact absorbing_invariant D hD CQ T (by rw [hCQeq]; exact hTC) n


end AutoSamplingTheory.ExampleCases.SmoothedPicardHMC.FiniteRGOProgram

Exact module and namespace context

Scope and omitted-condition boundaries

  • Finite capped state execution with a supplied terminal kernel even when the cap is reached before the threshold. No claim that the cap reaches the source stopping depth, that arbitrary initial count/history is valid, or that the state path is a query execution record. Concrete smoothed sampler and FORS, source parameter selection, approximation errors and expected query costs remain separate. Ideal terminal L=T is an oracle comparison.

Source and reuse

ASTIS parents called

Mathlib API called (external library)

  • ProbabilityTheory.Kernel.partialTraj
  • ProbabilityTheory.Kernel.partialTraj_succ_eq_comp
  • ProbabilityTheory.Kernel.map_partialTraj_succ_self
  • ProbabilityTheory.Kernel.piecewise
  • ProbabilityTheory.Kernel.comp_assoc
  • MeasureTheory.Measure.bind_apply
  • MeasureTheory.lintegral_map

Mathematical sources

ASTIS prose is not a quotation or a source-equivalence certificate. Definitions and aliases are explained as constructions, not counted as new mathematical proofs.