Theory Lemmas

(*  Title:      HOL/HOLCF/IOA/ABP/Lemmas.thy
    Author:     Olaf Müller
*)

theory Lemmas
imports Main
begin

subsection ‹Logic›

lemma and_de_morgan_and_absorbe: "(¬(AB)) = ((¬A)B ¬B)"
  by blast

lemma bool_if_impl_or: "(if C then A else B)  (AB)"
  by auto

lemma exis_elim: "(x. x=P  Q(x)) = Q(P)"
  by blast


subsection ‹Sets›

lemma set_lemmas:
    "f(x)  (x. {f(x)})"
    "f x y  (x y. {f x y})"
    "a. (x. a  f(x))  a  (x. {f(x)})"
    "a. (x y. a  f x y) ==> a  (x y. {f x y})"
  by auto

text ‹2 Lemmas to add to set_lemmas›, used also for action handling, 
   namely for Intersections and the empty list (compatibility of IOA!).›
lemma singleton_set: "(b.{x. x=f(b)}) = (b.{f(b)})"
  by blast

lemma de_morgan: "((AB)=False) = ((¬A)(¬B))"
  by blast


subsection ‹Lists›

lemma cons_not_nil: "l  []  (x xs. l = (x#xs))"
  by (induct l) simp_all

end