Theory Pred
section ‹Logical Connectives lifted to predicates›
theory Pred
imports Main
begin
default_sort type
type_synonym 'a predicate = "'a ⇒ bool"
definition satisfies :: "'a ⇒ 'a predicate ⇒ bool"  (‹_ ⊨ _› [100, 9] 8)
  where "(s ⊨ P) ⟷ P s"
definition valid :: "'a predicate ⇒ bool"  (‹⊫ _› [9] 8)
  where "(⊫ P) ⟷ (∀s. (s ⊨ P))"
definition Not :: "'a predicate ⇒ 'a predicate"  (‹❙¬ _› [40] 40)
  where NOT_def: "Not P s ⟷ ¬ P s"
definition AND :: "'a predicate ⇒ 'a predicate ⇒ 'a predicate"  (infixr ‹❙∧› 35)
  where "(P ❙∧ Q) s ⟷ P s ∧ Q s"
definition OR :: "'a predicate ⇒ 'a predicate ⇒ 'a predicate"  (infixr ‹❙∨› 30)
  where "(P ❙∨ Q) s ⟷ P s ∨ Q s"
definition IMPLIES :: "'a predicate ⇒ 'a predicate ⇒ 'a predicate"  (infixr ‹❙⟶› 25)
  where "(P ❙⟶ Q) s ⟷ P s ⟶ Q s"
end