src/HOL/Algebra/abstract/Ideal2.thy
author haftmann
Tue, 23 Feb 2010 10:11:12 +0100
changeset 35315 fbdc860d87a3
parent 26342 0f65fa163304
child 35849 b5522b51cb1e
permissions -rw-r--r--
dropped axclass
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
     1
(*
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
     2
    Ideals for commutative rings
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
     3
    Author: Clemens Ballarin, started 24 September 1999
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 Ideal2 imports Ring2 begin
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
     7
21423
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
     8
definition
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
     9
  is_ideal :: "('a::ring) set => bool" where
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    10
  "is_ideal I \<longleftrightarrow> (ALL a: I. ALL b: I. a + b : I) &
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    11
                           (ALL a: I. - a : I) & 0 : I &
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    12
                           (ALL a: I. ALL r. a * r : I)"
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    13
21423
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    14
definition
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    15
  ideal_of :: "('a::ring) set => 'a set" where
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    16
  "ideal_of S = Inter {I. is_ideal I & S <= I}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    17
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    18
definition
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    19
  is_pideal :: "('a::ring) set => bool" where
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    20
  "is_pideal I \<longleftrightarrow> (EX a. I = ideal_of {a})"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    21
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    22
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    23
text {* Principle ideal domains *}
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
    24
35315
fbdc860d87a3 dropped axclass
haftmann
parents: 26342
diff changeset
    25
class pid =
fbdc860d87a3 dropped axclass
haftmann
parents: 26342
diff changeset
    26
  assumes pid_ax: "is_ideal (I :: 'a::domain \<Rightarrow> _) \<Longrightarrow> is_pideal I"
21423
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    27
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    28
(* is_ideal *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    29
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    30
lemma is_idealI:
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    31
  "!! I. [| !! a b. [| a:I; b:I |] ==> a + b : I;  
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    32
      !! a. a:I ==> - a : I; 0 : I;  
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    33
      !! a r. a:I ==> a * r : I |] ==> is_ideal I"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    34
  unfolding is_ideal_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    35
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    36
lemma is_ideal_add [simp]: "[| is_ideal I; a:I; b:I |] ==> a + b : I"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    37
  unfolding is_ideal_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    38
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    39
lemma is_ideal_uminus [simp]: "[| is_ideal I; a:I |] ==> - a : I"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    40
  unfolding is_ideal_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    41
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    42
lemma is_ideal_zero [simp]: "[| is_ideal I |] ==> 0 : I"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    43
  unfolding is_ideal_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    44
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    45
lemma is_ideal_mult [simp]: "[| is_ideal I; a:I |] ==> a * r : I"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    46
  unfolding is_ideal_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    47
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    48
lemma is_ideal_dvd: "[| a dvd b; is_ideal I; a:I |] ==> b:I"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    49
  unfolding is_ideal_def dvd_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    50
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    51
lemma UNIV_is_ideal [simp]: "is_ideal (UNIV::('a::ring) set)"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    52
  unfolding is_ideal_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    53
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    54
lemma zero_is_ideal [simp]: "is_ideal {0::'a::ring}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    55
  unfolding is_ideal_def by auto
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    56
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    57
lemma is_ideal_1: "is_ideal {x::'a::ring. a dvd x}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    58
  apply (rule is_idealI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    59
  apply auto
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    60
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    61
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    62
lemma is_ideal_2: "is_ideal {x::'a::ring. EX u v. x = a * u + b * v}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    63
  apply (rule is_idealI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    64
  apply auto
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    65
     apply (rule_tac x = "u+ua" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    66
     apply (rule_tac x = "v+va" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    67
     apply (rule_tac [2] x = "-u" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    68
     apply (rule_tac [2] x = "-v" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    69
     apply (rule_tac [3] x = "0" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    70
     apply (rule_tac [3] x = "0" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    71
     apply (rule_tac [4] x = "u * r" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    72
     apply (rule_tac [4] x = "v * r" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    73
  apply simp_all
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    74
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    75
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    76
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    77
(* ideal_of *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    78
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    79
lemma ideal_of_is_ideal: "is_ideal (ideal_of S)"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    80
  unfolding is_ideal_def ideal_of_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    81
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    82
lemma generator_in_ideal: "a:S ==> a : (ideal_of S)"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    83
  unfolding ideal_of_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    84
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    85
lemma ideal_of_one_eq: "ideal_of {1::'a::ring} = UNIV"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    86
  apply (unfold ideal_of_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    87
  apply (force dest: is_ideal_mult simp add: l_one)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    88
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    89
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    90
lemma ideal_of_empty_eq: "ideal_of {} = {0::'a::ring}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    91
  apply (unfold ideal_of_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    92
  apply (rule subset_antisym)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    93
   apply (rule subsetI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    94
   apply (drule InterD)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    95
    prefer 2 apply assumption
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    96
   apply (auto simp add: is_ideal_zero)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    97
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    98
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
    99
lemma pideal_structure: "ideal_of {a} = {x::'a::ring. a dvd x}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   100
  apply (unfold ideal_of_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   101
  apply (rule subset_antisym)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   102
   apply (rule subsetI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   103
   apply (drule InterD)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   104
    prefer 2 apply assumption
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   105
   apply (auto intro: is_ideal_1)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   106
  apply (simp add: is_ideal_dvd)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   107
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   108
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   109
lemma ideal_of_2_structure:
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   110
    "ideal_of {a, b} = {x::'a::ring. EX u v. x = a * u + b * v}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   111
  apply (unfold ideal_of_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   112
  apply (rule subset_antisym)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   113
   apply (rule subsetI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   114
   apply (drule InterD)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   115
    prefer 2 apply assumption
26342
0f65fa163304 more antiquotations;
wenzelm
parents: 23894
diff changeset
   116
   apply (tactic {* auto_tac (@{claset} addIs [@{thm is_ideal_2}],
0f65fa163304 more antiquotations;
wenzelm
parents: 23894
diff changeset
   117
     @{simpset} delsimprocs [ring_simproc]) *})
21423
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   118
   apply (rule_tac x = "1" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   119
   apply (rule_tac x = "0" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   120
   apply (rule_tac [2] x = "0" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   121
   apply (rule_tac [2] x = "1" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   122
   apply simp
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   123
  apply simp
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   124
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   125
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   126
lemma ideal_of_mono: "A <= B ==> ideal_of A <= ideal_of B"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   127
  unfolding ideal_of_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   128
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   129
lemma ideal_of_zero_eq: "ideal_of {0::'a::ring} = {0}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   130
  apply (simp add: pideal_structure)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   131
  apply (rule subset_antisym)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   132
   apply (auto intro: "dvd_zero_left")
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   133
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   134
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   135
lemma element_generates_subideal: "[| is_ideal I; a : I |] ==> ideal_of {a::'a::ring} <= I"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   136
  apply (auto simp add: pideal_structure is_ideal_dvd)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   137
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   138
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   139
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   140
(* is_pideal *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   141
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   142
lemma is_pideal_imp_is_ideal: "is_pideal (I::('a::ring) set) ==> is_ideal I"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   143
  unfolding is_pideal_def by (fast intro: ideal_of_is_ideal)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   144
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   145
lemma pideal_is_pideal: "is_pideal (ideal_of {a::'a::ring})"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   146
  unfolding is_pideal_def by blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   147
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   148
lemma is_pidealD: "is_pideal I ==> EX a. I = ideal_of {a}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   149
  unfolding is_pideal_def .
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   150
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   151
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   152
(* Ideals and divisibility *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   153
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   154
lemma dvd_imp_subideal: "b dvd a ==> ideal_of {a::'a::ring} <= ideal_of {b}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   155
  by (auto intro: dvd_trans_ring simp add: pideal_structure)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   156
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   157
lemma subideal_imp_dvd: "ideal_of {a::'a::ring} <= ideal_of {b} ==> b dvd a"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   158
  by (auto dest!: subsetD simp add: pideal_structure)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   159
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   160
lemma psubideal_not_dvd: "(ideal_of {a::'a::ring} < ideal_of {b}) ==> ~ a dvd b"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   161
  apply (simp add: psubset_eq pideal_structure)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   162
  apply (erule conjE)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   163
  apply (drule_tac c = "a" in subsetD)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   164
   apply (auto intro: dvd_trans_ring)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   165
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   166
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   167
lemma not_dvd_psubideal_singleton:
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   168
    "[| b dvd a; ~ a dvd b |] ==> ideal_of {a::'a::ring} < ideal_of {b}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   169
  apply (rule psubsetI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   170
   apply (erule dvd_imp_subideal)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   171
  apply (blast intro: dvd_imp_subideal subideal_imp_dvd)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   172
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   173
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   174
lemma subideal_is_dvd [iff]: "(ideal_of {a::'a::ring} <= ideal_of {b}) = (b dvd a)"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   175
  apply (rule iffI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   176
   apply (assumption | rule subideal_imp_dvd dvd_imp_subideal)+
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   177
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   178
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   179
lemma psubideal_is_dvd [iff]: "(ideal_of {a::'a::ring} < ideal_of {b}) = (b dvd a & ~ a dvd b)"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   180
  apply (rule iffI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   181
  apply (assumption | rule conjI psubideal_not_dvd psubset_imp_subset [THEN subideal_imp_dvd])+
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   182
  apply (erule conjE)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   183
  apply (assumption | rule not_dvd_psubideal_singleton)+
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   184
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   185
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   186
lemma assoc_pideal_eq: "[| a dvd b; b dvd a |] ==> ideal_of {a::'a::ring} = ideal_of {b}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   187
  apply (rule subset_antisym)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   188
  apply (assumption | rule dvd_imp_subideal)+
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   189
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   190
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   191
lemma dvd_imp_in_pideal: "!!a::'a::ring. a dvd b ==> b : (ideal_of {a})"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   192
  apply (rule is_ideal_dvd)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   193
    apply assumption
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   194
   apply (rule ideal_of_is_ideal)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   195
  apply (rule generator_in_ideal)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   196
  apply simp
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   197
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   198
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   199
lemma in_pideal_imp_dvd: "!!a::'a::ring. b : (ideal_of {a}) ==> a dvd b"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   200
  by (simp add: pideal_structure)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   201
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   202
lemma not_dvd_psubideal: "~ (a dvd b) ==> ideal_of {a::'a::ring} < ideal_of {a, b}"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   203
  apply (simp add: psubset_eq ideal_of_mono)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   204
  apply (erule contrapos_pp)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   205
  apply (simp add: ideal_of_2_structure)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   206
  apply (rule in_pideal_imp_dvd)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   207
  apply simp
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   208
  apply (rule_tac x = "0" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   209
  apply (rule_tac x = "1" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   210
  apply simp
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   211
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   212
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   213
lemma irred_imp_max_ideal:
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   214
    "[| irred (a::'a::ring); is_pideal I; ideal_of {a} < I |] ==> x : I"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   215
  apply (unfold irred_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   216
  apply (drule is_pidealD)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   217
  apply (erule exE)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   218
  apply clarify
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   219
  apply (erule_tac x = "aa" in allE)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   220
  apply clarify
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   221
  apply (drule_tac a = "1" in dvd_imp_subideal)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   222
  apply (auto simp add: ideal_of_one_eq)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   223
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   224
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   225
(* Pid are factorial *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   226
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   227
(* Divisor chain condition *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   228
(* proofs not finished *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   229
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   230
lemma subset_chain_lemma [rule_format (no_asm)]:
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   231
  "(ALL i. I i <= I (Suc i)) ==> (n <= m & a : I n --> a : I m)"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   232
  apply (induct_tac m)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   233
   apply blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   234
  (* induction step *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   235
   apply (rename_tac m)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   236
   apply (case_tac "n <= m")
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   237
    apply auto
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   238
  apply (subgoal_tac "n = Suc m")
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   239
   prefer 2
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   240
   apply arith
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   241
  apply force
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   242
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   243
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   244
lemma chain_is_ideal: "[| ALL i. is_ideal (I i); ALL i. I i <= I (Suc i) |]  
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   245
    ==> is_ideal (Union (I`UNIV))"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   246
  apply (rule is_idealI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   247
     apply auto
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   248
    apply (rule_tac x = "max x xa" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   249
    apply (rule is_ideal_add)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   250
      apply simp
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   251
     apply (rule subset_chain_lemma)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   252
      apply assumption
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   253
     apply (rule conjI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   254
      prefer 2
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   255
      apply assumption
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   256
     apply arith
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   257
    apply (rule subset_chain_lemma)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   258
    apply assumption
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   259
   apply (rule conjI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   260
     prefer 2
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   261
     apply assumption
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   262
    apply arith
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   263
   apply (rule_tac x = "x" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   264
   apply simp
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   265
   apply (rule_tac x = "x" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   266
   apply simp
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   267
   done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   268
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   269
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   270
(* Primeness condition *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   271
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   272
lemma pid_irred_imp_prime: "irred a ==> prime (a::'a::pid)"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   273
  apply (unfold prime_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   274
  apply (rule conjI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   275
   apply (rule_tac [2] conjI)
23894
1a4167d761ac tactics: avoid dynamic reference to accidental theory context (via ML_Context.the_context etc.);
wenzelm
parents: 21423
diff changeset
   276
    apply (tactic "clarify_tac @{claset} 3")
21423
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   277
    apply (drule_tac [3] I = "ideal_of {a, b}" and x = "1" in irred_imp_max_ideal)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   278
      apply (auto intro: ideal_of_is_ideal pid_ax simp add: irred_def not_dvd_psubideal pid_ax)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   279
  apply (simp add: ideal_of_2_structure)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   280
  apply clarify
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   281
  apply (drule_tac f = "op* aa" in arg_cong)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   282
  apply (simp add: r_distr)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   283
  apply (erule subst)
26342
0f65fa163304 more antiquotations;
wenzelm
parents: 23894
diff changeset
   284
  apply (tactic {* asm_simp_tac (@{simpset} addsimps [@{thm m_assoc} RS sym]
21423
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   285
    delsimprocs [ring_simproc]) 1 *})
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   286
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   287
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   288
(* Fields are Pid *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   289
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   290
lemma field_pideal_univ: "a ~= 0 ==> ideal_of {a::'a::field} = UNIV"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   291
  apply (rule subset_antisym)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   292
   apply simp
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   293
  apply (rule subset_trans)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   294
   prefer 2
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   295
   apply (rule dvd_imp_subideal)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   296
   apply (rule field_ax)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   297
   apply assumption
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   298
  apply (simp add: ideal_of_one_eq)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   299
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   300
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   301
lemma proper_ideal: "[| is_ideal I; I ~= {0} |] ==> {0} < I"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   302
  by (simp add: psubset_eq not_sym is_ideal_zero)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   303
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   304
lemma field_pid: "is_ideal (I::('a::field) set) ==> is_pideal I"
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   305
  apply (unfold is_pideal_def)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   306
  apply (case_tac "I = {0}")
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   307
   apply (rule_tac x = "0" in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   308
  apply (simp add: ideal_of_zero_eq)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   309
  (* case "I ~= {0}" *)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   310
  apply (frule proper_ideal)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   311
   apply assumption
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   312
  apply (drule psubset_imp_ex_mem)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   313
  apply (erule exE)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   314
  apply (rule_tac x = b in exI)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   315
  apply (cut_tac a = b in element_generates_subideal)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   316
    apply assumption
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   317
   apply blast
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   318
  apply (auto simp add: field_pideal_univ)
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   319
  done
6cdd0589aa73 HOL-Algebra: converted legacy ML scripts;
wenzelm
parents: 20318
diff changeset
   320
20318
0e0ea63fe768 Restructured algebra library, added ideals and quotient rings.
ballarin
parents:
diff changeset
   321
end