Skip to content

Commit 01ffae0

Browse files
committed
refactor(Algebra/Star/Order): Use NonUnitalStarRingHom in Algebra.Star.Order (#13089)
Refactor `Algebra.Star.Order` to use the new non-unital *-ring homomorphisms / isomorphisms introduced in #12924 Co-authored-by: Christopher Hoskin <[email protected]> Co-authored-by: Christopher Hoskin <[email protected]>
1 parent 8e2586a commit 01ffae0

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

Mathlib/Algebra/Star/Order.lean

+17-19
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Scott Morrison
55
-/
66
import Mathlib.Algebra.Group.Submonoid.Operations
77
import Mathlib.Algebra.Star.SelfAdjoint
8+
import Mathlib.Algebra.Star.StarRingHom
89
import Mathlib.Algebra.Regular.Basic
910

1011
#align_import algebra.star.order from "leanprover-community/mathlib"@"31c24aa72e7b3e5ed97a8412470e904f82b81004"
@@ -50,7 +51,8 @@ convenient to declare instances using `StarOrderedRing.of_nonneg_iff`.
5051
5152
Porting note: dropped an unneeded assumption
5253
`add_le_add_left : ∀ {x y}, x ≤ y → ∀ z, z + x ≤ z + y` -/
53-
class StarOrderedRing (R : Type u) [NonUnitalSemiring R] [PartialOrder R] [StarRing R] : Prop where
54+
class StarOrderedRing (R : Type u) [NonUnitalSemiring R] [PartialOrder R]
55+
[StarRing R] : Prop where
5456
/-- characterization of the order in terms of the `StarRing` structure. -/
5557
le_iff :
5658
∀ x y : R, x ≤ y ↔ ∃ p, p ∈ AddSubmonoid.closure (Set.range fun s => star s * s) ∧ y = x + p
@@ -320,38 +322,34 @@ end StarModule
320322

321323
section OrderClass
322324

323-
variable {F R S : Type*} [NonUnitalSemiring R] [PartialOrder R] [StarRing R] [StarOrderedRing R]
325+
variable {F R S : Type*} [NonUnitalSemiring R] [PartialOrder R] [StarRing R]
326+
[StarOrderedRing R]
324327
variable [NonUnitalSemiring S] [PartialOrder S] [StarRing S] [StarOrderedRing S]
325328

326329
-- we prove this auxiliary lemma in order to avoid duplicating the proof twice below.
327-
lemma NonUnitalRingHom.map_le_map_of_map_star (f : R →ₙ+* S) (hf : ∀ r, f (star r) = star (f r))
328-
{x y : R} (hxy : x ≤ y) : f x ≤ f y := by
330+
lemma NonUnitalStarRingHom.map_le_map_of_map_star (f : R →ₙ+* S) {x y : R} (hxy : x ≤ y) :
331+
f x ≤ f y := by
329332
rw [StarOrderedRing.le_iff] at hxy ⊢
330333
obtain ⟨p, hp, rfl⟩ := hxy
331334
refine ⟨f p, ?_, map_add f _ _⟩
332335
induction hp using AddSubmonoid.closure_induction'
336+
have hf : ∀ r, f (star r) = star (f r) := map_star _
333337
all_goals aesop
334338

335-
instance (priority := 100) StarRingHomClass.instOrderHomClass [FunLike F R S] [StarHomClass F R S]
336-
[NonUnitalRingHomClass F R S] : OrderHomClass F R S where
337-
map_rel f := (f : R →ₙ+* S).map_le_map_of_map_star (map_star f)
339+
instance (priority := 100) StarRingHomClass.instOrderHomClass [FunLike F R S]
340+
[NonUnitalSemiring R] [StarRing R] [StarOrderedRing R] [NonUnitalSemiring S]
341+
[StarRing S] [StarOrderedRing S] [NonUnitalRingHomClass F R S]
342+
[NonUnitalStarRingHomClass F R S] : OrderHomClass F R S where
343+
map_rel f := (f : R →⋆ₙ+* S).map_le_map_of_map_star
338344

339-
-- This doesn't require any module structure, but the only morphism we currently have bundling
340-
-- `star` is `starAlgHom`. So we have to build the inverse morphism by hand.
341-
instance (priority := 100) StarRingHomClass.instOrderIsoClass [EquivLike F R S] [StarHomClass F R S]
342-
[RingEquivClass F R S] : OrderIsoClass F R S where
345+
instance (priority := 100) StarRingEquivClass.instOrderIsoClass [EquivLike F R S]
346+
[StarRingEquivClass F R S] : OrderIsoClass F R S where
343347
map_le_map_iff f x y := by
344348
refine ⟨fun h ↦ ?_, map_rel f⟩
345-
let f_inv : S →ₙ+* R :=
346-
{ toFun := EquivLike.inv f
347-
map_mul' := fun _ _ ↦ EmbeddingLike.injective f <| by simp
348-
map_add' := fun _ _ ↦ EmbeddingLike.injective f <| by simp
349-
map_zero' := EmbeddingLike.injective f <| by simp }
350-
have f_inv_star (s : S) : f_inv (star s) = star (f_inv s) := EmbeddingLike.injective f <| by
351-
simp only [map_star f, show ∀ s, f (f_inv s) = s from EquivLike.apply_inv_apply f]
349+
let f_inv : S →⋆ₙ+* R := (f : R ≃⋆+* S).symm
352350
have f_inv_f (r : R) : f_inv (f r) = r := EquivLike.inv_apply_apply f r
353351
rw [← f_inv_f x, ← f_inv_f y]
354-
exact f_inv.map_le_map_of_map_star f_inv_star h
352+
exact NonUnitalStarRingHom.map_le_map_of_map_star f_inv h
355353

356354
end OrderClass
357355

0 commit comments

Comments
 (0)