src/HOL/Groebner_Basis.thy
changeset 30866 dd5117e2d73e
parent 30729 461ee3e49ad3
child 30869 71fde5b7b43c
equal deleted inserted replaced
30865:5106e13d400f 30866:dd5117e2d73e
   189 ML {*
   189 ML {*
   190 local
   190 local
   191 
   191 
   192 open Conv;
   192 open Conv;
   193 
   193 
   194 fun numeral_is_const ct =
   194 fun numeral_is_const ct = can HOLogic.dest_number (Thm.term_of ct);
   195   can HOLogic.dest_number (Thm.term_of ct);
       
   196 
   195 
   197 fun int_of_rat x =
   196 fun int_of_rat x =
   198   (case Rat.quotient_of_rat x of (i, 1) => i
   197   (case Rat.quotient_of_rat x of (i, 1) => i
   199   | _ => error "int_of_rat: bad int");
   198   | _ => error "int_of_rat: bad int");
   200 
   199 
   258 
   257 
   259 
   258 
   260 locale gb_field = gb_ring +
   259 locale gb_field = gb_ring +
   261   fixes divide :: "'a \<Rightarrow> 'a \<Rightarrow> 'a"
   260   fixes divide :: "'a \<Rightarrow> 'a \<Rightarrow> 'a"
   262     and inverse:: "'a \<Rightarrow> 'a"
   261     and inverse:: "'a \<Rightarrow> 'a"
   263   assumes divide: "divide x y = mul x (inverse y)"
   262   assumes divide_inverse: "divide x y = mul x (inverse y)"
   264      and inverse: "inverse x = divide r1 x"
   263      and inverse_divide: "inverse x = divide r1 x"
   265 begin
   264 begin
       
   265 
       
   266 lemma field_ops: shows "TERM (divide x y)" and "TERM (inverse x)" .
       
   267 
       
   268 lemmas field_rules = divide_inverse inverse_divide
   266 
   269 
   267 lemmas gb_field_axioms' =
   270 lemmas gb_field_axioms' =
   268   gb_field_axioms [normalizer
   271   gb_field_axioms [normalizer
   269     semiring ops: semiring_ops
   272     semiring ops: semiring_ops
   270     semiring rules: semiring_rules
   273     semiring rules: semiring_rules
   271     ring ops: ring_ops
   274     ring ops: ring_ops
   272     ring rules: ring_rules]
   275     ring rules: ring_rules
       
   276     field ops: field_ops
       
   277     field rules: field_rules]
   273 
   278 
   274 end
   279 end
   275 
   280 
   276 
   281 
   277 subsection {* Groebner Bases *}
   282 subsection {* Groebner Bases *}
   391 lemmas fieldgb_axioms' = fieldgb_axioms [normalizer
   396 lemmas fieldgb_axioms' = fieldgb_axioms [normalizer
   392   semiring ops: semiring_ops
   397   semiring ops: semiring_ops
   393   semiring rules: semiring_rules
   398   semiring rules: semiring_rules
   394   ring ops: ring_ops
   399   ring ops: ring_ops
   395   ring rules: ring_rules
   400   ring rules: ring_rules
       
   401   field ops: field_ops
       
   402   field rules: field_rules
   396   idom rules: noteq_reduce add_scale_eq_noteq
   403   idom rules: noteq_reduce add_scale_eq_noteq
   397   ideal rules: subr0_iff add_r0_iff]
   404   ideal rules: subr0_iff add_r0_iff]
   398 
   405 
   399 end
   406 end
   400 
   407 
   634 end
   641 end
   635 
   642 
   636 fun numeral_is_const ct =
   643 fun numeral_is_const ct =
   637   case term_of ct of
   644   case term_of ct of
   638    Const (@{const_name "HOL.divide"},_) $ a $ b =>
   645    Const (@{const_name "HOL.divide"},_) $ a $ b =>
   639      numeral_is_const (Thm.dest_arg1 ct) andalso numeral_is_const (Thm.dest_arg ct)
   646      can HOLogic.dest_number a andalso can HOLogic.dest_number b
   640  | Const (@{const_name "HOL.uminus"},_)$t => numeral_is_const (Thm.dest_arg ct)
   647  | Const (@{const_name "HOL.inverse"},_)$t => can HOLogic.dest_number t
   641  | t => can HOLogic.dest_number t
   648  | t => can HOLogic.dest_number t
   642 
   649 
   643 fun dest_const ct = ((case term_of ct of
   650 fun dest_const ct = ((case term_of ct of
   644    Const (@{const_name "HOL.divide"},_) $ a $ b=>
   651    Const (@{const_name "HOL.divide"},_) $ a $ b=>
   645     Rat.rat_of_quotient (snd (HOLogic.dest_number a), snd (HOLogic.dest_number b))
   652     Rat.rat_of_quotient (snd (HOLogic.dest_number a), snd (HOLogic.dest_number b))