Documentation

Strata.DL.Imperative.Logic.Temporal

Temporal operators over event-language runs #

Branching-time temporal operators, as in CTL, over the runs of an EventLang. Each turns a predicate on configurations into one, by quantifying over the runs from a configuration: over all runs or some run, and over every point of a run or some point.

OperatorCTLMeaning
AllNextAXevery successor satisfies S
SomeNextEXsome successor satisfies S
AllPathsAlwaysAGevery reachable configuration satisfies S
SomePathEventuallyEFsome reachable configuration satisfies S
AllPathsEventuallyAFevery run reaches a configuration satisfying S
SomePathAlwaysEGsome infinite run stays in S

EveryStep and SomeStep read the events a step emits rather than the configuration it reaches, and TracesSatisfy the whole trace of every finite run, as a safety property does.

AllPathsEventually is inductive, so every run must actually reach the target: a run that diverges or gets stuck first does not satisfy it. SomePathAlways asks for a diverging sequence ℕ → CfgT that stays in S. TemporalProps relates them to each other and to MustTerminate.

def Strata.Logic.EventLang.Reaches {P : Imperative.PureExpr} {EventT : Type u_2} (EL : EventLang P EventT) (cfg cfg' : EL.CfgT) :

cfg' is reachable from cfg in zero or more steps.

Equations
Instances For
    def Strata.Logic.EventLang.EveryStep {P : Imperative.PureExpr} {EventT : Type u_2} (EL : EventLang P EventT) (φ : List EventT → Prop) (cfg : EL.CfgT) :

    Every step from cfg emits events φ accepts.

    Equations
    Instances For
      def Strata.Logic.EventLang.SomeStep {P : Imperative.PureExpr} {EventT : Type u_2} (EL : EventLang P EventT) (φ : List EventT → Prop) (cfg : EL.CfgT) :

      Some step from cfg emits events φ accepts.

      Equations
      Instances For
        def Strata.Logic.EventLang.AllNext {P : Imperative.PureExpr} {EventT : Type u_2} (EL : EventLang P EventT) (S : EL.CfgT → Prop) (cfg : EL.CfgT) :

        Every successor of cfg satisfies S.

        Equations
        • EL.AllNext S cfg = ∀ (emitted : List EventT) (cfg' : EL.CfgT), EL.step cfg emitted cfg' → S cfg'
        Instances For
          def Strata.Logic.EventLang.SomeNext {P : Imperative.PureExpr} {EventT : Type u_2} (EL : EventLang P EventT) (S : EL.CfgT → Prop) (cfg : EL.CfgT) :

          Some successor of cfg satisfies S.

          Equations
          Instances For
            def Strata.Logic.EventLang.AllPathsAlways {P : Imperative.PureExpr} {EventT : Type u_2} (EL : EventLang P EventT) (S : EL.CfgT → Prop) (cfg : EL.CfgT) :

            Every configuration reachable from cfg satisfies S.

            Equations
            Instances For
              def Strata.Logic.EventLang.SomePathEventually {P : Imperative.PureExpr} {EventT : Type u_2} (EL : EventLang P EventT) (S : EL.CfgT → Prop) (cfg : EL.CfgT) :

              Some configuration reachable from cfg satisfies S.

              Equations
              Instances For
                inductive Strata.Logic.EventLang.AllPathsEventually {P : Imperative.PureExpr} {EventT : Type u_2} (EL : EventLang P EventT) (S : EL.CfgT → Prop) :
                EL.CfgT → Prop

                Every run from cfg reaches a configuration satisfying S: cfg satisfies it, or cfg can step and every successor reaches one.

                Instances For
                  def Strata.Logic.EventLang.SomePathAlways {P : Imperative.PureExpr} {EventT : Type u_2} (EL : EventLang P EventT) (S : EL.CfgT → Prop) (cfg : EL.CfgT) :

                  Some diverging sequence from cfg stays in configurations satisfying S.

                  Equations
                  Instances For
                    def Strata.Logic.EventLang.TracesSatisfy {P : Imperative.PureExpr} {EventT : Type u_2} (EL : EventLang P EventT) (φ : List EventT → Prop) (cfg : EL.CfgT) :

                    Every finite trace of a run from cfg satisfies φ.

                    Equations
                    Instances For