]> matita.cs.unibo.it Git - helm.git/blob - helm/software/matita/contribs/assembly/compiler/tests.ma
mod change (-x)
[helm.git] / helm / software / matita / contribs / assembly / compiler / tests.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 (*                                                                        *)
17 (* Sviluppato da:                                                         *)
18 (*   Cosimo Oliboni, oliboni@cs.unibo.it                                  *)
19 (*                                                                        *)
20 (* ********************************************************************** *)
21
22 include "compiler/ast_to_astfe.ma".
23 include "compiler/preast_to_ast.ma".
24
25 definition parsingResult \def
26  (PREAST_ROOT
27   (PREAST_CONST_DECL
28    ([ch_n;ch_1])
29    (AST_TYPE_ARRAY
30     (AST_TYPE_STRUCT
31      (\laquo
32       (AST_TYPE_ARRAY
33        (AST_TYPE_BASE AST_BASE_TYPE_BYTE8)
34        1
35       )
36       ;
37       (AST_TYPE_BASE AST_BASE_TYPE_WORD16)
38       £
39       (AST_TYPE_BASE AST_BASE_TYPE_WORD32)
40      \raquo)
41     )
42     1
43    )
44    (PREAST_INIT_VAL
45     (PREAST_INIT_VAL_ARRAY
46      (\laquo
47       (PREAST_INIT_VAL_STRUCT
48        (\laquo
49         (PREAST_INIT_VAL_ARRAY
50          (\laquo
51           (PREAST_INIT_VAL_BYTE8 (\langle x0,x0 \rangle))
52           £
53           (PREAST_INIT_VAL_BYTE8 (\langle x0,x1 \rangle))
54          \raquo)
55         )
56         ;
57         (PREAST_INIT_VAL_WORD16 (\langle \langle x0,x0 \rangle : \langle x0,x0 \rangle \rangle))
58         £
59         (PREAST_INIT_VAL_WORD32 (\langle \langle \langle x0,x0 \rangle : \langle x0,x0 \rangle \rangle . \langle \langle x0,x0 \rangle : \langle x0,x0 \rangle \rangle \rangle))
60        \raquo)
61       )
62       £
63       (PREAST_INIT_VAL_STRUCT
64        (\laquo
65         (PREAST_INIT_VAL_ARRAY
66          (\laquo
67           (PREAST_INIT_VAL_BYTE8 (\langle x0,x2 \rangle))
68           £
69           (PREAST_INIT_VAL_BYTE8 (\langle x0,x3 \rangle))
70          \raquo)
71         )
72         ;
73         (PREAST_INIT_VAL_WORD16 (\langle \langle x0,x0 \rangle : \langle x0,x1 \rangle \rangle))
74         £
75         (PREAST_INIT_VAL_WORD32 (\langle \langle \langle x0,x0 \rangle : \langle x0,x0 \rangle \rangle . \langle \langle x0,x0 \rangle : \langle x0,x1 \rangle \rangle \rangle))
76        \raquo)
77       )
78      \raquo)
79     )
80    )
81    (PREAST_VAR_DECL
82     ([ch_n;ch_2])
83     (AST_TYPE_BASE AST_BASE_TYPE_WORD16)
84     (Some ?
85      (PREAST_INIT_VAR
86       (PREAST_VAR_STRUCT
87        (PREAST_VAR_ARRAY
88         (PREAST_VAR_ID ([ch_n;ch_1]))
89         (PREAST_EXPR_BYTE8 (\langle x0,x0 \rangle))
90        )
91        1
92       )
93      )
94     )
95     (PREAST_VAR_DECL
96      ([ch_n;ch_3])
97      (AST_TYPE_BASE AST_BASE_TYPE_BYTE8)
98      (None ?)
99      (PREAST_NO_DECL
100       [
101        (PREAST_STM_WHILE
102         (PREAST_EXPR_ID
103          (PREAST_VAR_ID ([ch_n;ch_2]))
104         )
105         (PREAST_VAR_DECL
106          ([ch_n;ch_1])
107          (AST_TYPE_BASE AST_BASE_TYPE_WORD32)
108          (Some ?
109           (PREAST_INIT_VAR
110            (PREAST_VAR_STRUCT
111             (PREAST_VAR_ARRAY
112              (PREAST_VAR_ID ([ch_n;ch_1]))
113              (PREAST_EXPR_ID
114               (PREAST_VAR_ID ([ch_n;ch_2]))
115              )
116             )
117             2
118            )
119           )
120          )
121          (PREAST_NO_DECL
122           [
123            (PREAST_STM_IF
124             (\laquo
125              £
126              (pair ??
127               (PREAST_EXPR_GT
128                (PREAST_EXPR_ID
129                 (PREAST_VAR_ID ([ch_n;ch_1]))
130                )
131                (PREAST_EXPR_WORD32 (\langle \langle \langle x1,x2 \rangle : \langle x3,x4 \rangle \rangle . \langle \langle xA,xB \rangle : \langle xC,xD \rangle \rangle \rangle))
132               )
133               (PREAST_NO_DECL
134                [
135                 (PREAST_STM_ASG
136                  (PREAST_VAR_ID ([ch_n;ch_3]))
137                  (PREAST_EXPR_NEG
138                   (PREAST_EXPR_NOT
139                    (PREAST_EXPR_COM
140                     (PREAST_EXPR_OR
141                      (PREAST_EXPR_AND
142                       (PREAST_EXPR_SHR
143                        (PREAST_EXPR_SUB
144                         (PREAST_EXPR_ADD
145                          (PREAST_EXPR_W32toB8
146                           (PREAST_EXPR_W16toW32
147                            (PREAST_EXPR_B8toW16
148                             (PREAST_EXPR_ID
149                              (PREAST_VAR_ID ([ch_n;ch_3]))
150                             )
151                            )
152                           )
153                          )
154                          (PREAST_EXPR_BYTE8 (\langle x0,x1 \rangle))
155                         )
156                         (PREAST_EXPR_DIV
157                          (PREAST_EXPR_MUL
158                           (PREAST_EXPR_BYTE8 (\langle x0,x2 \rangle))
159                           (PREAST_EXPR_BYTE8 (\langle x0,x3 \rangle))
160                          )
161                          (PREAST_EXPR_BYTE8 (\langle x0,x4 \rangle))
162                         )
163                        )
164                        (PREAST_EXPR_SHL
165                         (PREAST_EXPR_BYTE8 (\langle x0,x5 \rangle))
166                         (PREAST_EXPR_BYTE8 (\langle x0,x6 \rangle))
167                        )
168                       )
169                       (PREAST_EXPR_BYTE8 (\langle x0,x7 \rangle))
170                      )
171                      (PREAST_EXPR_XOR
172                       (PREAST_EXPR_BYTE8 (\langle x0,x8 \rangle))
173                       (PREAST_EXPR_BYTE8 (\langle x0,x9 \rangle))
174                      )
175                     )
176                    )
177                   )
178                  )
179                 )
180                ]
181               )
182              )
183             \raquo)
184             (None ?)
185            )
186            ;
187            (PREAST_STM_ASG
188             (PREAST_VAR_ID ([ch_n;ch_2]))
189             (PREAST_EXPR_ADD
190              (PREAST_EXPR_ID
191               (PREAST_VAR_ID ([ch_n;ch_2]))
192              )
193              (PREAST_EXPR_WORD16 (\langle \langle x0,x0 \rangle : \langle x0,x1 \rangle \rangle))
194             )
195            )
196           ]
197          )
198         )
199        )
200        ;
201        (PREAST_STM_ASG
202         (PREAST_VAR_ID ([ch_n;ch_3]))
203         (PREAST_EXPR_ID
204          (PREAST_VAR_ARRAY
205           (PREAST_VAR_STRUCT
206            (PREAST_VAR_ARRAY
207             (PREAST_VAR_ID ([ch_n;ch_1]))
208             (PREAST_EXPR_BYTE8 (\langle x0,x1 \rangle))
209            )
210            O
211           )
212           (PREAST_EXPR_BYTE8 (\langle x0,x0 \rangle))
213          )
214         )
215        )
216       ]
217      )
218     )
219    )
220   )
221  ).
222
223 lemma pippo : ∃b.preast_to_ast parsingResult = Some ? b.
224  normalize;
225  exists;
226  [ apply (match preast_to_ast parsingResult with [ None ⇒ AST_ROOT (AST_NO_DECL O empty_env []) | Some x ⇒ x]);
227  | reflexivity
228  ]
229 qed.