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 unfoldDiamond_voc {x : } {α : Program} {φ : Formula} {L : List Formula} (L_in : L unfoldDiamond α φ) {ψ : Formula} (ψ_in : ψ L) (x_in_voc_ψ : x ψ.voc) :
          x α.voc x φ.voc
          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

            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