23 val depth_prolog_tac: thm list -> tactic |
23 val depth_prolog_tac: thm list -> tactic |
24 val gocls: thm list -> thm list |
24 val gocls: thm list -> thm list |
25 val skolemize_prems_tac: thm list -> int -> tactic |
25 val skolemize_prems_tac: thm list -> int -> tactic |
26 val MESON: (thm list -> thm list) -> (thm list -> tactic) -> int -> tactic |
26 val MESON: (thm list -> thm list) -> (thm list -> tactic) -> int -> tactic |
27 val best_meson_tac: (thm -> int) -> int -> tactic |
27 val best_meson_tac: (thm -> int) -> int -> tactic |
28 val safe_best_meson_tac: int -> tactic |
28 val safe_best_meson_tac: claset -> int -> tactic |
29 val depth_meson_tac: int -> tactic |
29 val depth_meson_tac: int -> tactic |
30 val prolog_step_tac': thm list -> int -> tactic |
30 val prolog_step_tac': thm list -> int -> tactic |
31 val iter_deepen_prolog_tac: thm list -> tactic |
31 val iter_deepen_prolog_tac: thm list -> tactic |
32 val iter_deepen_meson_tac: thm list -> int -> tactic |
32 val iter_deepen_meson_tac: thm list -> int -> tactic |
33 val make_meta_clause: thm -> thm |
33 val make_meta_clause: thm -> thm |
34 val make_meta_clauses: thm list -> thm list |
34 val make_meta_clauses: thm list -> thm list |
35 val meson_claset_tac: thm list -> claset -> int -> tactic |
35 val meson_claset_tac: thm list -> claset -> int -> tactic |
36 val meson_tac: int -> tactic |
36 val meson_tac: claset -> int -> tactic |
37 val negate_head: thm -> thm |
37 val negate_head: thm -> thm |
38 val select_literal: int -> thm -> thm |
38 val select_literal: int -> thm -> thm |
39 val skolemize_tac: int -> tactic |
39 val skolemize_tac: int -> tactic |
40 val setup: Context.theory -> Context.theory |
40 val setup: Context.theory -> Context.theory |
41 end |
41 end |
587 THEN_BEST_FIRST (resolve_tac (gocls cls) 1) |
587 THEN_BEST_FIRST (resolve_tac (gocls cls) 1) |
588 (has_fewer_prems 1, sizef) |
588 (has_fewer_prems 1, sizef) |
589 (prolog_step_tac (make_horns cls) 1)); |
589 (prolog_step_tac (make_horns cls) 1)); |
590 |
590 |
591 (*First, breaks the goal into independent units*) |
591 (*First, breaks the goal into independent units*) |
592 val safe_best_meson_tac = |
592 fun safe_best_meson_tac cs = |
593 SELECT_GOAL (TRY (CLASET safe_tac) THEN |
593 SELECT_GOAL (TRY (safe_tac cs) THEN |
594 TRYALL (best_meson_tac size_of_subgoals)); |
594 TRYALL (best_meson_tac size_of_subgoals)); |
595 |
595 |
596 (** Depth-first search version **) |
596 (** Depth-first search version **) |
597 |
597 |
598 val depth_meson_tac = |
598 val depth_meson_tac = |
632 ); |
632 ); |
633 |
633 |
634 fun meson_claset_tac ths cs = |
634 fun meson_claset_tac ths cs = |
635 SELECT_GOAL (TRY (safe_tac cs) THEN TRYALL (iter_deepen_meson_tac ths)); |
635 SELECT_GOAL (TRY (safe_tac cs) THEN TRYALL (iter_deepen_meson_tac ths)); |
636 |
636 |
637 val meson_tac = CLASET' (meson_claset_tac []); |
637 val meson_tac = meson_claset_tac []; |
638 |
638 |
639 |
639 |
640 (**** Code to support ordinary resolution, rather than Model Elimination ****) |
640 (**** Code to support ordinary resolution, rather than Model Elimination ****) |
641 |
641 |
642 (*Convert a list of clauses (disjunctions) to meta-level clauses (==>), |
642 (*Convert a list of clauses (disjunctions) to meta-level clauses (==>), |