Documentation

LeanPool.LeanModelChecking.ABWNBW

From alternating to nondeterministic Büchi automata #

For every alternating Büchi automaton (ABW) over a finite state space we build a nondeterministic Büchi automaton (NBW) accepting the same language, via the Miyano–Hayashi breakpoint construction (ABW.toNBW), and prove ABW.toNBW.lang_eq.

def LeanModelChecking.ABW.toNBW {S Q : Type} (A : ABW S Q) :
NBW S

The nondeterministic Büchi automaton obtained from an alternating one A by the Miyano–Hayashi breakpoint construction: states are pairs (X, W) of a current set X and an "obligation" set W of states still owing a visit to A.F.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem LeanModelChecking.ABW.toNBW.lang_sub {S Q : Type} {A : ABW S Q} {w : S} :
    A.toNBW.language wA.language w
    theorem LeanModelChecking.lemma1 {α : Type} {a b c : Set α} {h : Disjoint a b} :
    a = (a b c) \ b
    def LeanModelChecking.level {S Q : Type} {A : ABW S Q} {w : S} {G : RunDAG A w} (i : ) :
    Set Q

    The set of states occupying level i of the run DAG G.

    Equations
    Instances For

      An abstract, finitely-branching levelled graph: each level carries a finite, nonempty type of vertices, and every vertex on level i + 1 has a parent on level i. König's lemma then yields an infinite path.

      • level : Type

        The type of vertices on each level.

      • E (i : ) : self.level iself.level (i + 1)Prop

        The edge relation between consecutive levels.

      • ex_parent (i : ) (v : self.level (i + 1)) : ∃ (v' : self.level i), self.E i v' v

        Every vertex on level i + 1 has a predecessor on level i.

      • fin (i : ) : Finite (self.level i)

        Each level is finite.

      • nonempty (i : ) : Nonempty (self.level i)

        Each level is nonempty.

      Instances For

        An infinite path through a LevelGraph: a choice of vertex on each level together with a proof that consecutive choices are connected by an edge.

        • f (i : ) : G.level i

          The vertex chosen on each level.

        • p (i : ) : G.E i (self.f i) (self.f (i + 1))

          Consecutive chosen vertices are connected by an edge.

        Instances For
          @[irreducible]
          noncomputable def LeanModelChecking.LevelGraph.ancestor {G : LevelGraph} {i j : } (hij : i j) (v : G.level j) :
          G.level i

          The ancestor on level i of a vertex on level j ≥ i, obtained by repeatedly choosing a parent.

          Equations
          Instances For
            theorem LeanModelChecking.LevelGraph.ancestor_1 {G : LevelGraph} {i j : } (hij : i j) (v : G.level (j + 1)) :
            ancestor hij .choose = ancestor v
            theorem LeanModelChecking.LevelGraph.ancestor_trans {G : LevelGraph} {i j k : } (hij : i j) (hjk : j k) (v : G.level k) :
            ancestor hij (ancestor hjk v) = ancestor v
            theorem LeanModelChecking.LevelGraph.choose_eq {α : Sort u_1} {p : αProp} (P : ∃ (a : α), p a) {a : α} (eq : P.choose = a) :
            p a
            def LeanModelChecking.helper.p {S Q : Type} {A : ABW S Q} {w : S} {G : RunDAG A w} :
            Set Q × Set Q

            The canonical run of ABW.toNBW A extracted from a run DAG G of A: at each level it records the set of live states together with the breakpoint obligation set.

            Equations
            Instances For
              theorem LeanModelChecking.ABW.toNBW.lang_sup {S Q : Type} {A : ABW S Q} [Finite Q] {w : S} :
              A.language wA.toNBW.language w