author | wenzelm |
Fri, 28 Oct 2011 23:41:16 +0200 | |
changeset 46165 | 3c5d3d286055 |
parent 36742 | cf558aeb35b0 |
child 48013 | d64fa2ca54b8 |
permissions | -rw-r--r-- |
wenzelm@23252 | 1 |
(* Title: HOL/Groebner_Basis.thy |
wenzelm@23252 | 2 |
Author: Amine Chaieb, TU Muenchen |
wenzelm@23252 | 3 |
*) |
wenzelm@23252 | 4 |
|
haftmann@36741 | 5 |
header {* Groebner bases *} |
haftmann@28402 | 6 |
|
wenzelm@23252 | 7 |
theory Groebner_Basis |
haftmann@36741 | 8 |
imports Semiring_Normalization |
wenzelm@23252 | 9 |
uses |
haftmann@36742 | 10 |
("Tools/groebner.ML") |
wenzelm@23252 | 11 |
begin |
wenzelm@23252 | 12 |
|
haftmann@36697 | 13 |
subsection {* Groebner Bases *} |
haftmann@36697 | 14 |
|
haftmann@36697 | 15 |
lemmas bool_simps = simp_thms(1-34) |
haftmann@36697 | 16 |
|
haftmann@36697 | 17 |
lemma dnf: |
haftmann@36697 | 18 |
"(P & (Q | R)) = ((P&Q) | (P&R))" "((Q | R) & P) = ((Q&P) | (R&P))" |
haftmann@36697 | 19 |
"(P \<and> Q) = (Q \<and> P)" "(P \<or> Q) = (Q \<or> P)" |
haftmann@36697 | 20 |
by blast+ |
haftmann@36697 | 21 |
|
haftmann@36697 | 22 |
lemmas weak_dnf_simps = dnf bool_simps |
haftmann@36697 | 23 |
|
haftmann@36697 | 24 |
lemma nnf_simps: |
haftmann@36697 | 25 |
"(\<not>(P \<and> Q)) = (\<not>P \<or> \<not>Q)" "(\<not>(P \<or> Q)) = (\<not>P \<and> \<not>Q)" "(P \<longrightarrow> Q) = (\<not>P \<or> Q)" |
haftmann@36697 | 26 |
"(P = Q) = ((P \<and> Q) \<or> (\<not>P \<and> \<not> Q))" "(\<not> \<not>(P)) = P" |
haftmann@36697 | 27 |
by blast+ |
haftmann@36697 | 28 |
|
haftmann@36697 | 29 |
lemma PFalse: |
haftmann@36697 | 30 |
"P \<equiv> False \<Longrightarrow> \<not> P" |
haftmann@36697 | 31 |
"\<not> P \<Longrightarrow> (P \<equiv> False)" |
haftmann@36697 | 32 |
by auto |
haftmann@36697 | 33 |
|
haftmann@36697 | 34 |
ML {* |
wenzelm@46165 | 35 |
structure Algebra_Simplification = Named_Thms |
wenzelm@46165 | 36 |
( |
wenzelm@46165 | 37 |
val name = @{binding algebra} |
haftmann@36697 | 38 |
val description = "pre-simplification rules for algebraic methods" |
haftmann@36697 | 39 |
) |
haftmann@36697 | 40 |
*} |
haftmann@36697 | 41 |
|
haftmann@36697 | 42 |
setup Algebra_Simplification.setup |
haftmann@36697 | 43 |
|
haftmann@36742 | 44 |
use "Tools/groebner.ML" |
haftmann@36741 | 45 |
|
haftmann@36741 | 46 |
method_setup algebra = Groebner.algebra_method |
haftmann@36741 | 47 |
"solve polynomial equations over (semi)rings and ideal membership problems using Groebner bases" |
haftmann@36741 | 48 |
|
haftmann@36697 | 49 |
declare dvd_def[algebra] |
haftmann@36697 | 50 |
declare dvd_eq_mod_eq_0[symmetric, algebra] |
haftmann@36697 | 51 |
declare mod_div_trivial[algebra] |
haftmann@36697 | 52 |
declare mod_mod_trivial[algebra] |
haftmann@36697 | 53 |
declare conjunct1[OF DIVISION_BY_ZERO, algebra] |
haftmann@36697 | 54 |
declare conjunct2[OF DIVISION_BY_ZERO, algebra] |
haftmann@36697 | 55 |
declare zmod_zdiv_equality[symmetric,algebra] |
haftmann@36697 | 56 |
declare zdiv_zmod_equality[symmetric, algebra] |
haftmann@36697 | 57 |
declare zdiv_zminus_zminus[algebra] |
haftmann@36697 | 58 |
declare zmod_zminus_zminus[algebra] |
haftmann@36697 | 59 |
declare zdiv_zminus2[algebra] |
haftmann@36697 | 60 |
declare zmod_zminus2[algebra] |
haftmann@36697 | 61 |
declare zdiv_zero[algebra] |
haftmann@36697 | 62 |
declare zmod_zero[algebra] |
haftmann@36697 | 63 |
declare mod_by_1[algebra] |
haftmann@36697 | 64 |
declare div_by_1[algebra] |
haftmann@36697 | 65 |
declare zmod_minus1_right[algebra] |
haftmann@36697 | 66 |
declare zdiv_minus1_right[algebra] |
haftmann@36697 | 67 |
declare mod_div_trivial[algebra] |
haftmann@36697 | 68 |
declare mod_mod_trivial[algebra] |
haftmann@36697 | 69 |
declare mod_mult_self2_is_0[algebra] |
haftmann@36697 | 70 |
declare mod_mult_self1_is_0[algebra] |
haftmann@36697 | 71 |
declare zmod_eq_0_iff[algebra] |
haftmann@36697 | 72 |
declare dvd_0_left_iff[algebra] |
haftmann@36697 | 73 |
declare zdvd1_eq[algebra] |
haftmann@36697 | 74 |
declare zmod_eq_dvd_iff[algebra] |
haftmann@36697 | 75 |
declare nat_mod_eq_iff[algebra] |
haftmann@36697 | 76 |
|
haftmann@28402 | 77 |
end |