@@ -3043,7 +3043,20 @@ Proof
3043
3043
simp[Abbr`m'`]
3044
3044
\\ IF_CASES_TAC
3045
3045
>- (
3046
- DEP_REWRITE_TAC[get_mem_word_asm_write_bytearray_UNCHANGED_LT]
3046
+ IF_CASES_TAC
3047
+ >- (
3048
+ DEP_REWRITE_TAC[get_mem_word_asm_write_bytearray_UNCHANGED_LT]
3049
+ \\ conj_tac
3050
+ >- (
3051
+ EVAL_TAC \\ fs[]
3052
+ \\ Cases_on`ms.R 3w` \\ fs[]
3053
+ \\ fs[word_ls_n2w, word_lo_n2w]
3054
+ \\ fs[EVAL``heap_start_offset``] )
3055
+ \\ DEP_REWRITE_TAC[get_mem_word_UPDATE]
3056
+ \\ conj_tac >- EVAL_TAC
3057
+ \\ simp[])
3058
+ \\ pop_assum kall_tac
3059
+ \\ DEP_REWRITE_TAC[get_mem_word_asm_write_bytearray_UNCHANGED_LT]
3047
3060
\\ conj_tac
3048
3061
>- (
3049
3062
EVAL_TAC \\ fs[]
@@ -3076,19 +3089,13 @@ Proof
3076
3089
\\ simp[Q.ISPEC`λx. 1n`SUM_MAP_K |> SIMP_RULE(srw_ss())[]]
3077
3090
\\ rw[]
3078
3091
\\ simp[Abbr`m'`]
3079
- \\ rw[]
3092
+ \\ reverse IF_CASES_TAC
3080
3093
>- (
3081
- irule EQ_SYM
3082
- \\ irule asm_write_bytearray_unchanged_all_words
3083
- \\ conj_tac
3094
+ simp[APPLY_UPDATE_THM]
3095
+ \\ IF_CASES_TAC
3084
3096
>- (
3085
- simp[IN_all_words, LENGTH_TAKE_EQ_MIN]
3097
+ pop_assum mp_tac
3086
3098
\\ EVAL_TAC
3087
- \\ simp[DISJ_EQ_IMP]
3088
- \\ qmatch_goalsub_abbrev_tac`LENGTH conf + (k + _)`
3089
- \\ `k ≤ 2048 ` by simp[Abbr`k`]
3090
- \\ reverse(Cases_on`LENGTH conf = 8 ` \\ fs[])
3091
- >- ( rveq \\ fs[LUPDATE_def] )
3092
3099
\\ fs[EVAL``cline_size``] )
3093
3100
\\ irule EQ_SYM
3094
3101
\\ irule asm_write_bytearray_unchanged_all_words
@@ -3104,12 +3111,38 @@ Proof
3104
3111
\\ rw[]
3105
3112
\\ pop_assum mp_tac
3106
3113
\\ EVAL_TAC
3107
- \\ fs[EVAL``cline_size``] )
3108
- \\ simp[APPLY_UPDATE_THM]
3114
+ \\ fs[EVAL``cline_size``]
3115
+ )
3109
3116
\\ IF_CASES_TAC
3110
3117
>- (
3111
- pop_assum mp_tac
3118
+ irule EQ_SYM
3119
+ \\ irule asm_write_bytearray_unchanged_all_words
3120
+ \\ conj_tac
3121
+ >- (
3122
+ simp[IN_all_words, word_add_n2w, ADD1, DISJ_EQ_IMP]
3123
+ \\ Cases_on`ms.R 3w` \\ fs[EVAL``heap_start_offset``, ADD1]
3124
+ \\ simp[word_add_n2w, EVAL``startup_code_size``]
3125
+ \\ rw[]
3126
+ \\ fs[EVAL``cline_size``]
3127
+ \\ fs[word_lo_n2w, word_ls_n2w] )
3128
+ \\ simp[APPLY_UPDATE_THM]
3129
+ \\ rw[]
3130
+ \\ pop_assum mp_tac
3131
+ \\ EVAL_TAC
3132
+ \\ fs[EVAL``cline_size``]
3133
+ )
3134
+ \\ pop_assum kall_tac
3135
+ \\ irule EQ_SYM
3136
+ \\ irule asm_write_bytearray_unchanged_all_words
3137
+ \\ conj_tac
3138
+ >- (
3139
+ simp[IN_all_words, LENGTH_TAKE_EQ_MIN]
3112
3140
\\ EVAL_TAC
3141
+ \\ simp[DISJ_EQ_IMP]
3142
+ \\ qmatch_goalsub_abbrev_tac`LENGTH conf + (k + _)`
3143
+ \\ `k ≤ 2048 ` by simp[Abbr`k`]
3144
+ \\ reverse(Cases_on`LENGTH conf = 8 ` \\ fs[])
3145
+ >- ( rveq \\ fs[LUPDATE_def] )
3113
3146
\\ fs[EVAL``cline_size``] )
3114
3147
\\ irule EQ_SYM
3115
3148
\\ irule asm_write_bytearray_unchanged_all_words
@@ -4186,14 +4219,17 @@ Proof
4186
4219
\\ simp[ag32_ffi_mem_domain_def]
4187
4220
\\ EVAL_TAC
4188
4221
\\ fs[word_ls_n2w, word_lo_n2w, word_add_n2w] )
4222
+ \\ `LENGTH conf = 8 ` by (
4223
+ fs[fsFFITheory.ffi_write_def]
4224
+ \\ fs[OPTION_CHOICE_EQUALS_OPTION, LUPDATE_def] \\ rveq \\ fs[] )
4225
+ \\ fs[]
4189
4226
\\ irule asm_write_bytearray_unchanged
4190
4227
\\ qpat_x_assum`_ = w2n (ms.R 4w)`(assume_tac o SYM)
4191
4228
\\ Cases_on`ms.R 3w` \\ fs[memory_size_def]
4192
4229
\\ qpat_x_assum`_ = w2n (ms.R 2w)`(assume_tac o SYM) \\ fs[]
4193
4230
\\ fs[word_add_n2w]
4194
4231
\\ fs[EVAL``output_offset``]
4195
4232
\\ Cases_on`x` \\ fs[word_lo_n2w, word_ls_n2w]
4196
- \\ qmatch_goalsub_abbrev_tac`LENGTH conf + ll`
4197
4233
\\ pop_assum mp_tac
4198
4234
\\ simp[LENGTH_TAKE_EQ]
4199
4235
\\ reverse IF_CASES_TAC
@@ -4204,11 +4240,7 @@ Proof
4204
4240
\\ pairarg_tac \\ fs[fsFFITheory.write_def]
4205
4241
\\ pairarg_tac \\ fs[] \\ rveq )
4206
4242
\\ simp[EVAL``output_buffer_size``]
4207
- \\ `LENGTH conf = 8 ` by (
4208
- fs[fsFFITheory.ffi_write_def]
4209
- \\ fs[OPTION_CHOICE_EQUALS_OPTION, LUPDATE_def] \\ rveq \\ fs[] )
4210
4243
\\ strip_tac
4211
- \\ simp[Abbr`ll`]
4212
4244
\\ conj_tac >- simp[MIN_DEF]
4213
4245
\\ conj_tac
4214
4246
>- (
@@ -6138,7 +6170,7 @@ Theorem ag32_good_init_state:
6138
6170
∃io_regs cc_regs.
6139
6171
good_init_state (ag32_machine_config ffi_names (LENGTH code) (LENGTH data))
6140
6172
(FUNPOW Next startup_clock ms0)
6141
- (basis_ffi cl fs) code 0
6173
+ code 0
6142
6174
((init_asm_state code data ffi_names (cl,inp)) with
6143
6175
mem_domain := (ag32_machine_config ffi_names (LENGTH code) (LENGTH data)).prog_addresses)
6144
6176
(λk. Word
@@ -6246,13 +6278,9 @@ Proof
6246
6278
\\ fs[ag32_targetTheory.ag32_ok_def]
6247
6279
\\ fs[ag32_targetTheory.ag32_config_def]
6248
6280
>- (
6249
- fs[ffiTheory.call_FFI_def]
6250
- \\ rveq
6251
- \\ reverse conj_tac
6252
- >- (
6253
- rw[]
6254
- \\ rw[APPLY_UPDATE_THM, targetSemTheory.get_reg_value_def, EVAL``ALOOKUP ffi_exitpcs " " ``] )
6255
- \\ rw[]
6281
+ rw[]
6282
+ \\ rw[APPLY_UPDATE_THM, targetSemTheory.get_reg_value_def,
6283
+ EVAL``ALOOKUP ffi_exitpcs " " ``]
6256
6284
\\ irule EQ_SYM
6257
6285
\\ irule asm_write_bytearray_id
6258
6286
\\ gen_tac \\ strip_tac
@@ -6283,9 +6311,6 @@ Proof
6283
6311
\\ fs[IS_SOME_EXISTS]
6284
6312
\\ rpt(IF_CASES_TAC \\ simp[targetSemTheory.get_reg_value_def]))
6285
6313
\\ rw[]
6286
- \\ rfs[ffiTheory.call_FFI_def]
6287
- \\ `st.oracle = (basis_ffi cl fs).oracle` by metis_tac[evaluatePropsTheory.RTC_call_FFI_rel_consts]
6288
- \\ fs[basis_ffiTheory.basis_ffi_def]
6289
6314
\\ `EL index ffi_names ∈ set(MAP FST FFI_codes)` by (
6290
6315
fs[SUBSET_DEF]
6291
6316
\\ fs[FFI_codes_def, ffi_exitpcs_def]
@@ -6296,14 +6321,6 @@ Proof
6296
6321
\\ qpat_x_assum`MEM nm _`mp_tac
6297
6322
\\ simp[Once FFI_codes_def]
6298
6323
\\ strip_tac \\ rveq \\ fs[]
6299
- \\ qmatch_asmsub_abbrev_tac`oracle_result_CASE r`
6300
- \\ pop_assum mp_tac
6301
- \\ simp[basis_ffiTheory.basis_ffi_oracle_def]
6302
- \\ strip_tac \\ fs[Abbr`r`]
6303
- \\ fs[CaseEq" option" ,CaseEq" bool" ,CaseEq" oracle_result" ]
6304
- \\ pairarg_tac \\ fs[]
6305
- \\ fs[CaseEq" option" ,CaseEq" bool" ,CaseEq" oracle_result" ,CaseEq" ffi_result" ]
6306
- \\ rveq \\ fs[]
6307
6324
\\ simp[ag32_ffi_mem_update_def]
6308
6325
\\ qmatch_goalsub_abbrev_tac`asm_write_bytearray p new_bytes m2`
6309
6326
\\ `asm_write_bytearray p new_bytes m2 a = asm_write_bytearray p new_bytes t1.mem a`
@@ -6315,14 +6332,8 @@ Proof
6315
6332
\\ simp[ag32_prog_addresses_def]
6316
6333
\\ qpat_x_assum` _ < memory_size`mp_tac
6317
6334
\\ EVAL_TAC \\ simp[])
6318
- \\ TRY (
6319
- CHANGED_TAC(fs[fsFFITheory.ffi_read_def])
6320
- \\ fs[CaseEq" list" ] \\ rveq
6321
- \\ PURE_TOP_CASE_TAC \\ fs[]
6322
- \\ PURE_TOP_CASE_TAC \\ fs[]
6323
- \\ PURE_TOP_CASE_TAC \\ fs[]
6324
- \\ reverse IF_CASES_TAC >- rw[]
6325
- \\ rw[]
6335
+ >- (
6336
+ ntac 3 (PURE_TOP_CASE_TAC >> simp[]) >> IF_CASES_TAC >> rw[]
6326
6337
\\ qmatch_goalsub_abbrev_tac`set_mem_word x y m a`
6327
6338
\\ qpat_x_assum`m a = _`(SUBST1_TAC o SYM)
6328
6339
\\ irule set_mem_word_neq
@@ -6333,7 +6344,7 @@ Proof
6333
6344
\\ qpat_x_assum`_ < memory_size`mp_tac
6334
6345
\\ EVAL_TAC
6335
6346
\\ Cases_on`a` \\ fs[word_ls_n2w, word_lo_n2w, word_add_n2w]
6336
- \\ NO_TAC )
6347
+ )
6337
6348
\\ reverse IF_CASES_TAC
6338
6349
>- (
6339
6350
rw[APPLY_UPDATE_THM]
@@ -6345,23 +6356,10 @@ Proof
6345
6356
\\ rw[]
6346
6357
\\ fs[targetSemTheory.read_ffi_bytearrays_def]
6347
6358
\\ fs[targetSemTheory.read_ffi_bytearray_def]
6348
- \\ fs[fsFFITheory.ffi_write_def]
6349
- \\ fs[CaseEq" list" ] \\ rveq
6350
- \\ qhdtm_x_assum`OPTION_CHOICE`mp_tac
6351
- \\ rewrite_tac[OPTION_CHOICE_EQUALS_OPTION]
6352
- \\ reverse strip_tac
6353
- >- (
6354
- pop_assum mp_tac \\ simp[LUPDATE_def]
6355
- \\ strip_tac \\ rveq
6356
- \\ qpat_x_assum`_ = 0w`mp_tac
6357
- \\ simp[] )
6358
- \\ fs[]
6359
- \\ pairarg_tac \\ fs[] \\ rveq
6360
- \\ rw[]
6361
- \\ irule asm_write_bytearray_unchanged
6359
+ \\ ntac 5 (PURE_TOP_CASE_TAC >> simp[])
6360
+ \\ irule asm_write_bytearray_unchanged \\ simp[]
6362
6361
\\ fs[EVAL``output_offset``, output_buffer_size_def]
6363
6362
\\ fs[LENGTH_TAKE_EQ, fsFFITheory.write_def]
6364
- \\ pairarg_tac \\ fs[]
6365
6363
\\ qpat_x_assum`_ ∈ _.mem_domain`mp_tac
6366
6364
\\ qpat_x_assum`_ = _.mem_domain`(mp_tac o SYM)
6367
6365
\\ simp[ag32_prog_addresses_def]
@@ -6370,7 +6368,8 @@ Proof
6370
6368
\\ qpat_x_assum`_ < memory_size`mp_tac
6371
6369
\\ CONV_TAC(LAND_CONV EVAL)
6372
6370
\\ Cases_on`a` \\ fs[word_ls_n2w, word_lo_n2w, word_add_n2w]
6373
- \\ rw[MIN_DEF])
6371
+ \\ rw[MIN_DEF]
6372
+ )
6374
6373
\\ conj_tac >- (
6375
6374
rw[targetSemTheory.ccache_interfer_ok_def, ag32_machine_config_def,
6376
6375
lab_to_targetTheory.ffi_offset_def, ag32_ccache_interfer_def,
@@ -6505,7 +6504,7 @@ Theorem ag32_installed:
6505
6504
x ∉ ag32_startup_addresses ⇒
6506
6505
((FUNPOW Next startup_clock ms0).MEM x = ms0.MEM x))
6507
6506
⇒
6508
- installed code 0 data 0 (SOME ffi_names) (basis_ffi cl fs)
6507
+ installed code 0 data 0 (SOME ffi_names)
6509
6508
(heap_regs ag32_backend_config.stack_conf.reg_names)
6510
6509
(ag32_machine_config ffi_names (LENGTH code) (LENGTH data))
6511
6510
(FUNPOW Next startup_clock ms0)
@@ -6523,7 +6522,7 @@ Proof
6523
6522
\\ disch_then drule
6524
6523
\\ disch_then drule
6525
6524
\\ strip_tac
6526
- \\ qmatch_asmsub_abbrev_tac`good_init_state _ _ _ _ _ t`
6525
+ \\ qmatch_asmsub_abbrev_tac`good_init_state _ _ _ _ t`
6527
6526
\\ qexists_tac`t` \\ simp[Abbr`t`]
6528
6527
\\ asm_exists_tac \\ fs[]
6529
6528
\\ qhdtm_x_assum`good_init_state` mp_tac
0 commit comments