src/HOL/Algebra/UnivPoly.thy
changeset 29246 3593802c9cf1
parent 29240 bb81c3709fb6
child 30363 9b8d9b6ef803
equal deleted inserted replaced
29245:19728ee2b1ba 29246:3593802c9cf1
  1771 lemma eval_monom_expr:
  1771 lemma eval_monom_expr:
  1772   assumes a: "a \<in> carrier R"
  1772   assumes a: "a \<in> carrier R"
  1773   shows "eval R R id a (monom P \<one>\<^bsub>R\<^esub> 1 \<ominus>\<^bsub>P\<^esub> monom P a 0) = \<zero>"
  1773   shows "eval R R id a (monom P \<one>\<^bsub>R\<^esub> 1 \<ominus>\<^bsub>P\<^esub> monom P a 0) = \<zero>"
  1774   (is "eval R R id a ?g = _")
  1774   (is "eval R R id a ?g = _")
  1775 proof -
  1775 proof -
  1776   interpret UP_pre_univ_prop R R id P proof qed simp
  1776   interpret UP_pre_univ_prop R R id proof qed simp
  1777   have eval_ring_hom: "eval R R id a \<in> ring_hom P R" using eval_ring_hom [OF a] by simp
  1777   have eval_ring_hom: "eval R R id a \<in> ring_hom P R" using eval_ring_hom [OF a] by simp
  1778   interpret ring_hom_cring P R "eval R R id a" proof qed (simp add: eval_ring_hom)
  1778   interpret ring_hom_cring P R "eval R R id a" proof qed (simp add: eval_ring_hom)
  1779   have mon1_closed: "monom P \<one>\<^bsub>R\<^esub> 1 \<in> carrier P" 
  1779   have mon1_closed: "monom P \<one>\<^bsub>R\<^esub> 1 \<in> carrier P" 
  1780     and mon0_closed: "monom P a 0 \<in> carrier P" 
  1780     and mon0_closed: "monom P a 0 \<in> carrier P" 
  1781     and min_mon0_closed: "\<ominus>\<^bsub>P\<^esub> monom P a 0 \<in> carrier P"
  1781     and min_mon0_closed: "\<ominus>\<^bsub>P\<^esub> monom P a 0 \<in> carrier P"
  1782     using a R.a_inv_closed by auto
  1782     using a R.a_inv_closed by auto
  1783   have "eval R R id a ?g = eval R R id a (monom P \<one> 1) \<ominus> eval R R id a (monom P a 0)"
  1783   have "eval R R id a ?g = eval R R id a (monom P \<one> 1) \<ominus> eval R R id a (monom P a 0)"
  1784     unfolding P.minus_eq [OF mon1_closed mon0_closed]
  1784     unfolding P.minus_eq [OF mon1_closed mon0_closed]
  1785     unfolding R_S_h.hom_add [OF mon1_closed min_mon0_closed]
  1785     unfolding hom_add [OF mon1_closed min_mon0_closed]
  1786     unfolding R_S_h.hom_a_inv [OF mon0_closed] 
  1786     unfolding hom_a_inv [OF mon0_closed] 
  1787     using R.minus_eq [symmetric] mon1_closed mon0_closed by auto
  1787     using R.minus_eq [symmetric] mon1_closed mon0_closed by auto
  1788   also have "\<dots> = a \<ominus> a"
  1788   also have "\<dots> = a \<ominus> a"
  1789     using eval_monom [OF R.one_closed a, of 1] using eval_monom [OF a a, of 0] using a by simp
  1789     using eval_monom [OF R.one_closed a, of 1] using eval_monom [OF a a, of 0] using a by simp
  1790   also have "\<dots> = \<zero>"
  1790   also have "\<dots> = \<zero>"
  1791     using a by algebra
  1791     using a by algebra
  1884   Interpretation now enables to import all theorems and lemmas
  1884   Interpretation now enables to import all theorems and lemmas
  1885   valid in the context of homomorphisms between @{term INTEG} and @{term
  1885   valid in the context of homomorphisms between @{term INTEG} and @{term
  1886   "UP INTEG"} globally.
  1886   "UP INTEG"} globally.
  1887 *}
  1887 *}
  1888 
  1888 
  1889 interpretation INTEG!: UP_pre_univ_prop INTEG INTEG id
  1889 interpretation INTEG!: UP_pre_univ_prop INTEG INTEG id "UP INTEG"
  1890   using INTEG_id_eval by simp_all
  1890   using INTEG_id_eval by simp_all
  1891 
  1891 
  1892 lemma INTEG_closed [intro, simp]:
  1892 lemma INTEG_closed [intro, simp]:
  1893   "z \<in> carrier INTEG"
  1893   "z \<in> carrier INTEG"
  1894   by (unfold INTEG_def) simp
  1894   by (unfold INTEG_def) simp