src/Provers/Arith/fast_lin_arith.ML
changeset 61144 5e94dfead1c2
parent 61097 93f08a05abc9
child 61268 abe08fb15a12
equal deleted inserted replaced
61143:5f898411ce87 61144:5e94dfead1c2
    85 
    85 
    86 signature FAST_LIN_ARITH =
    86 signature FAST_LIN_ARITH =
    87 sig
    87 sig
    88   val prems_lin_arith_tac: Proof.context -> int -> tactic
    88   val prems_lin_arith_tac: Proof.context -> int -> tactic
    89   val lin_arith_tac: Proof.context -> int -> tactic
    89   val lin_arith_tac: Proof.context -> int -> tactic
    90   val lin_arith_simproc: Proof.context -> term -> thm option
    90   val lin_arith_simproc: Proof.context -> cterm -> thm option
    91   val map_data:
    91   val map_data:
    92     ({add_mono_thms: thm list, mult_mono_thms: thm list, inj_thms: thm list,
    92     ({add_mono_thms: thm list, mult_mono_thms: thm list, inj_thms: thm list,
    93       lessD: thm list, neqE: thm list, simpset: simpset,
    93       lessD: thm list, neqE: thm list, simpset: simpset,
    94       number_of: (Proof.context -> typ -> int -> cterm) option} ->
    94       number_of: (Proof.context -> typ -> int -> cterm) option} ->
    95      {add_mono_thms: thm list, mult_mono_thms: thm list, inj_thms: thm list,
    95      {add_mono_thms: thm list, mult_mono_thms: thm list, inj_thms: thm list,
   773 *)
   773 *)
   774 fun lin_arith_simproc ctxt concl =
   774 fun lin_arith_simproc ctxt concl =
   775   let
   775   let
   776     val thms = maps LA_Logic.atomize (Simplifier.prems_of ctxt)
   776     val thms = maps LA_Logic.atomize (Simplifier.prems_of ctxt)
   777     val Hs = map Thm.prop_of thms
   777     val Hs = map Thm.prop_of thms
   778     val Tconcl = LA_Logic.mk_Trueprop concl
   778     val Tconcl = LA_Logic.mk_Trueprop (Thm.term_of concl)
   779   in
   779   in
   780     case prove ctxt [] false Hs Tconcl of (* concl provable? *)
   780     case prove ctxt [] false Hs Tconcl of (* concl provable? *)
   781       (split_neq, SOME js) => prover ctxt thms Tconcl js split_neq true
   781       (split_neq, SOME js) => prover ctxt thms Tconcl js split_neq true
   782     | (_, NONE) =>
   782     | (_, NONE) =>
   783         let val nTconcl = LA_Logic.neg_prop Tconcl in
   783         let val nTconcl = LA_Logic.neg_prop Tconcl in