src/HOL/Tools/Sledgehammer/sledgehammer_isar.ML
changeset 45514 973bb7846505
parent 45063 b3b50d8b535a
child 45519 cd6e78cb6ee8
equal deleted inserted replaced
45513:25388cf06437 45514:973bb7846505
    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