@@ -11,6 +11,8 @@ public import Mathlib.Algebra.Order.GroupWithZero.Submonoid
1111public import Mathlib.Algebra.Order.Ring.Defs
1212public import Mathlib.Algebra.Ring.Subring.Basic
1313
14+ import Mathlib.Algebra.Group.Submonoid.Units
15+
1416/-!
1517
1618# Unit subgroups of a ring
@@ -31,14 +33,22 @@ theorem Units.mem_posSubgroup {R : Type*} [Semiring R] [LinearOrder R] [IsStrict
3133 (u : Rˣ) : u ∈ Units.posSubgroup R ↔ (0 : R) < u :=
3234 Iff.rfl
3335
34- theorem RingHom.isUnit_eqLocus_mk_iff {R T : Type *} [Ring R] [Semiring T] (f g : R →+* T)
35- {r : R} (hr : f r = g r) : IsUnit (⟨r, hr⟩ : f.eqLocus g) ↔ IsUnit r := by
36- refine ⟨fun h ↦ ?_, fun h ↦ ?_⟩
37- · simp [isUnit_iff_exists, ← Subtype.val_inj] at h ⊢
38- grind
39- obtain ⟨s, hs⟩ := isUnit_iff_exists.mp h
40- suffices ∃ a, r * a = 1 ∧ f a = g a ∧ a * r = 1 by
41- simpa [isUnit_iff_exists, ← Subtype.val_inj]
42- refine ⟨s, hs.left, ?_, hs.right⟩
43- rw [← mul_one (f s), ← map_one g, ← hs.left, map_mul, ← mul_assoc, ← hr, ← map_mul,
44- hs.right, map_one, one_mul]
36+ namespace RingHom
37+
38+ variable {R T : Type *} [Semiring T]
39+
40+ theorem isUnit_eqLocusS_mk_iff [Semiring R] (f g : R →+* T) {r : R} (hr : f r = g r) :
41+ IsUnit (⟨r, hr⟩ : f.eqLocusS g) ↔ IsUnit r :=
42+ MonoidHom.isUnit_eqLocusM_mk_iff ..
43+
44+ theorem isUnit_eqLocus_mk_iff [Ring R] (f g : R →+* T) {r : R} (hr : f r = g r) :
45+ IsUnit (⟨r, hr⟩ : f.eqLocus g) ↔ IsUnit r :=
46+ MonoidHom.isUnit_eqLocusM_mk_iff ..
47+
48+ instance [Semiring R] (f g : R →+* T) : IsLocalHom (f.eqLocusS g).subtype where
49+ map_nonunit r := f.isUnit_eqLocusS_mk_iff g r.prop |>.2
50+
51+ instance [Ring R] (f g : R →+* T) : IsLocalHom (f.eqLocus g).subtype where
52+ map_nonunit r := f.isUnit_eqLocus_mk_iff g r.prop |>.2
53+
54+ end RingHom
0 commit comments