Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 28f7172

Browse files
committed
refactor(algebra/direct_sum/basic): use the new polymorphic subobject API (#14341)
This doesn't let us deduplicate the lattice lemmas, but does eliminate the duplicate instances and definitions! This merges: * `direct_sum.add_submonoid_is_internal`, `direct_sum.add_subgroup_is_internal`, `direct_sum.submodule_is_internal` into `direct_sum.is_internal` * `direct_sum.add_submonoid_coe`, `direct_sum.add_subgroup_coe` into `direct_sum.coe_add_monoid_hom` * `direct_sum.add_submonoid_coe_ring_hom`, `direct_sum.add_subgroup_coe_ring_hom` into `direct_sum.coe_ring_hom` * `add_submonoid.gsemiring`, `add_subgroup.gsemiring`, `submodule.gsemiring` into `set_like.gsemiring` * `add_submonoid.gcomm_semiring`, `add_subgroup.gcomm_semiring`, `submodule.gcomm_semiring` into `set_like.gcomm_semiring` Renames * `direct_sum.submodule_coe` into `direct_sum.coe_linear_map` * `direct_sum.submodule_coe_alg_hom` into `direct_sum.coe_alg_hom And adds: * `set_like.gnon_unital_non_assoc_semiring`, now that it doesn't need to be repeated three times! A large number of related lemmas are also renamed to match the new definition names. This was what originally motivated the `set_like` typeclass; thanks to @Vierkantor for doing the subobject follow up I never got around to!
1 parent a07493a commit 28f7172

File tree

19 files changed

+182
-292
lines changed

19 files changed

+182
-292
lines changed

counterexamples/direct_sum_is_internal.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ This shows that while `ℤ≤0` and `ℤ≥0` are complementary `ℕ`-submodules
1414
implies as a collection they are `complete_lattice.independent` and that they span all of `ℤ`, they
1515
do not form a decomposition into a direct sum.
1616
17-
This file demonstrates why `direct_sum.submodule_is_internal_of_independent_of_supr_eq_top` must
17+
This file demonstrates why `direct_sum.is_internal_submodule_of_independent_of_supr_eq_top` must
1818
take `ring R` and not `semiring R`.
1919
-/
2020

@@ -89,5 +89,5 @@ begin
8989
end
9090

9191
/-- And so they do not represent an internal direct sum. -/
92-
lemma with_sign.not_internal : ¬direct_sum.submodule_is_internal with_sign :=
92+
lemma with_sign.not_internal : ¬direct_sum.is_internal with_sign :=
9393
with_sign.not_injective ∘ and.elim_left

counterexamples/homogeneous_prime_not_prime.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def grading.decompose : (R × R) →+ direct_sum two (λ i, grading R i) :=
9191
end }
9292

9393
lemma grading.left_inv :
94-
function.left_inverse grading.decompose (submodule_coe (grading R)) := λ zz,
94+
function.left_inverse grading.decompose (coe_linear_map (grading R)) := λ zz,
9595
begin
9696
induction zz using direct_sum.induction_on with i zz d1 d2 ih1 ih2,
9797
{ simp only [map_zero],},
@@ -101,11 +101,11 @@ begin
101101
end
102102

