intros a b0 c H H0; apply Zgt_lt.
apply Zmult_gt_reg_r with (p := c); try apply Zlt_gt; auto with zarith.
repeat rewrite (fun x => Zmult_comm x c); auto with zarith.
Qed.
(* An equality function on Z that return a bool *)
Fixpoint pos_eq_bool (a b : positive) {struct b} : bool :=
match a, b with
| xH, xH => true
| xI a', xI b' => pos_eq_bool a' b'
| xO a', xO b' => pos_eq_bool a' b'
| _, _ => false
end.

(* Specifications: *)
Theorem pos_eq_bool_correct :
forall p q : positive,
match pos_eq_bool p q with
| true => p = q
| false => p <> q
end.