~ubuntu-branches/ubuntu/wily/coq-doc/wily

« back to all changes in this revision

Viewing changes to theories/Numbers/Natural/Abstract/NMulOrder.v

  • Committer: Bazaar Package Importer
  • Author(s): Stéphane Glondu, Stéphane Glondu, Samuel Mimram
  • Date: 2010-01-07 22:50:39 UTC
  • mfrom: (1.2.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20100107225039-n3cq82589u0qt0s2
Tags: 8.2pl1-1
[ Stéphane Glondu ]
* New upstream release (Closes: #563669)
  - remove patches
* Packaging overhaul:
  - use git, advertise it in Vcs-* fields of debian/control
  - use debhelper 7 and dh with override
  - use source format 3.0 (quilt)
* debian/control:
  - set Maintainer to d-o-m, set Uploaders to Sam and myself
  - add Homepage field
  - bump Standards-Version to 3.8.3
* Register PDF documentation into doc-base
* Add debian/watch
* Update debian/copyright

[ Samuel Mimram ]
* Change coq-doc's description to mention that it provides documentation in
  pdf format, not postscript, closes: #543545.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
(************************************************************************)
 
2
(*  v      *   The Coq Proof Assistant  /  The Coq Development Team     *)
 
3
(* <O___,, * CNRS-Ecole Polytechnique-INRIA Futurs-Universite Paris Sud *)
 
4
(*   \VV/  **************************************************************)
 
5
(*    //   *      This file is distributed under the terms of the       *)
 
6
(*         *       GNU Lesser General Public License Version 2.1        *)
 
7
(************************************************************************)
 
8
(*                      Evgeny Makarov, INRIA, 2007                     *)
 
9
(************************************************************************)
 
10
 
 
11
(*i $Id: NMulOrder.v 11040 2008-06-03 00:04:16Z letouzey $ i*)
 
12
 
 
13
Require Export NAddOrder.
 
14
 
 
15
Module NMulOrderPropFunct (Import NAxiomsMod : NAxiomsSig).
 
16
Module Export NAddOrderPropMod := NAddOrderPropFunct NAxiomsMod.
 
17
Open Local Scope NatScope.
 
18
 
 
19
Theorem mul_lt_pred :
 
20
  forall p q n m : N, S p == q -> (p * n < p * m <-> q * n + m < q * m + n).
 
21
Proof NZmul_lt_pred.
 
22
 
 
23
Theorem mul_lt_mono_pos_l : forall p n m : N, 0 < p -> (n < m <-> p * n < p * m).
 
24
Proof NZmul_lt_mono_pos_l.
 
25
 
 
26
Theorem mul_lt_mono_pos_r : forall p n m : N, 0 < p -> (n < m <-> n * p < m * p).
 
27
Proof NZmul_lt_mono_pos_r.
 
28
 
 
29
Theorem mul_cancel_l : forall n m p : N, p ~= 0 -> (p * n == p * m <-> n == m).
 
30
Proof NZmul_cancel_l.
 
31
 
 
32
Theorem mul_cancel_r : forall n m p : N, p ~= 0 -> (n * p == m * p <-> n == m).
 
33
Proof NZmul_cancel_r.
 
34
 
 
35
Theorem mul_id_l : forall n m : N, m ~= 0 -> (n * m == m <-> n == 1).
 
36
Proof NZmul_id_l.
 
37
 
 
38
Theorem mul_id_r : forall n m : N, n ~= 0 -> (n * m == n <-> m == 1).
 
39
Proof NZmul_id_r.
 
40
 
 
41
Theorem mul_le_mono_pos_l : forall n m p : N, 0 < p -> (n <= m <-> p * n <= p * m).
 
42
Proof NZmul_le_mono_pos_l.
 
43
 
 
44
Theorem mul_le_mono_pos_r : forall n m p : N, 0 < p -> (n <= m <-> n * p <= m * p).
 
45
Proof NZmul_le_mono_pos_r.
 
46
 
 
47
Theorem mul_pos_pos : forall n m : N, 0 < n -> 0 < m -> 0 < n * m.
 
48
Proof NZmul_pos_pos.
 
49
 
 
50
Theorem lt_1_mul_pos : forall n m : N, 1 < n -> 0 < m -> 1 < n * m.
 
51
Proof NZlt_1_mul_pos.
 
52
 
 
53
Theorem eq_mul_0 : forall n m : N, n * m == 0 <-> n == 0 \/ m == 0.
 
54
Proof NZeq_mul_0.
 
55
 
 
56
Theorem neq_mul_0 : forall n m : N, n ~= 0 /\ m ~= 0 <-> n * m ~= 0.
 
57
Proof NZneq_mul_0.
 
58
 
 
59
Theorem eq_square_0 : forall n : N, n * n == 0 <-> n == 0.
 
60
Proof NZeq_square_0.
 
61
 
 
62
Theorem eq_mul_0_l : forall n m : N, n * m == 0 -> m ~= 0 -> n == 0.
 
63
Proof NZeq_mul_0_l.
 
64
 
 
65
Theorem eq_mul_0_r : forall n m : N, n * m == 0 -> n ~= 0 -> m == 0.
 
66
Proof NZeq_mul_0_r.
 
67
 
 
68
Theorem square_lt_mono : forall n m : N, n < m <-> n * n < m * m.
 
69
Proof.
 
70
intros n m; split; intro;
 
71
[apply NZsquare_lt_mono_nonneg | apply NZsquare_lt_simpl_nonneg];
 
72
try assumption; apply le_0_l.
 
73
Qed.
 
74
 
 
75
Theorem square_le_mono : forall n m : N, n <= m <-> n * n <= m * m.
 
76
Proof.
 
77
intros n m; split; intro;
 
78
[apply NZsquare_le_mono_nonneg | apply NZsquare_le_simpl_nonneg];
 
79
try assumption; apply le_0_l.
 
80
Qed.
 
81
 
 
82
Theorem mul_2_mono_l : forall n m : N, n < m -> 1 + (1 + 1) * n < (1 + 1) * m.
 
83
Proof NZmul_2_mono_l.
 
84
 
 
85
(* Theorems that are either not valid on Z or have different proofs on N and Z *)
 
86
 
 
87
Theorem mul_le_mono_l : forall n m p : N, n <= m -> p * n <= p * m.
 
88
Proof.
 
89
intros; apply NZmul_le_mono_nonneg_l. apply le_0_l. assumption.
 
90
Qed.
 
91
 
 
92
Theorem mul_le_mono_r : forall n m p : N, n <= m -> n * p <= m * p.
 
93
Proof.
 
94
intros; apply NZmul_le_mono_nonneg_r. apply le_0_l. assumption.
 
95
Qed.
 
96
 
 
97
Theorem mul_lt_mono : forall n m p q : N, n < m -> p < q -> n * p < m * q.
 
98
Proof.
 
99
intros; apply NZmul_lt_mono_nonneg; try assumption; apply le_0_l.
 
100
Qed.
 
101
 
 
102
Theorem mul_le_mono : forall n m p q : N, n <= m -> p <= q -> n * p <= m * q.
 
103
Proof.
 
104
intros; apply NZmul_le_mono_nonneg; try assumption; apply le_0_l.
 
105
Qed.
 
106
 
 
107
Theorem lt_0_mul : forall n m : N, n * m > 0 <-> n > 0 /\ m > 0.
 
108
Proof.
 
109
intros n m; split; [intro H | intros [H1 H2]].
 
110
apply -> NZlt_0_mul in H. destruct H as [[H1 H2] | [H1 H2]]. now split. false_hyp H1 nlt_0_r.
 
111
now apply NZmul_pos_pos.
 
112
Qed.
 
113
 
 
114
Notation mul_pos := lt_0_mul (only parsing).
 
115
 
 
116
Theorem eq_mul_1 : forall n m : N, n * m == 1 <-> n == 1 /\ m == 1.
 
117
Proof.
 
118
intros n m.
 
119
split; [| intros [H1 H2]; now rewrite H1, H2, mul_1_l].
 
120
intro H; destruct (NZlt_trichotomy n 1) as [H1 | [H1 | H1]].
 
121
apply -> lt_1_r in H1. rewrite H1, mul_0_l in H. false_hyp H neq_0_succ.
 
122
rewrite H1, mul_1_l in H; now split.
 
123
destruct (eq_0_gt_0_cases m) as [H2 | H2].
 
124
rewrite H2, mul_0_r in H; false_hyp H neq_0_succ.
 
125
apply -> (mul_lt_mono_pos_r m) in H1; [| assumption]. rewrite mul_1_l in H1.
 
126
assert (H3 : 1 < n * m) by now apply (lt_1_l 0 m).
 
127
rewrite H in H3; false_hyp H3 lt_irrefl.
 
128
Qed.
 
129
 
 
130
End NMulOrderPropFunct.
 
131