src/HOL/Algebra/QuotRing.thy
author paulson <lp15@cam.ac.uk>
Sun, 08 Jul 2018 16:07:26 +0100
changeset 68604 57721285d4ef
parent 68584 ec4fe1032b6e
child 68673 22d10f94811e
permissions -rw-r--r--
elimination of some "smt"
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
35849
b5522b51cb1e standard headers;
wenzelm
parents: 35848
diff changeset
     1
(*  Title:      HOL/Algebra/QuotRing.thy
b5522b51cb1e standard headers;
wenzelm
parents: 35848
diff changeset
     2
    Author:     Stephan Hohe
68551
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
     3
    Author:     Paulo Emílio de Vilhena
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
     4
*)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
     5
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
     6
theory QuotRing
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
     7
imports RingHom
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
     8
begin
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
     9
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
    10
section \<open>Quotient Rings\<close>
27717
21bbd410ba04 Generalised polynomial lemmas from cring to ring.
ballarin
parents: 27611
diff changeset
    11
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
    12
subsection \<open>Multiplication on Cosets\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    13
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    14
definition rcoset_mult :: "[('a, _) ring_scheme, 'a set, 'a set, 'a set] \<Rightarrow> 'a set"
23463
9953ff53cc64 tuned proofs -- avoid implicit prems;
wenzelm
parents: 23350
diff changeset
    15
    ("[mod _:] _ \<Otimes>\<index> _" [81,81,81] 80)
35848
5443079512ea slightly more uniform definitions -- eliminated old-style meta-equality;
wenzelm
parents: 35847
diff changeset
    16
  where "rcoset_mult R I A B = (\<Union>a\<in>A. \<Union>b\<in>B. I +>\<^bsub>R\<^esub> (a \<otimes>\<^bsub>R\<^esub> b))"
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    17
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    18
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
    19
text \<open>@{const "rcoset_mult"} fulfils the properties required by
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
    20
  congruences\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    21
lemma (in ideal) rcoset_mult_add:
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    22
    "x \<in> carrier R \<Longrightarrow> y \<in> carrier R \<Longrightarrow> [mod I:] (I +> x) \<Otimes> (I +> y) = I +> (x \<otimes> y)"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    23
  apply rule
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    24
  apply (rule, simp add: rcoset_mult_def, clarsimp)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    25
  defer 1
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    26
  apply (rule, simp add: rcoset_mult_def)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    27
  defer 1
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    28
proof -
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    29
  fix z x' y'
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    30
  assume carr: "x \<in> carrier R" "y \<in> carrier R"
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    31
    and x'rcos: "x' \<in> I +> x"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    32
    and y'rcos: "y' \<in> I +> y"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    33
    and zrcos: "z \<in> I +> x' \<otimes> y'"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    34
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    35
  from x'rcos have "\<exists>h\<in>I. x' = h \<oplus> x"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    36
    by (simp add: a_r_coset_def r_coset_def)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    37
  then obtain hx where hxI: "hx \<in> I" and x': "x' = hx \<oplus> x"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    38
    by fast+
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    39
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    40
  from y'rcos have "\<exists>h\<in>I. y' = h \<oplus> y"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    41
    by (simp add: a_r_coset_def r_coset_def)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    42
  then obtain hy where hyI: "hy \<in> I" and y': "y' = hy \<oplus> y"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    43
    by fast+
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    44
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    45
  from zrcos have "\<exists>h\<in>I. z = h \<oplus> (x' \<otimes> y')"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    46
    by (simp add: a_r_coset_def r_coset_def)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    47
  then obtain hz where hzI: "hz \<in> I" and z: "z = hz \<oplus> (x' \<otimes> y')"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    48
    by fast+
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    49
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    50
  note carr = carr hxI[THEN a_Hcarr] hyI[THEN a_Hcarr] hzI[THEN a_Hcarr]
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    51
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    52
  from z have "z = hz \<oplus> (x' \<otimes> y')" .
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    53
  also from x' y' have "\<dots> = hz \<oplus> ((hx \<oplus> x) \<otimes> (hy \<oplus> y))" by simp
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    54
  also from carr have "\<dots> = (hz \<oplus> (hx \<otimes> (hy \<oplus> y)) \<oplus> x \<otimes> hy) \<oplus> x \<otimes> y" by algebra
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    55
  finally have z2: "z = (hz \<oplus> (hx \<otimes> (hy \<oplus> y)) \<oplus> x \<otimes> hy) \<oplus> x \<otimes> y" .
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    56
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    57
  from hxI hyI hzI carr have "hz \<oplus> (hx \<otimes> (hy \<oplus> y)) \<oplus> x \<otimes> hy \<in> I"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    58
    by (simp add: I_l_closed I_r_closed)
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    59
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    60
  with z2 have "\<exists>h\<in>I. z = h \<oplus> x \<otimes> y" by fast
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    61
  then show "z \<in> I +> x \<otimes> y" by (simp add: a_r_coset_def r_coset_def)
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    62
next
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    63
  fix z
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    64
  assume xcarr: "x \<in> carrier R"
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    65
    and ycarr: "y \<in> carrier R"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    66
    and zrcos: "z \<in> I +> x \<otimes> y"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    67
  from xcarr have xself: "x \<in> I +> x" by (intro a_rcos_self)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    68
  from ycarr have yself: "y \<in> I +> y" by (intro a_rcos_self)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    69
  show "\<exists>a\<in>I +> x. \<exists>b\<in>I +> y. z \<in> I +> a \<otimes> b"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    70
    using xself and yself and zrcos by fast
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    71
qed
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    72
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    73
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
    74
subsection \<open>Quotient Ring Definition\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    75
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    76
definition FactRing :: "[('a,'b) ring_scheme, 'a set] \<Rightarrow> ('a set) ring"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    77
    (infixl "Quot" 65)
35848
5443079512ea slightly more uniform definitions -- eliminated old-style meta-equality;
wenzelm
parents: 35847
diff changeset
    78
  where "FactRing R I =
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    79
    \<lparr>carrier = a_rcosets\<^bsub>R\<^esub> I, mult = rcoset_mult R I,
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    80
      one = (I +>\<^bsub>R\<^esub> \<one>\<^bsub>R\<^esub>), zero = I, add = set_add R\<rparr>"
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    81
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    82
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
    83
subsection \<open>Factorization over General Ideals\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    84
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
    85
text \<open>The quotient is a ring\<close>
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
    86
