1
1
/-
2
2
Copyright (c) 2022 Adam Topaz. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
- Authors: Adam Topaz, Junyan Xu
4
+ Authors: Adam Topaz, Junyan Xu, Jack McKoen
5
5
-/
6
6
import ring_theory.valuation.valuation_ring
7
7
import ring_theory.localization.as_subring
@@ -367,21 +367,7 @@ section unit_group
367
367
def unit_group : subgroup Kˣ :=
368
368
(A.valuation.to_monoid_with_zero_hom.to_monoid_hom.comp (units.coe_hom K)).ker
369
369
370
- lemma mem_unit_group_iff (x : Kˣ) : x ∈ A.unit_group ↔ A.valuation x = 1 := iff.refl _
371
-
372
- lemma unit_group_injective : function.injective (unit_group : valuation_subring K → subgroup _) :=
373
- λ A B h, begin
374
- rw [← A.valuation_subring_valuation, ← B.valuation_subring_valuation,
375
- ← valuation.is_equiv_iff_valuation_subring, valuation.is_equiv_iff_val_eq_one],
376
- rw set_like.ext_iff at h,
377
- intros x,
378
- by_cases hx : x = 0 , { simp only [hx, valuation.map_zero, zero_ne_one] },
379
- exact h (units.mk0 x hx)
380
- end
381
-
382
- lemma eq_iff_unit_group {A B : valuation_subring K} :
383
- A = B ↔ A.unit_group = B.unit_group :=
384
- unit_group_injective.eq_iff.symm
370
+ lemma mem_unit_group_iff (x : Kˣ) : x ∈ A.unit_group ↔ A.valuation x = 1 := iff.rfl
385
371
386
372
/-- For a valuation subring `A`, `A.unit_group` agrees with the units of `A`. -/
387
373
def unit_group_mul_equiv : A.unit_group ≃* Aˣ :=
@@ -403,6 +389,7 @@ lemma coe_unit_group_mul_equiv_apply (a : A.unit_group) :
403
389
lemma coe_unit_group_mul_equiv_symm_apply (a : Aˣ) :
404
390
(A.unit_group_mul_equiv.symm a : K) = a := rfl
405
391
392
+
406
393
lemma unit_group_le_unit_group {A B : valuation_subring K} :
407
394
A.unit_group ≤ B.unit_group ↔ A ≤ B :=
408
395
begin
@@ -424,6 +411,13 @@ begin
424
411
simpa using hx }
425
412
end
426
413
414
+ lemma unit_group_injective : function.injective (unit_group : valuation_subring K → subgroup _) :=
415
+ λ A B h, by { simpa only [le_antisymm_iff, unit_group_le_unit_group] using h}
416
+
417
+ lemma eq_iff_unit_group {A B : valuation_subring K} :
418
+ A = B ↔ A.unit_group = B.unit_group :=
419
+ unit_group_injective.eq_iff.symm
420
+
427
421
/-- The map on valuation subrings to their unit groups is an order embedding. -/
428
422
def unit_group_order_embedding : valuation_subring K ↪o subgroup Kˣ :=
429
423
{ to_fun := λ A, A.unit_group,
@@ -442,18 +436,7 @@ def nonunits : subsemigroup K :=
442
436
{ carrier := { x | A.valuation x < 1 },
443
437
mul_mem' := λ a b ha hb, (mul_lt_mul₀ ha hb).trans_eq $ mul_one _ }
444
438
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
439
+ lemma mem_nonunits_iff {x : K} : x ∈ A.nonunits ↔ A.valuation x < 1 := iff.rfl
457
440
458
441
lemma nonunits_le_nonunits {A B : valuation_subring K} :
459
442
B.nonunits ≤ A.nonunits ↔ A ≤ B :=
@@ -467,6 +450,13 @@ begin
467
450
by_contra h_1, from not_lt.2 (monotone_map_of_le _ _ h (not_lt.1 h_1)) hx }
468
451
end
469
452
453
+ lemma nonunits_injective :
454
+ function.injective (nonunits : valuation_subring K → subsemigroup _) :=
455
+ λ A B h, by { simpa only [le_antisymm_iff, nonunits_le_nonunits] using h.symm }
456
+
457
+ lemma nonunits_inj {A B : valuation_subring K} : A.nonunits = B.nonunits ↔ A = B :=
458
+ nonunits_injective.eq_iff
459
+
470
460
/-- The map on valuation subrings to their nonunits is a dual order embedding. -/
471
461
def nonunits_order_embedding :
472
462
valuation_subring K ↪o (subsemigroup K)ᵒᵈ :=
@@ -510,4 +500,136 @@ end
510
500
511
501
end nonunits
512
502
503
+ section principal_unit_group
504
+
505
+ /-- The principal unit group of a valuation subring, as a subgroup of `Kˣ`. -/
506
+ def principal_unit_group : subgroup Kˣ :=
507
+ { carrier := { x | A.valuation (x - 1 ) < 1 },
508
+ mul_mem' := begin
509
+ intros a b ha hb,
510
+ refine lt_of_le_of_lt _ (max_lt hb ha),
511
+ rw [← one_mul (A.valuation (b - 1 )), ← A.valuation.map_one_add_of_lt ha, add_sub_cancel'_right,
512
+ ← valuation.map_mul, mul_sub_one, ← sub_add_sub_cancel],
513
+ exact A.valuation.map_add _ _,
514
+ end ,
515
+ one_mem' := by simpa using zero_lt_one₀,
516
+ inv_mem' := begin
517
+ dsimp,
518
+ intros a ha,
519
+ conv {to_lhs, rw [← mul_one (A.valuation _), ← A.valuation.map_one_add_of_lt ha]},
520
+ rwa [add_sub_cancel'_right, ← valuation.map_mul, sub_mul, units.inv_mul, ← neg_sub, one_mul,
521
+ valuation.map_neg],
522
+ end }
523
+
524
+ lemma principal_units_le_units : A.principal_unit_group ≤ A.unit_group :=
525
+ λ a h, by simpa only [add_sub_cancel'_right] using A.valuation.map_one_add_of_lt h
526
+
527
+ lemma mem_principal_unit_group_iff (x : Kˣ) :
528
+ x ∈ A.principal_unit_group ↔ A.valuation ((x : K) - 1 ) < 1 := iff.rfl
529
+
530
+ lemma principal_unit_group_le_principal_unit_group {A B : valuation_subring K} :
531
+ B.principal_unit_group ≤ A.principal_unit_group ↔ A ≤ B :=
532
+ begin
533
+ split,
534
+ { intros h x hx,
535
+ by_cases h_1 : x = 0 , { simp only [h_1, zero_mem] },
536
+ by_cases h_2 : x⁻¹ + 1 = 0 ,
537
+ { rw [add_eq_zero_iff_eq_neg, inv_eq_iff_inv_eq, inv_neg, inv_one] at h_2,
538
+ simpa only [h_2] using B.neg_mem _ B.one_mem },
539
+ { rw [← valuation_le_one_iff, ← not_lt, valuation.one_lt_val_iff _ h_1, ← add_sub_cancel x⁻¹,
540
+ ← units.coe_mk0 h_2, ← mem_principal_unit_group_iff] at hx ⊢,
541
+ simpa only [hx] using @h (units.mk0 (x⁻¹ + 1 ) h_2) } },
542
+ { intros h x hx,
543
+ by_contra h_1, from not_lt.2 (monotone_map_of_le _ _ h (not_lt.1 h_1)) hx }
544
+ end
545
+
546
+ lemma principal_unit_group_injective :
547
+ function.injective (principal_unit_group : valuation_subring K → subgroup _) :=
548
+ λ A B h, by { simpa [le_antisymm_iff, principal_unit_group_le_principal_unit_group] using h.symm }
549
+
550
+ lemma eq_iff_principal_unit_group {A B : valuation_subring K} :
551
+ A = B ↔ A.principal_unit_group = B.principal_unit_group :=
552
+ principal_unit_group_injective.eq_iff.symm
553
+
554
+ /-- The map on valuation subrings to their principal unit groups is an order embedding. -/
555
+ def principal_unit_group_order_embedding :
556
+ valuation_subring K ↪o (subgroup Kˣ)ᵒᵈ :=
557
+ { to_fun := λ A, A.principal_unit_group,
558
+ inj' := principal_unit_group_injective,
559
+ map_rel_iff' := λ A B, principal_unit_group_le_principal_unit_group }
560
+
561
+ lemma coe_mem_principal_unit_group_iff {x : A.unit_group} :
562
+ (x : Kˣ) ∈ A.principal_unit_group ↔
563
+ A.unit_group_mul_equiv x ∈ (units.map (local_ring.residue A).to_monoid_hom).ker :=
564
+ begin
565
+ rw [monoid_hom.mem_ker, units.ext_iff],
566
+ dsimp,
567
+ let π := ideal.quotient.mk (local_ring.maximal_ideal A), change _ ↔ π _ = _,
568
+ rw [← π.map_one, ← sub_eq_zero, ← π.map_sub, ideal.quotient.eq_zero_iff_mem,
569
+ valuation_lt_one_iff],
570
+ simpa,
571
+ end
572
+
573
+ /-- The principal unit group agrees with the kernel of the canonical map from
574
+ the units of `A` to the units of the residue field of `A`. -/
575
+ def principal_unit_group_equiv :
576
+ A.principal_unit_group ≃* (units.map (local_ring.residue A).to_monoid_hom).ker :=
577
+ { to_fun := λ x, ⟨A.unit_group_mul_equiv ⟨_, A.principal_units_le_units x.2 ⟩,
578
+ A.coe_mem_principal_unit_group_iff.1 x.2 ⟩,
579
+ inv_fun := λ x, ⟨A.unit_group_mul_equiv.symm x,
580
+ by { rw A.coe_mem_principal_unit_group_iff, simpa using set_like.coe_mem x }⟩,
581
+ left_inv := λ x, by simp,
582
+ right_inv := λ x, by simp,
583
+ map_mul' := λ x y, by refl, }
584
+
585
+ @[simp]
586
+ lemma principal_unit_group_equiv_apply (a : A.principal_unit_group) :
587
+ (principal_unit_group_equiv A a : K) = a := rfl
588
+
589
+ @[simp]
590
+ lemma principal_unit_group_symm_apply
591
+ (a : (units.map (local_ring.residue A).to_monoid_hom).ker) :
592
+ (A.principal_unit_group_equiv.symm a : K) = a := rfl
593
+
594
+ /-- The canonical map from the unit group of `A` to the units of the residue field of `A`. -/
595
+ def unit_group_to_residue_field_units :
596
+ A.unit_group →* (local_ring.residue_field A)ˣ :=
597
+ monoid_hom.comp (units.map $ (ideal.quotient.mk _).to_monoid_hom)
598
+ A.unit_group_mul_equiv.to_monoid_hom
599
+
600
+ @[simp]
601
+ lemma coe_unit_group_to_residue_field_units_apply (x : A.unit_group) :
602
+ (A.unit_group_to_residue_field_units x : (local_ring.residue_field A) ) =
603
+ (ideal.quotient.mk _ (A.unit_group_mul_equiv x : A)) := rfl
604
+
605
+ lemma ker_unit_group_to_residue_field_units :
606
+ A.unit_group_to_residue_field_units.ker = A.principal_unit_group.comap A.unit_group.subtype :=
607
+ by { ext, simpa only [subgroup.mem_comap, subgroup.coe_subtype, coe_mem_principal_unit_group_iff] }
608
+
609
+ lemma surjective_unit_group_to_residue_field_units :
610
+ function.surjective A.unit_group_to_residue_field_units :=
611
+ (local_ring.surjective_units_map_of_local_ring_hom _
612
+ ideal.quotient.mk_surjective local_ring.is_local_ring_hom_residue).comp (mul_equiv.surjective _)
613
+
614
+ /-- The quotient of the unit group of `A` by the principal unit group of `A` agrees with
615
+ the units of the residue field of `A`. -/
616
+ def units_mod_principal_units_equiv_residue_field_units :
617
+ (A.unit_group ⧸ (A.principal_unit_group.comap A.unit_group.subtype)) ≃*
618
+ (local_ring.residue_field A)ˣ :=
619
+ mul_equiv.trans (quotient_group.equiv_quotient_of_eq A.ker_unit_group_to_residue_field_units.symm)
620
+ (quotient_group.quotient_ker_equiv_of_surjective _ A.surjective_unit_group_to_residue_field_units)
621
+
622
+ @[simp]
623
+ lemma units_mod_principal_units_equiv_residue_field_units_comp_quotient_group_mk :
624
+ A.units_mod_principal_units_equiv_residue_field_units.to_monoid_hom.comp
625
+ (quotient_group.mk' _) = A.unit_group_to_residue_field_units := rfl
626
+
627
+ @[simp]
628
+ lemma units_mod_principal_units_equiv_residue_field_units_comp_quotient_group_mk_apply
629
+ (x : A.unit_group) :
630
+ A.units_mod_principal_units_equiv_residue_field_units.to_monoid_hom
631
+ (quotient_group.mk x) = A.unit_group_to_residue_field_units x := rfl
632
+
633
+ end principal_unit_group
634
+
513
635
end valuation_subring
0 commit comments