103103
lemma grading.right_inv :
104-
function.right_inverse grading.decompose (submodule_coe (grading R)) := λ zz,
104+
function.right_inverse grading.decompose (coe_linear_map (grading R)) := λ zz,
105105
begin
106106
cases zz with a b,
107107
unfold grading.decompose,
108-
simp only [add_monoid_hom.coe_mk, map_add, submodule_coe_of, subtype.coe_mk, prod.mk_add_mk,
108+
simp only [add_monoid_hom.coe_mk, map_add, coe_linear_map_of, subtype.coe_mk, prod.mk_add_mk,
109109
add_zero, add_sub_cancel'_right],
110110
end
111111

docs/undergrad.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Linear algebra:
99
vector subspace: 'subspace'
1010
quotient space: 'submodule.has_quotient'
1111
sum of subspaces: 'submodule.complete_lattice'
12-
direct sum: 'direct_sum.submodule_is_internal'
12+
direct sum: 'direct_sum.is_internal'
1313
complementary subspaces: 'submodule.exists_is_compl'
1414
linear independence: 'linear_independent'
1515
generating sets: 'submodule.span'

src/algebra/direct_sum/basic.lean

Lines changed: 23 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -245,73 +245,43 @@ noncomputable def sigma_curry_equiv : (⨁ (i : Σ i, _), δ i.1 i.2) ≃+ ⨁ i
245245
end sigma
246246

247247
/-- The canonical embedding from `⨁ i, A i` to `M` where `A` is a collection of `add_submonoid M`
248-
indexed by `ι`-/
249-
def add_submonoid_coe {M : Type*} [decidable_eq ι] [add_comm_monoid M]
250-
(A : ι → add_submonoid M) : (⨁ i, A i) →+ M :=
251-
to_add_monoid (λ i, (A i).subtype)
252-
253-
@[simp] lemma add_submonoid_coe_of {M : Type*} [decidable_eq ι] [add_comm_monoid M]
254-
(A : ι → add_submonoid M) (i : ι) (x : A i) :
255-
add_submonoid_coe A (of (λ i, A i) i x) = x :=
248+
indexed by `ι`.
249+
250+
When `S = submodule _ M`, this is available as a `linear_map`, `direct_sum.coe_linear_map`. -/
251+
protected def coe_add_monoid_hom {M S : Type*} [decidable_eq ι] [add_comm_monoid M]
252+
[set_like S M] [add_submonoid_class S M] (A : ι → S) : (⨁ i, A i) →+ M :=
253+
to_add_monoid (λ i, add_submonoid_class.subtype (A i))
254+
255+
@[simp] lemma coe_add_monoid_hom_of {M S : Type*} [decidable_eq ι] [add_comm_monoid M]
256+
[set_like S M] [add_submonoid_class S M] (A : ι → S) (i : ι) (x : A i) :
257+
direct_sum.coe_add_monoid_hom A (of (λ i, A i) i x) = x :=
256258
to_add_monoid_of _ _ _
257259

258-
lemma coe_of_add_submonoid_apply {M : Type*} [decidable_eq ι] [add_comm_monoid M]
259-
{A : ι → add_submonoid M} (i j : ι) (x : A i) :
260+
lemma coe_of_apply {M S : Type*} [decidable_eq ι] [add_comm_monoid M]
261+
[set_like S M] [add_submonoid_class S M] {A : ι → S} (i j : ι) (x : A i) :
260262
(of _ i x j : M) = if i = j then x else 0 :=
261263
begin
262264
obtain rfl | h := decidable.eq_or_ne i j,
263265
{ rw [direct_sum.of_eq_same, if_pos rfl], },
264-
{ rw [direct_sum.of_eq_of_ne _ _ _ _ h, if_neg h, add_submonoid.coe_zero], },
266+
{ rw [direct_sum.of_eq_of_ne _ _ _ _ h, if_neg h, add_submonoid_class.coe_zero], },
265267
end
266268

267-
/-- The `direct_sum` formed by a collection of `add_submonoid`s of `M` is said to be internal if the
268-
canonical map `(⨁ i, A i) →+ M` is bijective.
269+
/-- The `direct_sum` formed by a collection of additive submonoids (or subgroups, or submodules) of
270+
`M` is said to be internal if the canonical map `(⨁ i, A i) →+ M` is bijective.
269271
270-
See `direct_sum.add_subgroup_is_internal` for the same statement about `add_subgroup`s. -/
271-
def add_submonoid_is_internal {M : Type*} [decidable_eq ι] [add_comm_monoid M]
272-
(A : ι → add_submonoid M) : Prop :=
273-
function.bijective (add_submonoid_coe A)
272+
For the alternate statement in terms of independence and spanning, see
273+
`direct_sum.subgroup_is_internal_iff_independent_and_supr_eq_top` and
274+
`direct_sum.is_internal_submodule_iff_independent_and_supr_eq_top`. -/
275+
def is_internal {M S : Type*} [decidable_eq ι] [add_comm_monoid M]
276+
[set_like S M] [add_submonoid_class S M] (A : ι → S) : Prop :=
277+
function.bijective (direct_sum.coe_add_monoid_hom A)
274278

275-
lemma add_submonoid_is_internal.supr_eq_top {M : Type*} [decidable_eq ι] [add_comm_monoid M]
279+
lemma is_internal.add_submonoid_supr_eq_top {M : Type*} [decidable_eq ι] [add_comm_monoid M]
276280
(A : ι → add_submonoid M)
277-
(h : add_submonoid_is_internal A) : supr A = ⊤ :=
281+
(h : is_internal A) : supr A = ⊤ :=
278282
begin
279283
rw [add_submonoid.supr_eq_mrange_dfinsupp_sum_add_hom, add_monoid_hom.mrange_top_iff_surjective],
280284
exact function.bijective.surjective h,
281285
end
282286

283-
/-- The canonical embedding from `⨁ i, A i` to `M` where `A` is a collection of `add_subgroup M`
284-
indexed by `ι`-/
285-
def add_subgroup_coe {M : Type*} [decidable_eq ι] [add_comm_group M]
286-
(A : ι → add_subgroup M) : (⨁ i, A i) →+ M :=
287-
to_add_monoid (λ i, (A i).subtype)
288-
289-
@[simp] lemma add_subgroup_coe_of {M : Type*} [decidable_eq ι] [add_comm_group M]
290-
(A : ι → add_subgroup M) (i : ι) (x : A i) :
291-
add_subgroup_coe A (of (λ i, A i) i x) = x :=
292-
to_add_monoid_of _ _ _
293-
294-
lemma coe_of_add_subgroup_apply {M : Type*} [decidable_eq ι] [add_comm_group M]
295-
{A : ι → add_subgroup M} (i j : ι) (x : A i) :
296-
(of _ i x j : M) = if i = j then x else 0 :=
297-
begin
298-
obtain rfl | h := decidable.eq_or_ne i j,
299-
{ rw [direct_sum.of_eq_same, if_pos rfl], },
300-
{ rw [direct_sum.of_eq_of_ne _ _ _ _ h, if_neg h, add_subgroup.coe_zero], },
301-
end
302-
303-
/-- The `direct_sum` formed by a collection of `add_subgroup`s of `M` is said to be internal if the
304-
canonical map `(⨁ i, A i) →+ M` is bijective.
305-
306-
See `direct_sum.submodule_is_internal` for the same statement about `submodules`s. -/
307-
def add_subgroup_is_internal {M : Type*} [decidable_eq ι] [add_comm_group M]
308-
(A : ι → add_subgroup M) : Prop :=
309-
function.bijective (add_subgroup_coe A)
310-
311-
lemma add_subgroup_is_internal.to_add_submonoid
312-
{M : Type*} [decidable_eq ι] [add_comm_group M] (A : ι → add_subgroup M) :
313-
add_subgroup_is_internal A ↔
314-
add_submonoid_is_internal (λ i, (A i).to_add_submonoid) :=
315-
iff.rfl
316-
317287
end direct_sum

src/algebra/direct_sum/internal.lean

Lines changed: 49 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,23 @@ import algebra.direct_sum.algebra
1414
This module provides `gsemiring` and `gcomm_semiring` instances for a collection of subobjects `A`
1515
when a `set_like.graded_monoid` instance is available:
1616
17-
* on `add_submonoid R`s: `add_submonoid.gsemiring`, `add_submonoid.gcomm_semiring`.
18-
* on `add_subgroup R`s: `add_subgroup.gsemiring`, `add_subgroup.gcomm_semiring`.
19-
* on `submodule S R`s: `submodule.gsemiring`, `submodule.gcomm_semiring`.
17+
* `set_like.gnon_unital_non_assoc_semiring`
18+
* `set_like.gsemiring`
19+
* `set_like.gcomm_semiring`
2020
2121
With these instances in place, it provides the bundled canonical maps out of a direct sum of
2222
subobjects into their carrier type:
2323
24-
* `direct_sum.add_submonoid_coe_ring_hom` (a `ring_hom` version of `direct_sum.add_submonoid_coe`)
25-
* `direct_sum.add_subgroup_coe_ring_hom` (a `ring_hom` version of `direct_sum.add_subgroup_coe`)
26-
* `direct_sum.submodule_coe_alg_hom` (an `alg_hom` version of `direct_sum.submodule_coe`)
24+
* `direct_sum.coe_ring_hom` (a `ring_hom` version of `direct_sum.coe_add_monoid_hom`)
25+
* `direct_sum.coe_alg_hom` (an `alg_hom` version of `direct_sum.submodule_coe`)
2726
2827
Strictly the definitions in this file are not sufficient to fully define an "internal" direct sum;
29-
to represent this case, `(h : direct_sum.submodule_is_internal A) [set_like.graded_monoid A]` is
28+
to represent this case, `(h : direct_sum.is_internal A) [set_like.graded_monoid A]` is
3029
needed. In the future there will likely be a data-carrying, constructive, typeclass version of
31-
`direct_sum.submodule_is_internal` for providing an explicit decomposition function.
30+
`direct_sum.is_internal` for providing an explicit decomposition function.
3231
3332
When `complete_lattice.independent (set.range A)` (a weaker condition than
34-
`direct_sum.submodule_is_internal A`), these provide a grading of `⨆ i, A i`, and the
33+
`direct_sum.is_internal A`), these provide a grading of `⨆ i, A i`, and the
3534
mapping `⨁ i, A i →+ ⨆ i, A i` can be obtained as
3635
`direct_sum.to_monoid (λ i, add_submonoid.inclusion $ le_supr A i)`.
3736
@@ -42,7 +41,7 @@ internally graded ring
4241

4342
open_locale direct_sum big_operators
4443

45-
variables {ι : Type*} {S R : Type*}
44+
variables {ι : Type*} {σ S R : Type*}
4645

4746
lemma set_like.has_graded_one.algebra_map_mem [has_zero ι]
4847
[comm_semiring S] [semiring R] [algebra S R]
@@ -55,118 +54,71 @@ end
5554
section direct_sum
5655
variables [decidable_eq ι]
5756

58-
/-! #### From `add_submonoid`s -/
57+
/-! #### From `add_submonoid`s and `add_subgroup`s -/
5958

60-
namespace add_submonoid
59+
namespace set_like
6160

62-
/-- Build a `gsemiring` instance for a collection of `add_submonoid`s. -/
63-
instance gsemiring [add_monoid ι] [semiring R]
64-
(A : ι → add_submonoid R) [set_like.graded_monoid A] :
61+
/-- Build a `gnon_unital_non_assoc_semiring` instance for a collection of additive submonoids. -/
62+
instance gnon_unital_non_assoc_semiring [has_add ι] [non_unital_non_assoc_semiring R]
63+
[set_like σ R] [add_submonoid_class σ R]
64+
(A : ι → σ) [set_like.has_graded_mul A] :
65+
direct_sum.gnon_unital_non_assoc_semiring (λ i, A i) :=
66+
{ mul_zero := λ i j _, subtype.ext (mul_zero _),
67+
zero_mul := λ i j _, subtype.ext (zero_mul _),
68+
mul_add := λ i j _ _ _, subtype.ext (mul_add _ _ _),
69+
add_mul := λ i j _ _ _, subtype.ext (add_mul _ _ _),
70+
..set_like.ghas_mul A }
71+
72+
/-- Build a `gsemiring` instance for a collection of additive submonoids. -/
73+
instance gsemiring [add_monoid ι] [semiring R] [set_like σ R] [add_submonoid_class σ R]
74+
(A : ι → σ) [set_like.graded_monoid A] :
6575
direct_sum.gsemiring (λ i, A i) :=
6676
{ mul_zero := λ i j _, subtype.ext (mul_zero _),
6777
zero_mul := λ i j _, subtype.ext (zero_mul _),
6878
mul_add := λ i j _ _ _, subtype.ext (mul_add _ _ _),
6979
add_mul := λ i j _ _ _, subtype.ext (add_mul _ _ _),
7080
..set_like.gmonoid A }
7181

72-
/-- Build a `gcomm_semiring` instance for a collection of `add_submonoid`s. -/
73-
instance gcomm_semiring [add_comm_monoid ι] [comm_semiring R]
74-
(A : ι → add_submonoid R) [set_like.graded_monoid A] :
82+
/-- Build a `gcomm_semiring` instance for a collection of additive submonoids. -/
83+
instance gcomm_semiring [add_comm_monoid ι] [comm_semiring R] [set_like σ R]
84+
[add_submonoid_class σ R] (A : ι → σ) [set_like.graded_monoid A] :
7585
direct_sum.gcomm_semiring (λ i, A i) :=
7686
{ ..set_like.gcomm_monoid A,
77-
..add_submonoid.gsemiring A, }
87+
..set_like.gsemiring A, }
7888

