Skip to content

Commit 8baa3d0

Browse files
committed
feat(Analysis): use IsApply for GroupSeminorm (leanprover-community#41560)
Also adds instances for `AddCommMonoid`
1 parent 121d759 commit 8baa3d0

1 file changed

Lines changed: 58 additions & 48 deletions

File tree

Mathlib/Analysis/Normed/Group/Seminorm.lean

Lines changed: 58 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module
77

88
public import Mathlib.Data.NNReal.Defs
99
public import Mathlib.Order.ConditionallyCompleteLattice.Group
10+
public import Mathlib.Data.FunLike.Module
1011

1112
/-!
1213
# Group seminorms
@@ -224,13 +225,17 @@ instance instZeroGroupSeminorm : Zero (GroupSeminorm E) :=
224225
mul_le' := fun _ _ => (zero_add _).ge
225226
inv' := fun _ => rfl }⟩
226227

227-
@[to_additive (attr := simp, norm_cast)]
228-
theorem coe_zero : ⇑(0 : GroupSeminorm E) = 0 :=
229-
rfl
228+
@[to_additive]
229+
instance : IsZeroApply (GroupSeminorm E) E ℝ where
230+
zero_apply _ := rfl
230231

231-
@[to_additive (attr := simp)]
232-
theorem zero_apply (x : E) : (0 : GroupSeminorm E) x = 0 :=
233-
rfl
232+
@[deprecated (since := "2026-07-10")] alias _root_.GroupSeminorm.coe_zero := FunLike.coe_zero
233+
@[deprecated (since := "2026-07-10")] alias _root_.AddGroupSeminorm.coe_zero := FunLike.coe_zero
234+
235+
@[deprecated (since := "2026-07-10")] protected alias _root_.GroupSeminorm.zero_apply :=
236+
zero_apply
237+
@[deprecated (since := "2026-07-10")] protected alias _root_.AddGroupSeminorm.zero_apply :=
238+
zero_apply
234239

235240
@[to_additive]
236241
instance : Inhabited (GroupSeminorm E) :=
@@ -246,13 +251,17 @@ instance : Add (GroupSeminorm E) :=
246251
add_add_add_comm _ _ _ _
247252
inv' := fun x => by simp_rw [map_inv_eq_map p, map_inv_eq_map q] }⟩
248253

249-
@[to_additive (attr := simp)]
250-
theorem coe_add : ⇑(p + q) = p + q :=
251-
rfl
254+
@[to_additive]
255+
instance : IsAddApply (GroupSeminorm E) E ℝ where
256+
add_apply _ _ _ := rfl
252257

253-
@[to_additive (attr := simp)]
254-
theorem add_apply (x : E) : (p + q) x = p x + q x :=
255-
rfl
258+
@[deprecated (since := "2026-07-10")] alias _root_.GroupSeminorm.coe_add := FunLike.coe_add
259+
@[deprecated (since := "2026-07-10")] alias _root_.AddGroupSeminorm.coe_add := FunLike.coe_add
260+
261+
@[deprecated (since := "2026-07-10")] protected alias _root_.GroupSeminorm.add_apply :=
262+
add_apply
263+
@[deprecated (since := "2026-07-10")] protected alias _root_.AddGroupSeminorm.add_apply :=
264+
add_apply
256265

257266
open scoped Classical in
258267
@[to_additive]
@@ -450,17 +459,18 @@ instance toSMul : SMul R (AddGroupSeminorm E) :=
450459
apply map_add_le_add
451460
neg' := fun x => by simp_rw [map_neg_eq_map] }⟩
452461

453-
@[simp, norm_cast]
454-
theorem coe_smul (r : R) (p : AddGroupSeminorm E) : ⇑(r • p) = r • ⇑p :=
455-
rfl
462+
instance : IsSMulApply R (AddGroupSeminorm E) E ℝ where
463+
smul_apply _ _ _ := rfl
456464

457-
@[simp]
458-
theorem smul_apply (r : R) (p : AddGroupSeminorm E) (x : E) : (r • p) x = r • p x :=
459-
rfl
465+
@[deprecated (since := "2026-07-10")] alias coe_smul := FunLike.coe_smul
466+
467+
@[deprecated (since := "2026-07-10")] protected alias smul_apply := smul_apply
460468

461469
instance isScalarTower [SMul R' ℝ] [SMul R' ℝ≥0] [IsScalarTower R' ℝ≥0 ℝ] [SMul R R']
462470
[IsScalarTower R R' ℝ] : IsScalarTower R R' (AddGroupSeminorm E) :=
463-
fun r a p => ext fun x => smul_assoc r a (p x)⟩
471+
FunLike.isScalarTower
472+
473+
instance : AddCommMonoid (AddGroupSeminorm E) := fast_instance% FunLike.addCommMonoid
464474

465475
theorem smul_sup (r : R) (p q : AddGroupSeminorm E) : r • (p ⊔ q) = r • p ⊔ r • q :=
466476
have Real.smul_max : ∀ x y : ℝ, r • max x y = max (r • x) (r • y) := fun x y => by
@@ -519,13 +529,12 @@ instance : Zero (NonarchAddGroupSeminorm E) :=
519529
add_le_max' := fun r s => by simp only [Pi.zero_apply]; rw [max_eq_right]; rfl
520530
neg' := fun _ => rfl }⟩
521531

522-
@[simp, norm_cast]
523-
theorem coe_zero : ⇑(0 : NonarchAddGroupSeminorm E) = 0 :=
524-
rfl
532+
instance : IsZeroApply (NonarchAddGroupSeminorm E) E ℝ where
533+
zero_apply _ := rfl
525534

526-
@[simp]
527-
theorem zero_apply (x : E) : (0 : NonarchAddGroupSeminorm E) x = 0 :=
528-
rfl
535+
@[deprecated (since := "2026-07-10")] alias coe_zero := FunLike.coe_zero
536+
537+
@[deprecated (since := "2026-07-10")] protected alias zero_apply := zero_apply
529538

530539
instance : Inhabited (NonarchAddGroupSeminorm E) :=
531540
0
@@ -637,17 +646,18 @@ instance : SMul R (GroupSeminorm E) :=
637646
apply map_mul_le_add
638647
inv' := fun x => by simp_rw [map_inv_eq_map p] }⟩
639648

649+
instance : IsSMulApply R (GroupSeminorm E) E ℝ where
650+
smul_apply _ _ _ := rfl
651+
652+
@[deprecated (since := "2026-07-10")] alias coe_smul := FunLike.coe_smul
653+
654+
@[deprecated (since := "2026-07-10")] protected alias smul_apply := smul_apply
655+
640656
instance [SMul R' ℝ] [SMul R' ℝ≥0] [IsScalarTower R' ℝ≥0 ℝ] [SMul R R'] [IsScalarTower R R' ℝ] :
641657
IsScalarTower R R' (GroupSeminorm E) :=
642-
fun r a p => ext fun x => smul_assoc r a <| p x⟩
658+
FunLike.isScalarTower
643659

644-
@[simp, norm_cast]
645-
theorem coe_smul (r : R) (p : GroupSeminorm E) : ⇑(r • p) = r • ⇑p :=
646-
rfl
647-
648-
@[simp]
649-
theorem smul_apply (r : R) (p : GroupSeminorm E) (x : E) : (r • p) x = r • p x :=
650-
rfl
660+
instance : AddCommMonoid (GroupSeminorm E) := fast_instance% FunLike.addCommMonoid
651661

652662
theorem smul_sup (r : R) (p q : GroupSeminorm E) : r • (p ⊔ q) = r • p ⊔ r • q :=
653663
have Real.smul_max : ∀ x y : ℝ, r • max x y = max (r • x) (r • y) := fun x y => by
@@ -691,17 +701,15 @@ instance : SMul R (NonarchAddGroupSeminorm E) :=
691701
apply map_add_le_max
692702
neg' := fun x => by simp_rw [map_neg_eq_map p] }⟩
693703

694-
instance [SMul R' ℝ] [SMul R' ℝ≥0] [IsScalarTower R' ℝ≥0 ℝ] [SMul R R'] [IsScalarTower R R' ℝ] :
695-
IsScalarTower R R' (NonarchAddGroupSeminorm E) :=
696-
fun r a p => ext fun x => smul_assoc r a <| p x⟩
704+
instance : IsSMulApply R (NonarchAddGroupSeminorm E) E ℝ where
705+
smul_apply _ _ _ := rfl
697706

698-
@[simp, norm_cast]
699-
theorem coe_smul (r : R) (p : NonarchAddGroupSeminorm E) : ⇑(r • p) = r • ⇑p :=
700-
rfl
707+
@[deprecated (since := "2026-07-10")] alias coe_smul := FunLike.coe_smul
701708

702-
@[simp]
703-
theorem smul_apply (r : R) (p : NonarchAddGroupSeminorm E) (x : E) : (r • p) x = r • p x :=
704-
rfl
709+
@[deprecated (since := "2026-07-10")] protected alias smul_apply := smul_apply
710+
711+
instance [SMul R' ℝ] [SMul R' ℝ≥0] [IsScalarTower R' ℝ≥0 ℝ] [SMul R R'] [IsScalarTower R R' ℝ] :
712+
IsScalarTower R R' (NonarchAddGroupSeminorm E) := FunLike.isScalarTower
705713

706714
theorem smul_sup (r : R) (p q : NonarchAddGroupSeminorm E) : r • (p ⊔ q) = r • p ⊔ r • q :=
707715
have Real.smul_max : ∀ x y : ℝ, r • max x y = max (r • x) (r • y) := fun x y => by
@@ -769,13 +777,15 @@ instance : Add (GroupNorm E) :=
769777
eq_one_of_map_eq_zero' := fun _x hx =>
770778
of_not_not fun h => hx.not_gt <| add_pos (map_pos_of_ne_one p h) (map_pos_of_ne_one q h) }⟩
771779

772-
@[to_additive (attr := simp)]
773-
theorem coe_add : ⇑(p + q) = p + q :=
774-
rfl
780+
@[to_additive]
781+
instance : IsAddApply (GroupNorm E) E ℝ where
782+
add_apply _ _ _ := rfl
775783

776-
@[to_additive (attr := simp)]
777-
theorem add_apply (x : E) : (p + q) x = p x + q x :=
778-
rfl
784+
@[deprecated (since := "2026-07-10")] alias _root_.GroupNorm.coe_add := FunLike.coe_add
785+
@[deprecated (since := "2026-07-10")] alias _root_.AddGroupNorm.coe_add := FunLike.coe_add
786+
787+
@[deprecated (since := "2026-07-10")] protected alias _root_.GroupNorm.add_apply := add_apply
788+
@[deprecated (since := "2026-07-10")] protected alias _root_.AddGroupNorm.add_apply := add_apply
779789

780790
-- Note: To define an instance SupSet (GroupNorm E) requires a canonical "bottom" norm for sSup ∅.
781791
-- The zero function fails definiteness; the discrete norm needs complex proofs.

0 commit comments

Comments
 (0)