+lemma yplus_inv_O: ∀x,y:ynat. x + y = 0 → x = 0 ∧ y = 0.
+#x #y #H elim (yplus_inv_inj … H) -H
+#m * /2 width=1 by conj/ #n <plus_n_Sm #H destruct
+qed-.
+
+lemma discr_yplus_xy_x: ∀x,y. x + y = x → x = ∞ ∨ y = 0.
+* /2 width=1 by or_introl/
+#x elim x -x /2 width=1 by or_intror/
+#x #IHx * [2: >yplus_Y2 #H destruct ]
+#y <ysucc_inj >yplus_succ1 #H
+lapply (ysucc_inv_inj … H) -H #H
+elim (IHx … H) -IHx -H /2 width=1 by or_introl, or_intror/
+qed-.
+
+lemma discr_yplus_x_xy: ∀x,y. x = x + y → x = ∞ ∨ y = 0.
+/2 width=1 by discr_yplus_xy_x/ qed-.
+
+lemma yplus_inv_monotonic_dx_inj: ∀z,x,y. x + yinj z = y + yinj z → x = y.
+#z @(nat_ind_plus … z) -z /3 width=2 by ysucc_inv_inj/
+qed-.
+
+lemma yplus_inv_monotonic_dx: ∀z,x,y. z < ∞ → x + z = y + z → x = y.
+#z #x #y #H elim (ylt_inv_Y2 … H) -H /2 width=2 by yplus_inv_monotonic_dx_inj/
+qed-.
+
+lemma yplus_inv_Y2: ∀x,y. x + y = ∞ → x = ∞ ∨ y = ∞.
+* /2 width=1 by or_introl/ #x * // #y >yplus_inj #H destruct
+qed-.
+
+lemma yplus_inv_monotonic_23: ∀z,x1,x2,y1,y2. z < ∞ →
+ x1 + z + y1 = x2 + z + y2 → x1 + y1 = x2 + y2.
+#z #x1 #x2 #y1 #y2 #Hz #H @(yplus_inv_monotonic_dx z) //
+>yplus_comm_23 >H -H //
+qed-.
+
+(* Inversion lemmas on strict_order *****************************************)
+
+lemma ylt_inv_plus_Y: ∀x,y. x + y < ∞ → x < ∞ ∧ y < ∞.
+#x #y #H elim (ylt_inv_Y2 … H) -H
+#z #H elim (yplus_inv_inj … H) -H /2 width=1 by conj/
+qed-.
+
+lemma ylt_inv_plus_sn: ∀x,y. x < y → ∃∃z. ⫯z + x = y & x < ∞.
+#x #y #H elim (ylt_inv_le … H) -H
+#Hx #H elim (yle_inv_plus_sn … H) -H
+/2 width=2 by ex2_intro/
+qed-.
+
+lemma ylt_inv_plus_dx: ∀x,y. x < y → ∃∃z. x + ⫯z = y & x < ∞.
+#x #y #H elim (ylt_inv_plus_sn … H) -H
+#z >yplus_comm /2 width=2 by ex2_intro/
+qed-.
+