Documentation

LeanPool.PDL.Substitution

Substitution and Helper Lemmas #

The lemmas here are mostly from Sections 2.1 and 2.2.

Single-step replacing #

def PDL.replInF (x : ℕ) (ψ : Formula) :

Replace atomic proposition x by ψ in a formula.

Equations
Instances For
    def PDL.replInP (x : ℕ) (ψ : Formula) :

    Replace atomic proposition x by ψ in a program.

    Equations
    Instances For
      theorem PDL.repl_in_con {x : ℕ} {ψ : Formula} {l : List Formula} :
      replInF x ψ (con l) = con (List.map (replInF x ψ) l)
      theorem PDL.repl_in_or {x : ℕ} {ψ φ1 φ2 : Formula} :
      replInF x ψ (φ1.or φ2) = (replInF x ψ φ1).or (replInF x ψ φ2)
      theorem PDL.repl_in_dis {x : ℕ} {ψ : Formula} {l : List Formula} :
      replInF x ψ (dis l) = dis (List.map (replInF x ψ) l)
      theorem PDL.repl_in_F_non_occ_eq {x : ℕ} {φ ρ : Formula} :
      Sum.inl x ∉ φ.voc → replInF x ρ φ = φ
      theorem PDL.repl_in_P_non_occ_eq {x : ℕ} {α : Program} {ρ : Formula} :
      Sum.inl x ∉ α.voc → replInP x ρ α = α
      theorem PDL.repl_in_F_voc_def (p : ℕ) (φ ψ : Formula) :
      theorem PDL.repl_in_P_voc_def (p : ℕ) (φ : Formula) (α : Program) :
      def PDL.replInModel {W : Type} (x : ℕ) (ψ : Formula) :

      Overwrite the valuation of x with the current value of ψ in a model.

      Equations
      Instances For
        theorem PDL.repl_in_model_sat_iff (x : ℕ) (ψ φ : Formula) {W : Type} (M : KripkeModel W) (w : W) :
        theorem PDL.repl_in_model_rel_iff (x : ℕ) (ψ : Formula) (α : Program) {W : Type} (M : KripkeModel W) (w v : W) :
        relate M (replInP x ψ α) w v ↔ relate (replInModel x ψ M) α w v
        theorem PDL.repl_in_F_equiv {φ1 φ2 : Formula} (x : ℕ) (ψ : Formula) :
        semEquiv φ1 φ2 → semEquiv (replInF x ψ φ1) (replInF x ψ φ2)
        theorem PDL.repl_in_P_equiv {α1 α2 : Program} (x : ℕ) (ψ : Formula) :
        relEquiv α1 α2 → relEquiv (replInP x ψ α1) (replInP x ψ α2)
        theorem PDL.repl_in_disMap {α : Type u_1} (x : ℕ) (ρ : Formula) (L : List α) (p : α → Prop) (f : α → Formula) [DecidablePred p] :
        replInF x ρ (dis (List.map (fun (Fδ : α) => if p Fδ then Formula.bottom else f Fδ) L)) = dis (List.map (fun (Fδ : α) => if p Fδ then Formula.bottom else replInF x ρ (f Fδ)) L)

        Cancellation of replacements #

        @[simp]

        Replacing p with a fresh q and then replacing q by p results in the same formula.

        Replacing p with a fresh q and then replacing q by p results in the same program.

        Replacement of atoms in tautologies #

        theorem PDL.taut_repl (φ : Formula) (p q : ℕ) :

        Replacing an atom in a tautology results in a tautology.

        theorem PDL.non_occ_taut_then_taut_repl_in_imp (φ ψ : Formula) (p q : ℕ) :
        Sum.inl p ∉ ψ.voc → tautology (φ.and ψ.neg).neg → tautology ((replInF p (Formula.atom_prop q) φ).and ψ.neg).neg

        A special case of taut_repl for the proof of beth.

        theorem PDL.non_occ_taut_then_taut_imp_repl_in (φ ψ : Formula) (p q : ℕ) :
        Sum.inl p ∉ ψ.voc → tautology (ψ.and φ.neg).neg → tautology (ψ.and (replInF p (Formula.atom_prop q) φ).neg).neg

        Another special case of taut_repl for the proof of beth.

        Simultaneous Substitutions #

        @[reducible, inline]

        A substitution assigning a formula to each atomic proposition.

        Equations
        Instances For

          Apply substitution σ to formula φ.

          Equations
          Instances For

            Overwrite the valuation in M with the substitution σ.

            Equations
            Instances For
              theorem PDL.substitutionLemmaRel (σ : Substitution) (α : Program) {W : Type} (M : KripkeModel W) (w v : W) :
              relate M (substInP σ α) w v ↔ relate (substInModel σ M) α w v

              Semantic Equivalents #

              The following does not hold in general, because frm might be sneaky: theorem wrong_equiv_repl φ1 φ2 (h : φ1 ≡ φ2) (frm : Formula → Formula) : frm φ1 ≡ frm φ2 := by ...

              theorem PDL.equiv_con {φ1 φ2 : Formula} (h : semEquiv φ1 φ2) (ψ : Formula) :
              semEquiv (φ1.and ψ) (φ2.and ψ)

              A true instance of wrong_equiv_repl, here we replaced frm with a special case.