src/HOL/Tools/Nitpick/nitpick_isar.ML
changeset 34121 5e831d805118
parent 33982 1ae222745c4a
child 34124 c4628a1dcf75
equal deleted inserted replaced
34120:f9920a3ddf50 34121:5e831d805118
   103 
   103 
   104 (* string -> bool *)
   104 (* string -> bool *)
   105 fun is_known_raw_param s =
   105 fun is_known_raw_param s =
   106   AList.defined (op =) default_default_params s
   106   AList.defined (op =) default_default_params s
   107   orelse AList.defined (op =) negated_params s
   107   orelse AList.defined (op =) negated_params s
   108   orelse s mem ["max", "eval", "expect"]
   108   orelse s = "max" orelse s = "eval" orelse s = "expect"
   109   orelse exists (fn p => String.isPrefix (p ^ " ") s)
   109   orelse exists (fn p => String.isPrefix (p ^ " ") s)
   110                 ["card", "max", "iter", "box", "dont_box", "mono", "non_mono",
   110                 ["card", "max", "iter", "box", "dont_box", "mono", "non_mono",
   111                  "wf", "non_wf", "format"]
   111                  "wf", "non_wf", "format"]
   112 
   112 
   113 (* string * 'a -> unit *)
   113 (* string * 'a -> unit *)
   407          (warning ("Ill-formed Kodkodi output: " ^ details ^ "."); x)
   407          (warning ("Ill-formed Kodkodi output: " ^ details ^ "."); x)
   408        | Refute.REFUTE (loc, details) =>
   408        | Refute.REFUTE (loc, details) =>
   409          error ("Unhandled Refute error (" ^ quote loc ^ "): " ^ details ^ ".")
   409          error ("Unhandled Refute error (" ^ quote loc ^ "): " ^ details ^ ".")
   410 
   410 
   411 (* raw_param list -> bool -> int -> Proof.state -> bool * Proof.state *)
   411 (* raw_param list -> bool -> int -> Proof.state -> bool * Proof.state *)
   412 fun pick_nits override_params auto subgoal state =
   412 fun pick_nits override_params auto i state =
   413   let
   413   let
   414     val thy = Proof.theory_of state
   414     val thy = Proof.theory_of state
   415     val ctxt = Proof.context_of state
   415     val ctxt = Proof.context_of state
   416     val thm = #goal (Proof.raw_goal state)
   416     val thm = #goal (Proof.raw_goal state)
   417     val _ = List.app check_raw_param override_params
   417     val _ = List.app check_raw_param override_params
   421     fun go () =
   421     fun go () =
   422       (false, state)
   422       (false, state)
   423       |> (if auto then perhaps o try
   423       |> (if auto then perhaps o try
   424           else if debug then fn f => fn x => f x
   424           else if debug then fn f => fn x => f x
   425           else handle_exceptions ctxt)
   425           else handle_exceptions ctxt)
   426          (fn (_, state) => pick_nits_in_subgoal state params auto subgoal
   426          (fn (_, state) => pick_nits_in_subgoal state params auto i
   427                            |>> equal "genuine")
   427                            |>> curry (op =) "genuine")
   428   in
   428   in
   429     if auto orelse blocking then go ()
   429     if auto orelse blocking then go ()
   430     else (Toplevel.thread true (fn () => (go (); ())); (false, state))
   430     else (Toplevel.thread true (fn () => (go (); ())); (false, state))
   431   end
   431   end
   432 
   432 
   433 (* (TableFun().key * string list) list option * int option
   433 (* raw_param list option * int option -> Toplevel.transition
   434    -> Toplevel.transition -> Toplevel.transition *)
   434    -> Toplevel.transition *)
   435 fun nitpick_trans (opt_params, opt_subgoal) =
   435 fun nitpick_trans (opt_params, opt_i) =
   436   Toplevel.keep (K ()
   436   Toplevel.keep (K ()
   437       o snd o pick_nits (these opt_params) false (the_default 1 opt_subgoal)
   437       o snd o pick_nits (these opt_params) false (the_default 1 opt_i)
   438       o Toplevel.proof_of)
   438       o Toplevel.proof_of)
   439 
   439 
   440 (* raw_param -> string *)
   440 (* raw_param -> string *)
   441 fun string_for_raw_param (name, value) =
   441 fun string_for_raw_param (name, value) =
   442   name ^ " = " ^ stringify_raw_param_value value
   442   name ^ " = " ^ stringify_raw_param_value value
   443 
   443 
   444 (* (TableFun().key * string) list option -> Toplevel.transition
   444 (* raw_param list option -> Toplevel.transition -> Toplevel.transition *)
   445    -> Toplevel.transition *)
       
   446 fun nitpick_params_trans opt_params =
   445 fun nitpick_params_trans opt_params =
   447   Toplevel.theory
   446   Toplevel.theory
   448       (fold set_default_raw_param (these opt_params)
   447       (fold set_default_raw_param (these opt_params)
   449        #> tap (fn thy => 
   448        #> tap (fn thy => 
   450                   writeln ("Default parameters for Nitpick:\n" ^
   449                   writeln ("Default parameters for Nitpick:\n" ^