Theory Set_Applicative

theory Set_Applicative imports
  Applicative_Lifting.Applicative_Set
begin

subsection ‹Applicative instance for @{typ "'a set"}

lemma ap_set_conv_bind: "ap_set f x = Set.bind f (λf. Set.bind x (λx. {f x}))"
by(auto simp add: ap_set_def bind_UNION)

context includes applicative_syntax begin

lemma in_ap_setI: " f'  f; x'  x   f' x'  f  x"
by(auto simp add: ap_set_def)

lemma in_ap_setE [elim!]:
  " x  f  y; f' y'.  x = f' y'; f'  f; y'  y   thesis   thesis"
by(auto simp add: ap_set_def)

lemma in_ap_pure_set [iff]: "x  {f}  y  (y'y. x = f y')"
unfolding ap_set_def by auto

end

end