]> matita.cs.unibo.it Git - helm.git/blob - matita/contribs/LAMBDA-TYPES/Base-1/preamble.ma
ce57b6e5e30f0a6be75ed38985627f23fc8ce1dc
[helm.git] / matita / contribs / LAMBDA-TYPES / Base-1 / preamble.ma
1 (**************************************************************************)
2 (*       ___                                                              *)
3 (*      ||M||                                                             *)
4 (*      ||A||       A project by Andrea Asperti                           *)
5 (*      ||T||                                                             *)
6 (*      ||I||       Developers:                                           *)
7 (*      ||T||         The HELM team.                                      *)
8 (*      ||A||         http://helm.cs.unibo.it                             *)
9 (*      \   /                                                             *)
10 (*       \ /        This file is distributed under the terms of the       *)
11 (*        v         GNU General Public License Version 2                  *)
12 (*                                                                        *)
13 (**************************************************************************)
14
15 set "baseuri" "cic:/matita/LAMBDA-TYPES/Base-1/preamble".
16
17 include' "../../../legacy/coq.ma".
18
19 (* FG: This is because "and" is a reserved keyword of the parser *)
20 alias id "land" = "cic:/Coq/Init/Logic/and.ind#xpointer(1/1)".
21
22 (* FG/CSC: These aliases should disappear: we would like to write something
23  *         like: "disambiguate in cic:/Coq/*"
24  *)
25 alias symbol "plus" = "Coq's natural plus".
26 alias symbol "leq" = "Coq's natural 'less or equal to'".
27 alias symbol "neq" = "Coq's not equal to (leibnitz)".
28 alias symbol "eq" = "Coq's leibnitz's equality".
29
30 alias id "bool" = "cic:/Coq/Init/Datatypes/bool.ind#xpointer(1/1)".
31 alias id "conj" = "cic:/Coq/Init/Logic/and.ind#xpointer(1/1/1)".
32 alias id "eq_add_S" = "cic:/Coq/Init/Peano/eq_add_S.con".
33 alias id "eq" = "cic:/Coq/Init/Logic/eq.ind#xpointer(1/1)".
34 alias id "eq_ind" = "cic:/Coq/Init/Logic/eq_ind.con".
35 alias id "eq_ind_r" = "cic:/Coq/Init/Logic/eq_ind_r.con".
36 alias id "ex2" = "cic:/Coq/Init/Logic/ex2.ind#xpointer(1/1)".
37 alias id "ex2_ind" = "cic:/Coq/Init/Logic/ex2_ind.con".
38 alias id "ex" = "cic:/Coq/Init/Logic/ex.ind#xpointer(1/1)".
39 alias id "ex_intro2" = "cic:/Coq/Init/Logic/ex2.ind#xpointer(1/1/1)".
40 alias id "false" = "cic:/Coq/Init/Datatypes/bool.ind#xpointer(1/1/2)".
41 alias id "False" = "cic:/Coq/Init/Logic/False.ind#xpointer(1/1)".
42 alias id "False_ind" = "cic:/Coq/Init/Logic/False_ind.con".
43 alias id "I" = "cic:/Coq/Init/Logic/True.ind#xpointer(1/1/1)".
44 alias id "le_antisym" = "cic:/Coq/Arith/Le/le_antisym.con".
45 alias id "le" = "cic:/Coq/Init/Peano/le.ind#xpointer(1/1)".
46 alias id "le_lt_n_Sm" = "cic:/Coq/Arith/Lt/le_lt_n_Sm.con".
47 alias id "le_lt_or_eq" = "cic:/Coq/Arith/Lt/le_lt_or_eq.con".
48 alias id "le_n" = "cic:/Coq/Init/Peano/le.ind#xpointer(1/1/1)".
49 alias id "le_n_O_eq" = "cic:/Coq/Arith/Le/le_n_O_eq.con".
50 alias id "le_not_lt" = "cic:/Coq/Arith/Lt/le_not_lt.con".
51 alias id "le_n_S" = "cic:/Coq/Arith/Le/le_n_S.con".
52 alias id "le_O_n" = "cic:/Coq/Arith/Le/le_O_n.con".
53 alias id "le_or_lt" = "cic:/Coq/Arith/Lt/le_or_lt.con".
54 alias id "le_plus_l" = "cic:/Coq/Arith/Plus/le_plus_l.con".
55 alias id "le_plus_minus" = "cic:/Coq/Arith/Minus/le_plus_minus.con".
56 alias id "le_plus_minus_r" = "cic:/Coq/Arith/Minus/le_plus_minus_r.con".
57 alias id "le_plus_r" = "cic:/Coq/Arith/Plus/le_plus_r.con".
58 alias id "le_S" = "cic:/Coq/Init/Peano/le.ind#xpointer(1/1/2)".
59 alias id "le_S_n" = "cic:/Coq/Arith/Le/le_S_n.con".
60 alias id "le_Sn_n" = "cic:/Coq/Arith/Le/le_Sn_n.con".
61 alias id "le_trans" = "cic:/Coq/Arith/Le/le_trans.con".
62 alias id "lt" = "cic:/Coq/Init/Peano/lt.con".
63 alias id "lt_irrefl" = "cic:/Coq/Arith/Lt/lt_irrefl.con".
64 alias id "lt_le_S" = "cic:/Coq/Arith/Lt/lt_le_S.con".
65 alias id "lt_n_S" = "cic:/Coq/Arith/Lt/lt_n_S.con".
66 alias id "minus" = "cic:/Coq/Init/Peano/minus.con".
67 alias id "minus_n_O" = "cic:/Coq/Arith/Minus/minus_n_O.con".
68 alias id "minus_plus" = "cic:/Coq/Arith/Minus/minus_plus.con".
69 alias id "nat" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1)".
70 alias id "nat_ind" = "cic:/Coq/Init/Datatypes/nat_ind.con".
71 alias id "not" = "cic:/Coq/Init/Logic/not.con".
72 alias id "not_eq_S" = "cic:/Coq/Init/Peano/not_eq_S.con".
73 alias id "O" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/1)".
74 alias id "or" = "cic:/Coq/Init/Logic/or.ind#xpointer(1/1)".
75 alias id "or_ind" = "cic:/Coq/Init/Logic/or_ind.con".
76 alias id "or_introl" = "cic:/Coq/Init/Logic/or.ind#xpointer(1/1/1)".
77 alias id "or_intror" = "cic:/Coq/Init/Logic/or.ind#xpointer(1/1/2)".
78 alias id "O_S" = "cic:/Coq/Init/Peano/O_S.con".
79 alias id "plus_assoc" = "cic:/Coq/Arith/Plus/plus_assoc.con".
80 alias id "plus_assoc_reverse" = "cic:/Coq/Arith/Plus/plus_assoc_reverse.con".
81 alias id "plus" = "cic:/Coq/Init/Peano/plus.con".
82 alias id "plus_comm" = "cic:/Coq/Arith/Plus/plus_comm.con".
83 alias id "plus_le_compat" = "cic:/Coq/Arith/Plus/plus_le_compat.con".
84 alias id "plus_le_reg_l" = "cic:/Coq/Arith/Plus/plus_le_reg_l.con".
85 alias id "plus_lt_reg_l" = "cic:/Coq/Arith/Plus/plus_lt_reg_l.con".
86 alias id "plus_n_Sm" = "cic:/Coq/Init/Peano/plus_n_Sm.con".
87 alias id "plus_reg_l" = "cic:/Coq/Arith/Plus/plus_reg_l.con".
88 alias id "pred" = "cic:/Coq/Init/Peano/pred.con".
89 alias id "refl_equal" = "cic:/Coq/Init/Logic/eq.ind#xpointer(1/1/1)".
90 alias id "S" = "cic:/Coq/Init/Datatypes/nat.ind#xpointer(1/1/2)".
91 alias id "true" = "cic:/Coq/Init/Datatypes/bool.ind#xpointer(1/1/1)".
92 alias id "True" = "cic:/Coq/Init/Logic/True.ind#xpointer(1/1)".
93 alias id "plus_lt_compat_r" = "cic:/Coq/Arith/Plus/plus_lt_compat_r.con".
94 alias id "plus_n_O" = "cic:/Coq/Init/Peano/plus_n_O.con".
95 alias id "plus_le_lt_compat" = "cic:/Coq/Arith/Plus/plus_le_lt_compat.con".
96 alias id "lt_wf_ind" = "cic:/Coq/Arith/Wf_nat/lt_wf_ind.con".
97 alias id "minus_Sn_m" = "cic:/Coq/Arith/Minus/minus_Sn_m.con".
98 alias id "and_ind" = "cic:/Coq/Init/Logic/and_ind.con".
99 alias id "le_lt_trans" = "cic:/Coq/Arith/Lt/le_lt_trans.con".
100 alias id "lt_le_trans" = "cic:/Coq/Arith/Lt/lt_le_trans.con".
101 alias id "le_lt_trans" = "cic:/Coq/Arith/Lt/le_lt_trans.con".
102 alias id "plus_n_O" = "cic:/Coq/Init/Peano/plus_n_O.con".
103 alias id "f_equal3" = "cic:/Coq/Init/Logic/f_equal3.con".
104 alias id "S_pred" = "cic:/Coq/Arith/Lt/S_pred.con".
105 alias id "lt_le_trans" = "cic:/Coq/Arith/Lt/lt_le_trans.con".
106 alias id "plus_lt_compat_r" = "cic:/Coq/Arith/Plus/plus_lt_compat_r.con".
107 alias id "le_plus_trans" = "cic:/Coq/Arith/Plus/le_plus_trans.con".
108 alias id "f_equal2" = "cic:/Coq/Init/Logic/f_equal2.con".
109 alias id "le_plus_trans" = "cic:/Coq/Arith/Plus/le_plus_trans.con".
110 alias id "f_equal2" = "cic:/Coq/Init/Logic/f_equal2.con".
111 alias id "plus_n_O" = "cic:/Coq/Init/Peano/plus_n_O.con".
112 alias id "plus_n_O" = "cic:/Coq/Init/Peano/plus_n_O.con".
113 alias id "lt_trans" = "cic:/Coq/Arith/Lt/lt_trans.con".
114 alias id "minus_Sn_m" = "cic:/Coq/Arith/Minus/minus_Sn_m.con".
115 alias id "ex_intro" = "cic:/Coq/Init/Logic/ex.ind#xpointer(1/1/1)".
116 alias id "lt_trans" = "cic:/Coq/Arith/Lt/lt_trans.con".
117 alias id "lt_n_Sn" = "cic:/Coq/Arith/Lt/lt_n_Sn.con".
118 alias id "lt_le_trans" = "cic:/Coq/Arith/Lt/lt_le_trans.con".
119 alias id "lt_wf_ind" = "cic:/Coq/Arith/Wf_nat/lt_wf_ind.con".
120 alias id "bool_ind" = "cic:/Coq/Init/Datatypes/bool_ind.con".
121 alias id "ex_ind" = "cic:/Coq/Init/Logic/ex_ind.con".
122 alias id "plus_Snm_nSm" = "cic:/Coq/Arith/Plus/plus_Snm_nSm.con".
123 alias id "plus_lt_le_compat" = "cic:/Coq/Arith/Plus/plus_lt_le_compat.con".
124 alias id "plus_lt_compat" = "cic:/Coq/Arith/Plus/plus_lt_compat.con".
125 alias id "lt_S_n" = "cic:/Coq/Arith/Lt/lt_S_n.con".
126 alias id "minus_n_n" = "cic:/Coq/Arith/Minus/minus_n_n.con".
127
128 theorem f_equal: \forall A,B:Type. \forall f:A \to B.
129                  \forall x,y:A. x = y \to f x = f y.
130  intros. elim H. reflexivity.
131 qed.
132
133 theorem sym_eq: \forall A:Type. \forall x,y:A. x = y \to y = x.
134  intros. rewrite > H. reflexivity.
135 qed.
136
137 theorem sym_not_eq: \forall A:Type. \forall x,y:A. x \neq y \to y \neq x.
138  unfold not. intros. apply H. symmetry. assumption.
139 qed.
140
141 theorem trans_eq : \forall A:Type. \forall x,y,z:A. x=y \to y=z \to x=z.
142  intros. transitivity y; assumption.
143 qed.
144
145 theorem plus_reg_l: \forall n,m,p. n + m = n + p \to m = p.
146  intros. apply plus_reg_l; auto.
147 qed.
148
149 theorem plus_le_reg_l: \forall p,n,m. p + n <= p + m \to n <= m.
150  intros. apply plus_le_reg_l; auto.
151 qed.
152
153 default "equality"
154  cic:/Coq/Init/Logic/eq.ind
155  cic:/matita/LAMBDA-TYPES/Base-1/preamble/sym_eq.con
156  cic:/matita/LAMBDA-TYPES/Base-1/preamble/trans_eq.con
157  cic:/Coq/Init/Logic/eq_ind.con
158  cic:/Coq/Init/Logic/eq_ind_r.con
159  cic:/Coq/Init/Logic/eq_rec.con
160  cic:/Coq/Init/Logic/eq_rec_r.con
161  cic:/Coq/Init/Logic/eq_rect.con
162  cic:/Coq/Init/Logic/eq_rect_r.con
163  cic:/matita/LAMBDA-TYPES/Base-1/preamble/f_equal.con
164  cic:/matita/legacy/coq/f_equal1.con.