Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
138 commits
Select commit Hold shift + click to select a range
b7ebf46
Add thunks to CakeML source semantics
myreen Dec 3, 2024
a946c1a
Update for thunks in CakeML source
myreen Dec 5, 2024
a9a8ccc
Merge remote-tracking branch 'origin/noneq-refs' into thunks
myreen Dec 5, 2024
9f672f5
Updates for thunks
myreen Dec 5, 2024
f74fa8b
Update inferencer for Thunks
myreen Dec 8, 2024
1a0325b
Fix a mistake in Thunk semantics
myreen Dec 8, 2024
c96633a
Merge remote-tracking branch 'origin/noneq-refs' into thunks
myreen Dec 8, 2024
e7786bc
Some progress on thunks
myreen Dec 10, 2024
3e4c416
Get more files to build
myreen Dec 11, 2024
24ce1b8
Updated itree semantics for thunks
nikos-alexandris Dec 29, 2024
fbb7073
Added force semantics to itree semantics
nikos-alexandris Jan 7, 2025
497fe3a
Changed force semantics to apply function directly instead of going t…
nikos-alexandris Jan 10, 2025
11d3597
Removed a cheat
nikos-alexandris Jan 12, 2025
56926cc
Minor tweak
myreen Apr 24, 2025
0510e9e
Merge remote-tracking branch 'origin/master' into thunks
myreen Apr 24, 2025
5ff8af8
Speed up a slow proof
myreen Apr 24, 2025
732cc2c
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Apr 27, 2025
270490b
Merged master, fixed bugs introduced by swapping the meaning of the
nikos-alexandris Apr 28, 2025
2ef8c9f
Introduced `thunk_mode` datatype for thunks to replace the bool flag.
nikos-alexandris Apr 29, 2025
6932944
Added thunks to closLang
nikos-alexandris May 4, 2025
bf369c6
Fixed force semantics. Data proofs failing
nikos-alexandris May 13, 2025
37f1c41
Merge master
nikos-alexandris May 13, 2025
de4145e
Progress on bvi_to_data
nikos-alexandris May 17, 2025
9482cab
progress on AppUnit in bvi and data
nikos-alexandris Jul 21, 2025
d57fa6d
fix `data_liveProof`
nikos-alexandris Jul 21, 2025
c769b55
fix `data_spaceProof`
nikos-alexandris Jul 21, 2025
5a0ec08
Made AppUnit in data complete
nikos-alexandris Jul 21, 2025
c9cef6f
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Jul 22, 2025
01dfd5b
Fixes after master merge
nikos-alexandris Jul 23, 2025
18b744a
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Jul 23, 2025
841add6
Fixes after master merge
nikos-alexandris Jul 23, 2025
728e607
More compact AppUnit definitions
nikos-alexandris Jul 23, 2025
7bac70f
Attempt to add Thunk into data_to_word invariants
myreen Jul 24, 2025
c42d798
Various minor tweaks
myreen Jul 25, 2025
4f587ce
Add Thunk case to size_of soundness thm
myreen Jul 28, 2025
57433d5
Fix up tail end of data_to_word_assignProof
myreen Jul 29, 2025
fbad3f6
Merge remote-tracking branch 'origin/wordLang_multiret' into thunks
myreen Jul 29, 2025
8bc1a47
Prove some cheats in `data_to_word_memoryProof`
nikos-alexandris Jul 29, 2025
c8a7342
- Fixed `bvl_handle`
nikos-alexandris Jul 31, 2025
f1ad1f9
Prove more cheats in `data_to_word_memoryProof`
nikos-alexandris Jul 31, 2025
ca339d7
Progress in `data_to_word_memoryProof`
nikos-alexandris Jul 31, 2025
0a526e7
Prove all cheats in `data_to_word_memoryProof`; `AllocThunk` done in …
nikos-alexandris Jul 31, 2025
8dcb8f2
Progress on `UpdateThunk` in `dat_to_word*`
nikos-alexandris Aug 1, 2025
7709976
`UpdateThunk` done in `data_to_word`
nikos-alexandris Aug 11, 2025
20e4ea0
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Aug 11, 2025
69c5455
Sketch wordLang implemtnation of ForceThunk
myreen Aug 11, 2025
56e0c94
Add Force to top-level of bvl$exp
myreen Aug 12, 2025
72f385a
Compile closLang's ThunkOp ForceThunk to BVL's Force exp
myreen Aug 12, 2025
eb43a60
Various adjustments for BVL's new Force
myreen Aug 12, 2025
d82e43e
Sketch new Force proof
myreen Aug 12, 2025
28655d1
Define Force in BVI and DataLang
myreen Aug 13, 2025
28b645b
Get backend to build
myreen Aug 13, 2025
eab3054
Prove various cheats outside `compiler/backend`
nikos-alexandris Aug 13, 2025
d8cea12
Prove more various cheats outside `compiler/backend`
nikos-alexandris Aug 13, 2025
5bcb10a
Prove more various cheats outside `compiler/backend`
nikos-alexandris Aug 14, 2025
31a312a
Prove all cheats in `bvlProps`
nikos-alexandris Aug 14, 2025
54c0395
Fix `bviProps`
nikos-alexandris Aug 14, 2025
72aa310
Fix `clos_to_bvlProof` and thunk code in `clos_to_bvl`. TODO cleanup
nikos-alexandris Aug 14, 2025
7e9ea7c
Cleanup `Force` case in `clos_to_bvlProof`
nikos-alexandris Aug 15, 2025
7095e5e
Progress in `backend/passes/proofs`, `bvl_to_bviProof` done
nikos-alexandris Aug 16, 2025
e63236f
Fix `bvl_const`
nikos-alexandris Aug 17, 2025
c931e7e
Fix `bvi_let`
nikos-alexandris Aug 17, 2025
48881ef
Fix `bvi_tailrecProof`. TODO cleanup
nikos-alexandris Aug 17, 2025
d8dabd6
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Aug 17, 2025
d18bb8c
Cleanup `bvi_tailrecProof`
nikos-alexandris Aug 18, 2025
d783e87
Give Force semantics in dataSem
myreen Aug 18, 2025
40e706b
Fixed `dataProps`
nikos-alexandris Aug 19, 2025
5fdb36f
Tidy up composition proof
myreen Aug 19, 2025
7cc1c1a
Fixed `data_live` and `data_space`
nikos-alexandris Aug 19, 2025
0d1f809
Some progress on `bvi_to_data`
nikos-alexandris Aug 20, 2025
2d856b0
Fix `bvi_to_data`. TODO cleanup
nikos-alexandris Aug 20, 2025
9b300cf
Update `dataProps`
nikos-alexandris Aug 20, 2025
6511a90
Update `data_liveProof` and `data_spaceProof`
nikos-alexandris Aug 20, 2025
083ae95
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Aug 20, 2025
74253a0
Get `data_to_wordProof` to build with cheats
nikos-alexandris Aug 20, 2025
da05ce5
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Aug 23, 2025
6a4f8ed
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Aug 25, 2025
09d7ec4
Fixes after master merge
nikos-alexandris Aug 25, 2025
c3dfcf3
Progress on getting thunks into the `cv_translator`
nikos-alexandris Aug 26, 2025
68f5894
Small fix in `itree_semantics`
nikos-alexandris Aug 26, 2025
ac85ea4
Fix `itree_semanticsProps`
nikos-alexandris Aug 26, 2025
e3f4825
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Aug 26, 2025
ab9498e
Small fix after master merge
nikos-alexandris Aug 27, 2025
28b8548
Complete implementation of Force in data_to_word
myreen Aug 29, 2025
7dffad3
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Aug 29, 2025
934fc27
Progress on `data_to_word_Proof`
nikos-alexandris Aug 30, 2025
fc7cc19
Add `Force` to `get_code_labels` in `dataProps` and remove cheat in `…
nikos-alexandris Aug 30, 2025
33b2911
Progress on `data_to_wordProof`
nikos-alexandris Aug 30, 2025
fce04d0
Fixes for HOL changes
nikos-alexandris Aug 31, 2025
b702f19
Remove recursion in semantics when forcing thunks
hrutvik Feb 14, 2025
5cccb67
Move some thunk definitions
hrutvik Aug 30, 2025
388983a
Update small step semantics
hrutvik Aug 30, 2025
0b9d45a
Update relational big-step semantics
hrutvik Aug 30, 2025
e8884d8
Update equivalence for functional/relational big-step semantics
hrutvik Aug 31, 2025
3b5408b
Update equivalence for big-/small-step semantics
hrutvik Sep 1, 2025
7790f62
Update equivalence for small-step/ITree semantics
hrutvik Sep 1, 2025
e079274
Fix `source_evalProofTheory`
hrutvik Sep 1, 2025
4c4d8cc
fix `ml_optimise`
nikos-alexandris Sep 2, 2025
3daab0e
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Sep 2, 2025
06a53e0
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Sep 4, 2025
8024f6c
Some progress on `dat_to_wordProof`
nikos-alexandris Sep 4, 2025
9f6aa13
Fix `source_to_flatProofTheory`
hrutvik Sep 7, 2025
3623588
Fix `alt_semantics`
hrutvik Sep 7, 2025
00e5939
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Sep 12, 2025
ccc071a
Prove bittests correct
myreen Sep 16, 2025
60a25e9
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Sep 17, 2025
066a791
Fix for new constant sign from HOL
myreen Sep 17, 2025
a37e850
Fix some broken proofs and update a README
myreen Sep 18, 2025
653745b
Fix semantics to remove double clocking in Force
nikos-alexandris Sep 18, 2025
e4eb73e
Fixes for changes in evaluateScirpt
nikos-alexandris Sep 18, 2025
317631b
Fixes for changes in flatSemScript
nikos-alexandris Sep 18, 2025
de31c41
Fixes for changes in closSemScript
nikos-alexandris Sep 18, 2025
ef9d3f2
Fixes for changes in closSemScript
nikos-alexandris Sep 18, 2025
fcbfbeb
Fixes for changes in bvlSemScript and bviSemScript
nikos-alexandris Sep 18, 2025
b4b1241
Fixes for changes in bviSemScript and dataSemScript
nikos-alexandris Sep 18, 2025
972a28d
Progress on `data_to_wordProof`
nikos-alexandris Sep 19, 2025
e344230
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Sep 22, 2025
5c06328
Update for change in name of while theory
nikos-alexandris Sep 24, 2025
385dc18
Reverse changes to alt semantics for force clocks
nikos-alexandris Sep 25, 2025
f5af97b
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Sep 26, 2025
ca88764
Fix cv translation
myreen Sep 29, 2025
b987004
Progress on some cheats
myreen Sep 29, 2025
5a512e6
Reduce cheat count
myreen Sep 29, 2025
c63df88
Merge remote-tracking branch 'origin/master' into thunks
nikos-alexandris Sep 30, 2025
5cdb686
Progress on Thunk cheats
myreen Sep 30, 2025
4fec08e
Update candle proofs for changes in Force semantics
nikos-alexandris Sep 30, 2025
1c72a3f
Merge remote-tracking branch 'origin/master' into mcandidate-fix
tanyongkiam Sep 30, 2025
27d1c57
Update for change in name of while theory
nikos-alexandris Sep 24, 2025
365016e
fix paths
tanyongkiam Sep 30, 2025
b9917a8
Progress on Thunk proofs in compiler
myreen Sep 30, 2025
5305161
Fix sexp_parserProg
myreen Sep 30, 2025
5e79b20
Fixes for force_thunk
myreen Sep 30, 2025
8659f8e
Fix `compiler/repl`
nikos-alexandris Oct 1, 2025
dca57e2
Merge remote-tracking branch 'refs/remotes/origin/thunks' into thunks
nikos-alexandris Oct 1, 2025
b4db0ac
Bring up to date with mcandidate
nikos-alexandris Oct 1, 2025
356477c
Merge remote-tracking branch 'origin/mcandidate-fix' into thunks
nikos-alexandris Oct 1, 2025
37f8d56
Small fixes outside compiler
nikos-alexandris Oct 1, 2025
7df18a4
Merge remote-tracking branch 'refs/remotes/origin/thunks' into thunks
nikos-alexandris Oct 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion basis/fsFFIPropsScript.sml
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ Proof
fs [validFD_def,nextFD_def]
\\ qabbrev_tac `xs = MAP FST fs.infds`
\\ match_mp_tac (SIMP_RULE std_ss []
(Q.ISPEC `\n:num. ~MEM n xs` whileTheory.LEAST_INTRO))
(Q.ISPEC `\n:num. ~MEM n xs` WhileTheory.LEAST_INTRO))
\\ qexists_tac `SUM xs + 1`
\\ strip_tac
\\ qsuff_tac `!xs m:num. MEM m xs ==> m <= SUM xs`
Expand Down
4 changes: 2 additions & 2 deletions basis/pure/mlstringScript.sml
Original file line number Diff line number Diff line change
Expand Up @@ -749,10 +749,10 @@ Theorem OLEAST_LE_STEP:
else (OLEAST j. i + 1 <= j /\ P j))
Proof
rw []
\\ simp [whileTheory.OLEAST_EQ_SOME]
\\ simp [WhileTheory.OLEAST_EQ_SOME]
\\ qmatch_goalsub_abbrev_tac `opt1 = $OLEAST _`
\\ Cases_on `opt1`
\\ fs [whileTheory.OLEAST_EQ_SOME]
\\ fs [WhileTheory.OLEAST_EQ_SOME]
\\ rw []
\\ fs [LESS_EQ |> REWRITE_RULE [ADD1] |> GSYM, arithmeticTheory.LT_LE]
\\ CCONTR_TAC
Expand Down
2 changes: 1 addition & 1 deletion candle/overloading/syntax/holSyntaxExtraScript.sml
Original file line number Diff line number Diff line change
Expand Up @@ -12996,7 +12996,7 @@ Proof
rw[] >>
last_x_assum(qspec_then `f` mp_tac) >>
disch_then assume_tac >>
pop_assum(mp_tac o Ho_Rewrite.REWRITE_RULE[whileTheory.LEAST_EXISTS]) >>
pop_assum(mp_tac o Ho_Rewrite.REWRITE_RULE[WhileTheory.LEAST_EXISTS]) >>
rename1 `f n` >>
rpt strip_tac >>
reverse(Cases_on `R' (f n) (f (SUC n))`) >- goal_assum drule >>
Expand Down
2 changes: 1 addition & 1 deletion candle/overloading/syntax/holSyntaxScript.sml
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ QED
Theorem LEAST_EXISTS[local]:
(∃n:num. P n) ⇒ ∃k. P k ∧ ∀m. m < k ⇒ ¬(P m)
Proof
metis_tac[whileTheory.LEAST_EXISTS]
metis_tac[WhileTheory.LEAST_EXISTS]
QED

