Finite continuous-time Markov chains as path processes
Probability Theory
DefinitionJump matrix of a rate matrix#✓fully proved
The jump matrix Π of a matrix Q (Norris 1997, §2.6): for a state with exit rate
q i = -Q i i ≠ 0, Π i j = Q i j / q i for j ≠ i and Π i i = 0; a state with q i = 0
is absorbing, Π i j = δ i j.
noncomputable def ctmcJumpMatrix (Q : Matrix ι ι ℝ) : Matrix ι ι ℝ := fun i j =>
if Q i i = 0 then (if i = j then 1 else 0) else if i = j then 0 else Q i j / -Q i i
Used by 11
Is Rate Matrix
TheoremNonnegativity of the jump matrix#✓fully proved
The entries of the jump matrix of a rate matrix are nonnegative.
theorem ctmcJumpMatrix_nonneg (hQ : IsRateMatrix Q) (i j : ι) : 0 ≤ ctmcJumpMatrix Q i j
structure IsRateMatrix (Q : Matrix ι ι ℝ) : Prop where
/-- The jump rates `Q i j`, `i ≠ j`, are nonnegative. -/
nonneg_of_ne : ∀ ⦃i j : ι⦄, i ≠ j → 0 ≤ Q i j
/-- Each row sums to `0`. -/
sum_row : ∀ i, ∑ j, Q i j = 0
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/RateMatrix.lean:57
noncomputable def ctmcJumpMatrix (Q : Matrix ι ι ℝ) : Matrix ι ι ℝ := fun i j =>
if Q i i = 0 then (if i = j then 1 else 0) else if i = j then 0 else Q i j / -Q i i
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:105
Uses 3 · Used by 9
TheoremRows of the jump matrix sum to one#✓fully proved
The rows of the jump matrix of a rate matrix sum to 1.
theorem sum_ctmcJumpMatrix (hQ : IsRateMatrix Q) (i : ι) : ∑ j, ctmcJumpMatrix Q i j = 1
structure IsRateMatrix (Q : Matrix ι ι ℝ) : Prop where
/-- The jump rates `Q i j`, `i ≠ j`, are nonnegative. -/
nonneg_of_ne : ∀ ⦃i j : ι⦄, i ≠ j → 0 ≤ Q i j
/-- Each row sums to `0`. -/
sum_row : ∀ i, ∑ j, Q i j = 0
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/RateMatrix.lean:57
noncomputable def ctmcJumpMatrix (Q : Matrix ι ι ℝ) : Matrix ι ι ℝ := fun i j =>
if Q i i = 0 then (if i = j then 1 else 0) else if i = j then 0 else Q i j / -Q i i
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:105
Uses 3 · Used by 7
TheoremJump matrix is row-stochastic#✓fully proved
The jump matrix of a rate matrix is row-stochastic.
theorem ctmcJumpMatrix_mem_rowStochastic (hQ : IsRateMatrix Q) :
ctmcJumpMatrix Q ∈ Matrix.rowStochastic ℝ ι
structure IsRateMatrix (Q : Matrix ι ι ℝ) : Prop where
/-- The jump rates `Q i j`, `i ≠ j`, are nonnegative. -/
nonneg_of_ne : ∀ ⦃i j : ι⦄, i ≠ j → 0 ≤ Q i j
/-- Each row sums to `0`. -/
sum_row : ∀ i, ∑ j, Q i j = 0
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/RateMatrix.lean:57
noncomputable def ctmcJumpMatrix (Q : Matrix ι ι ℝ) : Matrix ι ι ℝ := fun i j =>
if Q i i = 0 then (if i = j then 1 else 0) else if i = j then 0 else Q i j / -Q i i
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:105
Uses 4
DefinitionRow of the jump matrix as a probability mass function#✓fully proved
Row i of the jump matrix of a rate matrix, as a probability mass function on ι.
noncomputable def ctmcJumpPMF (hQ : IsRateMatrix Q) (i : ι) : PMF ι :=
PMF.ofFintype (fun j => ENNReal.ofReal (ctmcJumpMatrix Q i j)) (by
rw [← ENNReal.ofReal_sum_of_nonneg fun j _ => hQ.ctmcJumpMatrix_nonneg i j,
hQ.sum_ctmcJumpMatrix i, ENNReal.ofReal_one])
structure IsRateMatrix (Q : Matrix ι ι ℝ) : Prop where
/-- The jump rates `Q i j`, `i ≠ j`, are nonnegative. -/
nonneg_of_ne : ∀ ⦃i j : ι⦄, i ≠ j → 0 ≤ Q i j
/-- Each row sums to `0`. -/
sum_row : ∀ i, ∑ j, Q i j = 0
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/RateMatrix.lean:57
noncomputable def ctmcJumpMatrix (Q : Matrix ι ι ℝ) : Matrix ι ι ℝ := fun i j =>
if Q i i = 0 then (if i = j then 1 else 0) else if i = j then 0 else Q i j / -Q i i
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:105
Uses 4 · Used by 12
Probability Theory
DefinitionLaw of one step of the chain construction#✓fully proved
The law of one step (ξ, E) of the construction: ξ : ι → ι has independent coordinates
with ξ i ∼ Π i, and E is an independent exponential clock of rate 1.
noncomputable def ctmcStepMeasure (hQ : IsRateMatrix Q) : Measure ((ι → ι) × ℝ) :=
(Measure.pi fun i => (hQ.ctmcJumpPMF i).toMeasure).prod (expMeasure 1)
structure IsRateMatrix (Q : Matrix ι ι ℝ) : Prop where
/-- The jump rates `Q i j`, `i ≠ j`, are nonnegative. -/
nonneg_of_ne : ∀ ⦃i j : ι⦄, i ≠ j → 0 ≤ Q i j
/-- Each row sums to `0`. -/
sum_row : ∀ i, ∑ j, Q i j = 0
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/RateMatrix.lean:57
Uses 2 · Used by 12
DefinitionLaw of the driving step sequence of a Markov chain#✓fully proved
The law of the i.i.d. step sequence ω : ℕ → (ι → ι) × ℝ driving the chain.
noncomputable def ctmcInputMeasure (hQ : IsRateMatrix Q) : Measure (ℕ → (ι → ι) × ℝ) :=
Measure.infinitePi fun _ => ctmcStepMeasure hQ
structure IsRateMatrix (Q : Matrix ι ι ℝ) : Prop where
/-- The jump rates `Q i j`, `i ≠ j`, are nonnegative. -/
nonneg_of_ne : ∀ ⦃i j : ι⦄, i ≠ j → 0 ≤ Q i j
/-- Each row sums to `0`. -/
sum_row : ∀ i, ∑ j, Q i j = 0
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/RateMatrix.lean:57
noncomputable def ctmcStepMeasure (hQ : IsRateMatrix Q) : Measure ((ι → ι) × ℝ) :=
(Measure.pi fun i => (hQ.ctmcJumpPMF i).toMeasure).prod (expMeasure 1)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:153
Uses 2 · Used by 17
A, path form · Product moment of the two coalescence times, path form · Mean coalescence time at locus B, path form · Non-explosion · Strong Markov property at jump times · Restart law at a fixed time · Kolmogorov · Finite-dimensional distributions · Backward equations for the mean hitting time · Backward equations for the product moment of two hitting times · Mean hitting time, first-step equation · Minimality of the mean hitting time · Product moment of two hitting times, first-step equation · Minimality of the product moment · Product moment of hitting times from inside their union is zero · Mean hitting time from inside the target set is zeroDefinitionJump chain of a continuous-time Markov chain#✓fully proved
The jump chain started at i: Y 0 = i and Y (n + 1) = ξ n (Y n).
def ctmcJumpChain (i : ι) (ω : ℕ → (ι → ι) × ℝ) : ℕ → ι
| 0 => i
| n + 1 => (ω n).1 (ctmcJumpChain i ω n)
Used by 19
DefinitionHolding times of a continuous-time Markov chain#✓fully proved
The n-th holding time S n = E n / q (Y n), where q k = -Q k k; it is ∞ when
Y n is absorbing (q (Y n) = 0). Negative clock values, a null event, give S n = 0.
noncomputable def ctmcHoldingTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
if Q (ctmcJumpChain i ω n) (ctmcJumpChain i ω n) = 0 then ∞
else ENNReal.ofReal ((ω n).2 / -Q (ctmcJumpChain i ω n) (ctmcJumpChain i ω n))
def ctmcJumpChain (i : ι) (ω : ℕ → (ι → ι) × ℝ) : ℕ → ι
| 0 => i
| n + 1 => (ω n).1 (ctmcJumpChain i ω n)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:178
Uses 1 · Used by 18
DefinitionJump times of a continuous-time Markov chain#✓fully proved
The n-th jump time T n = S 0 + ⋯ + S (n - 1), with T 0 = 0.
noncomputable def ctmcJumpTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
∑ k ∈ range n, ctmcHoldingTime Q i ω k
noncomputable def ctmcHoldingTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
if Q (ctmcJumpChain i ω n) (ctmcJumpChain i ω n) = 0 then ∞
else ENNReal.ofReal ((ω n).2 / -Q (ctmcJumpChain i ω n) (ctmcJumpChain i ω n))
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:184
Uses 1 · Used by 16
DefinitionPath of a continuous-time Markov chain#✓fully proved
The path of the chain started at i: X t = Y n for the n with
T n ≤ t < T (n + 1). If t is at or after the explosion time sup T n (a null event, by
IsRateMatrix.ae_tendsto_ctmcJumpTime), the value is an arbitrary state that does not depend
on i, Q or ω.
noncomputable def ctmcPath (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (t : ℝ≥0) : ι :=
haveI : Nonempty ι := ⟨i⟩
if h : ∃ n, (t : ℝ≥0∞) < ctmcJumpTime Q i ω (n + 1) then ctmcJumpChain i ω (Nat.find h)
else Classical.ofNonempty
noncomputable def ctmcJumpTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
∑ k ∈ range n, ctmcHoldingTime Q i ω k
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:190
def ctmcJumpChain (i : ι) (ω : ℕ → (ι → ι) × ℝ) : ℕ → ι
| 0 => i
| n + 1 => (ω n).1 (ctmcJumpChain i ω n)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:178
Uses 2 · Used by 16
A, path form · Product moment of the two coalescence times, path form · Mean coalescence time at locus B, path form · Strong Markov property at jump times · Restart law at a fixed time · Kolmogorov · Finite-dimensional distributions · First-jump decomposition · Path value between consecutive jump times · Path restarts at a jump time · Measurability of the chain state at a fixed time · Joint measurability of the chain path in time and steps · Hitting time of a continuous-time Markov chain · First-jump decomposition of a hitting time · Hitting time from inside the target set is zeroDefinitionShift of the step sequence of a Markov chain#✓fully proved
The shift of the step sequence by n: (shift n ω) m = ω (n + m).
def ctmcShift (n : ℕ) (ω : ℕ → (ι → ι) × ℝ) : ℕ → (ι → ι) × ℝ := fun m => ω (n + m)
Used by 16
TheoremJump times are nondecreasing#✓fully proved
The jump times are nondecreasing.
theorem ctmcJumpTime_mono (i : ι) (ω : ℕ → (ι → ι) × ℝ) : Monotone (ctmcJumpTime Q i ω)
noncomputable def ctmcJumpTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
∑ k ∈ range n, ctmcHoldingTime Q i ω k
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:190
Uses 2 · Used by 8
TheoremPath value between consecutive jump times#✓fully proved
If T n ≤ t < T (n + 1), then X t = Y n.
theorem ctmcPath_eq_of_mem (i : ι) (ω : ℕ → (ι → ι) × ℝ) {t : ℝ≥0} {n : ℕ}
(h₁ : ctmcJumpTime Q i ω n ≤ t) (h₂ : (t : ℝ≥0∞) < ctmcJumpTime Q i ω (n + 1)) :
ctmcPath Q i ω t = ctmcJumpChain i ω n
noncomputable def ctmcJumpTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
∑ k ∈ range n, ctmcHoldingTime Q i ω k
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:190
noncomputable def ctmcPath (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (t : ℝ≥0) : ι :=
haveI : Nonempty ι := ⟨i⟩
if h : ∃ n, (t : ℝ≥0∞) < ctmcJumpTime Q i ω (n + 1) then ctmcJumpChain i ω (Nat.find h)
else Classical.ofNonempty
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:199
def ctmcJumpChain (i : ι) (ω : ℕ → (ι → ι) × ℝ) : ℕ → ι
| 0 => i
| n + 1 => (ω n).1 (ctmcJumpChain i ω n)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:178
Uses 4 · Used by 2
TheoremJump chain of the shifted steps#✓fully proved
The jump chain of the shifted steps started at Y n is the jump chain after n.
theorem ctmcJumpChain_shift (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n m : ℕ) :
ctmcJumpChain (ctmcJumpChain i ω n) (ctmcShift n ω) m = ctmcJumpChain i ω (n + m)
def ctmcJumpChain (i : ι) (ω : ℕ → (ι → ι) × ℝ) : ℕ → ι
| 0 => i
| n + 1 => (ω n).1 (ctmcJumpChain i ω n)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:178
def ctmcShift (n : ℕ) (ω : ℕ → (ι → ι) × ℝ) : ℕ → (ι → ι) × ℝ := fun m => ω (n + m)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:205
Uses 2 · Used by 2
TheoremHolding times of the shifted steps#✓fully proved
The holding times of the shifted steps started at Y n are the holding times after n.
theorem ctmcHoldingTime_shift (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n m : ℕ) :
ctmcHoldingTime Q (ctmcJumpChain i ω n) (ctmcShift n ω) m =
ctmcHoldingTime Q i ω (n + m)
noncomputable def ctmcHoldingTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
if Q (ctmcJumpChain i ω n) (ctmcJumpChain i ω n) = 0 then ∞
else ENNReal.ofReal ((ω n).2 / -Q (ctmcJumpChain i ω n) (ctmcJumpChain i ω n))
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:184
def ctmcJumpChain (i : ι) (ω : ℕ → (ι → ι) × ℝ) : ℕ → ι
| 0 => i
| n + 1 => (ω n).1 (ctmcJumpChain i ω n)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:178
def ctmcShift (n : ℕ) (ω : ℕ → (ι → ι) × ℝ) : ℕ → (ι → ι) × ℝ := fun m => ω (n + m)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:205
Uses 4 · Used by 1
TheoremAdditivity of jump times under shifting#✓fully proved
T (n + m) = T n + T' m, where T' are the jump times of the shifted steps started at
Y n.
theorem ctmcJumpTime_add (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n m : ℕ) :
ctmcJumpTime Q i ω (n + m) =
ctmcJumpTime Q i ω n + ctmcJumpTime Q (ctmcJumpChain i ω n) (ctmcShift n ω) m
noncomputable def ctmcJumpTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
∑ k ∈ range n, ctmcHoldingTime Q i ω k
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:190
def ctmcJumpChain (i : ι) (ω : ℕ → (ι → ι) × ℝ) : ℕ → ι
| 0 => i
| n + 1 => (ω n).1 (ctmcJumpChain i ω n)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:178
def ctmcShift (n : ℕ) (ω : ℕ → (ι → ι) × ℝ) : ℕ → (ι → ι) × ℝ := fun m => ω (n + m)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:205
Uses 5 · Used by 7
TheoremPath restarts at a jump time#✓fully proved
After a finite jump time T n, the path is the path started at Y n driven by the
shifted steps: X (T n + s) = X' s with X' built from shift n ω started at Y n.
theorem ctmcPath_jumpTime_add (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ)
(hn : ctmcJumpTime Q i ω n ≠ ∞) (s : ℝ≥0) :
ctmcPath Q i ω ((ctmcJumpTime Q i ω n).toNNReal + s) =
ctmcPath Q (ctmcJumpChain i ω n) (ctmcShift n ω) s
noncomputable def ctmcJumpTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
∑ k ∈ range n, ctmcHoldingTime Q i ω k
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:190
noncomputable def ctmcPath (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (t : ℝ≥0) : ι :=
haveI : Nonempty ι := ⟨i⟩
if h : ∃ n, (t : ℝ≥0∞) < ctmcJumpTime Q i ω (n + 1) then ctmcJumpChain i ω (Nat.find h)
else Classical.ofNonempty
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:199
def ctmcJumpChain (i : ι) (ω : ℕ → (ι → ι) × ℝ) : ℕ → ι
| 0 => i
| n + 1 => (ω n).1 (ctmcJumpChain i ω n)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:178
def ctmcShift (n : ℕ) (ω : ℕ → (ι → ι) × ℝ) : ℕ → (ι → ι) × ℝ := fun m => ω (n + m)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:205
Uses 7 · Used by 2
TheoremFirst-jump decomposition#✓fully proved
First-jump decomposition of the path: before the first holding time the chain is at
i; afterwards it is the chain started at ξ 0 i driven by the shifted steps.
theorem ctmcPath_eq_ite (i : ι) (ω : ℕ → (ι → ι) × ℝ) (t : ℝ≥0) :
ctmcPath Q i ω t = if (t : ℝ≥0∞) < ctmcHoldingTime Q i ω 0 then i
else ctmcPath Q ((ω 0).1 i) (ctmcShift 1 ω) (t - (ctmcHoldingTime Q i ω 0).toNNReal)
noncomputable def ctmcPath (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (t : ℝ≥0) : ι :=
haveI : Nonempty ι := ⟨i⟩
if h : ∃ n, (t : ℝ≥0∞) < ctmcJumpTime Q i ω (n + 1) then ctmcJumpChain i ω (Nat.find h)
else Classical.ofNonempty
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:199
noncomputable def ctmcHoldingTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
if Q (ctmcJumpChain i ω n) (ctmcJumpChain i ω n) = 0 then ∞
else ENNReal.ofReal ((ω n).2 / -Q (ctmcJumpChain i ω n) (ctmcJumpChain i ω n))
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:184
def ctmcShift (n : ℕ) (ω : ℕ → (ι → ι) × ℝ) : ℕ → (ι → ι) × ℝ := fun m => ω (n + m)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:205
Uses 7 · Used by 4
TheoremMeasurability of the jump chain#✓fully proved
The jump chain Y n is a measurable function of the steps.
theorem measurable_ctmcJumpChain (i : ι) (n : ℕ) :
Measurable fun ω => ctmcJumpChain i ω n
def ctmcJumpChain (i : ι) (ω : ℕ → (ι → ι) × ℝ) : ℕ → ι
| 0 => i
| n + 1 => (ω n).1 (ctmcJumpChain i ω n)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:178
Uses 1 · Used by 2
TheoremMeasurability of the holding times#✓fully proved
The holding time S n is a measurable function of the steps.
theorem measurable_ctmcHoldingTime (i : ι) (n : ℕ) :
Measurable fun ω => ctmcHoldingTime Q i ω n
noncomputable def ctmcHoldingTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
if Q (ctmcJumpChain i ω n) (ctmcJumpChain i ω n) = 0 then ∞
else ENNReal.ofReal ((ω n).2 / -Q (ctmcJumpChain i ω n) (ctmcJumpChain i ω n))
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:184
Uses 3 · Used by 7
TheoremMeasurability of the jump times#✓fully proved
The jump time T n is a measurable function of the steps.
theorem measurable_ctmcJumpTime (i : ι) (n : ℕ) :
Measurable fun ω => ctmcJumpTime Q i ω n
noncomputable def ctmcJumpTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
∑ k ∈ range n, ctmcHoldingTime Q i ω k
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:190
Uses 3 · Used by 1
TheoremJoint measurability of the chain path in time and steps#✓fully proved
The path (t, ω) ↦ X t is jointly measurable in the time and the steps.
theorem measurable_ctmcPath_uncurry (i : ι) :
Measurable fun p : ℝ≥0 × (ℕ → (ι → ι) × ℝ) => ctmcPath Q i p.2 p.1
noncomputable def ctmcPath (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (t : ℝ≥0) : ι :=
haveI : Nonempty ι := ⟨i⟩
if h : ∃ n, (t : ℝ≥0∞) < ctmcJumpTime Q i ω (n + 1) then ctmcJumpChain i ω (Nat.find h)
else Classical.ofNonempty
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:199
TheoremMeasurability of the chain state at a fixed time#✓fully proved
The state X t is a measurable function of the steps.
theorem measurable_ctmcPath (i : ι) (t : ℝ≥0) : Measurable fun ω => ctmcPath Q i ω t
noncomputable def ctmcPath (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (t : ℝ≥0) : ι :=
haveI : Nonempty ι := ⟨i⟩
if h : ∃ n, (t : ℝ≥0∞) < ctmcJumpTime Q i ω (n + 1) then ctmcJumpChain i ω (Nat.find h)
else Classical.ofNonempty
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:199
Uses 2 · Used by 2
Is Rate Matrix
TheoremNon-explosion#✓fully proved
Non-explosion (Norris 1997, §2.7, for a finite state space): almost surely
the jump times of the chain started at i tend to ∞, so X t is a genuine state of the
jump chain for every t ≥ 0.
theorem ae_tendsto_ctmcJumpTime (hQ : IsRateMatrix Q) (i : ι) :
∀ᵐ ω ∂ctmcInputMeasure hQ, Tendsto (ctmcJumpTime Q i ω) atTop (𝓝 ∞)
structure IsRateMatrix (Q : Matrix ι ι ℝ) : Prop where
/-- The jump rates `Q i j`, `i ≠ j`, are nonnegative. -/
nonneg_of_ne : ∀ ⦃i j : ι⦄, i ≠ j → 0 ≤ Q i j
/-- Each row sums to `0`. -/
sum_row : ∀ i, ∑ j, Q i j = 0
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/RateMatrix.lean:57
noncomputable def ctmcInputMeasure (hQ : IsRateMatrix Q) : Measure (ℕ → (ι → ι) × ℝ) :=
Measure.infinitePi fun _ => ctmcStepMeasure hQ
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:163
noncomputable def ctmcJumpTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
∑ k ∈ range n, ctmcHoldingTime Q i ω k
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:190
Uses 10 · Used by 6
TheoremStrong Markov property at jump times#✓fully proved
Strong Markov property at jump times (Norris 1997, §2.6–2.7): let A be a
measurable set of histories of the first n steps such that T n < ∞ whenever the history
lies in A; these histories determine Y 0, …, Y n and S 0, …, S (n - 1). Then for every
state k and every measurable set B of paths, the path after T n is independent of the
event {history ∈ A, Y n = k} and distributed as the chain started at k.
theorem ctmcInputMeasure_ctmcPath_jumpTime_add (hQ : IsRateMatrix Q) (i : ι) (n : ℕ)
{A : Set (Fin n → (ι → ι) × ℝ)} (hA : MeasurableSet A)
(hAT : ∀ ω : ℕ → (ι → ι) × ℝ, (fun k : Fin n => ω k) ∈ A → ctmcJumpTime Q i ω n ≠ ∞)
(k : ι) {B : Set (ℝ≥0 → ι)} (hB : MeasurableSet B) :
ctmcInputMeasure hQ
({ω | (fun k : Fin n => ω k) ∈ A} ∩ {ω | ctmcJumpChain i ω n = k} ∩
{ω | (fun s => ctmcPath Q i ω ((ctmcJumpTime Q i ω n).toNNReal + s)) ∈ B}) =
ctmcInputMeasure hQ
({ω | (fun k : Fin n => ω k) ∈ A} ∩ {ω | ctmcJumpChain i ω n = k}) *
ctmcInputMeasure hQ {ω | (fun s => ctmcPath Q k ω s) ∈ B}
structure IsRateMatrix (Q : Matrix ι ι ℝ) : Prop where
/-- The jump rates `Q i j`, `i ≠ j`, are nonnegative. -/
nonneg_of_ne : ∀ ⦃i j : ι⦄, i ≠ j → 0 ≤ Q i j
/-- Each row sums to `0`. -/
sum_row : ∀ i, ∑ j, Q i j = 0
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/RateMatrix.lean:57
noncomputable def ctmcJumpTime (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (n : ℕ) :
ℝ≥0∞ :=
∑ k ∈ range n, ctmcHoldingTime Q i ω k
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:190
noncomputable def ctmcInputMeasure (hQ : IsRateMatrix Q) : Measure (ℕ → (ι → ι) × ℝ) :=
Measure.infinitePi fun _ => ctmcStepMeasure hQ
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:163
def ctmcJumpChain (i : ι) (ω : ℕ → (ι → ι) × ℝ) : ℕ → ι
| 0 => i
| n + 1 => (ω n).1 (ctmcJumpChain i ω n)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:178
noncomputable def ctmcPath (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (t : ℝ≥0) : ι :=
haveI : Nonempty ι := ⟨i⟩
if h : ∃ n, (t : ℝ≥0∞) < ctmcJumpTime Q i ω (n + 1) then ctmcJumpChain i ω (Nat.find h)
else Classical.ofNonempty
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:199
TheoremKolmogorov#✓fully proved
Kolmogorov (Norris 1997, §2.8, Theorem 2.8.2 for a finite state space): the chain
built from the jump chain and the holding times has transition function exp (t • Q):
P_i(X t = j) = exp (t Q) i j for every t ≥ 0.
theorem ctmcInputMeasure_real_ctmcPath_eq (hQ : IsRateMatrix Q) (i j : ι) (t : ℝ≥0) :
(ctmcInputMeasure hQ).real {ω | ctmcPath Q i ω t = j} = ctmcTransition Q t i j
structure IsRateMatrix (Q : Matrix ι ι ℝ) : Prop where
/-- The jump rates `Q i j`, `i ≠ j`, are nonnegative. -/
nonneg_of_ne : ∀ ⦃i j : ι⦄, i ≠ j → 0 ≤ Q i j
/-- Each row sums to `0`. -/
sum_row : ∀ i, ∑ j, Q i j = 0
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/RateMatrix.lean:57
noncomputable def ctmcInputMeasure (hQ : IsRateMatrix Q) : Measure (ℕ → (ι → ι) × ℝ) :=
Measure.infinitePi fun _ => ctmcStepMeasure hQ
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:163
noncomputable def ctmcPath (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (t : ℝ≥0) : ι :=
haveI : Nonempty ι := ⟨i⟩
if h : ∃ n, (t : ℝ≥0∞) < ctmcJumpTime Q i ω (n + 1) then ctmcJumpChain i ω (Nat.find h)
else Classical.ofNonempty
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:199
noncomputable def ctmcTransition (Q : Matrix ι ι ℝ) (t : ℝ) : Matrix ι ι ℝ :=
exp (t • Q)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Semigroup.lean:64
Uses 20 · Used by 1
TheoremRestart law at a fixed time#✓fully proved
Restart law at a fixed time (cf. the Markov property, Norris 1997, §2.8), for events of
X s and of the path after s only: for the chain started at i, the probability that
X s = k and that the path after s lies in a measurable set B is exp (s Q) i k times the
probability that the chain started at k lies in B. This is weaker than the Markov property
with respect to the natural filtration: arbitrary events of the path before s are not covered
(only through the finite-dimensional distributions, ctmcInputMeasure_real_ctmcPath_fdd).
theorem ctmcInputMeasure_real_ctmcPath_add (hQ : IsRateMatrix Q) (i k : ι) (s : ℝ≥0)
{B : Set (ℝ≥0 → ι)} (hB : MeasurableSet B) :
(ctmcInputMeasure hQ).real
{ω | ctmcPath Q i ω s = k ∧ (fun u => ctmcPath Q i ω (s + u)) ∈ B} =
ctmcTransition Q s i k *
(ctmcInputMeasure hQ).real {ω | (fun u => ctmcPath Q k ω u) ∈ B}
structure IsRateMatrix (Q : Matrix ι ι ℝ) : Prop where
/-- The jump rates `Q i j`, `i ≠ j`, are nonnegative. -/
nonneg_of_ne : ∀ ⦃i j : ι⦄, i ≠ j → 0 ≤ Q i j
/-- Each row sums to `0`. -/
sum_row : ∀ i, ∑ j, Q i j = 0
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/RateMatrix.lean:57
noncomputable def ctmcInputMeasure (hQ : IsRateMatrix Q) : Measure (ℕ → (ι → ι) × ℝ) :=
Measure.infinitePi fun _ => ctmcStepMeasure hQ
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:163
noncomputable def ctmcPath (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (t : ℝ≥0) : ι :=
haveI : Nonempty ι := ⟨i⟩
if h : ∃ n, (t : ℝ≥0∞) < ctmcJumpTime Q i ω (n + 1) then ctmcJumpChain i ω (Nat.find h)
else Classical.ofNonempty
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:199
noncomputable def ctmcTransition (Q : Matrix ι ι ℝ) (t : ℝ) : Matrix ι ι ℝ :=
exp (t • Q)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Semigroup.lean:64
Uses 14 · Used by 1
TheoremFinite-dimensional distributions#✓fully proved
Finite-dimensional distributions (Norris 1997, §2.8, Theorem 2.8.2 (c)): with
increments s 0, …, s (n - 1) ≥ 0, times t k = s 0 + ⋯ + s k, and states j 0, …, j (n - 1),
P_i(X (t k) = j k for all k) = ∏ₖ exp (s k Q) (j (k - 1)) (j k), where j (-1) = i.
theorem ctmcInputMeasure_real_ctmcPath_fdd (hQ : IsRateMatrix Q) (i : ι) {n : ℕ}
(s : Fin n → ℝ≥0) (j : Fin n → ι) :
(ctmcInputMeasure hQ).real {ω | ∀ k, ctmcPath Q i ω (∑ l ∈ Iic k, s l) = j k} =
∏ k, ctmcTransition Q (s k) ((Fin.cons i j : Fin (n + 1) → ι) k.castSucc) (j k)
structure IsRateMatrix (Q : Matrix ι ι ℝ) : Prop where
/-- The jump rates `Q i j`, `i ≠ j`, are nonnegative. -/
nonneg_of_ne : ∀ ⦃i j : ι⦄, i ≠ j → 0 ≤ Q i j
/-- Each row sums to `0`. -/
sum_row : ∀ i, ∑ j, Q i j = 0
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/RateMatrix.lean:57
noncomputable def ctmcInputMeasure (hQ : IsRateMatrix Q) : Measure (ℕ → (ι → ι) × ℝ) :=
Measure.infinitePi fun _ => ctmcStepMeasure hQ
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:163
noncomputable def ctmcPath (Q : Matrix ι ι ℝ) (i : ι) (ω : ℕ → (ι → ι) × ℝ) (t : ℝ≥0) : ι :=
haveI : Nonempty ι := ⟨i⟩
if h : ∃ n, (t : ℝ≥0∞) < ctmcJumpTime Q i ω (n + 1) then ctmcJumpChain i ω (Nat.find h)
else Classical.ofNonempty
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Path.lean:199
noncomputable def ctmcTransition (Q : Matrix ι ι ℝ) (t : ℝ) : Matrix ι ι ℝ :=
exp (t • Q)
MathlibExt/Probability/Process/ContinuousTimeMarkovChain/Semigroup.lean:64
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.