@@ -9,17 +9,19 @@ open preamble
9
9
10
10
val _ = new_theory" ag32BootstrapProof" ;
11
11
12
- val with_clos_conf_simp = prove(
13
- `` (mc_init_ok (ag32_backend_config with <| clos_conf := z ; bvl_conf updated_by
12
+ Triviality with_clos_conf_simp:
13
+ (mc_init_ok (ag32_backend_config with <| clos_conf := z ; bvl_conf updated_by
14
14
(λc. c with <|inline_size_limit := t1; exp_cut := t2|>) |>) =
15
15
mc_init_ok ag32_backend_config) /\
16
16
(x.max_app <> 0 /\ (case x.known_conf of NONE => T | SOME k => k.val_approx_spt = LN) ==>
17
17
(backend_config_ok (ag32_backend_config with clos_conf := x) =
18
- backend_config_ok ag32_backend_config))``,
18
+ backend_config_ok ag32_backend_config))
19
+ Proof
19
20
fs [mc_init_ok_def,FUN_EQ_THM,backend_config_ok_def]
20
- \\ rw [] \\ eq_tac \\ rw [] \\ EVAL_TAC);
21
+ \\ rw [] \\ eq_tac \\ rw [] \\ EVAL_TAC
22
+ QED
21
23
22
- Overload cake_config = “ag32Bootstrap$config ”;
24
+ Overload cake_config = “ag32Bootstrap$info ”;
23
25
24
26
Definition compiler_instance_def:
25
27
compiler_instance =
43
45
Theorem cake_config_lab_conf_asm_conf:
44
46
cake_config.lab_conf.asm_conf = ag32_config
45
47
Proof
46
- once_rewrite_tac [ag32BootstrapTheory.config_def] \\ EVAL_TAC
48
+ assume_tac $ cj 1 compiler32_compiled
49
+ \\ drule compile_asm_config_eq
50
+ \\ gvs [backendTheory.set_oracle_def]
51
+ \\ strip_tac \\ EVAL_TAC
47
52
QED
48
53
49
54
val cake_io_events_def = new_specification(" cake_io_events_def" ,[" cake_io_events" ],
@@ -58,30 +63,38 @@ val cake_io_events_def = new_specification("cake_io_events_def",["cake_io_events
58
63
val (cake_sem,cake_output) = cake_io_events_def |> SPEC_ALL |> UNDISCH |> CONJ_PAIR
59
64
val (cake_not_fail,cake_sem_sing) = MATCH_MP semantics_prog_Terminate_not_Fail cake_sem |> CONJ_PAIR
60
65
61
- val ffi_names =
62
- ``config.lab_conf.ffi_names``
63
- |> (REWRITE_CONV[ag32BootstrapTheory.config_def] THENC EVAL);
64
-
65
- val LENGTH_code =
66
- ``LENGTH code``
67
- |> (REWRITE_CONV[ag32BootstrapTheory.code_def] THENC listLib.LENGTH_CONV);
66
+ Theorem extcalls_ffi_names:
67
+ extcalls cake_config.lab_conf.ffi_names = ffis
68
+ Proof
69
+ rewrite_tac [compiler32_compiled]
70
+ \\ qspec_tac (‘cake_config.lab_conf.ffi_names’,‘xs’) \\ Cases
71
+ \\ gvs [extcalls_def,backendTheory.ffinames_to_string_list_def,
72
+ libTheory.the_def]
73
+ \\ Induct_on ‘x’ \\ gvs []
74
+ \\ gvs [extcalls_def,backendTheory.ffinames_to_string_list_def,
75
+ libTheory.the_def]
76
+ \\ Cases
77
+ \\ gvs [extcalls_def,backendTheory.ffinames_to_string_list_def,
78
+ libTheory.the_def]
79
+ QED
68
80
69
- val LENGTH_data =
70
- ``LENGTH data``
71
- |> (REWRITE_CONV[ag32BootstrapTheory.data_def] THENC listLib.LENGTH_CONV);
81
+ val ffis = ffis_def |> CONV_RULE (RAND_CONV EVAL);
82
+ val ffi_names = extcalls_ffi_names |> SRULE [ffis]
72
83
73
- val shmem =
74
- ``config.lab_conf.shmem_extra``
75
- |> (REWRITE_CONV[ag32BootstrapTheory.config_def] THENC EVAL) ;
84
+ val LENGTH_code = “LENGTH code” |> SCONV [compiler32_compiled];
85
+ val LENGTH_data = “LENGTH data” |> SCONV [compiler32_compiled];
86
+ val shmem = “info.lab_conf.shmem_extra” |> SCONV [compiler32_compiled] ;
76
87
77
88
Overload cake_machine_config =
78
- `` ag32_machine_config (extcalls config .lab_conf.ffi_names) (LENGTH code) (LENGTH data)``
89
+ “ ag32_machine_config (extcalls info .lab_conf.ffi_names) (LENGTH code) (LENGTH data)”
79
90
80
91
Theorem target_state_rel_cake_start_asm_state:
81
92
SUM (MAP strlen cl) + LENGTH cl ≤ cline_size ∧
82
93
LENGTH inp ≤ stdin_size ∧
83
- is_ag32_init_state (init_memory code data (extcalls config.lab_conf.ffi_names) (cl,inp)) ms ⇒
84
- ∃n. target_state_rel ag32_target (init_asm_state code data (extcalls config.lab_conf.ffi_names) (cl,inp)) (FUNPOW Next n ms) ∧
94
+ is_ag32_init_state (init_memory code data (extcalls info.lab_conf.ffi_names) (cl,inp)) ms ⇒
95
+ ∃n. target_state_rel ag32_target
96
+ (init_asm_state code data (extcalls info.lab_conf.ffi_names) (cl,inp))
97
+ (FUNPOW Next n ms) ∧
85
98
((FUNPOW Next n ms).io_events = ms.io_events) ∧
86
99
(∀x. x ∉ (ag32_startup_addresses) ⇒
87
100
((FUNPOW Next n ms).MEM x = ms.MEM x))
90
103
\\ drule (GEN_ALL init_asm_state_RTC_asm_step)
91
104
\\ disch_then drule
92
105
\\ simp_tac std_ss []
93
- \\ disch_then(qspecl_then[`code`,`data`,`extcalls config .lab_conf.ffi_names`]mp_tac)
106
+ \\ disch_then(qspecl_then[`code`,`data`,`extcalls info .lab_conf.ffi_names`]mp_tac)
94
107
\\ impl_tac >- ( EVAL_TAC>> fs[ffi_names,LENGTH_data,LENGTH_code,extcalls_def])
95
108
\\ strip_tac
96
109
\\ drule (GEN_ALL target_state_rel_ag32_init)
@@ -107,11 +120,12 @@ val cake_startup_clock_def =
107
120
|> SIMP_RULE bool_ss [GSYM RIGHT_EXISTS_IMP_THM,SKOLEM_THM]);
108
121
109
122
val compile_correct_applied =
110
- MATCH_MP compile_correct_eval cake_compiled
111
- |> SIMP_RULE(srw_ss())[LET_THM,ml_progTheory.init_state_env_thm,GSYM AND_IMP_INTRO,
112
- with_clos_conf_simp]
123
+ MATCH_MP compile_correct_eval (cj 1 compiler32_compiled)
124
+ |> SIMP_RULE(srw_ss())[LET_THM,ml_progTheory.init_state_env_thm,
125
+ GSYM AND_IMP_INTRO, with_clos_conf_simp]
113
126
|> Q.INST [‘ev’|->‘SOME compiler_instance’]
114
- |> SIMP_RULE (srw_ss()) [add_eval_state_def,opt_eval_config_wf_def,compiler_instance_lemma]
127
+ |> SIMP_RULE (srw_ss()) [add_eval_state_def,opt_eval_config_wf_def,
128
+ compiler_instance_lemma]
115
129
|> C MATCH_MP cake_not_fail
116
130
|> C MATCH_MP ag32_backend_config_ok
117
131
|> REWRITE_RULE[cake_sem_sing,AND_IMP_INTRO]
@@ -131,16 +145,25 @@ Theorem cake_compiled_thm =
131
145
Theorem cake_installed:
132
146
SUM (MAP strlen cl) + LENGTH cl ≤ cline_size ∧
133
147
LENGTH inp ≤ stdin_size ∧
134
- is_ag32_init_state (init_memory code data (extcalls config.lab_conf.ffi_names) (cl,inp)) ms0 ⇒
135
- installed code 0 data 0 config.lab_conf.ffi_names
148
+ is_ag32_init_state (init_memory code data
149
+ (extcalls info.lab_conf.ffi_names) (cl,inp)) ms0 ⇒
150
+ installed code 0 data 0 info.lab_conf.ffi_names
136
151
(heap_regs ag32_backend_config.stack_conf.reg_names)
137
- (cake_machine_config) config .lab_conf.shmem_extra
152
+ (cake_machine_config) info .lab_conf.shmem_extra
138
153
(FUNPOW Next (cake_startup_clock ms0 inp cl) ms0)
139
154
Proof
140
155
rewrite_tac[ffi_names, extcalls_def, shmem]
141
156
\\ strip_tac
142
157
\\ qmatch_asmsub_abbrev_tac ‘init_memory _ _ ff’
143
- \\ ‘^(ffi_names |> concl |> rand |> rand) = MAP ExtCall ff’ by simp [Abbr‘ff’]
158
+ \\ qmatch_goalsub_abbrev_tac ‘installed _ _ _ _ dd’
159
+ \\ ‘dd = SOME (MAP ExtCall ff)’ by
160
+ (unabbrev_all_tac
161
+ \\ assume_tac (cj 1 compiler32_compiled)
162
+ \\ drule ag32_configProofTheory.compile_imp_ffi_names
163
+ \\ gvs [compiler32_compiled]
164
+ \\ gvs [GSYM compiler32_compiled,ffis]
165
+ \\ simp [backendTheory.set_oracle_def,
166
+ ag32_configTheory.ag32_backend_config_def])
144
167
\\ asm_rewrite_tac []
145
168
\\ irule ag32_installed
146
169
\\ unabbrev_all_tac
@@ -200,7 +223,8 @@ Proof
200
223
QED
201
224
202
225
Theorem FST_ALOOKUP_fastForwardFD_infds:
203
- OPTION_MAP FST (ALOOKUP (fastForwardFD fs fd).infds fd') = OPTION_MAP FST (ALOOKUP fs.infds fd')
226
+ OPTION_MAP FST (ALOOKUP (fastForwardFD fs fd).infds fd') =
227
+ OPTION_MAP FST (ALOOKUP fs.infds fd')
204
228
Proof
205
229
rw[fsFFIPropsTheory.fastForwardFD_def]
206
230
\\ Cases_on`ALOOKUP fs.infds fd` \\ simp[libTheory.the_def]
@@ -212,7 +236,8 @@ Proof
212
236
QED
213
237
214
238
Theorem FST_ALOOKUP_add_stdo_infds:
215
- OPTION_MAP FST (ALOOKUP (add_stdo fd nm fs out).infds fd') = OPTION_MAP FST (ALOOKUP fs.infds fd')
239
+ OPTION_MAP FST (ALOOKUP (add_stdo fd nm fs out).infds fd') =
240
+ OPTION_MAP FST (ALOOKUP fs.infds fd')
216
241
Proof
217
242
mp_tac TextIOProofTheory.add_stdo_MAP_FST_infds
218
243
\\ strip_tac
501
526
Theorem cake_ag32_next:
502
527
SUM (MAP strlen cl) + LENGTH cl ≤ cline_size ∧ wfcl cl ∧
503
528
LENGTH inp ≤ stdin_size ∧
504
- is_ag32_init_state (init_memory code data (extcalls config .lab_conf.ffi_names) (cl,inp)) ms0
529
+ is_ag32_init_state (init_memory code data (extcalls info .lab_conf.ffi_names) (cl,inp)) ms0
505
530
⇒
506
531
∃k1. ∀k. k1 ≤ k ⇒
507
532
let ms = FUNPOW Next k ms0 in
0 commit comments