val VARIANT_PRIMES_def = new_specification
Expand Down
1 change: 1 addition & 0 deletions candle/prover/candle_basis_evaluateScript.sml
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@ Proof
>- (Cases_on ‘op’ \\ gs[])
>- (Cases_on ‘op’ \\ gs[])
>- (Cases_on ‘op’ \\ gs[])
>- (Cases_on ‘op’ \\ gvs [])
>- (
gvs [do_app_cases, Boolv_def]
\\ rw [v_ok_def]
Expand Down
164 changes: 162 additions & 2 deletions candle/prover/candle_prover_evaluateScript.sml
Original file line number Diff line number Diff line change
Expand Up @@ -635,15 +635,175 @@ Proof
rw[do_app_cases] \\ gs [SF SFY_ss]
\\ first_assum (irule_at Any)
\\ simp [v_ok_def])
\\ Cases_on ‘∃m. op = ThunkOp (AllocThunk m)’ \\ gs[]
>- (
rw [do_app_cases] \\ gs [thunk_op_def, AllCaseEqs()]
\\ pairarg_tac \\ gvs []
\\ gvs [v_ok_def, store_alloc_def, EVERY_EL, LLOOKUP_EQ_EL]
\\ first_assum (irule_at Any) \\ gs []
\\ rw [EL_APPEND_EQN] \\ gs [NOT_LESS, LESS_OR_EQ, ref_ok_def]
>- (
gs [kernel_loc_ok_def, LLOOKUP_EQ_EL, EL_APPEND_EQN]
\\ first_x_assum (drule_then strip_assume_tac)
\\ rw [] \\ gs [SF SFY_ss])
\\ strip_tac
\\ first_x_assum (drule_then assume_tac)
\\ drule kernel_loc_ok_LENGTH \\ gs [])
\\ Cases_on ‘∃m. op = ThunkOp (UpdateThunk m)’ \\ gs[]
>- (
rw [do_app_cases] \\ gs [thunk_op_def, AllCaseEqs()]
\\ first_assum (irule_at Any)
\\ gvs [v_ok_def, store_assign_def, EVERY_EL, EL_LUPDATE, LLOOKUP_EQ_EL]
\\ rw [ref_ok_def]
\\ irule kernel_loc_ok_LUPDATE1
\\ rpt strip_tac \\ gs [])
\\ Cases_on ‘op = ThunkOp ForceThunk’ \\ gs[]
>- (rw [do_app_cases] \\ gs [thunk_op_def, AllCaseEqs()])
\\ Cases_on ‘op’ \\ gs []
\\ Cases_on ‘t’ \\ gs []
QED

