1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 (* ********************************************************************** *)
16 (* Progetto FreeScale *)
19 (* Cosimo Oliboni, oliboni@cs.unibo.it *)
21 (* Questo materiale fa parte della tesi: *)
22 (* "Formalizzazione Interattiva dei Microcontroller a 8bit FreeScale" *)
24 (* data ultima modifica 15/11/2007 *)
25 (* ********************************************************************** *)
27 include "freescale/opcode_base_lemmas_opcode2.ma".
28 include "freescale/opcode_base_lemmas_instrmode2.ma".
29 include "freescale/word16_lemmas.ma".
31 (* ********************************************** *)
32 (* MATTONI BASE PER DEFINIRE LE TABELLE DELLE MCU *)
33 (* ********************************************** *)
35 nlemma anyop_destruct : ∀m.∀x1,x2:opcode.anyOP m x1 = anyOP m x2 → x1 = x2.
37 nchange with (match anyOP m x2 with [ anyOP a ⇒ x1 = a ]);
43 nlemma symmetric_eqanyop : ∀m.∀op1,op2:any_opcode m.eq_anyop m op1 op2 = eq_anyop m op2 op1.
51 nchange with (eq_op x1 x2 = eq_op x2 x1);
52 nrewrite > (symmetric_eqop x1 x2);
56 nlemma eqanyop_to_eq : ∀m.∀op1,op2:any_opcode m.eq_anyop m op1 op2 = true → op1 = op2.
64 nchange with ((eq_op x1 x2 = true) → ?);
66 nrewrite > (eqop_to_eq ?? H);
70 nlemma eq_to_eqanyop : ∀m.∀op1,op2:any_opcode m.op1 = op2 → eq_anyop m op1 op2 = true.
78 nrewrite > (anyop_destruct ??? H);
79 nchange with (eq_op p2 p2 = true);
80 nrewrite > (eq_to_eqop p2 p2 (refl_eq opcode p2));
84 nlemma b8w16_destruct_b8_b8 : ∀x1,x2.Byte x1 = Byte x2 → x1 = x2.
86 nchange with (match Byte x2 with [ Byte a ⇒ x1 = a | Word _ ⇒ False ]);
92 nlemma b8w16_destruct_w16_w16 : ∀x1,x2.Word x1 = Word x2 → x1 = x2.
94 nchange with (match Word x2 with [ Word a ⇒ x1 = a | Byte _ ⇒ False ]);
100 nlemma b8w16_destruct_b8_w16 : ∀x1,x2.Byte x1 = Word x2 → False.
102 nchange with (match Byte x1 with [ Word _ ⇒ True | Byte a ⇒ False ]);
108 nlemma b8w16_destruct_w16_b8 : ∀x1,x2.Word x1 = Byte x2 → False.
110 nchange with (match Word x1 with [ Word a ⇒ False | Byte _ ⇒ True ]);
116 nlemma symmetric_eqb8w16 : ∀bw1,bw2.eq_b8w16 bw1 bw2 = eq_b8w16 bw2 bw1.
122 ##[ ##1: nchange with (eq_b8 x1 x2 = eq_b8 x2 x1);
123 nrewrite > (symmetric_eqb8 x1 x2);
125 ##| ##2,3: nnormalize; napply (refl_eq ??)
126 ##| ##4: nchange with (eq_w16 x1 x2 = eq_w16 x2 x1);
127 nrewrite > (symmetric_eqw16 x1 x2);