Skip to content

Commit e0f8aef

Browse files
authored
Merge pull request #1210 from CakeML/revisedFloats
2 parents b68e46f + bbe0b2d commit e0f8aef

File tree

211 files changed

+2359
-32182
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

211 files changed

+2359
-32182
lines changed

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ config_enc_str.txt
2222
# Developer generated executables
2323
developers/readme_gen
2424
developers/lint_build_dirs
25+
developers/bin
2526
semantics/addancs
2627
tutorial/solutions/make_ex
2728
examples/vipr/compilation/cake_vipr
@@ -74,9 +75,13 @@ compiler/benchmarks/cakeml/cakemlc
7475
compiler/benchmarks/cakeml/cake_O4_*
7576
compiler/benchmarks/cakeml_benchmarks/sml/mlton_*
7677
compiler/benchmarks/cakeml_benchmarks/sml/polyc_*
78+
compiler/benchmarks/cakeml_benchmarks/sml/mosml_*
7779
compiler/benchmarks/cakeml_benchmarks/sml/sml_*
80+
compiler/benchmarks/mlton_benchmarks/sml/mlton_*
81+
compiler/benchmarks/mlton_benchmarks/sml/mosml_*
7882
compiler/benchmarks/*.dat
7983
compiler/benchmarks/*.eps
84+
compiler/benchmarks/*.html
8085

8186
#sexp files generated by Icing
8287
icing/examples/output/*/*.sexp.cml

README.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,6 @@ particular:
6666
- a list of how CakeML differs from SML and OCaml, and,
6767
- a number of small CakeML code examples.
6868

69-
[icing](icing):
70-
Main implementation directory for the RealCake development, presented in
71-
"Verified Compilation and Optimization of Floating-Point Programs"
72-
7369
[misc](misc):
7470
Auxiliary files providing glue between a standard HOL installation
7571
and what we want to use for CakeML development.

basis/DoubleProgScript.sml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -250,20 +250,20 @@ End
250250

251251
val _ = append_prog
252252
“[Dlet unknown_loc (Pvar "fma") (Fun "x" (Fun "y" (Fun "z"
253-
(FpOptimise NoOpt (App (FP_top FP_Fma) [Var (Short "z"); Var (Short "x");
254-
Var (Short "y")])))))]”
253+
(App (FP_top FP_Fma) [Var (Short "z"); Var (Short "x");
254+
Var (Short "y")]))))]”
255255

256256
(* --------------------------------------------------------------------------
257257
* Binary operations
258258
* ------------------------------------------------------------------------- *)
259259

260260
fun binop s b = “[Dlet unknown_loc (Pvar ^s)
261-
(Fun "x" (Fun "y" (FpOptimise NoOpt (App (FP_bop ^b) [Var (Short
262-
"x"); Var (Short "y")]))))]”
261+
(Fun "x" (Fun "y" (App (FP_bop ^b) [Var (Short
262+
"x"); Var (Short "y")])))]”
263263

264264
fun cmp s b = “[Dlet unknown_loc (Pvar ^s)
265-
(Fun "x" (Fun "y" (FpOptimise NoOpt (App (FP_cmp ^b) [Var (Short
266-
"x"); Var (Short "y")]))))]”
265+
(Fun "x" (Fun "y" (App (FP_cmp ^b) [Var (Short
266+
"x"); Var (Short "y")])))]”
267267

268268
val _ = append_prog $ binop “"+"” “FP_Add”;
269269
val _ = append_prog $ binop “"-"” “FP_Sub”;
@@ -281,7 +281,7 @@ val _ = append_prog $ cmp “"="” “FP_Equal”;
281281
* ------------------------------------------------------------------------- *)
282282

283283
fun monop s b = “[Dlet unknown_loc (Pvar ^s)
284-
(Fun "x" (FpOptimise NoOpt (App (FP_uop ^b) [Var (Short "x")])))]”
284+
(Fun "x" (App (FP_uop ^b) [Var (Short "x")]))]”
285285

286286
val _ = append_prog $ monop “"abs"” “FP_Abs”;
287287
val _ = append_prog $ monop “"sqrt"” “FP_Sqrt”;

