22 open Sledgehammer_Fact_Preprocessor |
22 open Sledgehammer_Fact_Preprocessor |
23 open ATP_Manager |
23 open ATP_Manager |
24 open ATP_Systems |
24 open ATP_Systems |
25 open Sledgehammer_Fact_Minimizer |
25 open Sledgehammer_Fact_Minimizer |
26 |
26 |
27 structure K = OuterKeyword and P = OuterParse |
|
28 |
|
29 (** Proof method used in Isar proofs **) |
27 (** Proof method used in Isar proofs **) |
30 |
28 |
31 val neg_clausify_setup = |
29 val neg_clausify_setup = |
32 Method.setup @{binding neg_clausify} |
30 Method.setup @{binding neg_clausify} |
33 (Scan.succeed (SIMPLE_METHOD' o neg_clausify_tac)) |
31 (Scan.succeed (SIMPLE_METHOD' o neg_clausify_tac)) |
34 "conversion of goal to negated conjecture clauses" |
32 "conversion of goal to negated conjecture clauses" |
35 |
33 |
36 (** Attribute for converting a theorem into clauses **) |
34 (** Attribute for converting a theorem into clauses **) |
37 |
35 |
38 val parse_clausify_attribute : attribute context_parser = |
36 val parse_clausify_attribute : attribute context_parser = |
39 Scan.lift OuterParse.nat |
37 Scan.lift Parse.nat |
40 >> (fn i => Thm.rule_attribute (fn context => fn th => |
38 >> (fn i => Thm.rule_attribute (fn context => fn th => |
41 let val thy = Context.theory_of context in |
39 let val thy = Context.theory_of context in |
42 Meson.make_meta_clause (nth (cnf_axiom thy th) i) |
40 Meson.make_meta_clause (nth (cnf_axiom thy th) i) |
43 end)) |
41 end)) |
44 |
42 |
319 | params => |
317 | params => |
320 (map check_raw_param params; |
318 (map check_raw_param params; |
321 params |> map string_for_raw_param |
319 params |> map string_for_raw_param |
322 |> sort_strings |> cat_lines))))) |
320 |> sort_strings |> cat_lines))))) |
323 |
321 |
324 val parse_key = Scan.repeat1 P.typ_group >> space_implode " " |
322 val parse_key = Scan.repeat1 Parse.typ_group >> space_implode " " |
325 val parse_value = Scan.repeat1 P.xname |
323 val parse_value = Scan.repeat1 Parse.xname |
326 val parse_param = parse_key -- Scan.optional (P.$$$ "=" |-- parse_value) [] |
324 val parse_param = parse_key -- Scan.optional (Parse.$$$ "=" |-- parse_value) [] |
327 val parse_params = Scan.optional (Args.bracks (P.list parse_param)) [] |
325 val parse_params = Scan.optional (Args.bracks (Parse.list parse_param)) [] |
328 val parse_fact_refs = |
326 val parse_fact_refs = |
329 Scan.repeat1 (Scan.unless (P.name -- Args.colon) |
327 Scan.repeat1 (Scan.unless (Parse.name -- Args.colon) |
330 (P.xname -- Scan.option Attrib.thm_sel) |
328 (Parse.xname -- Scan.option Attrib.thm_sel) |
331 >> (fn (name, interval) => |
329 >> (fn (name, interval) => |
332 Facts.Named ((name, Position.none), interval))) |
330 Facts.Named ((name, Position.none), interval))) |
333 val parse_relevance_chunk = |
331 val parse_relevance_chunk = |
334 (Args.add |-- Args.colon |-- parse_fact_refs >> add_to_relevance_override) |
332 (Args.add |-- Args.colon |-- parse_fact_refs >> add_to_relevance_override) |
335 || (Args.del |-- Args.colon |-- parse_fact_refs |
333 || (Args.del |-- Args.colon |-- parse_fact_refs |
338 val parse_relevance_override = |
336 val parse_relevance_override = |
339 Scan.optional (Args.parens (Scan.repeat parse_relevance_chunk |
337 Scan.optional (Args.parens (Scan.repeat parse_relevance_chunk |
340 >> merge_relevance_overrides)) |
338 >> merge_relevance_overrides)) |
341 (add_to_relevance_override []) |
339 (add_to_relevance_override []) |
342 val parse_sledgehammer_command = |
340 val parse_sledgehammer_command = |
343 (Scan.optional P.short_ident runN -- parse_params -- parse_relevance_override |
341 (Scan.optional Parse.short_ident runN -- parse_params -- parse_relevance_override |
344 -- Scan.option P.nat) #>> sledgehammer_trans |
342 -- Scan.option Parse.nat) #>> sledgehammer_trans |
345 val parse_sledgehammer_params_command = |
343 val parse_sledgehammer_params_command = |
346 parse_params #>> sledgehammer_params_trans |
344 parse_params #>> sledgehammer_params_trans |
347 |
345 |
348 val _ = |
346 val _ = |
349 OuterSyntax.improper_command sledgehammerN |
347 Outer_Syntax.improper_command sledgehammerN |
350 "search for first-order proof using automatic theorem provers" K.diag |
348 "search for first-order proof using automatic theorem provers" Keyword.diag |
351 parse_sledgehammer_command |
349 parse_sledgehammer_command |
352 val _ = |
350 val _ = |
353 OuterSyntax.command sledgehammer_paramsN |
351 Outer_Syntax.command sledgehammer_paramsN |
354 "set and display the default parameters for Sledgehammer" K.thy_decl |
352 "set and display the default parameters for Sledgehammer" Keyword.thy_decl |
355 parse_sledgehammer_params_command |
353 parse_sledgehammer_params_command |
356 |
354 |
357 val setup = |
355 val setup = |
358 neg_clausify_setup |
356 neg_clausify_setup |
359 #> clausify_setup |
357 #> clausify_setup |