1503 |
1503 |
1504 code_datatype "0::'a::zero poly" pCons |
1504 code_datatype "0::'a::zero poly" pCons |
1505 |
1505 |
1506 declare pCons_0_0 [code_post] |
1506 declare pCons_0_0 [code_post] |
1507 |
1507 |
1508 instantiation poly :: ("{zero,eq}") eq |
1508 instantiation poly :: ("{zero, equal}") equal |
1509 begin |
1509 begin |
1510 |
1510 |
1511 definition |
1511 definition |
1512 "eq_class.eq (p::'a poly) q \<longleftrightarrow> p = q" |
1512 "HOL.equal (p::'a poly) q \<longleftrightarrow> p = q" |
1513 |
1513 |
1514 instance |
1514 instance proof |
1515 by default (rule eq_poly_def) |
1515 qed (rule equal_poly_def) |
1516 |
1516 |
1517 end |
1517 end |
1518 |
1518 |
1519 lemma eq_poly_code [code]: |
1519 lemma eq_poly_code [code]: |
1520 "eq_class.eq (0::_ poly) (0::_ poly) \<longleftrightarrow> True" |
1520 "HOL.equal (0::_ poly) (0::_ poly) \<longleftrightarrow> True" |
1521 "eq_class.eq (0::_ poly) (pCons b q) \<longleftrightarrow> eq_class.eq 0 b \<and> eq_class.eq 0 q" |
1521 "HOL.equal (0::_ poly) (pCons b q) \<longleftrightarrow> HOL.equal 0 b \<and> HOL.equal 0 q" |
1522 "eq_class.eq (pCons a p) (0::_ poly) \<longleftrightarrow> eq_class.eq a 0 \<and> eq_class.eq p 0" |
1522 "HOL.equal (pCons a p) (0::_ poly) \<longleftrightarrow> HOL.equal a 0 \<and> HOL.equal p 0" |
1523 "eq_class.eq (pCons a p) (pCons b q) \<longleftrightarrow> eq_class.eq a b \<and> eq_class.eq p q" |
1523 "HOL.equal (pCons a p) (pCons b q) \<longleftrightarrow> HOL.equal a b \<and> HOL.equal p q" |
1524 unfolding eq by simp_all |
1524 by (simp_all add: equal) |
|
1525 |
|
1526 lemma [code nbe]: |
|
1527 "HOL.equal (p :: _ poly) p \<longleftrightarrow> True" |
|
1528 by (fact equal_refl) |
1525 |
1529 |
1526 lemmas coeff_code [code] = |
1530 lemmas coeff_code [code] = |
1527 coeff_0 coeff_pCons_0 coeff_pCons_Suc |
1531 coeff_0 coeff_pCons_0 coeff_pCons_Suc |
1528 |
1532 |
1529 lemmas degree_code [code] = |
1533 lemmas degree_code [code] = |