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