]> matita.cs.unibo.it Git - helm.git/blob - helm/software/matita/contribs/ng_assembly/freescale/bool_lemmas.ma
5c08f23f34a377db04f3fb540f1ee581965e5be6
[helm.git] / helm / software / matita / contribs / ng_assembly / freescale / bool_lemmas.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 (* ********************************************************************** *)
16 (*                           Progetto FreeScale                           *)
17 (*                                                                        *)
18 (* Sviluppato da:                                                         *)
19 (*   Cosimo Oliboni, oliboni@cs.unibo.it                                  *)
20 (*                                                                        *)
21 (* Questo materiale fa parte della tesi:                                  *)
22 (*   "Formalizzazione Interattiva dei Microcontroller a 8bit FreeScale"   *)
23 (*                                                                        *)
24 (*                    data ultima modifica 15/11/2007                     *)
25 (* ********************************************************************** *)
26
27 include "freescale/theory.ma".
28 include "freescale/bool.ma".
29
30 (* ******** *)
31 (* BOOLEANI *)
32 (* ******** *)
33
34 ndefinition boolRelation : Type → Type ≝
35 λA:Type.A → A → bool. 
36
37 ndefinition boolSymmetric: ∀A:Type.∀R:boolRelation A.Prop ≝
38 λA.λR.∀x,y:A.R x y = R y x.
39
40 ntheorem bool_destruct_true_false : true ≠ false.
41  nnormalize;
42  #H;
43  nchange with (match true with [ true ⇒ False | false ⇒ True]);
44  nrewrite > H;
45  nnormalize;
46  napply I.
47 nqed.
48
49 ntheorem bool_destruct_false_true : false ≠ true.
50  nnormalize;
51  #H;
52  nchange with (match true with [ true ⇒ False | false ⇒ True]);
53  nrewrite < H;
54  nnormalize;
55  napply I.
56 nqed.
57
58 nlemma bsymmetric_eqbool : boolSymmetric bool eq_bool.
59  nnormalize;
60  #b1; #b2;
61  nelim b1;
62  nelim b2;
63  nnormalize;
64  napply (refl_eq ??).
65 nqed.
66
67 nlemma bsymmetric_andbool : boolSymmetric bool and_bool.
68  nnormalize;
69  #b1; #b2;
70  nelim b1;
71  nelim b2;
72  nnormalize;
73  napply (refl_eq ??).
74 nqed.
75
76 nlemma bsymmetric_orbool : boolSymmetric bool or_bool.
77  nnormalize;
78  #b1; #b2;
79  nelim b1;
80  nelim b2;
81  nnormalize;
82  napply (refl_eq ??).
83 nqed.
84
85 nlemma bsymmetric_xorbool : boolSymmetric bool xor_bool.
86  nnormalize;
87  #b1; #b2;
88  nelim b1;
89  nelim b2;
90  nnormalize;
91  napply (refl_eq ??).
92 nqed.
93
94 nlemma eqbool_to_eq : ∀b1,b2:bool.(eq_bool b1 b2 = true) → (b1 = b2).
95  #b1; #b2;
96  nelim b1;
97  nelim b2;
98  nnormalize;
99  #H;
100  ##[ ##2,3: nelim (bool_destruct_false_true H) ##]
101  napply (refl_eq ??).
102 nqed.
103
104 nlemma eq_to_eqbool : ∀b1,b2.b1 = b2 → eq_bool b1 b2 = true.
105  #b1; #b2;
106  nelim b1;
107  nelim b2;
108  nnormalize;
109  #H;
110  ##[ ##2: nelim (bool_destruct_true_false H)
111  ##| ##3: nelim (bool_destruct_false_true H) ##]
112  napply (refl_eq ??).
113 nqed.
114
115 nlemma andb_true_true: ∀b1,b2.(b1 ⊗ b2) = true → b1 = true.
116  #b1; #b2;
117  nelim b1;
118  nelim b2;
119  nnormalize;
120  #H;
121  ##[ ##3,4: nelim (bool_destruct_false_true H) ##]
122  napply (refl_eq ??).
123 nqed.
124
125 nlemma andb_true_true_r: ∀b1,b2.(b1 ⊗ b2) = true → b2 = true.
126  #b1; #b2;
127  nelim b1;
128  nelim b2;
129  nnormalize;
130  #H;
131  ##[ ##2,3,4: nelim (bool_destruct_false_true H) ##]
132  napply (refl_eq ??).
133 nqed.
134
135 nlemma orb_false_false : ∀b1,b2:bool.(b1 ⊕ b2) = false → b1 = false.
136  #b1; #b2;
137  nelim b1;
138  nelim b2;
139  nnormalize;
140  #H;
141  ##[ ##1,2: nelim (bool_destruct_true_false H) ##]
142  napply (refl_eq ??).
143 nqed.
144
145 nlemma orb_false_false_r : ∀b1,b2:bool.(b1 ⊕ b2) = false → b2 = false.
146  #b1; #b2;
147  nelim b1;
148  nelim b2;
149  nnormalize;
150  #H;
151  ##[ ##1,3: nelim (bool_destruct_true_false H) ##]
152  napply (refl_eq ??).
153 nqed.