@@ -20,32 +20,79 @@ Inductive evaluate_ctxt:
20
20
(evaluate_list ck env s1 es (s2, Rval vs2) ∧
21
21
do_opapp (REVERSE vs2 ++ [v] ++ vs1) = SOME (env',e) ∧
22
22
(ck ⇒ s2.clock ≠ 0 ) ∧
23
+ (opClass op FunApp) ∧
23
24
evaluate ck env' (if ck then s2 with clock := s2.clock - 1 else s2) e bv
24
- ⇒ evaluate_ctxt ck env s1 (Capp Opapp vs1 () es) v bv) ∧
25
+ ⇒ evaluate_ctxt ck env s1 (Capp op vs1 () es) v bv) ∧
25
26
26
27
(evaluate_list T env s1 es (s2, Rval vs2) ∧
27
28
do_opapp (REVERSE vs2 ++ [v] ++ vs1) = SOME (env',e) ∧
28
- s2.clock = 0
29
- ⇒ evaluate_ctxt T env s1 (Capp Opapp vs1 () es) v
29
+ s2.clock = 0 ∧
30
+ (opClass op FunApp)
31
+ ⇒ evaluate_ctxt T env s1 (Capp op vs1 () es) v
30
32
(s2, Rerr (Rabort Rtimeout_error))) ∧
31
33
32
34
(evaluate_list ck env s1 es (s2, Rval vs2) ∧
33
- do_opapp (REVERSE vs2 ++ [v] ++ vs1) = NONE
34
- ⇒ evaluate_ctxt ck env s1 (Capp Opapp vs1 () es) v
35
+ (do_opapp (REVERSE vs2 ++ [v] ++ vs1) = NONE ) ∧
36
+ (opClass op FunApp)
37
+ ⇒ evaluate_ctxt ck env s1 (Capp op vs1 () es) v
35
38
(s2, Rerr (Rabort Rtype_error))) ∧
36
39
37
- (op ≠ Opapp ∧
40
+ (opClass op Simple ∧
38
41
evaluate_list ck env s1 es (s2, Rval vs2) ∧
39
42
do_app (s2.refs,s2.ffi) op (REVERSE vs2 ++ [v] ++ vs1) =
40
43
SOME ((new_refs, new_ffi) ,res)
41
44
⇒ evaluate_ctxt ck env s1 (Capp op vs1 () es) v
42
45
(s2 with <| ffi := new_ffi; refs := new_refs |>, res)) ∧
43
46
44
- (op ≠ Opapp ∧
47
+ (opClass op Icing ∧
48
+ evaluate_list ck env s1 es (s2, Rval vs2) ∧
49
+ do_app (s2.refs,s2.ffi) op (REVERSE vs2 ++ [v] ++ vs1) =
50
+ SOME ((new_refs, new_ffi) ,vFp) ∧
51
+ s2.fp_state.canOpt ≠ FPScope Opt ∧
52
+ compress_if_bool op vFp = res
53
+ ⇒ evaluate_ctxt ck env s1 (Capp op vs1 () es) v
54
+ (s2 with <| ffi := new_ffi; refs := new_refs |>, res)) ∧
55
+
56
+ (opClass op Icing ∧
57
+ evaluate_list ck env s1 es (s2, Rval vs2) ∧
58
+ do_app (s2.refs,s2.ffi) op (REVERSE vs2 ++ [v] ++ vs1) =
59
+ SOME ((new_refs, new_ffi) ,vFp) ∧
60
+ s2.fp_state.canOpt = FPScope Opt ∧
61
+ do_fprw vFp (s2.fp_state.opts 0 ) s2.fp_state.rws = NONE ∧
62
+ compress_if_bool op vFp = res
63
+ ⇒ evaluate_ctxt ck env s1 (Capp op vs1 () es) v
64
+ ((shift_fp_opts s2) with <| ffi := new_ffi; refs := new_refs |>, res)) ∧
65
+
66
+ (opClass op Icing ∧
67
+ evaluate_list ck env s1 es (s2, Rval vs2) ∧
68
+ do_app (s2.refs,s2.ffi) op (REVERSE vs2 ++ [v] ++ vs1) =
69
+ SOME ((new_refs, new_ffi) ,vFp) ∧
70
+ s2.fp_state.canOpt = FPScope Opt ∧
71
+ do_fprw vFp (s2.fp_state.opts 0 ) s2.fp_state.rws = SOME rOpt ∧
72
+ compress_if_bool op rOpt = res
73
+ ⇒ evaluate_ctxt ck env s1 (Capp op vs1 () es) v
74
+ ((shift_fp_opts s2) with <| ffi := new_ffi; refs := new_refs |>, res)) ∧
75
+
76
+ (opClass op Reals ∧
77
+ evaluate_list ck env s1 es (s2, Rval vs2) ∧
78
+ do_app (s2.refs,s2.ffi) op (REVERSE vs2 ++ [v] ++ vs1) =
79
+ SOME ((new_refs, new_ffi) ,res) ∧
80
+ s2.fp_state.real_sem
81
+ ⇒ evaluate_ctxt ck env s1 (Capp op vs1 () es) v
82
+ (s2 with <| ffi := new_ffi; refs := new_refs |>, res)) ∧
83
+
84
+ (opClass op Reals ∧
85
+ evaluate_list ck env s1 es (s2, Rval vs2) ∧
86
+ ~s2.fp_state.real_sem
87
+ ⇒ evaluate_ctxt ck env s1 (Capp op vs1 () es) v
88
+ (shift_fp_opts s2, Rerr (Rabort Rtype_error))) ∧
89
+
90
+ ((~opClass op FunApp) ∧
91
+ (opClass op Reals ⇒ s2.fp_state.real_sem) ∧
45
92
evaluate_list ck env s1 es (s2, Rval vs2) ∧
46
93
do_app (s2.refs, s2.ffi) op (REVERSE vs2 ++ [v] ++ vs1) = NONE
47
94
⇒ evaluate_ctxt ck env s1 (Capp op vs1 () es) v
48
- (s2, Rerr (Rabort Rtype_error))) ∧
95
+ (s2, Rerr (Rabort Rtype_error))) ∧
49
96
50
97
(evaluate_list ck env s es (s', Rerr err)
51
98
⇒ evaluate_ctxt ck env s (Capp op vs () es) v (s', Rerr err)) ∧
@@ -97,7 +144,15 @@ Inductive evaluate_ctxt:
97
144
98
145
evaluate_ctxt ck env s (Ctannot () t) v (s, Rval v) ∧
99
146
100
- evaluate_ctxt ck env s (Clannot () l) v (s, Rval v)
147
+ evaluate_ctxt ck env s (Clannot () l) v (s, Rval v) ∧
148
+
149
+ (oldSc = Strict ⇒
150
+ evaluate_ctxt ck env s (Coptimise oldSc sc ()) v (s with fp_state := s.fp_state with canOpt := oldSc,
151
+ Rval (HD (do_fpoptimise sc [v])))) ∧
152
+
153
+ (oldSc ≠ Strict ⇒
154
+ evaluate_ctxt ck env s (Coptimise oldSc sc ()) v (s with fp_state := s.fp_state with canOpt := oldSc,
155
+ Rval (HD (do_fpoptimise sc [v]))))
101
156
End
102
157
103
158
Inductive evaluate_ctxts:
@@ -108,9 +163,13 @@ Inductive evaluate_ctxts:
108
163
⇒ evaluate_ctxts ck s1 ((c,env)::cs) (Rval v) bv) ∧
109
164
110
165
(evaluate_ctxts ck s cs (Rerr err) bv ∧
111
- ((∀pes. c ≠ Chandle () pes) ∨ (∀v. err ≠ Rraise v))
166
+ ((∀pes. c ≠ Chandle () pes) ∨ (∀v. err ≠ Rraise v)) ∧
167
+ (∀ oldSc sc. c ≠ Coptimise oldSc sc ())
112
168
⇒ evaluate_ctxts ck s ((c,env)::cs) (Rerr err) bv) ∧
113
169
170
+ (evaluate_ctxts ck (s with fp_state := s.fp_state with canOpt := oldSc) cs (Rerr err) bv ⇒
171
+ evaluate_ctxts ck s ((Coptimise oldSc sc (),env)::cs) (Rerr err) bv) ∧
172
+
114
173
(¬can_pmatch_all env.c s.refs (MAP FST pes) v ∧
115
174
evaluate_ctxts ck s cs (Rerr (Rabort Rtype_error)) res2
116
175
⇒ evaluate_ctxts ck s ((Chandle () pes,env)::cs) (Rerr (Rraise v)) res2) ∧
0 commit comments