equal
deleted
inserted
replaced
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 |