Theorem state_ok_dest_thunk:
state_ok ctxt s ∧
EVERY (v_ok ctxt) vs ∧
dest_thunk (REVERSE vs) s.refs = IsThunk m v ⇒ v_ok ctxt v
Proof
rw []
>- (
gvs [state_ok_def, oneline dest_thunk_def, AllCaseEqs(), v_ok_def,
store_lookup_def, LLOOKUP_THM]
\\ first_x_assum drule \\ rw [] \\ gvs [ref_ok_def])
\\ rw [env_ok_def, sing_env_def]
\\ Cases_on ‘n'’ \\ gvs []
\\ gvs [namespaceTheory.nsEmpty_def, namespaceTheory.nsBind_def,
namespaceTheory.nsLookup_def]
\\ gvs [oneline dest_thunk_def, AllCaseEqs(), store_lookup_def, state_ok_def,
LLOOKUP_THM, v_ok_def]
\\ first_x_assum drule_all \\ rw [] \\ gvs [ref_ok_def]
QED

Theorem state_ok_update_thunk:
state_ok ctxt s ∧
EVERY (v_ok ctxt) vs ∧
EVERY (v_ok ctxt) vs2 ∧
update_thunk (REVERSE vs) s.refs vs2 = SOME refs ⇒
state_ok ctxt (s with refs := refs)
Proof
rw []
\\ gvs [oneline update_thunk_def, AllCaseEqs(), store_assign_def,
state_ok_def, LLOOKUP_LUPDATE, v_ok_def]
\\ goal_assum drule \\ gvs [] \\ rw []
>- (
irule kernel_loc_ok_LUPDATE1 \\ gvs []
\\ metis_tac [EXTENSION])
>- (first_x_assum drule \\ rw [])
>- gvs [ref_ok_def]
QED

