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