79-
end add_submonoid
89+
end set_like
8090

8191
/-- The canonical ring isomorphism between `⨁ i, A i` and `R`-/
82-
def direct_sum.submonoid_coe_ring_hom [add_monoid ι] [semiring R]
83-
(A : ι → add_submonoid R) [h : set_like.graded_monoid A] : (⨁ i, A i) →+* R :=
84-
direct_sum.to_semiring (λ i, (A i).subtype) rfl (λ _ _ _ _, rfl)
92+
def direct_sum.coe_ring_hom [add_monoid ι] [semiring R] [set_like σ R]
93+
[add_submonoid_class σ R] (A : ι → σ) [set_like.graded_monoid A] : (⨁ i, A i) →+* R :=
94+
direct_sum.to_semiring (λ i, add_submonoid_class.subtype (A i)) rfl (λ _ _ _ _, rfl)
8595

8696
/-- The canonical ring isomorphism between `⨁ i, A i` and `R`-/
87-
@[simp] lemma direct_sum.submonoid_coe_ring_hom_of [add_monoid ι] [semiring R]
88-
(A : ι → add_submonoid R) [h : set_like.graded_monoid A] (i : ι) (x : A i) :
89-
direct_sum.submonoid_coe_ring_hom A (direct_sum.of (λ i, A i) i x) = x :=
97+
@[simp] lemma direct_sum.coe_ring_hom_of [add_monoid ι] [semiring R]
98+
(A : ι → add_submonoid R) [set_like.graded_monoid A] (i : ι) (x : A i) :
99+
direct_sum.coe_ring_hom A (direct_sum.of (λ i, A i) i x) = x :=
90100
direct_sum.to_semiring_of _ _ _ _ _
91101

