Documentation

Pdl.UnfoldDia

Local Box Unfolding (Section 3.2) #

Diamonds: H, Y and Φ_⋄ #

Equations
Instances For
    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_δ : γ δ) :
    if α.isAtomic then γ = α else if α.isStar then lengthOfProgram γ lengthOfProgram α else lengthOfProgram γ < lengthOfProgram α
    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

          Loaded Diamonds (Section 3.3) #

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

          Equations
          Instances For
            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 List.dropLast_append_getLast_eq_cons {α : Type u_1} (x : α) (xs : List α) :
              (x :: xs).dropLast ++ [(x :: xs).getLast ] = x :: xs

              Maybe upstream a version of this to Mathlib?

              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)
              Equations
              Instances For

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

                Equations
                Instances For

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

                  Equations
                  Instances For
                    Equations
                    Instances For