candle/prover/ast_extrasScript.sml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,6 @@ Definition every_exp_def[simp]:
5050
(every_exp f (Lannot e l) <=>
5151
f (Lannot e l) /\
5252
every_exp f e) /\
53-
(every_exp f (FpOptimise fpopt e) <=>
54-
f (FpOptimise fpopt e) /\
55-
every_exp f e) /\
5653
(every_exp f e <=> f e)
5754
Termination
5855
WF_REL_TAC `measure (exp_size o SND)`
@@ -133,8 +130,7 @@ Definition freevars_def[simp]:
133130
{Short fn; Short vn}) f)) ∪
134131
(freevars x DIFF set (MAP (Short o FST) f))) ∧
135132
freevars (Tannot x t) = freevars x ∧
136-
freevars (Lannot x l) = freevars x ∧
137-
freevars (FpOptimise fpopt e) = freevars e
133+
freevars (Lannot x l) = freevars x
138134
End
139135

140136
(* Partial applications of closures.

candle/prover/candle_basis_evaluateScript.sml

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -233,19 +233,6 @@ Proof
233233
\\ first_assum (irule_at Any)
234234
\\ first_x_assum irule \\ gs []
235235
\\ gs [post_state_ok_def]))
236-
>- (Cases_on ‘op’ \\ gs[])
237-
>- (Cases_on ‘op’ \\ gs[])
238-
QED
239-
240-
Theorem evaluate_basis_v_ok_FpOptimise:
241-
^(get_goal "FpOptimise")
242-
Proof
243-
rw [evaluate_def]
244-
\\ gvs [CaseEqs ["bool", "option", "prod", "semanticPrimitives$result"], SF SFY_ss]
245-
>- (irule EVERY_v_ok_do_fpoptimise \\ first_assum irule \\ gs[simple_exp_def])
246-
>- (Cases_on ‘e'’ \\ gs[] \\ first_assum irule \\ gs[simple_exp_def])
247-
>- (irule EVERY_v_ok_do_fpoptimise \\ first_assum irule \\ gs[simple_exp_def])
248-
>- (Cases_on ‘e'’ \\ gs[] \\ first_assum irule \\ gs[simple_exp_def])
249236
QED
250237

251238
Theorem evaluate_basis_v_ok_decs_Nil:
@@ -401,7 +388,6 @@ Proof
401388
\\ rewrite_tac [evaluate_basis_v_ok_Nil, evaluate_basis_v_ok_Cons,
402389
evaluate_basis_v_ok_Lit, evaluate_basis_v_ok_Con,
403390
evaluate_basis_v_ok_Var, evaluate_basis_v_ok_App,
404-
evaluate_basis_v_ok_FpOptimise,
405391
evaluate_basis_v_ok_decs_Nil,
406392
evaluate_basis_v_ok_decs_Cons,
407393
evaluate_basis_v_ok_decs_Dlet,

candle/prover/candle_prover_evaluateScript.sml

Lines changed: 0 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -566,22 +566,6 @@ Proof
566566
\\ first_assum (irule_at Any)
567567
\\ simp [v_ok_def])
568568
\\ Cases_on ‘∃cmp. op = FP_cmp cmp’ \\ gs []
569-
>- (
570-
rw [do_app_cases] \\ gs [SF SFY_ss]
571-
\\ first_assum (irule_at Any)
572-
\\ simp [Boolv_def]
573-
\\ rw [v_ok_def])
574-
\\ Cases_on ‘∃bop. op = Real_bop bop’ \\ gs []
575-
>- (
576-
rw [do_app_cases] \\ gs [SF SFY_ss]
577-
\\ first_assum (irule_at Any)
578-
\\ simp [v_ok_def])
579-
\\ Cases_on ‘∃uop. op = Real_uop uop’ \\ gs []
580-
>- (
581-
rw [do_app_cases] \\ gs [SF SFY_ss]
582-
\\ first_assum (irule_at Any)
583-
\\ simp [v_ok_def])
584-
\\ Cases_on ‘∃cmp. op = Real_cmp cmp’ \\ gs []
585569
>- (
586570
rw [do_app_cases] \\ gs [SF SFY_ss]
587571
\\ first_assum (irule_at Any)
@@ -647,11 +631,6 @@ Proof
647631
\\ first_assum (irule_at Any)
648632
\\ simp [v_ok_def])
649633
\\ Cases_on ‘op = FpToWord’ \\ gs[]
650-
>- (
651-
rw[do_app_cases] \\ gs [SF SFY_ss]
652-
\\ first_assum (irule_at Any)
653-
\\ simp [v_ok_def])
654-
\\ Cases_on ‘op = RealFromFP’ \\ gs[]
655634
>- (
656635
rw[do_app_cases] \\ gs [SF SFY_ss]
657636
\\ first_assum (irule_at Any)
@@ -675,30 +654,6 @@ Proof
675654
\\ strip_tac \\ gs []
676655
\\ rpt CASE_TAC \\ gs []
677656
\\ first_assum (irule_at Any) \\ gs [])
678-
>~ [‘Icing’] >- (
679-
gvs [AllCaseEqs()]
680-
\\ first_x_assum (drule_all_then strip_assume_tac) \\ gs [state_ok_def]
681-
\\ rename1 ‘EVERY (v_ok ctxt1)’
682-
\\ qexists_tac ‘ctxt1’ \\ gs [astTheory.isFpBool_def]
683-
\\ drule do_app_ok \\ gs []
684-
\\ disch_then drule_all \\ simp []
685-
\\ strip_tac \\ gs []
686-
\\ rpt CASE_TAC \\ gs[do_fprw_def] \\ rveq
687-
\\ first_assum (irule_at Any)
688-
\\ gs [shift_fp_opts_def, Boolv_def,
689-
CaseEqs["option","semanticPrimitives$result","list", "v"]]
690-
\\ rveq \\ gs[v_ok_def]
691-
\\ COND_CASES_TAC \\ gs[v_ok_def])
692-
>~ [‘Reals’] >- (
693-
gvs [AllCaseEqs()]
694-
\\ first_x_assum (drule_all_then strip_assume_tac) \\ gs [state_ok_def]
695-
\\ rename1 ‘EVERY (v_ok ctxt1)’
696-
\\ qexists_tac ‘ctxt1’ \\ gs [shift_fp_opts_def]
697-
\\ drule do_app_ok \\ gs []
698-
\\ disch_then drule_all \\ simp []
699-
\\ strip_tac \\ gs []
700-
\\ rpt CASE_TAC \\ gs []
701-
\\ first_assum (irule_at Any) \\ gs [])
702657
QED
703658

704659
Theorem evaluate_v_ok_Opapp:
@@ -889,125 +844,6 @@ Proof
889844
rw [evaluate_def]
890845
QED
891846

892-
Theorem STRING_TYPE_do_fpoptimise:
893-
STRING_TYPE m v ⇒
894-
do_fpoptimise annot [v] = [v]
895-
Proof
896-
Cases_on ‘m’
897-
\\ gs[ml_translatorTheory.STRING_TYPE_def, do_fpoptimise_def]
898-
QED
899-
900-
Theorem LIST_TYPE_TYPE_TYPE_do_fpoptimise:
901-
∀ l v annot.
902-
(∀ ty v. MEM ty l ⇒ TYPE_TYPE ty v ⇒ do_fpoptimise annot [v] = [v]) ∧
903-
LIST_TYPE TYPE_TYPE l v ⇒
904-
do_fpoptimise annot [v] = [v]
905-
Proof
906-
Induct_on ‘l’ \\ rw[ml_translatorTheory.LIST_TYPE_def]
907-
\\ gs [do_fpoptimise_def]
908-
\\ last_x_assum irule \\ metis_tac[]
909-
QED
910-
911-
Theorem TYPE_TYPE_do_fpoptimise:
912-
∀ ty v. TYPE_TYPE ty v ⇒ do_fpoptimise annot [v] = [v]
913-
Proof
914-
ho_match_mp_tac TYPE_TYPE_ind \\ rw[TYPE_TYPE_def]
915-
\\ gs[do_fpoptimise_def]
916-
\\ imp_res_tac STRING_TYPE_do_fpoptimise \\ gs[]
917-
\\ drule LIST_TYPE_TYPE_TYPE_do_fpoptimise \\ gs[]
918-
QED
919-
920-
Theorem TERM_TYPE_do_fpoptimise:
921-
∀ v ty. TERM_TYPE ty v ⇒ do_fpoptimise annot [v] = [v]
922-
Proof
923-
Induct_on ‘ty’ \\ rw[TERM_TYPE_def] \\ res_tac \\ gs[do_fpoptimise_def]
924-
\\ imp_res_tac TYPE_TYPE_do_fpoptimise
925-
\\ imp_res_tac STRING_TYPE_do_fpoptimise \\ gs []
926-
QED
927-
928-
Theorem LIST_TYPE_TERM_TYPE_do_fpoptimise:
929-
∀ l v annot. LIST_TYPE TERM_TYPE l v ⇒ do_fpoptimise annot [v] = [v]
930-
Proof
931-
Induct_on ‘l’ \\ gs[ml_translatorTheory.LIST_TYPE_def, do_fpoptimise_def]
932-
\\ rpt strip_tac \\ rveq
933-
\\ imp_res_tac TERM_TYPE_do_fpoptimise
934-
\\ gs[do_fpoptimise_def]
935-
QED
936-
937-
Theorem THM_TYPE_do_fpoptimise:
938-
∀ v ty. THM_TYPE ty v ⇒ do_fpoptimise annot [v] = [v]
939-
Proof
940-
Induct_on ‘ty’ \\ rw [THM_TYPE_def]
941-
\\ imp_res_tac TERM_TYPE_do_fpoptimise
942-
\\ imp_res_tac LIST_TYPE_TERM_TYPE_do_fpoptimise
943-
\\ gs [do_fpoptimise_def]
944-
QED
945-
946-
Theorem inferred_do_fpoptimise:
947-
∀ ctxt v.
948-
inferred ctxt v ⇒
949-
∀ xs vs annot.
950-
v = Conv (SOME xs) vs ⇒
951-
inferred ctxt (Conv (SOME xs) (do_fpoptimise annot vs))
952-
Proof
953-
ho_match_mp_tac inferred_ind \\ rw[]
954-
>- gs[kernel_funs_def]
955-
>- (imp_res_tac TYPE_TYPE_do_fpoptimise \\ gs [do_fpoptimise_def]
956-
\\ gs[inferred_cases, SF SFY_ss])
957-
>- (imp_res_tac TERM_TYPE_do_fpoptimise \\ gs [do_fpoptimise_def]
958-
\\ gs [inferred_cases, SF SFY_ss])
959-
>- (imp_res_tac THM_TYPE_do_fpoptimise \\ gs [do_fpoptimise_def]
960-
\\ gs [inferred_cases, SF SFY_ss])
961-
QED
962-
963-
Theorem EVERY_v_ok_do_fpoptimise:
964-
∀ annot vs ctxt.
965-
EVERY (v_ok ctxt) vs ⇒
966-
EVERY (v_ok ctxt) (do_fpoptimise annot vs)
967-
Proof
968-
ho_match_mp_tac do_fpoptimise_ind \\ rpt conj_tac
969-
\\ gs[do_fpoptimise_def, v_ok_def] \\ rpt strip_tac
970-
\\ gs[] \\ Cases_on ‘st’ \\ gs[]
971-
\\ imp_res_tac kernel_vals_Conv \\ simp[]
972-
\\ qpat_x_assum ‘kernel_vals _ _’ $ assume_tac o SIMP_RULE std_ss [Once v_ok_cases]
973-
\\ gs[]
974-
>- (simp [Once v_ok_cases]
975-
\\ drule inferred_do_fpoptimise \\ gs[])
976-
\\ Cases_on ‘f’ \\ gs[do_partial_app_def, CaseEq"exp"]
977-
QED
978-
979-
Theorem evaluate_v_ok_FpOptimise:
980-
^(get_goal "FpOptimise")
981-
Proof
982-
rw[evaluate_def] \\ gvs [AllCaseEqs()]
983-
\\ ‘st with fp_state := st.fp_state = st’ by gs [state_component_equality]
984-
\\ gvs []
985-
>- (
986-
last_x_assum drule \\ gs[safe_exp_def, state_ok_def]
987-
\\ strip_tac \\ gs[]
988-
\\ first_assum $ irule_at Any \\ gs[] \\ conj_tac
989-
>- metis_tac[]
990-
\\ irule EVERY_v_ok_do_fpoptimise \\ gs[])
991-
>- (last_x_assum drule \\ gs[safe_exp_def, state_ok_def])
992-
>- (
993-
‘state_ok ctxt (st with fp_state := st.fp_state with canOpt := FPScope annot)’
994-
by (gs[state_ok_def] \\ metis_tac[])
995-
\\ last_x_assum drule \\ gs[safe_exp_def]
996-
\\ strip_tac \\ gs[]
997-
\\ ‘state_ok ctxt'' (st' with fp_state := st'.fp_state with canOpt := st.fp_state.canOpt)’
998-
by (gs[state_ok_def] \\ metis_tac[])
999-
\\ first_assum $ irule_at Any \\ gs[]
1000-
\\ irule EVERY_v_ok_do_fpoptimise \\ gs[])
1001-
>- (
1002-
‘state_ok ctxt (st with fp_state := st.fp_state with canOpt := FPScope annot)’
1003-
by (gs[state_ok_def] \\ metis_tac[])
1004-
\\ last_x_assum drule \\ gs[safe_exp_def]
1005-
\\ strip_tac \\ gs[]
1006-
\\ Cases_on ‘e'’ \\ gs[]
1007-
\\ first_assum $ irule_at Any \\ gs[]
1008-
\\ gs[state_ok_def] \\ metis_tac[])
1009-
QED
1010-
1011847
Theorem evaluate_v_ok_pmatch_Nil:
1012848
^(get_goal "[]:(pat # exp) list")
1013849
Proof
@@ -1215,7 +1051,6 @@ Proof
12151051
evaluate_v_ok_If, evaluate_v_ok_Mat,
12161052
evaluate_v_ok_Let, evaluate_v_ok_Letrec,
12171053
evaluate_v_ok_Tannot, evaluate_v_ok_Lannot,
1218-
evaluate_v_ok_FpOptimise,
12191054
evaluate_v_ok_pmatch_Nil, evaluate_v_ok_pmatch_Cons,
12201055
evaluate_v_ok_decs_Nil, evaluate_v_ok_decs_Cons,
12211056
evaluate_v_ok_decs_Dlet, evaluate_v_ok_decs_Dletrec,

candle/prover/candle_prover_invScript.sml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,6 @@ Inductive v_ok:
107107
[~Lit:]
108108
(∀ctxt lit.
109109
v_ok ctxt (Litv lit))
110-
[~FP_WordTree:]
111-
(∀ ctxt fp.
112-
v_ok ctxt (FP_WordTree fp))
113-
[~FP_BoolTree:]
114-
(∀ ctxt fp.
115-
v_ok ctxt (FP_BoolTree fp))
116-
[~Real:]
117-
(∀ ctxt r.
118-
v_ok ctxt (Real r))
119110
[~Loc:]
120111
(∀ctxt loc b.
121112
loc ∉ kernel_locs ⇒
@@ -174,9 +165,6 @@ Theorem v_ok_def =
174165
“v_ok ctxt (Recclosure env f n)”,
175166
“v_ok ctxt (Vectorv vs)”,
176167
“v_ok ctxt (Litv lit)”,
177-
“v_ok ctxt (FP_WordTree fp)”,
178-
“v_ok ctxt (FP_BoolTree fp)”,
179-
“v_ok ctxt (Real r)”,
180168
“v_ok ctxt (Loc b loc)”,
181169
“v_ok ctxt (Env env ns)”]
182170
|> map (SIMP_CONV (srw_ss()) [Once v_ok_cases])

0 commit comments

Comments
 (0)