Built with Alectryon, running Coq+SerAPI v8.10.0+0.7.0. Coq sources are in this panel; goals and messages will appear in the other. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus.
(************************************************************************) (* * The Coq Proof Assistant / The Coq Development Team *) (* v * INRIA, CNRS and contributors - Copyright 1999-2018 *) (* <O___,, * (see CREDITS file for the list of authors) *) (* \VV/ **************************************************************) (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (* * (see LICENSE file for the text of the license) *) (************************************************************************) (* Evgeny Makarov, INRIA, 2007 *) (************************************************************************) Require Export NAddOrder. Module NMulOrderProp (Import N : NAxiomsMiniSig'). Include NAddOrderProp N.
Theorems that are either not valid on Z or have different proofs
on N and Z
forall n m : t, n < m <-> n * n < m * mintros n m; split; intro; [apply square_lt_mono_nonneg | apply square_lt_simpl_nonneg]; try assumption; apply le_0_l. Qed.forall n m : t, n < m <-> n * n < m * mforall n m : t, n <= m <-> n * n <= m * mintros n m; split; intro; [apply square_le_mono_nonneg | apply square_le_simpl_nonneg]; try assumption; apply le_0_l. Qed.forall n m : t, n <= m <-> n * n <= m * mforall n m p : t, n <= m -> p * n <= p * mforall n m p : t, n <= m -> p * n <= p * mn, m, p:tH:n <= m0 <= pn, m, p:tH:n <= mn <= massumption. Qed.n, m, p:tH:n <= mn <= mforall n m p : t, n <= m -> n * p <= m * pforall n m p : t, n <= m -> n * p <= m * pn, m, p:tH:n <= m0 <= pn, m, p:tH:n <= mn <= massumption. Qed.n, m, p:tH:n <= mn <= mforall n m p q : t, n < m -> p < q -> n * p < m * qintros; apply mul_lt_mono_nonneg; try assumption; apply le_0_l. Qed.forall n m p q : t, n < m -> p < q -> n * p < m * qforall n m p q : t, n <= m -> p <= q -> n * p <= m * qintros; apply mul_le_mono_nonneg; try assumption; apply le_0_l. Qed.forall n m p q : t, n <= m -> p <= q -> n * p <= m * qforall n m : t, 0 < n * m <-> 0 < n /\ 0 < mforall n m : t, 0 < n * m <-> 0 < n /\ 0 < mn, m:tH:0 < n * m0 < n /\ 0 < mn, m:tH1:0 < nH2:0 < m0 < n * mn, m:tH:0 < n /\ 0 < m \/ m < 0 /\ n < 00 < n /\ 0 < mn, m:tH1:0 < nH2:0 < m0 < n * mn, m:tH1:0 < nH2:0 < m0 < n /\ 0 < mn, m:tH1:m < 0H2:n < 00 < n /\ 0 < mn, m:tH1:0 < nH2:0 < m0 < n * mn, m:tH1:m < 0H2:n < 00 < n /\ 0 < mn, m:tH1:0 < nH2:0 < m0 < n * mnow apply mul_pos_pos. Qed. Notation mul_pos := lt_0_mul' (only parsing).n, m:tH1:0 < nH2:0 < m0 < n * mforall n m : t, n * m == 1 <-> n == 1 /\ m == 1forall n m : t, n * m == 1 <-> n == 1 /\ m == 1n, m:tn * m == 1 <-> n == 1 /\ m == 1n, m:tn * m == 1 -> n == 1 /\ m == 1n, m:tH:n * m == 1H1:n < 1n == 1 /\ m == 1n, m:tH:n * m == 1H1:n == 1n == 1 /\ m == 1n, m:tH:n * m == 1H1:1 < nn == 1 /\ m == 1n, m:tH:n * m == 1H1:n == 0n == 1 /\ m == 1n, m:tH:n * m == 1H1:n == 1n == 1 /\ m == 1n, m:tH:n * m == 1H1:1 < nn == 1 /\ m == 1n, m:tH:0 == 1H1:n == 0n == 1 /\ m == 1n, m:tH:n * m == 1H1:n == 1n == 1 /\ m == 1n, m:tH:n * m == 1H1:1 < nn == 1 /\ m == 1n, m:tH:n * m == 1H1:n == 1n == 1 /\ m == 1n, m:tH:n * m == 1H1:1 < nn == 1 /\ m == 1n, m:tH:n * m == 1H1:1 < nn == 1 /\ m == 1n, m:tH:n * m == 1H1:1 < nH2:m == 0n == 1 /\ m == 1n, m:tH:n * m == 1H1:1 < nH2:0 < mn == 1 /\ m == 1n, m:tH:0 == 1H1:1 < nH2:m == 0n == 1 /\ m == 1n, m:tH:n * m == 1H1:1 < nH2:0 < mn == 1 /\ m == 1n, m:tH:n * m == 1H1:1 < nH2:0 < mn == 1 /\ m == 1n, m:tH:n * m == 1H1:1 * m < n * mH2:0 < mn == 1 /\ m == 1n, m:tH:n * m == 1H1:m < n * mH2:0 < mn == 1 /\ m == 1rewrite H in H3; false_hyp H3 lt_irrefl. Qed.n, m:tH:n * m == 1H1:m < n * mH2:0 < mH3:1 < n * mn == 1 /\ m == 1
Alternative name :
Definition mul_eq_1 := eq_mul_1. End NMulOrderProp.