85 ("verbose", "false"), |
85 ("verbose", "false"), |
86 ("overlord", "false"), |
86 ("overlord", "false"), |
87 ("blocking", "false"), |
87 ("blocking", "false"), |
88 ("type_enc", "smart"), |
88 ("type_enc", "smart"), |
89 ("sound", "false"), |
89 ("sound", "false"), |
|
90 ("lam_trans", "smart"), |
90 ("relevance_thresholds", "0.45 0.85"), |
91 ("relevance_thresholds", "0.45 0.85"), |
91 ("max_relevant", "smart"), |
92 ("max_relevant", "smart"), |
92 ("max_mono_iters", "3"), |
93 ("max_mono_iters", "3"), |
93 ("max_new_mono_instances", "200"), |
94 ("max_new_mono_instances", "200"), |
94 ("isar_proof", "false"), |
95 ("isar_proof", "false"), |
106 ("unsound", "sound"), |
107 ("unsound", "sound"), |
107 ("no_isar_proof", "isar_proof"), |
108 ("no_isar_proof", "isar_proof"), |
108 ("no_slicing", "slicing")] |
109 ("no_slicing", "slicing")] |
109 |
110 |
110 val params_for_minimize = |
111 val params_for_minimize = |
111 ["debug", "verbose", "overlord", "type_enc", "sound", "max_mono_iters", |
112 ["debug", "verbose", "overlord", "type_enc", "sound", "lam_trans", |
112 "max_new_mono_instances", "isar_proof", "isar_shrink_factor", "timeout", |
113 "max_mono_iters", "max_new_mono_instances", "isar_proof", |
113 "preplay_timeout"] |
114 "isar_shrink_factor", "timeout", "preplay_timeout"] |
114 |
115 |
115 val property_dependent_params = ["provers", "timeout"] |
116 val property_dependent_params = ["provers", "timeout"] |
116 |
117 |
117 fun is_known_raw_param s = |
118 fun is_known_raw_param s = |
118 AList.defined (op =) default_default_params s orelse |
119 AList.defined (op =) default_default_params s orelse |
135 | ["true"] => ["false"] |
136 | ["true"] => ["false"] |
136 | [] => ["false"] |
137 | [] => ["false"] |
137 | _ => value) |
138 | _ => value) |
138 | NONE => (name, value) |
139 | NONE => (name, value) |
139 |
140 |
140 (* "provers =" and "type_enc =" can be left out. The latter is a secret |
141 val any_type_enc = type_enc_from_string Sound "erased" |
141 feature. *) |
142 |
|
143 (* "provers =", "type_enc =", and "lam_trans" can be omitted. For the last two, |
|
144 this is a secret feature. *) |
142 fun normalize_raw_param ctxt = |
145 fun normalize_raw_param ctxt = |
143 unalias_raw_param |
146 unalias_raw_param |
144 #> (fn (name, value) => |
147 #> (fn (name, value) => |
145 if is_known_raw_param name then |
148 if is_known_raw_param name then |
146 (name, value) |
149 (name, value) |
147 else if is_prover_list ctxt name andalso null value then |
150 else if is_prover_list ctxt name andalso null value then |
148 ("provers", [name]) |
151 ("provers", [name]) |
149 else if can (type_enc_from_string Sound) name andalso null value then |
152 else if can (type_enc_from_string Sound) name andalso null value then |
150 ("type_enc", [name]) |
153 ("type_enc", [name]) |
|
154 else if can (trans_lams_from_string ctxt any_type_enc) name andalso |
|
155 null value then |
|
156 ("lam_trans", [name]) |
151 else |
157 else |
152 error ("Unknown parameter: " ^ quote name ^ ".")) |
158 error ("Unknown parameter: " ^ quote name ^ ".")) |
153 |
159 |
154 |
160 |
155 (* Ensures that type encodings such as "mono_simple?" and "poly_guards!!" are |
161 (* Ensures that type encodings such as "mono_simple?" and "poly_guards!!" are |
273 NONE |
279 NONE |
274 else case lookup_string "type_enc" of |
280 else case lookup_string "type_enc" of |
275 "smart" => NONE |
281 "smart" => NONE |
276 | s => (type_enc_from_string Sound s; SOME s) |
282 | s => (type_enc_from_string Sound s; SOME s) |
277 val sound = mode = Auto_Try orelse lookup_bool "sound" |
283 val sound = mode = Auto_Try orelse lookup_bool "sound" |
|
284 val lam_trans = lookup_string "lam_trans" |
278 val relevance_thresholds = lookup_real_pair "relevance_thresholds" |
285 val relevance_thresholds = lookup_real_pair "relevance_thresholds" |
279 val max_relevant = lookup_option lookup_int "max_relevant" |
286 val max_relevant = lookup_option lookup_int "max_relevant" |
280 val max_mono_iters = lookup_int "max_mono_iters" |
287 val max_mono_iters = lookup_int "max_mono_iters" |
281 val max_new_mono_instances = lookup_int "max_new_mono_instances" |
288 val max_new_mono_instances = lookup_int "max_new_mono_instances" |
282 val isar_proof = lookup_bool "isar_proof" |
289 val isar_proof = lookup_bool "isar_proof" |
288 if mode = Auto_Try then Time.zeroTime |
295 if mode = Auto_Try then Time.zeroTime |
289 else lookup_time "preplay_timeout" |> the_timeout |
296 else lookup_time "preplay_timeout" |> the_timeout |
290 val expect = lookup_string "expect" |
297 val expect = lookup_string "expect" |
291 in |
298 in |
292 {debug = debug, verbose = verbose, overlord = overlord, blocking = blocking, |
299 {debug = debug, verbose = verbose, overlord = overlord, blocking = blocking, |
293 provers = provers, relevance_thresholds = relevance_thresholds, |
300 provers = provers, type_enc = type_enc, sound = sound, |
|
301 lam_trans = lam_trans, relevance_thresholds = relevance_thresholds, |
294 max_relevant = max_relevant, max_mono_iters = max_mono_iters, |
302 max_relevant = max_relevant, max_mono_iters = max_mono_iters, |
295 max_new_mono_instances = max_new_mono_instances, type_enc = type_enc, |
303 max_new_mono_instances = max_new_mono_instances, isar_proof = isar_proof, |
296 sound = sound, isar_proof = isar_proof, |
|
297 isar_shrink_factor = isar_shrink_factor, slicing = slicing, |
304 isar_shrink_factor = isar_shrink_factor, slicing = slicing, |
298 timeout = timeout, preplay_timeout = preplay_timeout, expect = expect} |
305 timeout = timeout, preplay_timeout = preplay_timeout, expect = expect} |
299 end |
306 end |
300 |
307 |
301 fun get_params mode = extract_params mode o default_raw_params |
308 fun get_params mode = extract_params mode o default_raw_params |