CTL* state-run semantics and canonical labeled executions
Canonical labeled-execution semantics
DefinitionCTL\(^{\ast}\) state satisfaction over labeled executions#✓fully proved
Satisfaction of a CTL* state formula at a state over canonical Cslib.LTS:
E π holds when some infinite labeled execution from the state satisfies π;
A π when every infinite labeled execution does.
def UpstreamStateSat (lts : _root_.Cslib.LTS State Label)
(valuation : State → Atom → Prop) : StateFormula Atom → State → Prop
| .atom a, s => valuation s a
| .top, _ => True
| .not φ, s => ¬ UpstreamStateSat lts valuation φ s
| .and φ ψ, s => UpstreamStateSat lts valuation φ s ∧
UpstreamStateSat lts valuation ψ s
| .exists π, s => ∃ oss μs, oss 0 = s ∧ lts.OmegaExecution oss μs ∧
UpstreamPathSat lts valuation π oss
| .forall π, s => ∀ oss μs, oss 0 = s → lts.OmegaExecution oss μs →
UpstreamPathSat lts valuation π oss
inductive StateFormula (Atom : Type u) where
| atom (a : Atom) : StateFormula Atom
| top : StateFormula Atom
| not (φ : StateFormula Atom) : StateFormula Atom
| and (φ ψ : StateFormula Atom) : StateFormula Atom
| exists (π : PathFormula Atom) : StateFormula Atom
| forall (π : PathFormula Atom) : StateFormula Atom
CSLibExt/Logics/CTLStar/Basic.lean:66
def UpstreamPathSat (lts : _root_.Cslib.LTS State Label)
(valuation : State → Atom → Prop) : PathFormula Atom → ωSequence State → Prop
| .state φ, oss => UpstreamStateSat lts valuation φ (oss 0)
| .not π, oss => ¬ UpstreamPathSat lts valuation π oss
| .and π ρ, oss => UpstreamPathSat lts valuation π oss ∧
UpstreamPathSat lts valuation ρ oss
| .next π, oss => UpstreamPathSat lts valuation π (oss.drop 1)
| .until π ρ, oss =>
∃ k, UpstreamPathSat lts valuation ρ (oss.drop k) ∧
∀ j, j < k → UpstreamPathSat lts valuation π (oss.drop j)
CSLibExt/Logics/CTLStar/UpstreamBridge.lean:116
Uses 2 · Used by 2
DefinitionCTL\(^{\ast}\) path satisfaction on labeled executions#✓fully proved
Satisfaction of a CTL* path formula on a canonical infinite labeled execution:
next drops the first state, while until asks for a target position with the guard
before it.
def UpstreamPathSat (lts : _root_.Cslib.LTS State Label)
(valuation : State → Atom → Prop) : PathFormula Atom → ωSequence State → Prop
| .state φ, oss => UpstreamStateSat lts valuation φ (oss 0)
| .not π, oss => ¬ UpstreamPathSat lts valuation π oss
| .and π ρ, oss => UpstreamPathSat lts valuation π oss ∧
UpstreamPathSat lts valuation ρ oss
| .next π, oss => UpstreamPathSat lts valuation π (oss.drop 1)
| .until π ρ, oss =>
∃ k, UpstreamPathSat lts valuation ρ (oss.drop k) ∧
∀ j, j < k → UpstreamPathSat lts valuation π (oss.drop j)
inductive PathFormula (Atom : Type u) where
| state (φ : StateFormula Atom) : PathFormula Atom
| not (π : PathFormula Atom) : PathFormula Atom
| and (π ρ : PathFormula Atom) : PathFormula Atom
| next (π : PathFormula Atom) : PathFormula Atom
| until (π ρ : PathFormula Atom) : PathFormula Atom
CSLibExt/Logics/CTLStar/Basic.lean:76
def UpstreamStateSat (lts : _root_.Cslib.LTS State Label)
(valuation : State → Atom → Prop) : StateFormula Atom → State → Prop
| .atom a, s => valuation s a
| .top, _ => True
| .not φ, s => ¬ UpstreamStateSat lts valuation φ s
| .and φ ψ, s => UpstreamStateSat lts valuation φ s ∧
UpstreamStateSat lts valuation ψ s
| .exists π, s => ∃ oss μs, oss 0 = s ∧ lts.OmegaExecution oss μs ∧
UpstreamPathSat lts valuation π oss
| .forall π, s => ∀ oss μs, oss 0 = s → lts.OmegaExecution oss μs →
UpstreamPathSat lts valuation π oss
CSLibExt/Logics/CTLStar/UpstreamBridge.lean:101
Uses 2 · Used by 2
The bridge
TheoremCTL* state-sequence/execution bridge, state formulas#✓fully proved
CTL* state-sequence/execution bridge, state formulas. CTL* state satisfaction
over lts agrees with satisfaction quantified over canonical OmegaExecutions.
theorem stateSat_iff_upstream (φ : StateFormula Atom) (s : State) :
StateSat lts valuation φ s ↔
UpstreamStateSat (lts) valuation φ s
inductive StateFormula (Atom : Type u) where
| atom (a : Atom) : StateFormula Atom
| top : StateFormula Atom
| not (φ : StateFormula Atom) : StateFormula Atom
| and (φ ψ : StateFormula Atom) : StateFormula Atom
| exists (π : PathFormula Atom) : StateFormula Atom
| forall (π : PathFormula Atom) : StateFormula Atom
CSLibExt/Logics/CTLStar/Basic.lean:66
def StateSat (lts : _root_.Cslib.LTS State Label) (valuation : State → Atom → Prop) :
StateFormula Atom → State → Prop
| .atom a, s => valuation s a
| .top, _ => True
| .not φ, s => ¬ StateSat lts valuation φ s
| .and φ ψ, s => StateSat lts valuation φ s ∧ StateSat lts valuation ψ s
| .exists π, s => ∃ run, run 0 = s ∧ LTS.OmegaRun (lts := lts) run ∧ PathSat lts valuation π run
| .forall π, s => ∀ run, run 0 = s → LTS.OmegaRun (lts := lts) run → PathSat lts valuation π run
CSLibExt/Logics/CTLStar/Basic.lean:105
def UpstreamStateSat (lts : _root_.Cslib.LTS State Label)
(valuation : State → Atom → Prop) : StateFormula Atom → State → Prop
| .atom a, s => valuation s a
| .top, _ => True
| .not φ, s => ¬ UpstreamStateSat lts valuation φ s
| .and φ ψ, s => UpstreamStateSat lts valuation φ s ∧
UpstreamStateSat lts valuation ψ s
| .exists π, s => ∃ oss μs, oss 0 = s ∧ lts.OmegaExecution oss μs ∧
UpstreamPathSat lts valuation π oss
| .forall π, s => ∀ oss μs, oss 0 = s → lts.OmegaExecution oss μs →
UpstreamPathSat lts valuation π oss
CSLibExt/Logics/CTLStar/UpstreamBridge.lean:101
Uses 11
TheoremCTL* state-sequence/execution bridge, path formulas#✓fully proved
CTL* state-sequence/execution bridge, path formulas. CTL* path satisfaction on a state run agrees with the canonical labeled-execution presentation on the same state sequence.
theorem pathSat_iff_upstream (π : PathFormula Atom) {run : ℕ → State}
(hrun : LTS.OmegaRun (lts := lts) run) :
PathSat lts valuation π run ↔
UpstreamPathSat (lts) valuation π ⟨run⟩
inductive PathFormula (Atom : Type u) where
| state (φ : StateFormula Atom) : PathFormula Atom
| not (π : PathFormula Atom) : PathFormula Atom
| and (π ρ : PathFormula Atom) : PathFormula Atom
| next (π : PathFormula Atom) : PathFormula Atom
| until (π ρ : PathFormula Atom) : PathFormula Atom
CSLibExt/Logics/CTLStar/Basic.lean:76
def OmegaRun (ss : ℕ → State) : Prop :=
∀ i, ∃ label, lts.Tr (ss i) label (ss (i + 1))
CSLibExt/Foundations/Semantics/LTS/OmegaRun.lean:66
def PathSat (lts : _root_.Cslib.LTS State Label) (valuation : State → Atom → Prop) :
PathFormula Atom → (ℕ → State) → Prop
| .state φ, run => StateSat lts valuation φ (run 0)
| .not π, run => ¬ PathSat lts valuation π run
| .and π ρ, run => PathSat lts valuation π run ∧ PathSat lts valuation ρ run
| .next π, run => PathSat lts valuation π (Semantics.shiftSeq run 1)
| .until π ρ, run =>
∃ k, PathSat lts valuation ρ (Semantics.shiftSeq run k) ∧
∀ j, j < k → PathSat lts valuation π (Semantics.shiftSeq run j)
CSLibExt/Logics/CTLStar/Basic.lean:117
def UpstreamPathSat (lts : _root_.Cslib.LTS State Label)
(valuation : State → Atom → Prop) : PathFormula Atom → ωSequence State → Prop
| .state φ, oss => UpstreamStateSat lts valuation φ (oss 0)
| .not π, oss => ¬ UpstreamPathSat lts valuation π oss
| .and π ρ, oss => UpstreamPathSat lts valuation π oss ∧
UpstreamPathSat lts valuation ρ oss
| .next π, oss => UpstreamPathSat lts valuation π (oss.drop 1)
| .until π ρ, oss =>
∃ k, UpstreamPathSat lts valuation ρ (oss.drop k) ∧
∀ j, j < k → UpstreamPathSat lts valuation π (oss.drop j)
CSLibExt/Logics/CTLStar/UpstreamBridge.lean:116
Uses 11
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.