Theory Logical_Equivalence
theory Logical_Equivalence
imports
Validity
begin
section ‹(Strong) Logical Equivalence›
text ‹The definition of formulas is parametric in the index type, but from now on we want to work
with a fixed (sufficiently large) index type.›
locale indexed_nominal_ts = nominal_ts satisfies transition
for satisfies :: "'state::fs ⇒ 'pred::fs ⇒ bool" (infix "⊢" 70)
and transition :: "'state ⇒ ('act::bn,'state) residual ⇒ bool" (infix "→" 70) +
assumes card_idx_perm: "|UNIV::perm set| <o |UNIV::'idx set|"
and card_idx_state: "|UNIV::'state set| <o |UNIV::'idx set|"
begin
definition logically_equivalent :: "'state ⇒ 'state ⇒ bool" where
"logically_equivalent P Q ≡ (∀x::('idx,'pred,'act) formula. P ⊨ x ⟷ Q ⊨ x)"
notation logically_equivalent (infix "=⋅" 50)
lemma logically_equivalent_eqvt:
assumes "P =⋅ Q" shows "p ∙ P =⋅ p ∙ Q"
using assms unfolding logically_equivalent_def
by (metis (mono_tags) permute_minus_cancel(1) valid_eqvt)
end
end