proposition: Lemma opair_inj2 x x' y y' : M_opair x y = M_opair x' y' -> y = y'.
proof: Proof. Proof using M_ZF VIEQ. intros He. assert (y = x' \/ y = y') as [->| ->]; trivial. - assert (H : {x; y} ∈ M_opair x y) by apply M_pair2. rewrite He in H. apply M_pair in H as [H|H]. + symmetry in H. apply sing_pair in H. intuition. + assert (H' : y ∈ {x; y}) by apply M_pair2. rewrite H in H'. now apply M_pair in H'. - assert (x = x') as -> by now apply opair_inj1 in He. assert (H : {x'; y'} ∈ M_opair x' y') by apply M_pair2. rewrite <- He in H. apply M_pair in H as [H|H]; apply (sing_pair (eq_sym H)). Qed.
imports: Undecidability.FOL(Syntax.Facts Semantics.Tarski.FullFacts) Undecidability.FOL(Sets.ZF) Undecidability.FOL(ZF) Undecidability.FOL.TRAKHTENBROT(hfs) Undecidability.Shared.Libs.DLW.Utils(finite) Undecidability(Shared.ListAutomation) Lia