Theory Transfer_Extras
theory Transfer_Extras
imports Main
begin
lemma :
fixes R :: "'a ⇒ 'a ⇒ bool" and x y z :: 'a
assumes "right_unique R"
shows "R⇧*⇧* x y ⟹ (∄w. R y w) ⟹ R⇧*⇧* x z ⟹ (∄w. R z w) ⟹ y = z"
proof (induction x arbitrary: z rule: converse_rtranclp_induct)
case base
then show ?case
by (auto elim: converse_rtranclpE)
next
case (step x w)
hence "R⇧*⇧* w z"
using right_uniqueD[OF ‹right_unique R›]
by (metis converse_rtranclpE)
with step show ?case
by simp
qed
lemma :
fixes R :: "'a ⇒ 'a ⇒ bool" and x y z :: 'a
assumes "right_unique R"
shows "R⇧+⇧+ x y ⟹ (∄w. R y w) ⟹ R⇧+⇧+ x z ⟹ (∄w. R z w) ⟹ y = z"
using right_uniqueD[OF ‹right_unique R›, of x]
by (auto dest!: tranclpD intro!: rtranclp_complete_run_right_unique[OF ‹right_unique R›, of _ y z])
end