proposition: Theorem Zsquare_pos: forall p, 0 <= p ^ 2.
proof: Proof. intros p; case (Z.le_gt_cases 0 p); intros H1. rewrite Zsquare_mult; apply Z.mul_nonneg_nonneg; zarith. rewrite Zsquare_mult; replace (p * p) with ((- p) * (- p)); try ring. apply Z.mul_nonneg_nonneg; zarith. Qed.
imports: ZArith Lia BigNumPrelude DoubleType DoubleBase