Documentation

Pdl.UnfoldDia

Local Diamond Unfolding (Section 3.2 and 3.3) #

Diamonds: H, Y and Φ_⋄ #

Equations
Instances For

    Like H, but applied to a whole list of programs. This is used to deal with loaded diamonds.

    Equations
    Instances For
      @[simp]
      theorem Hl_singleton {α : Program} :
      Hl [α] = H α
      @[simp]
      theorem Hl_atomic_cons {a : } {αs : List Program} :
      Hl (·a :: αs) = [([], ·a :: αs)]
      theorem relateSeq_H_imp_relate {α : Program} {W✝ : Type} {M : KripkeModel W✝} {w v : W✝} {X : List Formula} {δ : List Program} :
      (X, δ) H α(M, w)Con XrelateSeq M δ w vrelate M α w v
      theorem H_mem_test (α : Program) (φ : Formula) {Fs : List Formula} {δ : List Program} (in_H : (Fs, δ) H α) (φ_in_Fs : φ Fs) :
      ∃ (τ : Formula) (_ : τ testsOfProgram α), φ = τ

      A test formula coming from H comes from a test in the given program.

      theorem H_mem_sequence (α : Program) {Fs : List Formula} {δ : List Program} (in_H : (Fs, δ) H α) :
      δ = [] ∃ (a : ) (δ' : List Program), δ = ·a :: δ'

      A list of programs coming from H is either empty or starts with an atom.

      theorem keepFreshH {x : } (α : Program) :
      xα.voc∀ (F : List Formula) (δ : List Program), (F, δ) H αxF.fvoc xδ.pvoc
      theorem H_goes_down_prog (α : Program) {Fs : List Formula} {δ : List Program} (in_H : (Fs, δ) H α) {γ : Program} (in_δ : γ δ) :
      Equations
      Instances For

        Φ_◇(α,ψ)

        Equations
        Instances For
          theorem unfoldDiamondContent (α : Program) (ψ : Formula) (X : List Formula) :
          X unfoldDiamond α ψφX, φ = (~ψ) (∃ τtestsOfProgram α, φ = τ) ∃ (a : ) (δ : List Program), φ = (~·a⌈⌈δ⌉⌉ψ)

          Where formulas in the diamond unfolding can come from. Inspired by unfoldBoxContent.

          theorem guardToStarDiamond {β : Program} {σ0 σ1 ρ ψ : Formula} (x : ) (x_notin_beta : Sum.inl xβ.voc) (beta_equiv : (~β~·x)·xσ0σ1) (repl_imp_rho : repl_in_F x ρ σ1ρ) (notPsi_imp_rho : (~ψ)ρ) :
          theorem localDiamondTruth (γ : Program) (ψ : Formula) :
          (~γψ)dis (List.map (fun ( : List Formula × List Program) => Con (Yset ψ)) (H γ))
          def pairRel {W : Type} (M : KripkeModel W) :
          Program × WProgram × WProp

          Helper function to trick "List.Chain r" to use a different r at each step.

          Equations
          Instances For
            theorem relateSeq_toChain' {W : Type} {M : KripkeModel W} {δ : List Program} {v w : W} :
            relateSeq M δ v wδ []∃ (l : List W), l.length + 1 = δ.length List.Chain' (pairRel M) (((?') :: δ).zip (v :: l ++ [w]))
            theorem existsDiamondH {W✝ : Type} {M : KripkeModel W✝} {γ : Program} {v w : W✝} (v_γ_w : relate M γ v w) :
            H γ, (M, v).1 relateSeq M .2 v w

            splitLast #

            def splitLast {α : Type u_1} :
            List αOption (List α × α)

            Helper function for YsetLoad' to get last list element.

            Equations
            Instances For
              @[simp]
              theorem splitLast_nil {α : Type u_1} :
              theorem splitLast_cons_eq_some {α : Type u_1} (x : α) (xs : List α) :
              splitLast (x :: xs) = some ((x :: xs).dropLast, (x :: xs).getLast )
              @[simp]
              theorem splitLast_append_singleton {α✝ : Type u_1} {xs : List α✝} {x : α✝} :
              splitLast (xs ++ [x]) = some (xs, x)
              theorem splitLast_inj {α✝ : Type u_1} {αs βs : List α✝} (h : splitLast αs = splitLast βs) :
              αs = βs
              theorem splitLast_undo_of_some {α✝ : Type u_1} {αs : List α✝} {βs_b : List α✝ × α✝} (h : splitLast αs = some βs_b) :
              βs_b.1 ++ [βs_b.2] = αs
              theorem loadMulti_of_splitLast_cons {α : Program} {αs βs : List Program} {β : Program} {φ : Formula} (h : splitLast (α :: αs) = some (βs, β)) :

              Loaded Diamonds (Section 3.3) #

              The Option is used here because unfolding of tests can lead to free nodes.

              Equations
              Instances For

                Loaded unfolding for ~'⌊α⌋(χ : LoadFormula)

                Equations
                Instances For

                  Loaded unfolding for ~'⌊α⌋(φ : Formula)

                  Equations
                  Instances For