proposition: Fact confluent_semi R : confluent R <-> semi_confluent R.
proof: Proof. split. - intros H x y1 y2 H1 H2. eapply H; [|exact H2]. auto. - intros H x y1 y2 H1 H2. revert y2 H2. induction H1 as [x|x x' y1 H1 _ IH]; intros y2 H2. + exists y2; auto. + assert (joinable (star R) x' y2) as [z H3 H4]. { eapply H; eauto. } assert (joinable (star R) y1 z) as [u H5 H6]. { apply IH; auto. } exists u; eauto. Qed.
imports: Morphisms FinFun Undecidability.HOU(std.tactics std.misc std.ars.basic)