92-
lemma direct_sum.coe_mul_apply_add_submonoid [add_monoid ι] [semiring R]
93-
(A : ι → add_submonoid R) [set_like.graded_monoid A]
102+
lemma direct_sum.coe_mul_apply [add_monoid ι] [semiring R] [set_like σ R]
103+
[add_submonoid_class σ R] (A : ι → σ) [set_like.graded_monoid A]
94104
[Π (i : ι) (x : A i), decidable (x ≠ 0)] (r r' : ⨁ i, A i) (i : ι) :
95105
((r * r') i : R) =
96106
∑ ij in finset.filter (λ ij : ι × ι, ij.1 + ij.2 = i) (r.support.product r'.support),
97107
r ij.1 * r' ij.2 :=
98108
begin
99109
rw [direct_sum.mul_eq_sum_support_ghas_mul, dfinsupp.finset_sum_apply,
100110
add_submonoid_class.coe_finset_sum],
101-
simp_rw [direct_sum.coe_of_add_submonoid_apply, ←finset.sum_filter, set_like.coe_ghas_mul],
111+
simp_rw [direct_sum.coe_of_apply, ←finset.sum_filter, set_like.coe_ghas_mul],
102112
end
103113

104-
/-! #### From `add_subgroup`s -/
105-
106-
namespace add_subgroup
107-
108-
/-- Build a `gsemiring` instance for a collection of `add_subgroup`s. -/
109-
instance gsemiring [add_monoid ι] [ring R]
110-
(A : ι → add_subgroup R) [h : set_like.graded_monoid A] :
111-
direct_sum.gsemiring (λ i, A i) :=
112-
have i' : set_like.graded_monoid (λ i, (A i).to_add_submonoid) := {..h},
113-
by exactI add_submonoid.gsemiring (λ i, (A i).to_add_submonoid)
114-
115-
/-- Build a `gcomm_semiring` instance for a collection of `add_subgroup`s. -/
116-
instance gcomm_semiring [add_comm_group ι] [comm_ring R]
117-
(A : ι → add_subgroup R) [h : set_like.graded_monoid A] :
118-
direct_sum.gsemiring (λ i, A i) :=
119-
have i' : set_like.graded_monoid (λ i, (A i).to_add_submonoid) := {..h},
120-
by exactI add_submonoid.gsemiring (λ i, (A i).to_add_submonoid)
121-
122-
end add_subgroup
123-
124-
/-- The canonical ring isomorphism between `⨁ i, A i` and `R`. -/
125-
def direct_sum.subgroup_coe_ring_hom [add_monoid ι] [ring R]
126-
(A : ι → add_subgroup R) [set_like.graded_monoid A] : (⨁ i, A i) →+* R :=
127-
direct_sum.to_semiring (λ i, (A i).subtype) rfl (λ _ _ _ _, rfl)
128-
129-
@[simp] lemma direct_sum.subgroup_coe_ring_hom_of [add_monoid ι] [ring R]
130-
(A : ι → add_subgroup R) [set_like.graded_monoid A] (i : ι) (x : A i) :
131-
direct_sum.subgroup_coe_ring_hom A (direct_sum.of (λ i, A i) i x) = x :=
132-
direct_sum.to_semiring_of _ _ _ _ _
133-
134-
lemma direct_sum.coe_mul_apply_add_subgroup [add_monoid ι] [ring R]
135-
(A : ι → add_subgroup R) [set_like.graded_monoid A] [Π (i : ι) (x : A i), decidable (x ≠ 0)]
136-
(r r' : ⨁ i, A i) (i : ι) :
137-
((r * r') i : R) =
138-
∑ ij in finset.filter (λ ij : ι × ι, ij.1 + ij.2 = i) (r.support.product r'.support),
139-
r ij.1 * r' ij.2 :=
140-
begin
141-
rw [direct_sum.mul_eq_sum_support_ghas_mul, dfinsupp.finset_sum_apply,
142-
add_submonoid_class.coe_finset_sum],
143-
simp_rw [direct_sum.coe_of_add_subgroup_apply, ←finset.sum_filter, set_like.coe_ghas_mul],
144-
end
145-
146-
/-! #### From `submodules`s -/
114+
/-! #### From `submodule`s -/
147115

148116
namespace submodule
149117

150-
/-- Build a `gsemiring` instance for a collection of `submodule`s. -/
151-
instance gsemiring [add_monoid ι]
152-
[comm_semiring S] [semiring R] [algebra S R]
153-
(A : ι → submodule S R) [h : set_like.graded_monoid A] :
154-
direct_sum.gsemiring (λ i, A i) :=
155-
have i' : set_like.graded_monoid (λ i, (A i).to_add_submonoid) := {..h},
156-
by exactI add_submonoid.gsemiring (λ i, (A i).to_add_submonoid)
157-
158-
/-- Build a `gsemiring` instance for a collection of `submodule`s. -/
159-
instance gcomm_semiring [add_comm_monoid ι]
160-
[comm_semiring S] [comm_semiring R] [algebra S R]
161-
(A : ι → submodule S R) [h : set_like.graded_monoid A] :
162-
direct_sum.gcomm_semiring (λ i, A i) :=
163-
have i' : set_like.graded_monoid (λ i, (A i).to_add_submonoid) := {..h},
164-
by exactI add_submonoid.gcomm_semiring (λ i, (A i).to_add_submonoid)
165-
166118
/-- Build a `galgebra` instance for a collection of `submodule`s. -/
167119
instance galgebra [add_monoid ι]
168120
[comm_semiring S] [semiring R] [algebra S R]
169-
(A : ι → submodule S R) [h : set_like.graded_monoid A] :
121+
(A : ι → submodule S R) [set_like.graded_monoid A] :
170122
direct_sum.galgebra S (λ i, A i) :=
171123
{ to_fun := ((algebra.linear_map S R).cod_restrict (A 0) $
172124
set_like.has_graded_one.algebra_map_mem A).to_add_monoid_hom,
@@ -178,7 +130,7 @@ instance galgebra [add_monoid ι]
178130

179131
@[simp] lemma set_like.coe_galgebra_to_fun [add_monoid ι]
180132
[comm_semiring S] [semiring R] [algebra S R]
181-
(A : ι → submodule S R) [h : set_like.graded_monoid A] (s : S) :
133+
(A : ι → submodule S R) [set_like.graded_monoid A] (s : S) :
182134
↑(@direct_sum.galgebra.to_fun _ S (λ i, A i) _ _ _ _ _ _ _ s) = (algebra_map S R s : R) := rfl
183135

184136
/-- A direct sum of powers of a submodule of an algebra has a multiplicative structure. -/
@@ -191,36 +143,24 @@ instance nat_power_graded_monoid
191143
end submodule
192144

193145
/-- The canonical algebra isomorphism between `⨁ i, A i` and `R`. -/
194-
def direct_sum.submodule_coe_alg_hom [add_monoid ι]
146+
def direct_sum.coe_alg_hom [add_monoid ι]
195147
[comm_semiring S] [semiring R] [algebra S R]
196-
(A : ι → submodule S R) [h : set_like.graded_monoid A] : (⨁ i, A i) →ₐ[S] R :=
148+
(A : ι → submodule S R) [set_like.graded_monoid A] : (⨁ i, A i) →ₐ[S] R :=
197149
direct_sum.to_algebra S _ (λ i, (A i).subtype) rfl (λ _ _ _ _, rfl) (λ _, rfl)
198150

199151
/-- The supremum of submodules that form a graded monoid is a subalgebra, and equal to the range of
200-
`direct_sum.submodule_coe_alg_hom`. -/
152+
`direct_sum.coe_alg_hom`. -/
201153
lemma submodule.supr_eq_to_submodule_range [add_monoid ι]
202154
[comm_semiring S] [semiring R] [algebra S R] (A : ι → submodule S R) [set_like.graded_monoid A] :
203-
(⨆ i, A i) = (direct_sum.submodule_coe_alg_hom A).range.to_submodule :=
155+
(⨆ i, A i) = (direct_sum.coe_alg_hom A).range.to_submodule :=
204156
(submodule.supr_eq_range_dfinsupp_lsum A).trans $ set_like.coe_injective rfl
205157

206-
@[simp] lemma direct_sum.submodule_coe_alg_hom_of [add_monoid ι]
158+
@[simp] lemma direct_sum.coe_alg_hom_of [add_monoid ι]
207159
[comm_semiring S] [semiring R] [algebra S R]
208-
(A : ι → submodule S R) [h : set_like.graded_monoid A] (i : ι) (x : A i) :
209-
direct_sum.submodule_coe_alg_hom A (direct_sum.of (λ i, A i) i x) = x :=
160+
(A : ι → submodule S R) [set_like.graded_monoid A] (i : ι) (x : A i) :
161+
direct_sum.coe_alg_hom A (direct_sum.of (λ i, A i) i x) = x :=
210162
direct_sum.to_semiring_of _ rfl (λ _ _ _ _, rfl) _ _
211163

212-
lemma direct_sum.coe_mul_apply_submodule [add_monoid ι]
213-
[comm_semiring S] [semiring R] [algebra S R]
214-
(A : ι → submodule S R) [Π (i : ι) (x : A i), decidable (x ≠ 0)]
215-
[set_like.graded_monoid A] (r r' : ⨁ i, A i) (i : ι) :
216-
((r * r') i : R) =
217-
∑ ij in finset.filter (λ ij : ι × ι, ij.1 + ij.2 = i) (r.support.product r'.support),
218-
r ij.1 * r' ij.2 :=
219-
begin
220-
rw [direct_sum.mul_eq_sum_support_ghas_mul, dfinsupp.finset_sum_apply, submodule.coe_sum],
221-
simp_rw [direct_sum.coe_of_submodule_apply, ←finset.sum_filter, set_like.coe_ghas_mul],
222-
end
223-
224164
end direct_sum
225165

226166
section homogeneous_element

0 commit comments

Comments
 (0)