@@ -14,24 +14,23 @@ import algebra.direct_sum.algebra
14
14
This module provides `gsemiring` and `gcomm_semiring` instances for a collection of subobjects `A`
15
15
when a `set_like.graded_monoid` instance is available:
16
16
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`
20
20
21
21
With these instances in place, it provides the bundled canonical maps out of a direct sum of
22
22
subobjects into their carrier type:
23
23
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`)
27
26
28
27
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
30
29
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.
32
31
33
32
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
35
34
mapping `⨁ i, A i →+ ⨆ i, A i` can be obtained as
36
35
`direct_sum.to_monoid (λ i, add_submonoid.inclusion $ le_supr A i)`.
37
36
@@ -42,7 +41,7 @@ internally graded ring
42
41
43
42
open_locale direct_sum big_operators
44
43
45
- variables {ι : Type *} {S R : Type *}
44
+ variables {ι : Type *} {σ S R : Type *}
46
45
47
46
lemma set_like.has_graded_one.algebra_map_mem [has_zero ι]
48
47
[comm_semiring S] [semiring R] [algebra S R]
55
54
section direct_sum
56
55
variables [decidable_eq ι]
57
56
58
- /-! #### From `add_submonoid`s -/
57
+ /-! #### From `add_submonoid`s and `add_subgroup`s -/
59
58
60
- namespace add_submonoid
59
+ namespace set_like
61
60
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] :
65
75
direct_sum.gsemiring (λ i, A i) :=
66
76
{ mul_zero := λ i j _, subtype.ext (mul_zero _),
67
77
zero_mul := λ i j _, subtype.ext (zero_mul _),
68
78
mul_add := λ i j _ _ _, subtype.ext (mul_add _ _ _),
69
79
add_mul := λ i j _ _ _, subtype.ext (add_mul _ _ _),
70
80
..set_like.gmonoid A }
71
81
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] :
75
85
direct_sum.gcomm_semiring (λ i, A i) :=
76
86
{ ..set_like.gcomm_monoid A,
77
- ..add_submonoid .gsemiring A, }
87
+ ..set_like .gsemiring A, }
78
88
79
- end add_submonoid
89
+ end set_like
80
90
81
91
/-- 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)
85
95
86
96
/-- 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 :=
90
100
direct_sum.to_semiring_of _ _ _ _ _
91
101
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]
94
104
[Π (i : ι) (x : A i), decidable (x ≠ 0 )] (r r' : ⨁ i, A i) (i : ι) :
95
105
((r * r') i : R) =
96
106
∑ ij in finset.filter (λ ij : ι × ι, ij.1 + ij.2 = i) (r.support.product r'.support),
97
107
r ij.1 * r' ij.2 :=
98
108
begin
99
109
rw [direct_sum.mul_eq_sum_support_ghas_mul, dfinsupp.finset_sum_apply,
100
110
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],
102
112
end
103
113
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 -/
147
115
148
116
namespace submodule
149
117
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
-
166
118
/-- Build a `galgebra` instance for a collection of `submodule`s. -/
167
119
instance galgebra [add_monoid ι]
168
120
[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] :
170
122
direct_sum.galgebra S (λ i, A i) :=
171
123
{ to_fun := ((algebra.linear_map S R).cod_restrict (A 0 ) $
172
124
set_like.has_graded_one.algebra_map_mem A).to_add_monoid_hom,
@@ -178,7 +130,7 @@ instance galgebra [add_monoid ι]
178
130
179
131
@[simp] lemma set_like.coe_galgebra_to_fun [add_monoid ι]
180
132
[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) :
182
134
↑(@direct_sum.galgebra.to_fun _ S (λ i, A i) _ _ _ _ _ _ _ s) = (algebra_map S R s : R) := rfl
183
135
184
136
/-- A direct sum of powers of a submodule of an algebra has a multiplicative structure. -/
@@ -191,36 +143,24 @@ instance nat_power_graded_monoid
191
143
end submodule
192
144
193
145
/-- 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 ι]
195
147
[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 :=
197
149
direct_sum.to_algebra S _ (λ i, (A i).subtype) rfl (λ _ _ _ _, rfl) (λ _, rfl)
198
150
199
151
/-- 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 `. -/
201
153
lemma submodule.supr_eq_to_submodule_range [add_monoid ι]
202
154
[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 :=
204
156
(submodule.supr_eq_range_dfinsupp_lsum A).trans $ set_like.coe_injective rfl
205
157
206
- @[simp] lemma direct_sum.submodule_coe_alg_hom_of [add_monoid ι]
158
+ @[simp] lemma direct_sum.coe_alg_hom_of [add_monoid ι]
207
159
[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 :=
210
162
direct_sum.to_semiring_of _ rfl (λ _ _ _ _, rfl) _ _
211
163
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
-
224
164
end direct_sum
225
165
226
166
section homogeneous_element
0 commit comments