proposition: Theorem Zmod'_correct: forall a b, Zmod' a b = a mod b.
proof: Proof. intros a b; unfold Z.modulo; case a; simpl; auto. - intros p; case b; simpl; auto. + intros p1; refine (Zmod_POS_correct _ _); auto. + intros p1; rewrite Zmod_POS_correct; auto. case (Z.pos_div_eucl p (Zpos p1)); simpl; intros z1 z2; case z2; auto. - intros p; case b; simpl; auto. + intros p1; rewrite Zmod_POS_correct; auto. case (Z.pos_div_eucl p (Zpos p1)); simpl; intros z1 z2; case z2; auto. + intros p1; rewrite Zmod_POS_correct; simpl; auto. case (Z.pos_div_eucl p (Zpos p1)); auto. Qed.
imports: ZArith_base Zbool ZArithRing Zcomplements Setoid Morphisms