Theory Binary_Relations_Reflexive_Closure
subsection ‹Reflexive Closure›
theory Binary_Relations_Reflexive_Closure
imports
Binary_Relations_Reflexive
Restricted_Equality
begin
consts refl_closure_on :: "'a ⇒ 'b ⇒ 'b"
overloading
refl_closure_on_pred ≡ "refl_closure_on :: ('a ⇒ bool) ⇒ ('a ⇒ 'a ⇒ bool) ⇒ ('a ⇒ 'a ⇒ bool)"
begin
definition "refl_closure_on_pred (P :: 'a ⇒ bool) (R :: 'a ⇒ 'a ⇒ bool) ≡ R ⊔ (=⇘P⇙)"
end
lemma refl_closure_on_if_pred [intro]:
assumes "P x"
shows "refl_closure_on P R x x"
using assms unfolding refl_closure_on_pred_def by auto
lemma refl_closure_on_if_rel [intro]:
assumes "(R :: 'a ⇒ 'a ⇒ bool) x y"
shows "refl_closure_on (P :: 'a ⇒ bool) R x y"
using assms unfolding refl_closure_on_pred_def by auto
corollary le_refl_closure_on_self: "(R :: 'a ⇒ 'a ⇒ bool) ≤ refl_closure_on (P :: 'a ⇒ bool) R"
by blast
lemma refl_closure_onE [elim]:
assumes "refl_closure_on P R x y"
obtains "P x" "x = y" | "R x y"
using assms unfolding refl_closure_on_pred_def by auto
lemma reflexive_on_refl_closure_on:
"reflexive_on (P :: 'a ⇒ bool) (refl_closure_on P (R :: 'a ⇒ 'a ⇒ bool))"
by fastforce
definition "refl_closure_field R ≡ refl_closure_on (in_field R) R"
open_bundle refl_closure_field_syntax
begin
notation refl_closure_field (‹(_⇧+)› [1000])
end
lemma refl_closure_fieldI [intro]:
assumes "refl_closure_on (in_field R) R x y"
shows "R⇧+ x y"
using assms unfolding refl_closure_field_def by auto
lemma refl_closure_fieldD [dest]:
assumes "R⇧+ x y"
shows "refl_closure_on (in_field R) R x y"
using assms unfolding refl_closure_field_def by auto
lemma refl_closure_field_eq_refl_closure_on_in_field: "R⇧+ = refl_closure_on (in_field R) R"
by auto
end