Documentation

LeanPool.LeanModelChecking.SafetyLivenessDecomposition

Safety-liveness decomposition #

We prove that every linear-time property decomposes as the intersection of a safety property and a liveness property, following Alpern and Schneider.

@[reducible, inline]

An infinite word over the alphabet T, modelled as a function from positions to letters.

Equations
Instances For
    @[reducible, inline]

    A finite word over the alphabet T, modelled as a list of letters.

    Equations
    Instances For

      Concatenate a finite word a in front of an infinite word b.

      Equations
      Instances For

        The length-k prefix of an infinite word w, as a finite word.

        Equations
        Instances For
          @[reducible, inline]

          A linear-time property: a set of infinite words.

          Equations
          Instances For

            A property is a safety property when every word outside it has a finite bad prefix: no extension of that prefix lies in the property.

            Equations
            Instances For

              A property is a liveness property when every finite word can be extended to an infinite word lying in the property.

              Equations
              Instances For
                @[simp]
                @[simp]
                theorem SafetyLivenessDecomposition.slice_get {T : Type u} (σ : InfWord T) (n k : ) (hk : k < List.length (σ.slice n)) :
                (σ.slice n)[k] = σ k
                theorem SafetyLivenessDecomposition.slice_append {T : Type u} (α : FinWord T) (β : InfWord T) :
                (α.append β).slice (List.length α) = α
                theorem SafetyLivenessDecomposition.append_slice_eq_self {T : Type u} (σ : InfWord T) (n : ) :
                ((σ.slice n).append fun (k : ) => σ (k + n)) = σ