Labelled transition systems
TheoremReachability in a labelled transition system is transitive#✓fully proved
In a labelled transition system, say that a state \(s\) can reach a state \(t\) when there is a finite list of labels along which \(s\) makes a multistep transition to \(t\). If \(s\) can reach \(m\) and \(m\) can reach \(t\), then \(s\) can reach \(t\).
The witnessing list of labels is the concatenation of the two given lists.
@[trans]
theorem CanReach.trans {source middle target : State}
(hsm : lts.CanReach source middle) (hmt : lts.CanReach middle target) :
lts.CanReach source target
Used by 1
DefinitionShifted sequence#✓fully proved
For a sequence \(s_0, s_1, s_2, \dots\) and a natural number \(k\), the shift of the sequence by \(k\) is the sequence whose \(i\)-th term is \(s_{i+k}\); that is, the suffix starting at index \(k\), re-indexed from \(0\).
def shiftSeq {State : Type*} (ss : ℕ → State) (k : ℕ) : ℕ → State :=
fun i => ss (i + k)
Used by 17
DefinitionFinite run#✓fully proved
In a labelled transition system, a sequence of states \(s_0, s_1, s_2, \dots\) is a finite run of length \(k\) when for every \(i < k\) there is a label \(a\) such that there is a transition from \(s_i\) to \(s_{i+1}\) labelled \(a\).
The states after index \(k\) are unconstrained.
def FiniteRun (ss : ℕ → State) (k : ℕ) : Prop :=
∀ i, i < k → ∃ label, lts.Tr (ss i) label (ss (i + 1))
Used by 15
DefinitionInfinite run#✓fully proved
In a labelled transition system, a sequence of states \(s_0, s_1, s_2, \dots\) is an infinite run when for every \(i\) there is a label \(a\) such that there is a transition from \(s_i\) to \(s_{i+1}\) labelled \(a\).
def OmegaRun (ss : ℕ → State) : Prop :=
∀ i, ∃ label, lts.Tr (ss i) label (ss (i + 1))
Used by 22
TheoremInvariant principle for infinite runs#✓fully proved
Let \(P\) be a predicate on the states of a labelled transition system such that, whenever \(P(s)\) holds and there is a transition from \(s\) to \(t\) with some label, \(P(t)\) holds. Then for every infinite run \(s_0, s_1, s_2, \dots\) with \(P(s_0)\), the predicate \(P(s_k)\) holds for every \(k\).
theorem forall_state_of_invariant {run : ℕ → State}
(hrun : lts.OmegaRun run) {P : State → Prop} (h0 : P (run 0))
(hstep : ∀ s t, P s → lts.UnlabelledTr s t → P t) :
∀ k, P (run k)
Uses 1
TheoremInfinite state runs lift to labeled executions#✓fully proved
Select a witnessing label at each step of an infinite state run.
theorem omegaExecution_of_omegaRun {ss : ℕ → State}
(h : lts.OmegaRun ss) :
∃ μs : ωSequence Label, lts.OmegaExecution ⟨ss⟩ μs
Uses 1 · Used by 2
TheoremLabeled infinite executions give state runs#✓fully proved
Forget the labels of a canonical infinite execution.
theorem omegaRun_of_omegaExecution {oss : ωSequence State}
{μs : ωSequence Label} (h : lts.OmegaExecution oss μs) :
lts.OmegaRun (fun i => oss i)
Uses 1 · Used by 2
TheoremShifted function sequences agree with ω-sequence drop#✓fully proved
Function-sequence suffixes agree with canonical ωSequence.drop.
theorem shiftSeq_eq_drop (ss : ℕ → State) (k : ℕ) :
(⟨Semantics.shiftSeq ss k⟩ : ωSequence State) =
ωSequence.drop k ⟨ss⟩
def shiftSeq {State : Type*} (ss : ℕ → State) (k : ℕ) : ℕ → State :=
fun i => ss (i + k)
CSLibExt/Foundations/Semantics/LTS/OmegaRun.lean:37
Uses 1 · Used by 2
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.