proposition: Fact bti_inv x s t : x ⊆ s⪧t <-> x ⊆ t \/ exists y, y ⊆ t /\ x ≈ s⪧y.
proof: Proof. split. + intros H. destruct (btm_dec s x) as [ H1 | H1 ]. * destruct btm_partition with (1 := H1) as (y & H2 & H3). right; exists y; split; auto. intros z Hz. assert (z ∈ s⪧t) as C. { apply H. apply btm_congr_r with (1 := in_bte_sym H2), btm_inv; auto. } apply btm_inv in C; destruct C as [C|]; auto. contradict H3; revert Hz; apply btm_congr_l; auto. * left. intros y Hy. specialize (H _ Hy). apply btm_inv in H. destruct H as [ H | ]; auto. contradict H1. revert Hy; apply btm_congr_l; auto. + intros [ H | (y & H1 & H2) ]. * apply bti_trans with (1 := H); auto. * intros z Hz. apply bti_congr_r with (1 := H2) in Hz; auto. revert Hz; btm simpl; intros []; auto. Qed.
imports: List Arith Lia Max Wellfounded Setoid Eqdep_dec Undecidability.Shared.Libs.DLW.Utils(utils_tac utils_list utils_decidable finite seteq) Undecidability.Shared.Libs.DLW.Vec(pos) Undecidability.Shared.Libs.DLW.Wf(wf_finite wf_chains) Undecidability.FOL.TRAKHTENBROT(notations fol_ops)