@@ -72,9 +72,9 @@ instance : valuation_ring A :=
72
72
by_cases (b : K) = 0 , { use 0 , left, ext, simp [h] },
73
73
by_cases (a : K) = 0 , { use 0 , right, ext, simp [h] },
74
74
cases A.mem_or_inv_mem (a/b) with hh hh,
75
- { use ⟨a/b,hh⟩, right, ext, field_simp, ring },
75
+ { use ⟨a/b, hh⟩, right, ext, field_simp, ring },
76
76
{ rw (show (a/b : K)⁻¹ = b/a, by field_simp) at hh,
77
- use ⟨b/a,hh⟩, left, ext, field_simp, ring },
77
+ use ⟨b/a, hh⟩, left, ext, field_simp, ring },
78
78
end }
79
79
80
80
instance : algebra A K :=
@@ -84,16 +84,16 @@ show algebra A.to_subring K, by apply_instance
84
84
lemma algebra_map_apply (a : A) : algebra_map A K a = a := rfl
85
85
86
86
instance : is_fraction_ring A K :=
87
- { map_units := λ ⟨y,hy⟩,
87
+ { map_units := λ ⟨y, hy⟩,
88
88
(units.mk0 (y : K) (λ c, non_zero_divisors.ne_zero hy $ subtype.ext c)).is_unit,
89
89
surj := λ z, begin
90
- by_cases z = 0 , { use (0 ,1 ), simp [h] },
90
+ by_cases z = 0 , { use (0 , 1 ), simp [h] },
91
91
cases A.mem_or_inv_mem z with hh hh,
92
- { use (⟨z,hh⟩,1 ), simp },
93
- { refine ⟨⟨1 ,⟨⟨_,hh⟩,_⟩⟩, mul_inv_cancel h⟩,
92
+ { use (⟨z, hh⟩, 1 ), simp },
93
+ { refine ⟨⟨1 , ⟨⟨_, hh⟩, _⟩⟩, mul_inv_cancel h⟩,
94
94
exact mem_non_zero_divisors_iff_ne_zero.2 (λ c, h (inv_eq_zero.mp (congr_arg coe c))) },
95
95
end ,
96
- eq_iff_exists := λ a b, ⟨ λ h, ⟨1 , by { ext, simpa using h }⟩, λ ⟨c,h⟩,
96
+ eq_iff_exists := λ a b, ⟨ λ h, ⟨1 , by { ext, simpa using h }⟩, λ ⟨c, h⟩,
97
97
congr_arg coe ((mul_eq_mul_right_iff.1 h).resolve_right (non_zero_divisors.ne_zero c.2 )) ⟩ }
98
98
99
99
/-- The value group of the valuation associated to `A`. -/
@@ -106,13 +106,13 @@ def valuation : valuation K A.value_group := valuation_ring.valuation A K
106
106
instance inhabited_value_group : inhabited A.value_group := ⟨A.valuation 0 ⟩
107
107
108
108
lemma valuation_le_one (a : A) : A.valuation a ≤ 1 :=
109
- (valuation_ring.mem_integer_iff A K _).2 ⟨a,rfl⟩
109
+ (valuation_ring.mem_integer_iff A K _).2 ⟨a, rfl⟩
110
110
111
111
lemma mem_of_valuation_le_one (x : K) (h : A.valuation x ≤ 1 ) : x ∈ A :=
112
- let ⟨a,ha⟩ := (valuation_ring.mem_integer_iff A K x).1 h in ha ▸ a.2
112
+ let ⟨a, ha⟩ := (valuation_ring.mem_integer_iff A K x).1 h in ha ▸ a.2
113
113
114
114
lemma valuation_le_one_iff (x : K) : A.valuation x ≤ 1 ↔ x ∈ A :=
115
- ⟨mem_of_valuation_le_one _ _, λ ha, A.valuation_le_one ⟨x,ha⟩⟩
115
+ ⟨mem_of_valuation_le_one _ _, λ ha, A.valuation_le_one ⟨x, ha⟩⟩
116
116
117
117
lemma valuation_eq_iff (x y : K) : A.valuation x = A.valuation y ↔
118
118
∃ a : Aˣ, (a : K) * y = x := quotient.eq'
@@ -179,15 +179,15 @@ subring.subtype R.to_subring
179
179
/-- The canonical map on value groups induced by a coarsening of valuation rings. -/
180
180
def map_of_le (R S : valuation_subring K) (h : R ≤ S) :
181
181
R.value_group →*₀ S.value_group :=
182
- { to_fun := quotient.map' id $ λ x y ⟨u,hu⟩, ⟨units.map (R.inclusion S h).to_monoid_hom u, hu⟩,
182
+ { to_fun := quotient.map' id $ λ x y ⟨u, hu⟩, ⟨units.map (R.inclusion S h).to_monoid_hom u, hu⟩,
183
183
map_zero' := rfl,
184
184
map_one' := rfl,
185
185
map_mul' := by { rintro ⟨⟩ ⟨⟩, refl } }
186
186
187
187
@[mono]
188
188
lemma monotone_map_of_le (R S : valuation_subring K) (h : R ≤ S) :
189
189
monotone (R.map_of_le S h) :=
190
- by { rintros ⟨⟩ ⟨⟩ ⟨a,ha⟩, exact ⟨R.inclusion S h a, ha⟩ }
190
+ by { rintros ⟨⟩ ⟨⟩ ⟨a, ha⟩, exact ⟨R.inclusion S h a, ha⟩ }
191
191
192
192
@[simp]
193
193
lemma map_of_le_comp_valuation (R S : valuation_subring K) (h : R ≤ S) :
@@ -209,7 +209,7 @@ def of_prime (A : valuation_subring K) (P : ideal A) [P.is_prime] :
209
209
valuation_subring K :=
210
210
of_le A (localization.subalgebra.of_field K P.prime_compl $
211
211
le_non_zero_divisors_of_no_zero_divisors $ not_not_intro P.zero_mem).to_subring $
212
- λ a ha, subalgebra.algebra_map_mem _ (⟨a,ha⟩ : A)
212
+ λ a ha, subalgebra.algebra_map_mem _ (⟨a, ha⟩ : A)
213
213
214
214
instance of_prime_algebra (A : valuation_subring K) (P : ideal A) [P.is_prime] :
215
215
algebra A (A.of_prime P) := subalgebra.algebra _
@@ -223,7 +223,7 @@ by apply localization.subalgebra.is_localization_of_field K
223
223
224
224
lemma le_of_prime (A : valuation_subring K) (P : ideal A) [P.is_prime] :
225
225
A ≤ of_prime A P :=
226
- λ a ha, subalgebra.algebra_map_mem _ (⟨a,ha⟩ : A)
226
+ λ a ha, subalgebra.algebra_map_mem _ (⟨a, ha⟩ : A)
227
227
228
228
lemma of_prime_valuation_eq_one_iff_mem_prime_compl
229
229
(A : valuation_subring K)
@@ -243,7 +243,7 @@ lemma of_prime_ideal_of_le (R S : valuation_subring K) (h : R ≤ S) :
243
243
of_prime R (ideal_of_le R S h) = S :=
244
244
begin
245
245
ext x, split,
246
- { rintro ⟨a,r, hr,rfl⟩, apply mul_mem, { exact h a.2 },
246
+ { rintro ⟨a, r, hr, rfl⟩, apply mul_mem, { exact h a.2 },
247
247
{ rw [← valuation_le_one_iff, valuation.map_inv, ← inv_one, inv_le_inv₀],
248
248
{ exact not_lt.1 ((not_iff_not.2 $ valuation_lt_one_iff S _).1 hr) },
249
249
{ intro hh, erw [valuation.zero_iff, subring.coe_eq_zero_iff] at hh,
@@ -255,7 +255,7 @@ begin
255
255
{ use [1 , x⁻¹, hr], split,
256
256
{ change (⟨x⁻¹, h hr⟩ : S) ∉ nonunits S,
257
257
erw [mem_nonunits_iff, not_not],
258
- apply is_unit_of_mul_eq_one _ (⟨x,hx⟩ : S),
258
+ apply is_unit_of_mul_eq_one _ (⟨x, hx⟩ : S),
259
259
ext, field_simp },
260
260
{ field_simp } } },
261
261
end
@@ -407,7 +407,7 @@ lemma unit_group_le_unit_group {A B : valuation_subring K} :
407
407
A.unit_group ≤ B.unit_group ↔ A ≤ B :=
408
408
begin
409
409
split,
410
- { rintros h x hx,
410
+ { intros h x hx,
411
411
rw [← A.valuation_le_one_iff x, le_iff_lt_or_eq] at hx,
412
412
by_cases h_1 : x = 0 , { simp only [h_1, zero_mem] },
413
413
by_cases h_2 : 1 + x = 0 ,
@@ -435,4 +435,79 @@ unit_group_order_embedding.strict_mono
435
435
436
436
end unit_group
437
437
438
+ section nonunits
439
+
440
+ /-- The nonunits of a valuation subring of `K`, as a subsemigroup of `K`-/
441
+ def nonunits : subsemigroup K :=
442
+ { carrier := { x | A.valuation x < 1 },
443
+ mul_mem' := λ a b ha hb, (mul_lt_mul₀ ha hb).trans_eq $ mul_one _ }
444
+
445
+ lemma mem_nonunits_iff {x : K} : x ∈ A.nonunits ↔ A.valuation x < 1 := iff.refl _
446
+
447
+ lemma nonunits_injective :
448
+ function.injective (nonunits : valuation_subring K → subsemigroup _) :=
449
+ λ A B h, begin
450
+ rw [← A.valuation_subring_valuation, ← B.valuation_subring_valuation,
451
+ ← valuation.is_equiv_iff_valuation_subring, valuation.is_equiv_iff_val_lt_one],
452
+ exact set_like.ext_iff.1 h,
453
+ end
454
+
455
+ lemma nonunits_inj {A B : valuation_subring K} : A.nonunits = B.nonunits ↔ A = B :=
456
+ nonunits_injective.eq_iff
457
+
458
+ lemma nonunits_le_nonunits {A B : valuation_subring K} :
459
+ B.nonunits ≤ A.nonunits ↔ A ≤ B :=
460
+ begin
461
+ split,
462
+ { intros h x hx,
463
+ by_cases h_1 : x = 0 , { simp only [h_1, zero_mem] },
464
+ rw [← valuation_le_one_iff, ← not_lt, valuation.one_lt_val_iff _ h_1] at hx ⊢,
465
+ by_contra h_2, from hx (h h_2) },
466
+ { intros h x hx,
467
+ by_contra h_1, from not_lt.2 (monotone_map_of_le _ _ h (not_lt.1 h_1)) hx }
468
+ end
469
+
470
+ /-- The map on valuation subrings to their nonunits is a dual order embedding. -/
471
+ def nonunits_order_embedding :
472
+ valuation_subring K ↪o (subsemigroup K)ᵒᵈ :=
473
+ { to_fun := λ A, A.nonunits,
474
+ inj' := nonunits_injective,
475
+ map_rel_iff' := λ A B, nonunits_le_nonunits }
476
+
477
+ variables {A}
478
+
479
+ /-- The elements of `A.nonunits` are those of the maximal ideal of `A` after coercion to `K`.
480
+
481
+ See also `mem_nonunits_iff_exists_mem_maximal_ideal`, which gets rid of the coercion to `K`,
482
+ at the expense of a more complicated right hand side.
483
+ -/
484
+ theorem coe_mem_nonunits_iff {a : A} : (a : K) ∈ A.nonunits ↔ a ∈ local_ring.maximal_ideal A :=
485
+ (valuation_lt_one_iff _ _).symm
486
+
487
+ lemma nonunits_le : A.nonunits ≤ A.to_subring.to_submonoid.to_subsemigroup :=
488
+ λ a ha, (A.valuation_le_one_iff _).mp (A.mem_nonunits_iff.mp ha).le
489
+
490
+ lemma nonunits_subset : (A.nonunits : set K) ⊆ A := nonunits_le
491
+
492
+ /-- The elements of `A.nonunits` are those of the maximal ideal of `A`.
493
+
494
+ See also `coe_mem_nonunits_iff`, which has a simpler right hand side but requires the element
495
+ to be in `A` already.
496
+ -/
497
+ theorem mem_nonunits_iff_exists_mem_maximal_ideal {a : K} :
498
+ a ∈ A.nonunits ↔ ∃ ha, (⟨a, ha⟩ : A) ∈ local_ring.maximal_ideal A :=
499
+ ⟨λ h, ⟨nonunits_subset h, coe_mem_nonunits_iff.mp h⟩,
500
+ λ ⟨ha, h⟩, coe_mem_nonunits_iff.mpr h⟩
501
+
502
+ /-- `A.nonunits` agrees with the maximal ideal of `A`, after taking its image in `K`. -/
503
+ theorem image_maximal_ideal : (coe : A → K) '' local_ring.maximal_ideal A = A.nonunits :=
504
+ begin
505
+ ext a,
506
+ simp only [set.mem_image, set_like.mem_coe, mem_nonunits_iff_exists_mem_maximal_ideal],
507
+ erw subtype.exists,
508
+ simp_rw [subtype.coe_mk, exists_and_distrib_right, exists_eq_right],
509
+ end
510
+
511
+ end nonunits
512
+
438
513
end valuation_subring
0 commit comments