Substitution and Helper Lemmas #
The lemmas here are mostly from Sections 2.1 and 2.2.
Single-step replacing #
Replace atomic proposition x by ψ in a formula.
Equations
- PDL.replInF x ψ PDL.Formula.bottom = ⊥
- PDL.replInF x ψ (PDL.Formula.atom_prop c) = if (c == x) = true then ψ else PDL.Formula.atom_prop c
- PDL.replInF x ψ φ.neg = (PDL.replInF x ψ φ).neg
- PDL.replInF x ψ (φ1.and φ2) = (PDL.replInF x ψ φ1).and (PDL.replInF x ψ φ2)
- PDL.replInF x ψ (PDL.Formula.box α φ) = PDL.Formula.box (PDL.replInP x ψ α) (PDL.replInF x ψ φ)
Instances For
Replace atomic proposition x by ψ in a program.
Equations
- PDL.replInP x ψ (PDL.Program.atom_prog c) = PDL.Program.atom_prog c
- PDL.replInP x ψ (α.sequence β) = (PDL.replInP x ψ α).sequence (PDL.replInP x ψ β)
- PDL.replInP x ψ (α.union β) = (PDL.replInP x ψ α).union (PDL.replInP x ψ β)
- PDL.replInP x ψ α.star = (PDL.replInP x ψ α).star
- PDL.replInP x ψ (PDL.Program.test φ) = PDL.Program.test (PDL.replInF x ψ φ)
Instances For
theorem
PDL.repl_in_boxes_non_occ_eq_neg
{x : ℕ}
{ψ : Formula}
(δ : List Program)
:
Sum.inl x ∉ Vocab.fromList (List.map Program.voc δ) →
replInF x ψ (Formula.boxes δ (Formula.atom_prop x).neg) = Formula.boxes δ ψ.neg
theorem
PDL.repl_in_boxes_non_occ_eq_pos
{x : ℕ}
{ψ : Formula}
(δ : List Program)
:
Sum.inl x ∉ Vocab.fromList (List.map Program.voc δ) →
replInF x ψ (Formula.boxes δ (Formula.atom_prop x)) = Formula.boxes δ ψ
theorem
PDL.repl_in_list_non_occ_eq
{x : ℕ}
{ρ : Formula}
(F : List Formula)
:
Sum.inl x ∉ Vocab.fromList (List.map Formula.voc F) → List.map (replInF x ρ) F = F
theorem
PDL.repl_in_model_rel_iff
(x : ℕ)
(ψ : Formula)
(α : Program)
{W : Type}
(M : KripkeModel W)
(w v : W)
:
theorem
PDL.repl_in_disMap
{α : Type u_1}
(x : ℕ)
(ρ : Formula)
(L : List α)
(p : α → Prop)
(f : α → Formula)
[DecidablePred p]
:
Cancellation of replacements #
@[simp]
theorem
PDL.repl_in_F_cancel_via_non_occ
(φ : Formula)
(p q : ℕ)
:
Sum.inl q ∉ φ.voc → replInF q (Formula.atom_prop p) (replInF p (Formula.atom_prop q) φ) = φ
Replacing p with a fresh q and then replacing q by p results in the same formula.
theorem
PDL.repl_in_P_cancel_via_non_occ
(α : Program)
(p q : ℕ)
:
Sum.inl q ∉ α.voc → replInP q (Formula.atom_prop p) (replInP p (Formula.atom_prop q) α) = α
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 : ℕ)
:
tautology φ → tautology (replInF p (Formula.atom_prop q) φ)
Replacing an atom in a tautology results in a tautology.
Simultaneous Substitutions #
@[reducible, inline]
A substitution assigning a formula to each atomic proposition.
Equations
Instances For
Apply substitution σ to formula φ.
Equations
- PDL.substInF σ PDL.Formula.bottom = ⊥
- PDL.substInF σ (PDL.Formula.atom_prop c) = σ c
- PDL.substInF σ φ.neg = (PDL.substInF σ φ).neg
- PDL.substInF σ (φ1.and φ2) = (PDL.substInF σ φ1).and (PDL.substInF σ φ2)
- PDL.substInF σ (PDL.Formula.box α φ) = PDL.Formula.box (PDL.substInP σ α) (PDL.substInF σ φ)
Instances For
Apply substitution σ to program α.
Equations
- PDL.substInP σ (PDL.Program.atom_prog c) = PDL.Program.atom_prog c
- PDL.substInP σ (α.sequence β) = (PDL.substInP σ α).sequence (PDL.substInP σ β)
- PDL.substInP σ (α.union β) = (PDL.substInP σ α).union (PDL.substInP σ β)
- PDL.substInP σ α.star = (PDL.substInP σ α).star
- PDL.substInP σ (PDL.Program.test φ) = PDL.Program.test (PDL.substInF σ φ)
Instances For
Overwrite the valuation in M with the substitution σ.
Equations
Instances For
theorem
PDL.substitutionLemma
(σ : Substitution)
(φ : Formula)
{W : Type}
(M : KripkeModel W)
(w : W)
:
theorem
PDL.substitutionLemmaRel
(σ : Substitution)
(α : Program)
{W : Type}
(M : KripkeModel W)
(w v : W)
:
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 ...