src/HOL/Tools/meson.ML
changeset 30607 c3d1590debd8
parent 30190 479806475f3c
child 31454 2c0959ab073f
equal deleted inserted replaced
30606:40a1865ab122 30607:c3d1590debd8
    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 (==>),