Theorem evaluate_v_ok_Op:
op ≠ Opapp ∧ op ≠ Eval ⇒ ^(get_goal "ast$App")
Proof
rw [evaluate_def] \\ Cases_on ‘getOpClass op’ \\ gs[]
>~ [‘EvalOp’] >- (Cases_on ‘op’ \\ gs[])
>~ [‘FunApp’] >- (Cases_on ‘op’ \\ gs[])
>~ [‘EvalOp’] >- (Cases_on ‘op’ \\ gs[] \\ Cases_on ‘t’ \\ gs[])
>~ [‘FunApp’] >- (Cases_on ‘op’ \\ gs[] \\ Cases_on ‘t’ \\ gs[])
>~ [‘Force’] >- (
Cases_on ‘op’ \\ gvs [] \\ Cases_on ‘t’ \\ gvs []
\\ qpat_x_assum ‘_ = (s',res)’ mp_tac
\\ TOP_CASE_TAC \\ gvs []
\\ last_x_assum drule_all \\ strip_tac
\\ reverse TOP_CASE_TAC \\ gvs []
>- (
rw [] \\ gvs []
\\ goal_assum drule \\ gvs [])
\\ TOP_CASE_TAC \\ gvs []
>~ [‘BadRef’] >- (
rw [] \\ gvs []
\\ goal_assum drule \\ gvs [state_ok_def])
>~ [‘NotThunk’] >- (
rw [] \\ gvs []
\\ goal_assum drule \\ gvs [state_ok_def])
\\ TOP_CASE_TAC \\ gvs []
>- (
rw [] \\ gvs []
\\ goal_assum drule \\ gvs []
\\ drule_all_then assume_tac state_ok_dest_thunk \\ gvs [])
\\ TOP_CASE_TAC \\ gvs []
>- (
rw [] \\ gvs []
\\ goal_assum drule \\ gvs [state_ok_def])
\\ ntac 2 (TOP_CASE_TAC \\ gvs [])
>- (
rw [] \\ gvs []
\\ goal_assum drule \\ gvs [state_ok_def])
\\ TOP_CASE_TAC \\ gvs []
\\ ‘state_ok ctxt' (dec_clock q)’
by (gvs [dec_clock_def, state_ok_def] \\ metis_tac [])
\\ Cases_on ‘kernel_vals ctxt' v’
>- (
drule (INST_TYPE [“:'a”|->“:'ffi”] kernel_vals_ok)
\\ ‘v_ok ctxt' (Conv NONE [])’ by gvs [v_ok_def]
\\ disch_then (drule_all_then (strip_assume_tac)) \\ gs []
>- (
rw [] \\ gvs []
\\ goal_assum drule \\ gvs [state_ok_def])
\\ rpt (TOP_CASE_TAC \\ gvs [])
>- (
rw [] \\ gvs []
\\ goal_assum drule \\ gvs [state_ok_def])
>- (
rw [] \\ gvs []
\\ qexists ‘ctxt''’ \\ gvs []
\\ drule_at (Pat ‘update_thunk _ _ _ = _’) state_ok_update_thunk
\\ disch_then $ qspec_then ‘ctxt''’ mp_tac
\\ impl_tac \\ gvs []
\\ gvs [EVERY_EL])
>- (
rw [] \\ gvs []
\\ qexists ‘ctxt''’ \\ gvs [])
\\ rw [] \\ gvs []
\\ qexists ‘ctxt''’ \\ gvs [state_ok_def])
\\ first_x_assum drule
\\ impl_tac >- (
gvs [do_opapp_cases]
>~ [‘Closure env1 n e’] >- (
drule_all state_ok_dest_thunk \\ strip_tac
\\ gvs [v_ok_def]
\\ irule env_ok_with_nsBind \\ gvs [v_ok_def]
\\ ‘env1 with c := env1.c = env1’ by simp [sem_env_component_equality]
\\ gvs [])
\\ drule_all state_ok_dest_thunk \\ strip_tac
\\ gvs [v_ok_def]
\\ gs [env_ok_def, evaluateTheory.dec_clock_def, find_recfun_ALOOKUP,
SF SFY_ss]
\\ drule_then assume_tac ALOOKUP_MEM
\\ gs [EVERY_MEM, EVERY_MAP, FORALL_PROD, SF SFY_ss]
\\ Cases \\ simp [build_rec_env_merge, ml_progTheory.nsLookup_nsBind_compute]
\\ rw [] \\ gs []
\\ gs [nsLookup_nsAppend_some, nsLookup_alist_to_ns_some,
nsLookup_alist_to_ns_none]
>- simp [v_ok_def]
>~ [‘ALOOKUP _ _ = SOME _’] >- (
drule_then assume_tac ALOOKUP_MEM
\\ gvs [MEM_MAP, EXISTS_PROD, v_ok_def, EVERY_MEM]
\\ rw [DISJ_EQ_IMP, env_ok_def] \\ gs [SF SFY_ss])
\\ first_x_assum irule
\\ gs [SF SFY_ss])
\\ strip_tac \\ gvs []
\\ reverse TOP_CASE_TAC \\ gvs []
>- (
rw [] \\ gvs []
\\ goal_assum $ drule_at (Pos $ el 2)
\\ rw [] \\ gvs [])
\\ TOP_CASE_TAC \\ gvs []
>- (
rw [] \\ gvs []
\\ goal_assum drule \\ gvs [state_ok_def])
\\ strip_tac \\ gvs []
\\ goal_assum $ drule_at (Pos $ el 3) \\ gvs []
\\ drule_at (Pat ‘update_thunk _ _ _ = _’) state_ok_update_thunk \\ gvs []
\\ disch_then drule \\ gvs []
\\ impl_tac \\ gvs []
\\ gvs [EVERY_EL])
>~ [‘Simple’] >- (
gvs [AllCaseEqs()]
\\ first_x_assum (drule_all_then strip_assume_tac) \\ gs [state_ok_def]
Expand Down
3 changes: 2 additions & 1 deletion candle/prover/candle_prover_invScript.sml
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,8 @@ Theorem kernel_vals_ind = v_ok_ind
Definition ref_ok_def:
ref_ok ctxt (Varray vs) = EVERY (v_ok ctxt) vs ∧
ref_ok ctxt (Refv v) = v_ok ctxt v ∧
ref_ok ctxt (W8array vs) = T
ref_ok ctxt (W8array vs) = T ∧
ref_ok ctxt (Thunk m v) = v_ok ctxt v
End

Definition kernel_loc_ok_def:
Expand Down
98 changes: 95 additions & 3 deletions candle/prover/permsScript.sml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ Definition perms_ok_exp_def:
(op = AallocFixed ⇒ RefAlloc ∈ ps) ∧
(op = Aw8alloc ⇒ W8Alloc ∈ ps) ∧
(op = Opassign ⇒ RefUpdate ∈ ps) ∧
(∀chn. op = FFI chn ⇒ FFIWrite chn ∈ ps ∧ DoFFI ∈ ps)
(∀chn. op = FFI chn ⇒ FFIWrite chn ∈ ps ∧ DoFFI ∈ ps) ∧
(∀m. op = ThunkOp (AllocThunk m) ⇒ RefAlloc ∈ ps) ∧
(∀m. op = ThunkOp (UpdateThunk m) ⇒ RefUpdate ∈ ps)
| _ => T
End

Expand Down Expand Up @@ -182,7 +184,8 @@ QED
Definition perms_ok_ref_def:
perms_ok_ref ps (Refv v) = perms_ok ps v ∧
perms_ok_ref ps (Varray vs) = EVERY (perms_ok ps) vs ∧
perms_ok_ref ps (W8array ws) = T
perms_ok_ref ps (W8array ws) = T ∧
perms_ok_ref ps (Thunk _ v) = perms_ok ps v
End

Definition perms_ok_state_def:
Expand Down Expand Up @@ -295,6 +298,8 @@ Theorem do_app_perms:
(op = Aw8alloc ⇒ W8Alloc ∈ ps) ∧
(op = Opassign ⇒ RefUpdate ∈ ps) ∧
(∀chn. op = FFI chn ⇒ FFIWrite chn ∈ ps ∧ DoFFI ∈ ps) ∧
(∀m. op = ThunkOp (AllocThunk m) ⇒ RefAlloc ∈ ps) ∧
(∀m. op = ThunkOp (UpdateThunk m) ⇒ RefUpdate ∈ ps) ∧
op ≠ Opapp ⇒
(∀n. n < LENGTH refs1 ∧ RefMention n ∈ ps ⇒ perms_ok_ref ps (EL n refs1)) ∧
(RefAlloc ∉ ps ∧ W8Alloc ∉ ps ⇒ LENGTH refs1 = LENGTH refs) ∧
Expand Down Expand Up @@ -556,7 +561,22 @@ Proof
>- (
rw [do_app_cases] \\ gs[]
\\ rw [perms_ok_def])
\\ Cases_on ‘∃m. op = ThunkOp (AllocThunk m)’ \\ gs[]
>- (
rw [do_app_cases] \\ gs [thunk_op_def, AllCaseEqs()] \\ pairarg_tac \\ gs []
\\ gvs [perms_ok_def, store_alloc_def, perms_ok_ref_def, SUBSET_DEF]
\\ simp [EL_APPEND_EQN]
\\ rw [] \\ gs []
\\ gvs [NOT_LESS, LESS_OR_EQ, perms_ok_ref_def])
\\ Cases_on ‘∃m. op = ThunkOp (UpdateThunk m)’ \\ gs[]
>- (
rw [do_app_cases] \\ gs [thunk_op_def, AllCaseEqs()]
\\ gvs [perms_ok_def, store_assign_def]
\\ rw [EL_LUPDATE, perms_ok_ref_def])
\\ Cases_on ‘op = ThunkOp ForceThunk’ \\ gs[]
>- (rw [do_app_cases] \\ gvs [thunk_op_def, AllCaseEqs()])
\\ Cases_on ‘op’ \\ gs []
\\ Cases_on ‘t’ \\ gs []
QED

Theorem perms_ok_do_opapp:
Expand Down Expand Up @@ -692,7 +712,78 @@ Proof
>~ [‘Fun n e’] >- (
gvs [evaluate_def, perms_ok_env_def, perms_ok_def, SF SFY_ss])
>~ [‘App op xs’] >- (
gvs [evaluate_def]
Cases_on ‘getOpClass op = Force’ \\ gvs []
>- (
gvs [AllCaseEqs()] \\ gvs [evaluate_def] \\ gvs [AllCaseEqs()]
\\ gvs [perms_ok_env_BIGUNION, MEM_MAP, PULL_EXISTS, EVERY_MEM]
>- (
gvs [oneline dest_thunk_def, AllCaseEqs(), store_lookup_def,
perms_ok_state_def]
\\ last_x_assum drule \\ rw [] \\ gvs [perms_ok_def, perms_ok_ref_def])
\\ (
gvs [dec_clock_def]
\\ gvs [oneline dest_thunk_def, AllCaseEqs(), store_lookup_def]
\\ gvs [do_opapp_cases]
>- ((* Closure *)
last_x_assum mp_tac
\\ reverse impl_tac
>- (
rw [] \\ gs []
\\ gvs [oneline update_thunk_def, AllCaseEqs(), store_assign_def,
perms_ok_state_def, EL_LUPDATE] \\ rw []
\\ gvs [perms_ok_ref_def]
\\ first_x_assum (drule_then assume_tac) \\ gs [])
\\ gvs [perms_ok_state_def]
\\ first_x_assum (drule_then assume_tac) \\ gvs []
\\ gvs [perms_ok_ref_def, perms_ok_def, perms_ok_env_def]
\\ Cases \\ simp [nsLookup_nsBind_compute]
\\ rw [] \\ gvs [perms_ok_def]
\\ first_x_assum irule
\\ first_x_assum (irule_at Any) \\ gvs [])
>- ((* Recclosure *)
last_x_assum mp_tac
\\ reverse impl_tac
>- (
rw [] \\ gs []
\\ gvs [oneline update_thunk_def, AllCaseEqs(), store_assign_def,
perms_ok_state_def, EL_LUPDATE] \\ rw []
\\ gvs [perms_ok_ref_def]
\\ first_x_assum (drule_then assume_tac) \\ gs [])
\\ gvs [perms_ok_state_def]
\\ first_x_assum (drule_then assume_tac) \\ gvs []
\\ gvs [perms_ok_ref_def, perms_ok_def, perms_ok_env_def]
\\ gvs [SF DNF_ss, find_recfun_ALOOKUP, EVERY_MEM, MEM_MAP,
PULL_EXISTS]
\\ drule_then assume_tac ALOOKUP_MEM
\\ qmatch_asmsub_abbrev_tac ‘MEM yyy funs’
\\ first_assum drule \\ simp_tac std_ss [Abbr ‘yyy’]
\\ strip_tac
\\ simp [build_rec_env_merge]
\\ Cases \\ simp [nsLookup_nsBind_compute]
\\ rw [] \\ gs [nsLookup_nsAppend_some, nsLookup_alist_to_ns_some,
nsLookup_alist_to_ns_none]
>- gvs [perms_ok_def]
>~ [‘ALOOKUP _ _ = NONE’] >- (
first_x_assum irule
\\ first_assum (irule_at Any)
\\ gs [ALOOKUP_NONE, MAP_MAP_o, o_DEF, LAMBDA_PROD, MEM_MAP,
EXISTS_PROD]
\\ first_assum (irule_at Any)
\\ first_assum (irule_at Any) \\ gs []
\\ strip_tac \\ gvs [])
>~ [‘ALOOKUP _ _ = SOME _’] >- (
drule_then assume_tac ALOOKUP_MEM
\\ gs [MEM_MAP, EXISTS_PROD, perms_ok_def, EVERY_MAP, EVERY_MEM]
\\ gs [perms_ok_env_def, MEM_MAP, EXISTS_PROD]
\\ rw [] \\ gs [FORALL_PROD, SF SFY_ss])
\\ first_x_assum irule
\\ first_assum (irule_at Any)
\\ gs [ALOOKUP_NONE, MAP_MAP_o, o_DEF, LAMBDA_PROD, MEM_MAP,
EXISTS_PROD]
\\ first_assum (irule_at Any)
\\ first_assum (irule_at Any) \\ gs [])))
\\ gvs [AllCaseEqs()]
\\ gvs [evaluate_def]
\\ Cases_on ‘op = Opapp’ \\ gs []
>- ((* Opapp *)
gvs [CaseEqs ["result", "prod", "bool", "option"],
Expand Down Expand Up @@ -754,6 +845,7 @@ Proof
\\ Cases_on ‘getOpClass op’ \\ gs[]
>~ [‘EvalOp’] >- (Cases_on ‘op’ \\ gs[])
>~ [‘FunApp’] >- (Cases_on ‘op’ \\ gs[])
>~ [‘Force’] >- (Cases_on ‘op’ \\ gs[])
>~ [‘Simple’] >- (
gvs [CaseEqs ["result", "prod", "bool", "option"]]
\\ drule_then (qspec_then ‘ps’ mp_tac) do_app_perms
Expand Down
2 changes: 1 addition & 1 deletion candle/standard/syntax/holSyntaxScript.sml
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ QED
Triviality LEAST_EXISTS:
(∃n:num. P n) ⇒ ∃k. P k ∧ ∀m. m < k ⇒ ¬(P m)
Proof
metis_tac[whileTheory.LEAST_EXISTS]
metis_tac[WhileTheory.LEAST_EXISTS]
QED

val VARIANT_PRIMES_def = new_specification
Expand Down
3 changes: 2 additions & 1 deletion characteristic/cfAppScript.sml
Original file line number Diff line number Diff line change
Expand Up @@ -613,7 +613,8 @@ Theorem do_app_io_events_ExtCall:
?s bs bs'. io_ev = IO_event (ExtCall s) bs bs'
Proof
strip_tac >>
gvs[DefnBase.one_line_ify NONE do_app_def,
gvs[oneline do_app_def,
oneline thunk_op_def, store_alloc_def,
AllCaseEqs(),ffiTheory.call_FFI_def] >>
pairarg_tac >> fs[]
QED
Expand Down
Loading