lemma (in ideal) quotient_is_ring: "ring (R Quot I)"
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    87
apply (rule ringI)
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
    88
   \<comment> \<open>abelian group\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    89
   apply (rule comm_group_abelian_groupI)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    90
   apply (simp add: FactRing_def)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    91
   apply (rule a_factorgroup_is_comm_group[unfolded A_FactGroup_def'])
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
    92
  \<comment> \<open>mult monoid\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    93
  apply (rule monoidI)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    94
      apply (simp_all add: FactRing_def A_RCOSETS_def RCOSETS_def
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    95
             a_r_coset_def[symmetric])
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
    96
      \<comment> \<open>mult closed\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    97
      apply (clarify)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    98
      apply (simp add: rcoset_mult_add, fast)
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
    99
     \<comment> \<open>mult \<open>one_closed\<close>\<close>
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   100
     apply force
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
   101
    \<comment> \<open>mult assoc\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   102
    apply clarify
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   103
    apply (simp add: rcoset_mult_add m_assoc)
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
   104
   \<comment> \<open>mult one\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   105
   apply clarify
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   106
   apply (simp add: rcoset_mult_add)
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   107
  apply clarify
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   108
  apply (simp add: rcoset_mult_add)
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
   109
 \<comment> \<open>distr\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   110
 apply clarify
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   111
 apply (simp add: rcoset_mult_add a_rcos_sum l_distr)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   112
apply clarify
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   113
apply (simp add: rcoset_mult_add a_rcos_sum r_distr)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   114
done
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   115
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   116
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
   117
text \<open>This is a ring homomorphism\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   118
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 63167
diff changeset
   119
lemma (in ideal) rcos_ring_hom: "((+>) I) \<in> ring_hom R (R Quot I)"
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   120
apply (rule ring_hom_memI)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   121
   apply (simp add: FactRing_def a_rcosetsI[OF a_subset])
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   122
  apply (simp add: FactRing_def rcoset_mult_add)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   123
 apply (simp add: FactRing_def a_rcos_sum)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   124
apply (simp add: FactRing_def)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   125
done
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   126
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 63167
diff changeset
   127
lemma (in ideal) rcos_ring_hom_ring: "ring_hom_ring R (R Quot I) ((+>) I)"
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   128
apply (rule ring_hom_ringI)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   129
     apply (rule is_ring, rule quotient_is_ring)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   130
   apply (simp add: FactRing_def a_rcosetsI[OF a_subset])
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   131
  apply (simp add: FactRing_def rcoset_mult_add)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   132
 apply (simp add: FactRing_def a_rcos_sum)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   133
apply (simp add: FactRing_def)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   134
done
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   135
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
   136
text \<open>The quotient of a cring is also commutative\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   137
lemma (in ideal) quotient_is_cring:
27611
2c01c0bdb385 Removed uses of context element includes.
ballarin
parents: 23463
diff changeset
   138
  assumes "cring R"
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   139
  shows "cring (R Quot I)"
27611
2c01c0bdb385 Removed uses of context element includes.
ballarin
parents: 23463
diff changeset
   140
proof -
29237
e90d9d51106b More porting to new locales.
ballarin
parents: 27717
diff changeset
   141
  interpret cring R by fact
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   142
  show ?thesis
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   143
    apply (intro cring.intro comm_monoid.intro comm_monoid_axioms.intro)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   144
      apply (rule quotient_is_ring)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   145
     apply (rule ring.axioms[OF quotient_is_ring])
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   146
    apply (simp add: FactRing_def A_RCOSETS_defs a_r_coset_def[symmetric])
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   147
    apply clarify
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   148
    apply (simp add: rcoset_mult_add m_comm)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   149
    done
27611
2c01c0bdb385 Removed uses of context element includes.
ballarin
parents: 23463
diff changeset
   150
qed
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   151
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
   152
text \<open>Cosets as a ring homomorphism on crings\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   153
lemma (in ideal) rcos_ring_hom_cring:
27611
2c01c0bdb385 Removed uses of context element includes.
ballarin
parents: 23463
diff changeset
   154
  assumes "cring R"
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 63167
diff changeset
   155
  shows "ring_hom_cring R (R Quot I) ((+>) I)"
27611
2c01c0bdb385 Removed uses of context element includes.
ballarin
parents: 23463
diff changeset
   156
proof -
29237
e90d9d51106b More porting to new locales.
ballarin
parents: 27717
diff changeset
   157
  interpret cring R by fact
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   158
  show ?thesis
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   159
    apply (rule ring_hom_cringI)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   160
      apply (rule rcos_ring_hom_ring)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   161
     apply (rule is_cring)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   162
    apply (rule quotient_is_cring)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   163
   apply (rule is_cring)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   164
   done
27611
2c01c0bdb385 Removed uses of context element includes.
ballarin
parents: 23463
diff changeset
   165
qed
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   166
35849
b5522b51cb1e standard headers;
wenzelm
parents: 35848
diff changeset
   167
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
   168
subsection \<open>Factorization over Prime Ideals\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   169
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
   170
text \<open>The quotient ring generated by a prime ideal is a domain\<close>
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   171
lemma (in primeideal) quotient_is_domain: "domain (R Quot I)"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   172
  apply (rule domain.intro)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   173
   apply (rule quotient_is_cring, rule is_cring)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   174
  apply (rule domain_axioms.intro)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   175
   apply (simp add: FactRing_def) defer 1
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   176
    apply (simp add: FactRing_def A_RCOSETS_defs a_r_coset_def[symmetric], clarify)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   177
    apply (simp add: rcoset_mult_add) defer 1
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   178
proof (rule ccontr, clarsimp)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   179
  assume "I +> \<one> = I"
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   180
  then have "\<one> \<in> I" by (simp only: a_coset_join1 one_closed a_subgroup)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   181
  then have "carrier R \<subseteq> I" by (subst one_imp_carrier, simp, fast)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   182
  with a_subset have "I = carrier R" by fast
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   183
  with I_notcarr show False by fast
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   184
next
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   185
  fix x y
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   186
  assume carr: "x \<in> carrier R" "y \<in> carrier R"
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   187
    and a: "I +> x \<otimes> y = I"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   188
    and b: "I +> y \<noteq> I"
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   189
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   190
  have ynI: "y \<notin> I"
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   191
  proof (rule ccontr, simp)
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   192
    assume "y \<in> I"
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   193
    then have "I +> y = I" by (rule a_rcos_const)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   194
    with b show False by simp
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   195
  qed
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   196
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   197
  from carr have "x \<otimes> y \<in> I +> x \<otimes> y" by (simp add: a_rcos_self)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   198
  then have xyI: "x \<otimes> y \<in> I" by (simp add: a)
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   199
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   200
  from xyI and carr have xI: "x \<in> I \<or> y \<in> I" by (simp add: I_prime)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   201
  with ynI have "x \<in> I" by fast
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   202
  then show "I +> x = I" by (rule a_rcos_const)
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   203
qed
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   204
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
   205
text \<open>Generating right cosets of a prime ideal is a homomorphism
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
   206
        on commutative rings\<close>
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 63167
diff changeset
   207
lemma (in primeideal) rcos_ring_hom_cring: "ring_hom_cring R (R Quot I) ((+>) I)"
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   208
  by (rule rcos_ring_hom_cring) (rule is_cring)
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   209
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   210
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
   211
subsection \<open>Factorization over Maximal Ideals\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   212
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
   213
text \<open>In a commutative ring, the quotient ring over a maximal ideal
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   214
        is a field.
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   215
        The proof follows ``W. Adkins, S. Weintraub: Algebra --
61382
efac889fccbc isabelle update_cartouches;
wenzelm
parents: 45005
diff changeset
   216
        An Approach via Module Theory''\<close>
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   217
lemma (in maximalideal) quotient_is_field:
27611
2c01c0bdb385 Removed uses of context element includes.
ballarin
parents: 23463
diff changeset
   218
  assumes "cring R"
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   219
  shows "field (R Quot I)"
27611
2c01c0bdb385 Removed uses of context element includes.
ballarin
parents: 23463
diff changeset
   220
proof -
29237
e90d9d51106b More porting to new locales.
ballarin
parents: 27717
diff changeset
   221
  interpret cring R by fact
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   222
  show ?thesis
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   223
    apply (intro cring.cring_fieldI2)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   224
      apply (rule quotient_is_cring, rule is_cring)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   225
     defer 1
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   226
     apply (simp add: FactRing_def A_RCOSETS_defs a_r_coset_def[symmetric], clarsimp)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   227
     apply (simp add: rcoset_mult_add) defer 1
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   228
  proof (rule ccontr, simp)
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
   229
    \<comment> \<open>Quotient is not empty\<close>
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   230
    assume "\<zero>\<^bsub>R Quot I\<^esub> = \<one>\<^bsub>R Quot I\<^esub>"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   231
    then have II1: "I = I +> \<one>" by (simp add: FactRing_def)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   232
    from a_rcos_self[OF one_closed] have "\<one> \<in> I"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   233
      by (simp add: II1[symmetric])
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   234
    then have "I = carrier R" by (rule one_imp_carrier)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   235
    with I_notcarr show False by simp
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   236
  next
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
   237
    \<comment> \<open>Existence of Inverse\<close>
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   238
    fix a
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   239
    assume IanI: "I +> a \<noteq> I" and acarr: "a \<in> carrier R"
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   240
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
   241
    \<comment> \<open>Helper ideal \<open>J\<close>\<close>
63040
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 61382
diff changeset
   242
    define J :: "'a set" where "J = (carrier R #> a) <+> I"
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   243
    have idealJ: "ideal J R"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   244
      apply (unfold J_def, rule add_ideals)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   245
       apply (simp only: cgenideal_eq_rcos[symmetric], rule cgenideal_ideal, rule acarr)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   246
      apply (rule is_ideal)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   247
      done
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   248
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
   249
    \<comment> \<open>Showing @{term "J"} not smaller than @{term "I"}\<close>
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   250
    have IinJ: "I \<subseteq> J"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   251
    proof (rule, simp add: J_def r_coset_def set_add_defs)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   252
      fix x
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   253
      assume xI: "x \<in> I"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   254
      have Zcarr: "\<zero> \<in> carrier R" by fast
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   255
      from xI[THEN a_Hcarr] acarr
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   256
      have "x = \<zero> \<otimes> a \<oplus> x" by algebra
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   257
      with Zcarr and xI show "\<exists>xa\<in>carrier R. \<exists>k\<in>I. x = xa \<otimes> a \<oplus> k" by fast
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   258
    qed
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   259
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
   260
    \<comment> \<open>Showing @{term "J \<noteq> I"}\<close>
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   261
    have anI: "a \<notin> I"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   262
    proof (rule ccontr, simp)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   263
      assume "a \<in> I"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   264
      then have "I +> a = I" by (rule a_rcos_const)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   265
      with IanI show False by simp
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   266
    qed
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   267
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   268
    have aJ: "a \<in> J"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   269
    proof (simp add: J_def r_coset_def set_add_defs)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   270
      from acarr
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   271
      have "a = \<one> \<otimes> a \<oplus> \<zero>" by algebra
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   272
      with one_closed and additive_subgroup.zero_closed[OF is_additive_subgroup]
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   273
      show "\<exists>x\<in>carrier R. \<exists>k\<in>I. a = x \<otimes> a \<oplus> k" by fast
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   274
    qed
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   275
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   276
    from aJ and anI have JnI: "J \<noteq> I" by fast
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   277
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
   278
    \<comment> \<open>Deducing @{term "J = carrier R"} because @{term "I"} is maximal\<close>
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   279
    from idealJ and IinJ have "J = I \<or> J = carrier R"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   280
    proof (rule I_maximal, unfold J_def)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   281
      have "carrier R #> a \<subseteq> carrier R"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   282
        using subset_refl acarr by (rule r_coset_subset_G)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   283
      then show "carrier R #> a <+> I \<subseteq> carrier R"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   284
        using a_subset by (rule set_add_closed)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   285
    qed
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   286
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   287
    with JnI have Jcarr: "J = carrier R" by simp
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   288
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
   289
    \<comment> \<open>Calculating an inverse for @{term "a"}\<close>
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   290
    from one_closed[folded Jcarr]
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   291
    have "\<exists>r\<in>carrier R. \<exists>i\<in>I. \<one> = r \<otimes> a \<oplus> i"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   292
      by (simp add: J_def r_coset_def set_add_defs)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   293
    then obtain r i where rcarr: "r \<in> carrier R"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   294
      and iI: "i \<in> I" and one: "\<one> = r \<otimes> a \<oplus> i" by fast
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   295
    from one and rcarr and acarr and iI[THEN a_Hcarr]
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   296
    have rai1: "a \<otimes> r = \<ominus>i \<oplus> \<one>" by algebra
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   297
67443
3abf6a722518 standardized towards new-style formal comments: isabelle update_comments;
wenzelm
parents: 67399
diff changeset
   298
    \<comment> \<open>Lifting to cosets\<close>
45005
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   299
    from iI have "\<ominus>i \<oplus> \<one> \<in> I +> \<one>"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   300
      by (intro a_rcosI, simp, intro a_subset, simp)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   301
    with rai1 have "a \<otimes> r \<in> I +> \<one>" by simp
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   302
    then have "I +> \<one> = I +> a \<otimes> r"
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   303
      by (rule a_repr_independence, simp) (rule a_subgroup)
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   304
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   305
    from rcarr and this[symmetric]
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   306
    show "\<exists>r\<in>carrier R. I +> a \<otimes> r = I +> \<one>" by fast
0d2d59525912 tuned proofs;
wenzelm
parents: 35849
diff changeset
   307
  qed
27611
2c01c0bdb385 Removed uses of context element includes.
ballarin
parents: 23463
diff changeset
   308
qed
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   309
68551
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   310
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   311
lemma (in ring_hom_ring) trivial_hom_iff:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   312
  "(h ` (carrier R) = { \<zero>\<^bsub>S\<^esub> }) = (a_kernel R S h = carrier R)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   313
  using group_hom.trivial_hom_iff[OF a_group_hom] by (simp add: a_kernel_def)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   314
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   315
lemma (in ring_hom_ring) trivial_ker_imp_inj:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   316
  assumes "a_kernel R S h = { \<zero> }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   317
  shows "inj_on h (carrier R)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   318
  using group_hom.trivial_ker_imp_inj[OF a_group_hom] assms a_kernel_def[of R S h] by simp 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   319
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   320
lemma (in ring_hom_ring) non_trivial_field_hom_imp_inj:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   321
  assumes "field R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   322
  shows "h ` (carrier R) \<noteq> { \<zero>\<^bsub>S\<^esub> } \<Longrightarrow> inj_on h (carrier R)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   323
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   324
  assume "h ` (carrier R) \<noteq> { \<zero>\<^bsub>S\<^esub> }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   325
  hence "a_kernel R S h \<noteq> carrier R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   326
    using trivial_hom_iff by linarith
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   327
  hence "a_kernel R S h = { \<zero> }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   328
    using field.all_ideals[OF assms] kernel_is_ideal by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   329
  thus "inj_on h (carrier R)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   330
    using trivial_ker_imp_inj by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   331
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   332
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   333
lemma (in ring_hom_ring) img_is_add_subgroup:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   334
  assumes "subgroup H (add_monoid R)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   335
  shows "subgroup (h ` H) (add_monoid S)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   336
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   337
  have "group ((add_monoid R) \<lparr> carrier := H \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   338
    using assms R.add.subgroup_imp_group by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   339
  moreover have "H \<subseteq> carrier R" by (simp add: R.add.subgroupE(1) assms)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   340
  hence "h \<in> hom ((add_monoid R) \<lparr> carrier := H \<rparr>) (add_monoid S)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   341
    unfolding hom_def by (auto simp add: subsetD)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   342
  ultimately have "subgroup (h ` carrier ((add_monoid R) \<lparr> carrier := H \<rparr>)) (add_monoid S)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   343
    using group_hom.img_is_subgroup[of "(add_monoid R) \<lparr> carrier := H \<rparr>" "add_monoid S" h]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   344
    using a_group_hom group_hom_axioms.intro group_hom_def by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   345
  thus "subgroup (h ` H) (add_monoid S)" by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   346
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   347
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   348
lemma (in ring) ring_ideal_imp_quot_ideal:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   349
  assumes "ideal I R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   350
  shows "ideal J R \<Longrightarrow> ideal ((+>) I ` J) (R Quot I)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   351
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   352
  assume A: "ideal J R" show "ideal (((+>) I) ` J) (R Quot I)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   353
  proof (rule idealI)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   354
    show "ring (R Quot I)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   355
      by (simp add: assms(1) ideal.quotient_is_ring) 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   356
  next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   357
    have "subgroup J (add_monoid R)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   358
      by (simp add: additive_subgroup.a_subgroup A ideal.axioms(1))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   359
    moreover have "((+>) I) \<in> ring_hom R (R Quot I)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   360
      by (simp add: assms(1) ideal.rcos_ring_hom)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   361
    ultimately show "subgroup ((+>) I ` J) (add_monoid (R Quot I))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   362
      using assms(1) ideal.rcos_ring_hom_ring ring_hom_ring.img_is_add_subgroup by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   363
  next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   364
    fix a x assume "a \<in> (+>) I ` J" "x \<in> carrier (R Quot I)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   365
    then obtain i j where i: "i \<in> carrier R" "x = I +> i"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   366
                      and j: "j \<in> J" "a = I +> j"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   367
      unfolding FactRing_def using A_RCOSETS_def'[of R I] by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   368
    hence "a \<otimes>\<^bsub>R Quot I\<^esub> x = [mod I:] (I +> j) \<Otimes> (I +> i)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   369
      unfolding FactRing_def by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   370
    hence "a \<otimes>\<^bsub>R Quot I\<^esub> x = I +> (j \<otimes> i)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   371
      using ideal.rcoset_mult_add[OF assms(1), of j i] i(1) j(1) A ideal.Icarr by force
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   372
    thus "a \<otimes>\<^bsub>R Quot I\<^esub> x \<in> (+>) I ` J"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   373
      using A i(1) j(1) by (simp add: ideal.I_r_closed)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   374
  
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   375
    have "x \<otimes>\<^bsub>R Quot I\<^esub> a = [mod I:] (I +> i) \<Otimes> (I +> j)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   376
      unfolding FactRing_def i j by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   377
    hence "x \<otimes>\<^bsub>R Quot I\<^esub> a = I +> (i \<otimes> j)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   378
      using ideal.rcoset_mult_add[OF assms(1), of i j] i(1) j(1) A ideal.Icarr by force
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   379
    thus "x \<otimes>\<^bsub>R Quot I\<^esub> a \<in> (+>) I ` J"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   380
      using A i(1) j(1) by (simp add: ideal.I_l_closed)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   381
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   382
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   383
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   384
lemma (in ring_hom_ring) ideal_vimage:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   385
  assumes "ideal I S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   386
  shows "ideal { r \<in> carrier R. h r \<in> I } R" (* or (carrier R) \<inter> (h -` I) *)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   387
proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   388
  show "{ r \<in> carrier R. h r \<in> I } \<subseteq> carrier (add_monoid R)" by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   389
next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   390
  show "\<one>\<^bsub>add_monoid R\<^esub> \<in> { r \<in> carrier R. h r \<in> I }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   391
    by (simp add: additive_subgroup.zero_closed assms ideal.axioms(1))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   392
next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   393
  fix a b
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   394
  assume "a \<in> { r \<in> carrier R. h r \<in> I }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   395
     and "b \<in> { r \<in> carrier R. h r \<in> I }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   396
  hence a: "a \<in> carrier R" "h a \<in> I"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   397
    and b: "b \<in> carrier R" "h b \<in> I" by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   398
  hence "h (a \<oplus> b) = (h a) \<oplus>\<^bsub>S\<^esub> (h b)" using hom_add by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   399
  moreover have "(h a) \<oplus>\<^bsub>S\<^esub> (h b) \<in> I" using a b assms
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   400
    by (simp add: additive_subgroup.a_closed ideal.axioms(1))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   401
  ultimately show "a \<otimes>\<^bsub>add_monoid R\<^esub> b \<in> { r \<in> carrier R. h r \<in> I }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   402
    using a(1) b (1) by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   403
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   404
  have "h (\<ominus> a) = \<ominus>\<^bsub>S\<^esub> (h a)" by (simp add: a)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   405
  moreover have "\<ominus>\<^bsub>S\<^esub> (h a) \<in> I"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   406
    by (simp add: a(2) additive_subgroup.a_inv_closed assms ideal.axioms(1))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   407
  ultimately show "inv\<^bsub>add_monoid R\<^esub> a \<in> { r \<in> carrier R. h r \<in> I }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   408
    using a by (simp add: a_inv_def)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   409
next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   410
  fix a r
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   411
  assume "a \<in> { r \<in> carrier R. h r \<in> I }" and r: "r \<in> carrier R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   412
  hence a: "a \<in> carrier R" "h a \<in> I" by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   413
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   414
  have "h a \<otimes>\<^bsub>S\<^esub> h r \<in> I"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   415
    using assms a r by (simp add: ideal.I_r_closed)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   416
  thus "a \<otimes> r \<in> { r \<in> carrier R. h r \<in> I }" by (simp add: a(1) r)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   417
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   418
  have "h r \<otimes>\<^bsub>S\<^esub> h a \<in> I"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   419
    using assms a r by (simp add: ideal.I_l_closed)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   420
  thus "r \<otimes> a \<in> { r \<in> carrier R. h r \<in> I }" by (simp add: a(1) r)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   421
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   422
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   423
lemma (in ring) canonical_proj_vimage_in_carrier:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   424
  assumes "ideal I R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   425
  shows "J \<subseteq> carrier (R Quot I) \<Longrightarrow> \<Union> J \<subseteq> carrier R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   426
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   427
  assume A: "J \<subseteq> carrier (R Quot I)" show "\<Union> J \<subseteq> carrier R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   428
  proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   429
    fix j assume j: "j \<in> \<Union> J"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   430
    then obtain j' where j': "j' \<in> J" "j \<in> j'" by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   431
    then obtain r where r: "r \<in> carrier R" "j' = I +> r"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   432
      using A j' unfolding FactRing_def using A_RCOSETS_def'[of R I] by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   433
    thus "j \<in> carrier R" using j' assms
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   434
      by (meson a_r_coset_subset_G additive_subgroup.a_subset contra_subsetD ideal.axioms(1)) 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   435
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   436
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   437
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   438
lemma (in ring) canonical_proj_vimage_mem_iff:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   439
  assumes "ideal I R" "J \<subseteq> carrier (R Quot I)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   440
  shows "\<And>a. a \<in> carrier R \<Longrightarrow> (a \<in> (\<Union> J)) = (I +> a \<in> J)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   441
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   442
  fix a assume a: "a \<in> carrier R" show "(a \<in> (\<Union> J)) = (I +> a \<in> J)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   443
  proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   444
    assume "a \<in> \<Union> J"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   445
    then obtain j where j: "j \<in> J" "a \<in> j" by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   446
    then obtain r where r: "r \<in> carrier R" "j = I +> r"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   447
      using assms j unfolding FactRing_def using A_RCOSETS_def'[of R I] by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   448
    hence "I +> r = I +> a"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   449
      using add.repr_independence[of a I r] j r
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   450
      by (metis a_r_coset_def additive_subgroup.a_subgroup assms(1) ideal.axioms(1))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   451
    thus "I +> a \<in> J" using r j by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   452
  next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   453
    assume "I +> a \<in> J"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   454
    hence "\<zero> \<oplus> a \<in> I +> a"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   455
      using additive_subgroup.zero_closed[OF ideal.axioms(1)[OF assms(1)]]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   456
            a_r_coset_def'[of R I a] by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   457
    thus "a \<in> \<Union> J" using a \<open>I +> a \<in> J\<close> by auto 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   458
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   459
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   460
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   461
corollary (in ring) quot_ideal_imp_ring_ideal:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   462
  assumes "ideal I R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   463
  shows "ideal J (R Quot I) \<Longrightarrow> ideal (\<Union> J) R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   464
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   465
  assume A: "ideal J (R Quot I)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   466
  have "\<Union> J = { r \<in> carrier R. I +> r \<in> J }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   467
    using canonical_proj_vimage_in_carrier[OF assms, of J]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   468
          canonical_proj_vimage_mem_iff[OF assms, of J]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   469
          additive_subgroup.a_subset[OF ideal.axioms(1)[OF A]] by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   470
  thus "ideal (\<Union> J) R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   471
    using ring_hom_ring.ideal_vimage[OF ideal.rcos_ring_hom_ring[OF assms] A] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   472
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   473
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   474
lemma (in ring) ideal_incl_iff:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   475
  assumes "ideal I R" "ideal J R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   476
  shows "(I \<subseteq> J) = (J = (\<Union> j \<in> J. I +> j))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   477
proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   478
  assume A: "J = (\<Union> j \<in> J. I +> j)" hence "I +> \<zero> \<subseteq> J"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   479
    using additive_subgroup.zero_closed[OF ideal.axioms(1)[OF assms(2)]] by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   480
  thus "I \<subseteq> J" using additive_subgroup.a_subset[OF ideal.axioms(1)[OF assms(1)]] by simp 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   481
next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   482
  assume A: "I \<subseteq> J" show "J = (\<Union>j\<in>J. I +> j)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   483
  proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   484
    show "J \<subseteq> (\<Union> j \<in> J. I +> j)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   485
    proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   486
      fix j assume j: "j \<in> J"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   487
      have "\<zero> \<in> I" by (simp add: additive_subgroup.zero_closed assms(1) ideal.axioms(1))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   488
      hence "\<zero> \<oplus> j \<in> I +> j"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   489
        using a_r_coset_def'[of R I j] by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   490
      thus "j \<in> (\<Union>j\<in>J. I +> j)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   491
        using assms(2) j additive_subgroup.a_Hcarr ideal.axioms(1) by fastforce 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   492
    qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   493
  next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   494
    show "(\<Union> j \<in> J. I +> j) \<subseteq> J"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   495
    proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   496
      fix x assume "x \<in> (\<Union> j \<in> J. I +> j)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   497
      then obtain j where j: "j \<in> J" "x \<in> I +> j" by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   498
      then obtain i where i: "i \<in> I" "x = i \<oplus> j"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   499
        using a_r_coset_def'[of R I j] by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   500
      thus "x \<in> J"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   501
        using assms(2) j A additive_subgroup.a_closed[OF ideal.axioms(1)[OF assms(2)]] by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   502
    qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   503
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   504
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   505
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   506
theorem (in ring) quot_ideal_correspondence:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   507
  assumes "ideal I R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   508
  shows "bij_betw (\<lambda>J. (+>) I ` J) { J. ideal J R \<and> I \<subseteq> J } { J . ideal J (R Quot I) }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   509
proof (rule bij_betw_byWitness[where ?f' = "\<lambda>X. \<Union> X"])
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   510
  show "\<forall>J \<in> { J. ideal J R \<and> I \<subseteq> J }. (\<lambda>X. \<Union> X) ((+>) I ` J) = J"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   511
    using assms ideal_incl_iff by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   512
next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   513
  show "(\<lambda>J. (+>) I ` J) ` { J. ideal J R \<and> I \<subseteq> J } \<subseteq> { J. ideal J (R Quot I) }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   514
    using assms ring_ideal_imp_quot_ideal by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   515
next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   516
  show "(\<lambda>X. \<Union> X) ` { J. ideal J (R Quot I) } \<subseteq> { J. ideal J R \<and> I \<subseteq> J }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   517
  proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   518
    fix J assume "J \<in> ((\<lambda>X. \<Union> X) ` { J. ideal J (R Quot I) })"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   519
    then obtain J' where J': "ideal J' (R Quot I)" "J = \<Union> J'" by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   520
    hence "ideal J R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   521
      using assms quot_ideal_imp_ring_ideal by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   522
    moreover have "I \<in> J'"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   523
      using additive_subgroup.zero_closed[OF ideal.axioms(1)[OF J'(1)]] unfolding FactRing_def by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   524
    ultimately show "J \<in> { J. ideal J R \<and> I \<subseteq> J }" using J'(2) by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   525
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   526
next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   527
  show "\<forall>J' \<in> { J. ideal J (R Quot I) }. ((+>) I ` (\<Union> J')) = J'"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   528
  proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   529
    fix J' assume "J' \<in> { J. ideal J (R Quot I) }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   530
    hence subset: "J' \<subseteq> carrier (R Quot I) \<and> ideal J' (R Quot I)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   531
      using additive_subgroup.a_subset ideal_def by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   532
    hence "((+>) I ` (\<Union> J')) \<subseteq> J'"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   533
      using canonical_proj_vimage_in_carrier canonical_proj_vimage_mem_iff
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   534
      by (meson assms contra_subsetD image_subsetI)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   535
    moreover have "J' \<subseteq> ((+>) I ` (\<Union> J'))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   536
    proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   537
      fix x assume "x \<in> J'"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   538
      then obtain r where r: "r \<in> carrier R" "x = I +> r"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   539
        using subset unfolding FactRing_def A_RCOSETS_def'[of R I] by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   540
      hence "r \<in> (\<Union> J')"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   541
        using \<open>x \<in> J'\<close> assms canonical_proj_vimage_mem_iff subset by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   542
      thus "x \<in> ((+>) I ` (\<Union> J'))" using r(2) by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   543
    qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   544
    ultimately show "((+>) I ` (\<Union> J')) = J'" by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   545
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   546
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   547
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   548
lemma (in cring) quot_domain_imp_primeideal:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   549
  assumes "ideal P R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   550
  shows "domain (R Quot P) \<Longrightarrow> primeideal P R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   551
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   552
  assume A: "domain (R Quot P)" show "primeideal P R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   553
  proof (rule primeidealI)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   554
    show "ideal P R" using assms .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   555
    show "cring R" using is_cring .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   556
  next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   557
    show "carrier R \<noteq> P"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   558
    proof (rule ccontr)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   559
      assume "\<not> carrier R \<noteq> P" hence "carrier R = P" by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   560
      hence "\<And>I. I \<in> carrier (R Quot P) \<Longrightarrow> I = P"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   561
        unfolding FactRing_def A_RCOSETS_def' apply simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   562
        using a_coset_join2 additive_subgroup.a_subgroup assms ideal.axioms(1) by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   563
      hence "\<one>\<^bsub>(R Quot P)\<^esub> = \<zero>\<^bsub>(R Quot P)\<^esub>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   564
        by (metis assms ideal.quotient_is_ring ring.ring_simprules(2) ring.ring_simprules(6))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   565
      thus False using domain.one_not_zero[OF A] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   566
    qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   567
  next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   568
    fix a b assume a: "a \<in> carrier R" and b: "b \<in> carrier R" and ab: "a \<otimes> b \<in> P"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   569
    hence "P +> (a \<otimes> b) = \<zero>\<^bsub>(R Quot P)\<^esub>" unfolding FactRing_def
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   570
      by (simp add: a_coset_join2 additive_subgroup.a_subgroup assms ideal.axioms(1))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   571
    moreover have "(P +> a) \<otimes>\<^bsub>(R Quot P)\<^esub> (P +> b) = P +> (a \<otimes> b)" unfolding FactRing_def
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   572
      using a b by (simp add: assms ideal.rcoset_mult_add)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   573
    moreover have "P +> a \<in> carrier (R Quot P) \<and> P +> b \<in> carrier (R Quot P)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   574
      by (simp add: a b FactRing_def a_rcosetsI additive_subgroup.a_subset assms ideal.axioms(1))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   575
    ultimately have "P +> a = \<zero>\<^bsub>(R Quot P)\<^esub> \<or> P +> b = \<zero>\<^bsub>(R Quot P)\<^esub>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   576
      using domain.integral[OF A, of "P +> a" "P +> b"] by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   577
    thus "a \<in> P \<or> b \<in> P" unfolding FactRing_def apply simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   578
      using a b assms a_coset_join1 additive_subgroup.a_subgroup ideal.axioms(1) by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   579
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   580
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   581
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   582
lemma (in cring) quot_domain_iff_primeideal:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   583
  assumes "ideal P R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   584
  shows "domain (R Quot P) = primeideal P R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   585
  using quot_domain_imp_primeideal[OF assms] primeideal.quotient_is_domain[of P R] by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   586
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   587
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   588
subsection \<open>Isomorphism\<close>
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   589
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   590
definition
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   591
  ring_iso :: "_ \<Rightarrow> _ \<Rightarrow> ('a \<Rightarrow> 'b) set"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   592
  where "ring_iso R S = { h. h \<in> ring_hom R S \<and> bij_betw h (carrier R) (carrier S) }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   593
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   594
definition
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   595
  is_ring_iso :: "_ \<Rightarrow> _ \<Rightarrow> bool" (infixr "\<simeq>" 60)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   596
  where "R \<simeq> S = (ring_iso R S \<noteq> {})"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   597
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   598
definition
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   599
  morphic_prop :: "_ \<Rightarrow> ('a \<Rightarrow> bool) \<Rightarrow> bool"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   600
  where "morphic_prop R P =
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   601
           ((P \<one>\<^bsub>R\<^esub>) \<and>
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   602
            (\<forall>r \<in> carrier R. P r) \<and>
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   603
            (\<forall>r1 \<in> carrier R. \<forall>r2 \<in> carrier R. P (r1 \<otimes>\<^bsub>R\<^esub> r2)) \<and>
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   604
            (\<forall>r1 \<in> carrier R. \<forall>r2 \<in> carrier R. P (r1 \<oplus>\<^bsub>R\<^esub> r2)))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   605
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   606
lemma ring_iso_memI:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   607
  fixes R (structure) and S (structure)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   608
  assumes "\<And>x. x \<in> carrier R \<Longrightarrow> h x \<in> carrier S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   609
      and "\<And>x y. \<lbrakk> x \<in> carrier R; y \<in> carrier R \<rbrakk> \<Longrightarrow> h (x \<otimes> y) = h x \<otimes>\<^bsub>S\<^esub> h y"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   610
      and "\<And>x y. \<lbrakk> x \<in> carrier R; y \<in> carrier R \<rbrakk> \<Longrightarrow> h (x \<oplus> y) = h x \<oplus>\<^bsub>S\<^esub> h y"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   611
      and "h \<one> = \<one>\<^bsub>S\<^esub>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   612
      and "bij_betw h (carrier R) (carrier S)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   613
  shows "h \<in> ring_iso R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   614
  by (auto simp add: ring_hom_memI assms ring_iso_def)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   615
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   616
lemma ring_iso_memE:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   617
  fixes R (structure) and S (structure)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   618
  assumes "h \<in> ring_iso R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   619
  shows "\<And>x. x \<in> carrier R \<Longrightarrow> h x \<in> carrier S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   620
   and "\<And>x y. \<lbrakk> x \<in> carrier R; y \<in> carrier R \<rbrakk> \<Longrightarrow> h (x \<otimes> y) = h x \<otimes>\<^bsub>S\<^esub> h y"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   621
   and "\<And>x y. \<lbrakk> x \<in> carrier R; y \<in> carrier R \<rbrakk> \<Longrightarrow> h (x \<oplus> y) = h x \<oplus>\<^bsub>S\<^esub> h y"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   622
   and "h \<one> = \<one>\<^bsub>S\<^esub>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   623
   and "bij_betw h (carrier R) (carrier S)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   624
  using assms unfolding ring_iso_def ring_hom_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   625
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   626
lemma morphic_propI:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   627
  fixes R (structure)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   628
  assumes "P \<one>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   629
    and "\<And>r. r \<in> carrier R \<Longrightarrow> P r"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   630
    and "\<And>r1 r2. \<lbrakk> r1 \<in> carrier R; r2 \<in> carrier R \<rbrakk> \<Longrightarrow> P (r1 \<otimes> r2)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   631
    and "\<And>r1 r2. \<lbrakk> r1 \<in> carrier R; r2 \<in> carrier R \<rbrakk> \<Longrightarrow> P (r1 \<oplus> r2)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   632
  shows "morphic_prop R P"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   633
  unfolding morphic_prop_def using assms by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   634
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   635
lemma morphic_propE:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   636
  fixes R (structure)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   637
  assumes "morphic_prop R P"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   638
  shows "P \<one>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   639
    and "\<And>r. r \<in> carrier R \<Longrightarrow> P r"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   640
    and "\<And>r1 r2. \<lbrakk> r1 \<in> carrier R; r2 \<in> carrier R \<rbrakk> \<Longrightarrow> P (r1 \<otimes> r2)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   641
    and "\<And>r1 r2. \<lbrakk> r1 \<in> carrier R; r2 \<in> carrier R \<rbrakk> \<Longrightarrow> P (r1 \<oplus> r2)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   642
  using assms unfolding morphic_prop_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   643
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   644
lemma ring_iso_restrict:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   645
  assumes "f \<in> ring_iso R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   646
    and "\<And>r. r \<in> carrier R \<Longrightarrow> f r = g r"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   647
    and "ring R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   648
  shows "g \<in> ring_iso R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   649
proof (rule ring_iso_memI)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   650
  show "bij_betw g (carrier R) (carrier S)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   651
    using assms(1-2) bij_betw_cong ring_iso_memE(5) by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   652
  show "g \<one>\<^bsub>R\<^esub> = \<one>\<^bsub>S\<^esub>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   653
    using assms ring.ring_simprules(6) ring_iso_memE(4) by force
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   654
next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   655
  fix x y assume x: "x \<in> carrier R" and y: "y \<in> carrier R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   656
  show "g x \<in> carrier S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   657
    using assms(1-2) ring_iso_memE(1) x by fastforce
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   658
  show "g (x \<otimes>\<^bsub>R\<^esub> y) = g x \<otimes>\<^bsub>S\<^esub> g y"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   659
    by (metis assms ring.ring_simprules(5) ring_iso_memE(2) x y)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   660
  show "g (x \<oplus>\<^bsub>R\<^esub> y) = g x \<oplus>\<^bsub>S\<^esub> g y"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   661
    by (metis assms ring.ring_simprules(1) ring_iso_memE(3) x y)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   662
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   663
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   664
lemma ring_iso_morphic_prop:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   665
  assumes "f \<in> ring_iso R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   666
    and "morphic_prop R P"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   667
    and "\<And>r. P r \<Longrightarrow> f r = g r"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   668
  shows "g \<in> ring_iso R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   669
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   670
  have eq0: "\<And>r. r \<in> carrier R \<Longrightarrow> f r = g r"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   671
   and eq1: "f \<one>\<^bsub>R\<^esub> = g \<one>\<^bsub>R\<^esub>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   672
   and eq2: "\<And>r1 r2. \<lbrakk> r1 \<in> carrier R; r2 \<in> carrier R \<rbrakk> \<Longrightarrow> f (r1 \<otimes>\<^bsub>R\<^esub> r2) = g (r1 \<otimes>\<^bsub>R\<^esub> r2)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   673
   and eq3: "\<And>r1 r2. \<lbrakk> r1 \<in> carrier R; r2 \<in> carrier R \<rbrakk> \<Longrightarrow> f (r1 \<oplus>\<^bsub>R\<^esub> r2) = g (r1 \<oplus>\<^bsub>R\<^esub> r2)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   674
    using assms(2-3) unfolding morphic_prop_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   675
  show ?thesis
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   676
    apply (rule ring_iso_memI)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   677
    using assms(1) eq0 ring_iso_memE(1) apply fastforce
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   678
    apply (metis assms(1) eq0 eq2 ring_iso_memE(2))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   679
    apply (metis assms(1) eq0 eq3 ring_iso_memE(3))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   680
    using assms(1) eq1 ring_iso_memE(4) apply fastforce
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   681
    using assms(1) bij_betw_cong eq0 ring_iso_memE(5) by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   682
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   683
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   684
lemma (in ring) ring_hom_imp_img_ring:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   685
  assumes "h \<in> ring_hom R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   686
  shows "ring (S \<lparr> carrier := h ` (carrier R), one := h \<one>, zero := h \<zero> \<rparr>)" (is "ring ?h_img")
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   687
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   688
  have "h \<in> hom (add_monoid R) (add_monoid S)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   689
    using assms unfolding hom_def ring_hom_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   690
  hence "comm_group ((add_monoid S) \<lparr>  carrier := h ` (carrier R), one := h \<zero> \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   691
    using add.hom_imp_img_comm_group[of h "add_monoid S"] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   692
  hence comm_group: "comm_group (add_monoid ?h_img)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   693
    by (auto intro: comm_monoidI simp add: monoid.defs)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   694
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   695
  moreover have "h \<in> hom R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   696
    using assms unfolding ring_hom_def hom_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   697
  hence "monoid (S \<lparr>  carrier := h ` (carrier R), one := h \<one> \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   698
    using hom_imp_img_monoid[of h S] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   699
  hence monoid: "monoid ?h_img"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   700
    unfolding monoid_def by (simp add: monoid.defs)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   701
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   702
  show ?thesis
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   703
  proof (rule ringI, simp_all add: comm_group_abelian_groupI[OF comm_group] monoid)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   704
    fix x y z assume "x \<in> h ` carrier R" "y \<in> h ` carrier R" "z \<in> h ` carrier R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   705
    then obtain r1 r2 r3
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   706
      where r1: "r1 \<in> carrier R" "x = h r1"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   707
        and r2: "r2 \<in> carrier R" "y = h r2"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   708
        and r3: "r3 \<in> carrier R" "z = h r3" by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   709
    hence "(x \<oplus>\<^bsub>S\<^esub> y) \<otimes>\<^bsub>S\<^esub> z = h ((r1 \<oplus> r2) \<otimes> r3)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   710
      using ring_hom_memE[OF assms] by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   711
    also have " ... = h ((r1 \<otimes> r3) \<oplus> (r2 \<otimes> r3))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   712
      using l_distr[OF r1(1) r2(1) r3(1)] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   713
    also have " ... = (x \<otimes>\<^bsub>S\<^esub> z) \<oplus>\<^bsub>S\<^esub> (y \<otimes>\<^bsub>S\<^esub> z)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   714
      using ring_hom_memE[OF assms] r1 r2 r3 by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   715
    finally show "(x \<oplus>\<^bsub>S\<^esub> y) \<otimes>\<^bsub>S\<^esub> z = (x \<otimes>\<^bsub>S\<^esub> z) \<oplus>\<^bsub>S\<^esub> (y \<otimes>\<^bsub>S\<^esub> z)" .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   716
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   717
    have "z \<otimes>\<^bsub>S\<^esub> (x \<oplus>\<^bsub>S\<^esub> y) = h (r3 \<otimes> (r1 \<oplus> r2))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   718
      using ring_hom_memE[OF assms] r1 r2 r3 by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   719
    also have " ... =  h ((r3 \<otimes> r1) \<oplus> (r3 \<otimes> r2))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   720
      using r_distr[OF r1(1) r2(1) r3(1)] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   721
    also have " ... = (z \<otimes>\<^bsub>S\<^esub> x) \<oplus>\<^bsub>S\<^esub> (z \<otimes>\<^bsub>S\<^esub> y)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   722
      using ring_hom_memE[OF assms] r1 r2 r3 by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   723
    finally show "z \<otimes>\<^bsub>S\<^esub> (x \<oplus>\<^bsub>S\<^esub> y) = (z \<otimes>\<^bsub>S\<^esub> x) \<oplus>\<^bsub>S\<^esub> (z \<otimes>\<^bsub>S\<^esub> y)" .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   724
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   725
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   726
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   727
lemma (in ring) ring_iso_imp_img_ring:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   728
  assumes "h \<in> ring_iso R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   729
  shows "ring (S \<lparr> one := h \<one>, zero := h \<zero> \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   730
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   731
  have "ring (S \<lparr> carrier := h ` (carrier R), one := h \<one>, zero := h \<zero> \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   732
    using ring_hom_imp_img_ring[of h S] assms unfolding ring_iso_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   733
  moreover have "h ` (carrier R) = carrier S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   734
    using assms unfolding ring_iso_def bij_betw_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   735
  ultimately show ?thesis by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   736
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   737
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   738
lemma (in cring) ring_iso_imp_img_cring:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   739
  assumes "h \<in> ring_iso R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   740
  shows "cring (S \<lparr> one := h \<one>, zero := h \<zero> \<rparr>)" (is "cring ?h_img")
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   741
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   742
  note m_comm
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   743
  interpret h_img?: ring ?h_img
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   744
    using ring_iso_imp_img_ring[OF assms] .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   745
  show ?thesis 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   746
  proof (unfold_locales)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   747
    fix x y assume "x \<in> carrier ?h_img" "y \<in> carrier ?h_img"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   748
    then obtain r1 r2
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   749
      where r1: "r1 \<in> carrier R" "x = h r1"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   750
        and r2: "r2 \<in> carrier R" "y = h r2"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   751
      using assms image_iff[where ?f = h and ?A = "carrier R"]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   752
      unfolding ring_iso_def bij_betw_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   753
    have "x \<otimes>\<^bsub>(?h_img)\<^esub> y = h (r1 \<otimes> r2)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   754
      using assms r1 r2 unfolding ring_iso_def ring_hom_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   755
    also have " ... = h (r2 \<otimes> r1)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   756
      using m_comm[OF r1(1) r2(1)] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   757
    also have " ... = y \<otimes>\<^bsub>(?h_img)\<^esub> x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   758
      using assms r1 r2 unfolding ring_iso_def ring_hom_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   759
    finally show "x \<otimes>\<^bsub>(?h_img)\<^esub> y = y \<otimes>\<^bsub>(?h_img)\<^esub> x" .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   760
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   761
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   762
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   763
lemma (in domain) ring_iso_imp_img_domain:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   764
  assumes "h \<in> ring_iso R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   765
  shows "domain (S \<lparr> one := h \<one>, zero := h \<zero> \<rparr>)" (is "domain ?h_img")
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   766
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   767
  note aux = m_closed integral one_not_zero one_closed zero_closed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   768
  interpret h_img?: cring ?h_img
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   769
    using ring_iso_imp_img_cring[OF assms] .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   770
  show ?thesis 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   771
  proof (unfold_locales)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   772
    show "\<one>\<^bsub>?h_img\<^esub> \<noteq> \<zero>\<^bsub>?h_img\<^esub>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   773
      using ring_iso_memE(5)[OF assms] aux(3-4)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   774
      unfolding bij_betw_def inj_on_def by force
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   775
  next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   776
    fix a b
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   777
    assume A: "a \<otimes>\<^bsub>?h_img\<^esub> b = \<zero>\<^bsub>?h_img\<^esub>" "a \<in> carrier ?h_img" "b \<in> carrier ?h_img"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   778
    then obtain r1 r2
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   779
      where r1: "r1 \<in> carrier R" "a = h r1"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   780
        and r2: "r2 \<in> carrier R" "b = h r2"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   781
      using assms image_iff[where ?f = h and ?A = "carrier R"]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   782
      unfolding ring_iso_def bij_betw_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   783
    hence "a \<otimes>\<^bsub>?h_img\<^esub> b = h (r1 \<otimes> r2)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   784
      using assms r1 r2 unfolding ring_iso_def ring_hom_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   785
    hence "h (r1 \<otimes> r2) = h \<zero>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   786
      using A(1) by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   787
    hence "r1 \<otimes> r2 = \<zero>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   788
      using ring_iso_memE(5)[OF assms] aux(1)[OF r1(1) r2(1)] aux(5)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   789
      unfolding bij_betw_def inj_on_def by force
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   790
    hence "r1 = \<zero> \<or> r2 = \<zero>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   791
      using aux(2)[OF _ r1(1) r2(1)] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   792
    thus "a = \<zero>\<^bsub>?h_img\<^esub> \<or> b = \<zero>\<^bsub>?h_img\<^esub>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   793
      unfolding r1 r2 by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   794
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   795
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   796
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   797
lemma (in field) ring_iso_imp_img_field:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   798
  assumes "h \<in> ring_iso R S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   799
  shows "field (S \<lparr> one := h \<one>, zero := h \<zero> \<rparr>)" (is "field ?h_img")
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   800
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   801
  interpret h_img?: domain ?h_img
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   802
    using ring_iso_imp_img_domain[OF assms] .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   803
  show ?thesis
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   804
  proof (unfold_locales, auto simp add: Units_def)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   805
    interpret field R using field_axioms .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   806
    fix a assume a: "a \<in> carrier S" "a \<otimes>\<^bsub>S\<^esub> h \<zero> = h \<one>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   807
    then obtain r where r: "r \<in> carrier R" "a = h r"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   808
      using assms image_iff[where ?f = h and ?A = "carrier R"]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   809
      unfolding ring_iso_def bij_betw_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   810
    have "a \<otimes>\<^bsub>S\<^esub> h \<zero> = h (r \<otimes> \<zero>)" unfolding r(2)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   811
      using ring_iso_memE(2)[OF assms r(1)] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   812
    hence "h \<one> = h \<zero>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   813
      using r(1) a(2) by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   814
    thus False
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   815
      using ring_iso_memE(5)[OF assms]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   816
      unfolding bij_betw_def inj_on_def by force
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   817
  next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   818
    interpret field R using field_axioms .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   819
    fix s assume s: "s \<in> carrier S" "s \<noteq> h \<zero>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   820
    then obtain r where r: "r \<in> carrier R" "s = h r"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   821
      using assms image_iff[where ?f = h and ?A = "carrier R"]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   822
      unfolding ring_iso_def bij_betw_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   823
    hence "r \<noteq> \<zero>" using s(2) by auto 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   824
    hence inv_r: "inv r \<in> carrier R" "inv r \<noteq> \<zero>" "r \<otimes> inv r = \<one>" "inv r \<otimes> r = \<one>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   825
      using field_Units r(1) by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   826
    have "h (inv r) \<otimes>\<^bsub>S\<^esub> h r = h \<one>" and "h r \<otimes>\<^bsub>S\<^esub> h (inv r) = h \<one>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   827
      using ring_iso_memE(2)[OF assms inv_r(1) r(1)] inv_r(3-4)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   828
            ring_iso_memE(2)[OF assms r(1) inv_r(1)] by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   829
    thus "\<exists>s' \<in> carrier S. s' \<otimes>\<^bsub>S\<^esub> s = h \<one> \<and> s \<otimes>\<^bsub>S\<^esub> s' = h \<one>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   830
      using ring_iso_memE(1)[OF assms inv_r(1)] r(2) by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   831
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   832
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   833
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   834
lemma ring_iso_same_card: "R \<simeq> S \<Longrightarrow> card (carrier R) = card (carrier S)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   835
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   836
  assume "R \<simeq> S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   837
  then obtain h where "bij_betw h (carrier R) (carrier S)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   838
    unfolding is_ring_iso_def ring_iso_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   839
  thus "card (carrier R) = card (carrier S)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   840
    using bij_betw_same_card[of h "carrier R" "carrier S"] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   841
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   842
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   843
lemma ring_iso_set_refl: "id \<in> ring_iso R R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   844
  by (rule ring_iso_memI) (auto)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   845
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   846
corollary ring_iso_refl: "R \<simeq> R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   847
  using is_ring_iso_def ring_iso_set_refl by auto 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   848
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   849
lemma ring_iso_set_trans:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   850
  "\<lbrakk> f \<in> ring_iso R S; g \<in> ring_iso S Q \<rbrakk> \<Longrightarrow> (g \<circ> f) \<in> ring_iso R Q"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   851
  unfolding ring_iso_def using bij_betw_trans ring_hom_trans by fastforce 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   852
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   853
corollary ring_iso_trans: "\<lbrakk> R \<simeq> S; S \<simeq> Q \<rbrakk> \<Longrightarrow> R \<simeq> Q"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   854
  using ring_iso_set_trans unfolding is_ring_iso_def by blast 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   855
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   856
lemma ring_iso_set_sym:
68604
57721285d4ef elimination of some "smt"
paulson <lp15@cam.ac.uk>
parents: 68584
diff changeset
   857
  assumes "ring R" and h: "h \<in> ring_iso R S"
57721285d4ef elimination of some "smt"
paulson <lp15@cam.ac.uk>
parents: 68584
diff changeset
   858
  shows "(inv_into (carrier R) h) \<in> ring_iso S R"
68551
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   859
proof -
68604
57721285d4ef elimination of some "smt"
paulson <lp15@cam.ac.uk>
parents: 68584
diff changeset
   860
  have h_hom: "h \<in> ring_hom R S"
68551
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   861
    and h_surj: "h ` (carrier R) = (carrier S)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   862
    and h_inj:  "\<And> x1 x2. \<lbrakk> x1 \<in> carrier R; x2 \<in> carrier R \<rbrakk> \<Longrightarrow>  h x1 = h x2 \<Longrightarrow> x1 = x2"
68604
57721285d4ef elimination of some "smt"
paulson <lp15@cam.ac.uk>
parents: 68584
diff changeset
   863
    using h unfolding ring_iso_def bij_betw_def inj_on_def by auto
68551
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   864
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   865
  have h_inv_bij: "bij_betw (inv_into (carrier R) h) (carrier S) (carrier R)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   866
      using bij_betw_inv_into h ring_iso_def by fastforce
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   867
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   868
  show "inv_into (carrier R) h \<in> ring_iso S R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   869
    apply (rule ring_iso_memI)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   870
    apply (simp add: h_surj inv_into_into)
68604
57721285d4ef elimination of some "smt"
paulson <lp15@cam.ac.uk>
parents: 68584
diff changeset
   871
       apply (auto simp add: h_inv_bij)
57721285d4ef elimination of some "smt"
paulson <lp15@cam.ac.uk>
parents: 68584
diff changeset
   872
    using ring_iso_memE [OF h] bij_betwE [OF h_inv_bij] 
57721285d4ef elimination of some "smt"
paulson <lp15@cam.ac.uk>
parents: 68584
diff changeset
   873
    apply (simp_all add: \<open>ring R\<close> bij_betw_def bij_betw_inv_into_right inv_into_f_eq ring.ring_simprules(5))
57721285d4ef elimination of some "smt"
paulson <lp15@cam.ac.uk>
parents: 68584
diff changeset
   874
    using ring_iso_memE [OF h] bij_betw_inv_into_right [of h "carrier R" "carrier S"]
57721285d4ef elimination of some "smt"
paulson <lp15@cam.ac.uk>
parents: 68584
diff changeset
   875
    apply (simp add: \<open>ring R\<close> inv_into_f_eq ring.ring_simprules(1))
57721285d4ef elimination of some "smt"
paulson <lp15@cam.ac.uk>
parents: 68584
diff changeset
   876
    by (simp add: \<open>ring R\<close> inv_into_f_eq ring.ring_simprules(6))
68551
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   877
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   878
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   879
corollary ring_iso_sym:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   880
  assumes "ring R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   881
  shows "R \<simeq> S \<Longrightarrow> S \<simeq> R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   882
  using assms ring_iso_set_sym unfolding is_ring_iso_def by auto 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   883
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   884
lemma (in ring_hom_ring) the_elem_simp [simp]:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   885
  "\<And>x. x \<in> carrier R \<Longrightarrow> the_elem (h ` ((a_kernel R S h) +> x)) = h x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   886
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   887
  fix x assume x: "x \<in> carrier R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   888
  hence "h x \<in> h ` ((a_kernel R S h) +> x)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   889
    using homeq_imp_rcos by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   890
  thus "the_elem (h ` ((a_kernel R S h) +> x)) = h x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   891
    by (metis (no_types, lifting) x empty_iff homeq_imp_rcos rcos_imp_homeq the_elem_image_unique)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   892
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   893
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   894
lemma (in ring_hom_ring) the_elem_inj:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   895
  "\<And>X Y. \<lbrakk> X \<in> carrier (R Quot (a_kernel R S h)); Y \<in> carrier (R Quot (a_kernel R S h)) \<rbrakk> \<Longrightarrow>
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   896
           the_elem (h ` X) = the_elem (h ` Y) \<Longrightarrow> X = Y"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   897
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   898
  fix X Y
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   899
  assume "X \<in> carrier (R Quot (a_kernel R S h))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   900
     and "Y \<in> carrier (R Quot (a_kernel R S h))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   901
     and Eq: "the_elem (h ` X) = the_elem (h ` Y)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   902
  then obtain x y where x: "x \<in> carrier R" "X = (a_kernel R S h) +> x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   903
                    and y: "y \<in> carrier R" "Y = (a_kernel R S h) +> y"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   904
    unfolding FactRing_def A_RCOSETS_def' by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   905
  hence "h x = h y" using Eq by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   906
  hence "x \<ominus> y \<in> (a_kernel R S h)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   907
    by (simp add: a_minus_def abelian_subgroup.a_rcos_module_imp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   908
                  abelian_subgroup_a_kernel homeq_imp_rcos x(1) y(1))
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   909
  thus "X = Y"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   910
    by (metis R.a_coset_add_inv1 R.minus_eq abelian_subgroup.a_rcos_const
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   911
        abelian_subgroup_a_kernel additive_subgroup.a_subset additive_subgroup_a_kernel x y)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   912
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   913
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   914
lemma (in ring_hom_ring) quot_mem:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   915
  "\<And>X. X \<in> carrier (R Quot (a_kernel R S h)) \<Longrightarrow> \<exists>x \<in> carrier R. X = (a_kernel R S h) +> x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   916
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   917
  fix X assume "X \<in> carrier (R Quot (a_kernel R S h))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   918
  thus "\<exists>x \<in> carrier R. X = (a_kernel R S h) +> x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   919
    unfolding FactRing_def RCOSETS_def A_RCOSETS_def by (simp add: a_r_coset_def)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   920
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   921
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   922
lemma (in ring_hom_ring) the_elem_wf:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   923
  "\<And>X. X \<in> carrier (R Quot (a_kernel R S h)) \<Longrightarrow> \<exists>y \<in> carrier S. (h ` X) = { y }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   924
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   925
  fix X assume "X \<in> carrier (R Quot (a_kernel R S h))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   926
  then obtain x where x: "x \<in> carrier R" and X: "X = (a_kernel R S h) +> x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   927
    using quot_mem by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   928
  hence "\<And>x'. x' \<in> X \<Longrightarrow> h x' = h x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   929
  proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   930
    fix x' assume "x' \<in> X" hence "x' \<in> (a_kernel R S h) +> x" using X by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   931
    then obtain k where k: "k \<in> a_kernel R S h" "x' = k \<oplus> x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   932
      by (metis R.add.inv_closed R.add.m_assoc R.l_neg R.r_zero
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   933
          abelian_subgroup.a_elemrcos_carrier
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   934
          abelian_subgroup.a_rcos_module_imp abelian_subgroup_a_kernel x)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   935
    hence "h x' = h k \<oplus>\<^bsub>S\<^esub> h x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   936
      by (meson additive_subgroup.a_Hcarr additive_subgroup_a_kernel hom_add x)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   937
    also have " ... =  h x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   938
      using k by (auto simp add: x)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   939
    finally show "h x' = h x" .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   940
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   941
  moreover have "h x \<in> h ` X"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   942
    by (simp add: X homeq_imp_rcos x)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   943
  ultimately have "(h ` X) = { h x }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   944
    by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   945
  thus "\<exists>y \<in> carrier S. (h ` X) = { y }" using x by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   946
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   947
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   948
corollary (in ring_hom_ring) the_elem_wf':
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   949
  "\<And>X. X \<in> carrier (R Quot (a_kernel R S h)) \<Longrightarrow> \<exists>r \<in> carrier R. (h ` X) = { h r }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   950
  using the_elem_wf by (metis quot_mem the_elem_eq the_elem_simp) 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   951
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   952
lemma (in ring_hom_ring) the_elem_hom:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   953
  "(\<lambda>X. the_elem (h ` X)) \<in> ring_hom (R Quot (a_kernel R S h)) S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   954
proof (rule ring_hom_memI)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   955
  show "\<And>x. x \<in> carrier (R Quot a_kernel R S h) \<Longrightarrow> the_elem (h ` x) \<in> carrier S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   956
    using the_elem_wf by fastforce
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   957
  
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   958
  show "the_elem (h ` \<one>\<^bsub>R Quot a_kernel R S h\<^esub>) = \<one>\<^bsub>S\<^esub>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   959
    unfolding FactRing_def  using the_elem_simp[of "\<one>\<^bsub>R\<^esub>"] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   960
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   961
  fix X Y
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   962
  assume "X \<in> carrier (R Quot a_kernel R S h)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   963
     and "Y \<in> carrier (R Quot a_kernel R S h)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   964
  then obtain x y where x: "x \<in> carrier R" "X = (a_kernel R S h) +> x"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   965
                    and y: "y \<in> carrier R" "Y = (a_kernel R S h) +> y"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   966
    using quot_mem by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   967
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   968
  have "X \<otimes>\<^bsub>R Quot a_kernel R S h\<^esub> Y = (a_kernel R S h) +> (x \<otimes> y)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   969
    by (simp add: FactRing_def ideal.rcoset_mult_add kernel_is_ideal x y)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   970
  thus "the_elem (h ` (X \<otimes>\<^bsub>R Quot a_kernel R S h\<^esub> Y)) = the_elem (h ` X) \<otimes>\<^bsub>S\<^esub> the_elem (h ` Y)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   971
    by (simp add: x y)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   972
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   973
  have "X \<oplus>\<^bsub>R Quot a_kernel R S h\<^esub> Y = (a_kernel R S h) +> (x \<oplus> y)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   974
    using ideal.rcos_ring_hom kernel_is_ideal ring_hom_add x y by fastforce
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   975
  thus "the_elem (h ` (X \<oplus>\<^bsub>R Quot a_kernel R S h\<^esub> Y)) = the_elem (h ` X) \<oplus>\<^bsub>S\<^esub> the_elem (h ` Y)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   976
    by (simp add: x y)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   977
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   978
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   979
lemma (in ring_hom_ring) the_elem_surj:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   980
    "(\<lambda>X. (the_elem (h ` X))) ` carrier (R Quot (a_kernel R S h)) = (h ` (carrier R))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   981
proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   982
  show "(\<lambda>X. the_elem (h ` X)) ` carrier (R Quot a_kernel R S h) \<subseteq> h ` carrier R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   983
    using the_elem_wf' by fastforce
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   984
next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   985
  show "h ` carrier R \<subseteq> (\<lambda>X. the_elem (h ` X)) ` carrier (R Quot a_kernel R S h)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   986
  proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   987
    fix y assume "y \<in> h ` carrier R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   988
    then obtain x where x: "x \<in> carrier R" "h x = y"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   989
      by (metis image_iff)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   990
    hence "the_elem (h ` ((a_kernel R S h) +> x)) = y" by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   991
    moreover have "(a_kernel R S h) +> x \<in> carrier (R Quot (a_kernel R S h))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   992
     unfolding FactRing_def RCOSETS_def A_RCOSETS_def by (auto simp add: x a_r_coset_def)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   993
    ultimately show "y \<in> (\<lambda>X. (the_elem (h ` X))) ` carrier (R Quot (a_kernel R S h))" by blast
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   994
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   995
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   996
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   997
proposition (in ring_hom_ring) FactRing_iso_set_aux:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   998
  "(\<lambda>X. the_elem (h ` X)) \<in> ring_iso (R Quot (a_kernel R S h)) (S \<lparr> carrier := h ` (carrier R) \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
   999
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1000
  have "bij_betw (\<lambda>X. the_elem (h ` X)) (carrier (R Quot a_kernel R S h)) (h ` (carrier R))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1001
    unfolding bij_betw_def inj_on_def using the_elem_surj the_elem_inj by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1002
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1003
  moreover
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1004
  have "(\<lambda>X. the_elem (h ` X)): carrier (R Quot (a_kernel R S h)) \<rightarrow> h ` (carrier R)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1005
    using the_elem_wf' by fastforce
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1006
  hence "(\<lambda>X. the_elem (h ` X)) \<in> ring_hom (R Quot (a_kernel R S h)) (S \<lparr> carrier := h ` (carrier R) \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1007
    using the_elem_hom the_elem_wf' unfolding ring_hom_def by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1008
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1009
  ultimately show ?thesis unfolding ring_iso_def using the_elem_hom by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1010
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1011
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1012
theorem (in ring_hom_ring) FactRing_iso_set:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1013
  assumes "h ` carrier R = carrier S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1014
  shows "(\<lambda>X. the_elem (h ` X)) \<in> ring_iso (R Quot (a_kernel R S h)) S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1015
  using FactRing_iso_set_aux assms by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1016
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1017
corollary (in ring_hom_ring) FactRing_iso:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1018
  assumes "h ` carrier R = carrier S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1019
  shows "R Quot (a_kernel R S h) \<simeq> S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1020
  using FactRing_iso_set assms is_ring_iso_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1021
68583
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1022
corollary (in ring) FactRing_zeroideal:
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1023
  shows "R Quot { \<zero> } \<simeq> R" and "R \<simeq> R Quot { \<zero> }"
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1024
proof -
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1025
  have "ring_hom_ring R R id"
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1026
    using ring_axioms by (auto intro: ring_hom_ringI)
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1027
  moreover have "a_kernel R R id = { \<zero> }"
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1028
    unfolding a_kernel_def' by auto
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1029
  ultimately show "R Quot { \<zero> } \<simeq> R" and "R \<simeq> R Quot { \<zero> }"
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1030
    using ring_hom_ring.FactRing_iso[of R R id]
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1031
          ring_iso_sym[OF ideal.quotient_is_ring[OF zeroideal], of R] by auto
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1032
qed
654e73d05495 even more from Paulo
paulson <lp15@cam.ac.uk>
parents: 68551
diff changeset
  1033
68551
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1034
lemma (in ring_hom_ring) img_is_ring: "ring (S \<lparr> carrier := h ` (carrier R) \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1035
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1036
  let ?the_elem = "\<lambda>X. the_elem (h ` X)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1037
  have FactRing_is_ring: "ring (R Quot (a_kernel R S h))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1038
    by (simp add: ideal.quotient_is_ring kernel_is_ideal)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1039
  have "ring ((S \<lparr> carrier := ?the_elem ` (carrier (R Quot (a_kernel R S h))) \<rparr>)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1040
                 \<lparr>     one := ?the_elem \<one>\<^bsub>(R Quot (a_kernel R S h))\<^esub>,
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1041
                      zero := ?the_elem \<zero>\<^bsub>(R Quot (a_kernel R S h))\<^esub> \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1042
    using ring.ring_iso_imp_img_ring[OF FactRing_is_ring, of ?the_elem
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1043
          "S \<lparr> carrier := ?the_elem ` (carrier (R Quot (a_kernel R S h))) \<rparr>"]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1044
          FactRing_iso_set_aux the_elem_surj by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1045
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1046
  moreover
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1047
  have "\<zero> \<in> (a_kernel R S h)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1048
    using a_kernel_def'[of R S h] by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1049
  hence "\<one> \<in> (a_kernel R S h) +> \<one>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1050
    using a_r_coset_def'[of R "a_kernel R S h" \<one>] by force
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1051
  hence "\<one>\<^bsub>S\<^esub> \<in> (h ` ((a_kernel R S h) +> \<one>))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1052
    using hom_one by force
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1053
  hence "?the_elem \<one>\<^bsub>(R Quot (a_kernel R S h))\<^esub> = \<one>\<^bsub>S\<^esub>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1054
    using the_elem_wf[of "(a_kernel R S h) +> \<one>"] by (simp add: FactRing_def)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1055
  
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1056
  moreover
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1057
  have "\<zero>\<^bsub>S\<^esub> \<in> (h ` (a_kernel R S h))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1058
    using a_kernel_def'[of R S h] hom_zero by force
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1059
  hence "\<zero>\<^bsub>S\<^esub> \<in> (h ` \<zero>\<^bsub>(R Quot (a_kernel R S h))\<^esub>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1060
    by (simp add: FactRing_def)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1061
  hence "?the_elem \<zero>\<^bsub>(R Quot (a_kernel R S h))\<^esub> = \<zero>\<^bsub>S\<^esub>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1062
    using the_elem_wf[OF ring.ring_simprules(2)[OF FactRing_is_ring]]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1063
    by (metis singletonD the_elem_eq) 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1064
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1065
  ultimately
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1066
  have "ring ((S \<lparr> carrier := h ` (carrier R) \<rparr>) \<lparr> one := \<one>\<^bsub>S\<^esub>, zero := \<zero>\<^bsub>S\<^esub> \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1067
    using the_elem_surj by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1068
  thus ?thesis
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1069
    by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1070
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1071
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1072
lemma (in ring_hom_ring) img_is_cring:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1073
  assumes "cring S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1074
  shows "cring (S \<lparr> carrier := h ` (carrier R) \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1075
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1076
  interpret ring "S \<lparr> carrier := h ` (carrier R) \<rparr>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1077
    using img_is_ring .
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1078
  show ?thesis
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1079
    apply unfold_locales
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1080
    using assms unfolding cring_def comm_monoid_def comm_monoid_axioms_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1081
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1082
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1083
lemma (in ring_hom_ring) img_is_domain:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1084
  assumes "domain S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1085
  shows "domain (S \<lparr> carrier := h ` (carrier R) \<rparr>)"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1086
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1087
  interpret cring "S \<lparr> carrier := h ` (carrier R) \<rparr>"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1088
    using img_is_cring assms unfolding domain_def by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1089
  show ?thesis
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1090
    apply unfold_locales
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1091
    using assms unfolding domain_def domain_axioms_def apply auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1092
    using hom_closed by blast 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1093
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1094
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1095
proposition (in ring_hom_ring) primeideal_vimage:
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1096
  assumes "cring R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1097
  shows "primeideal P S \<Longrightarrow> primeideal { r \<in> carrier R. h r \<in> P } R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1098
proof -
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1099
  assume A: "primeideal P S"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1100
  hence is_ideal: "ideal P S" unfolding primeideal_def by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1101
  have "ring_hom_ring R (S Quot P) (((+>\<^bsub>S\<^esub>) P) \<circ> h)" (is "ring_hom_ring ?A ?B ?h")
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1102
    using ring_hom_trans[OF homh, of "(+>\<^bsub>S\<^esub>) P" "S Quot P"]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1103
          ideal.rcos_ring_hom_ring[OF is_ideal] assms
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1104
    unfolding ring_hom_ring_def ring_hom_ring_axioms_def cring_def by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1105
  then interpret hom: ring_hom_ring R "S Quot P" "((+>\<^bsub>S\<^esub>) P) \<circ> h" by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1106
  
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1107
  have "inj_on (\<lambda>X. the_elem (?h ` X)) (carrier (R Quot (a_kernel R (S Quot P) ?h)))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1108
    using hom.the_elem_inj unfolding inj_on_def by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1109
  moreover
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1110
  have "ideal (a_kernel R (S Quot P) ?h) R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1111
    using hom.kernel_is_ideal by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1112
  have hom': "ring_hom_ring (R Quot (a_kernel R (S Quot P) ?h)) (S Quot P) (\<lambda>X. the_elem (?h ` X))"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1113
    using hom.the_elem_hom hom.kernel_is_ideal
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1114
    by (meson hom.ring_hom_ring_axioms ideal.rcos_ring_hom_ring ring_hom_ring_axioms_def ring_hom_ring_def)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1115
  
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1116
  ultimately
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1117
  have "primeideal (a_kernel R (S Quot P) ?h) R"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1118
    using ring_hom_ring.inj_on_domain[OF hom'] primeideal.quotient_is_domain[OF A]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1119
          cring.quot_domain_imp_primeideal[OF assms hom.kernel_is_ideal] by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1120
  
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1121
  moreover have "a_kernel R (S Quot P) ?h = { r \<in> carrier R. h r \<in> P }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1122
  proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1123
    show "a_kernel R (S Quot P) ?h \<subseteq> { r \<in> carrier R. h r \<in> P }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1124
    proof 
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1125
      fix r assume "r \<in> a_kernel R (S Quot P) ?h"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1126
      hence r: "r \<in> carrier R" "P +>\<^bsub>S\<^esub> (h r) = P"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1127
        unfolding a_kernel_def kernel_def FactRing_def by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1128
      hence "h r \<in> P"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1129
        using S.a_rcosI R.l_zero S.l_zero additive_subgroup.a_subset[OF ideal.axioms(1)[OF is_ideal]]
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1130
              additive_subgroup.zero_closed[OF ideal.axioms(1)[OF is_ideal]] hom_closed by metis
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1131
      thus "r \<in> { r \<in> carrier R. h r \<in> P }" using r by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1132
    qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1133
  next
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1134
    show "{ r \<in> carrier R. h r \<in> P } \<subseteq> a_kernel R (S Quot P) ?h"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1135
    proof
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1136
      fix r assume "r \<in> { r \<in> carrier R. h r \<in> P }"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1137
      hence r: "r \<in> carrier R" "h r \<in> P" by simp_all
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1138
      hence "?h r = P"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1139
        by (simp add: S.a_coset_join2 additive_subgroup.a_subgroup ideal.axioms(1) is_ideal)
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1140
      thus "r \<in> a_kernel R (S Quot P) ?h"
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1141
        unfolding a_kernel_def kernel_def FactRing_def using r(1) by auto
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1142
    qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1143
  qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1144
  ultimately show "primeideal { r \<in> carrier R. h r \<in> P } R" by simp
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1145
qed
b680e74eb6f2 More on Algebra by Paulo and Martin
paulson <lp15@cam.ac.uk>
parents: 67443
diff changeset
  1146
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
  1147
end