destruct y as [y1 y2].
destruct (peq x1 y1) eqn:H0.
- destruct (Z_dec x2 y2) eqn:H1; [destruct s|].
+ constructor 1.
unfold lt, lt'.
rewrite H0; simpl.
unfold is_true.
destruct (zlt x2 y2); auto; omega.
+ constructor 3.
unfold lt, lt'.
destruct (peq x1 y1); try solve[inversion H0]; subst.
destruct (peq y1 y1); simpl. clear e e0 H0.
destruct (zlt y2 x2); auto; omega.
destruct (zlt x2 y2); auto; omega.
+ constructor 2.
subst; reflexivity.
- destruct (plt x1 y1).
+ constructor 1.
unfold lt, lt'; rewrite H0; simpl.
destruct (plt x1 y1); auto.
+ constructor 3.
unfold lt, lt'.
destruct (peq x1 y1); try solve[inversion H0]; subst.
destruct (peq y1 x1); simpl.
exfalso; apply n; symmetry; assumption.
destruct (plt y1 x1); auto.
unfold Plt in *.
destruct (x1 <? y1)%positive eqn:AAA.
apply Pos.ltb_lt in AAA. auto.
apply Pos.ltb_ge in AAA.
apply Pos.le_lteq in AAA; destruct AAA; auto.
Qed.
End MiniAddressOrdered.
Module AddressOrdered <: OrderedType.
Include MiniAddressOrdered.

(* Specifications: *)
Lemma eq_dec : forall x y, { eq x y } + { ~ eq x y }.
End AddressOrdered.