src/HOL/Tools/SMT/smt_solver.ML
changeset 40278 0fc78bb54f18
parent 40276 6efa052b9213
child 40332 5edeb5d269fa
equal deleted inserted replaced
40277:4e3a3461c1a6 40278:0fc78bb54f18
    32 
    32 
    33   (*options*)
    33   (*options*)
    34   val oracle: bool Config.T
    34   val oracle: bool Config.T
    35   val filter_only: bool Config.T
    35   val filter_only: bool Config.T
    36   val datatypes: bool Config.T
    36   val datatypes: bool Config.T
       
    37   val keep_assms: bool Config.T
    37   val timeout: int Config.T
    38   val timeout: int Config.T
    38   val with_timeout: Proof.context -> ('a -> 'b) -> 'a -> 'b
    39   val with_timeout: Proof.context -> ('a -> 'b) -> 'a -> 'b
    39   val traceN: string
    40   val traceN: string
    40   val trace: bool Config.T
    41   val trace: bool Config.T
    41   val trace_msg: Proof.context -> ('a -> string) -> 'a -> unit
    42   val trace_msg: Proof.context -> ('a -> string) -> 'a -> unit
   120 
   121 
   121 val (filter_only, setup_filter_only) =
   122 val (filter_only, setup_filter_only) =
   122   Attrib.config_bool "smt_filter_only" (K false)
   123   Attrib.config_bool "smt_filter_only" (K false)
   123 
   124 
   124 val (datatypes, setup_datatypes) = Attrib.config_bool "smt_datatypes" (K false)
   125 val (datatypes, setup_datatypes) = Attrib.config_bool "smt_datatypes" (K false)
       
   126 
       
   127 val (keep_assms, setup_keep_assms) =
       
   128   Attrib.config_bool "smt_keep_assms" (K true)
   125 
   129 
   126 val (timeout, setup_timeout) = Attrib.config_int "smt_timeout" (K 30)
   130 val (timeout, setup_timeout) = Attrib.config_int "smt_timeout" (K 30)
   127 
   131 
   128 fun with_timeout ctxt f x =
   132 fun with_timeout ctxt f x =
   129   TimeLimit.timeLimit (Time.fromSeconds (Config.get ctxt timeout)) f x
   133   TimeLimit.timeLimit (Time.fromSeconds (Config.get ctxt timeout)) f x
   292       info
   296       info
   293     val {extra_norm, translate} = interface
   297     val {extra_norm, translate} = interface
   294     val (with_datatypes, translate') =
   298     val (with_datatypes, translate') =
   295       set_has_datatypes (Config.get ctxt datatypes) translate
   299       set_has_datatypes (Config.get ctxt datatypes) translate
   296     val cmd = (rm, env_var, is_remote, name)
   300     val cmd = (rm, env_var, is_remote, name)
       
   301     val keep = Config.get ctxt keep_assms
   297   in
   302   in
   298     (irules, ctxt)
   303     (irules, ctxt)
   299     |-> SMT_Normalize.normalize extra_norm with_datatypes
   304     |-> SMT_Normalize.normalize trace_msg keep extra_norm with_datatypes
   300     |-> invoke translate' name cmd more_options options
   305     |-> invoke translate' name cmd more_options options
   301     |-> reconstruct
   306     |-> reconstruct
   302     |-> (fn (idxs, thm) => fn ctxt' => thm
   307     |-> (fn (idxs, thm) => fn ctxt' => thm
   303     |> singleton (ProofContext.export ctxt' ctxt)
   308     |> singleton (ProofContext.export ctxt' ctxt)
   304     |> discharge_definitions
   309     |> discharge_definitions
   429     val ctxt =
   434     val ctxt =
   430       Proof.context_of st
   435       Proof.context_of st
   431       |> Config.put timeout (Time.toSeconds time_limit)
   436       |> Config.put timeout (Time.toSeconds time_limit)
   432       |> Config.put oracle false
   437       |> Config.put oracle false
   433       |> Config.put filter_only true
   438       |> Config.put filter_only true
       
   439       |> Config.put keep_assms false
   434     val cprop =
   440     val cprop =
   435       Thm.cprem_of goal i
   441       Thm.cprem_of goal i
   436       |> Thm.rhs_of o SMT_Normalize.atomize_conv ctxt
   442       |> Thm.rhs_of o SMT_Normalize.atomize_conv ctxt
   437       |> Thm.capply @{cterm Trueprop} o Thm.capply @{cterm Not} o Thm.dest_arg
   443       |> Thm.capply @{cterm Trueprop} o Thm.capply @{cterm Not} o Thm.dest_arg
   438     val irs = map (pair ~1) (Thm.assume cprop :: facts)
   444     val irs = map (pair ~1) (Thm.assume cprop :: facts)
   481       (Thm.declaration_attribute o K o select_solver))
   487       (Thm.declaration_attribute o K o select_solver))
   482     "SMT solver configuration" #>
   488     "SMT solver configuration" #>
   483   setup_oracle #>
   489   setup_oracle #>
   484   setup_filter_only #>
   490   setup_filter_only #>
   485   setup_datatypes #>
   491   setup_datatypes #>
       
   492   setup_keep_assms #>
   486   setup_timeout #>
   493   setup_timeout #>
   487   setup_trace #>
   494   setup_trace #>
   488   setup_trace_used_facts #>
   495   setup_trace_used_facts #>
   489   setup_fixed_certificates #>
   496   setup_fixed_certificates #>
   490   Attrib.setup @{binding smt_certificates}
   497   Attrib.setup @{binding smt_certificates}