@@ -230,6 +230,18 @@ repr_eq_iff'.mpr (λ i, by rw [h, b₂.repr_self])
230
230
231
231
end ext
232
232
233
+ section map
234
+
235
+ variables (f : M ≃ₗ[R] M')
236
+
237
+ /-- Apply the linear equivalence `f` to the basis vectors. -/
238
+ protected def map : basis ι R M' :=
239
+ of_repr (f.symm.trans b.repr)
240
+
241
+ @[simp] lemma map_apply (i) : b.map f i = f (b i) := rfl
242
+
243
+ end map
244
+
233
245
section reindex
234
246
235
247
variables (b' : basis ι' R M')
@@ -263,31 +275,44 @@ lemma range_reindex : set.range (b.reindex e) = set.range b :=
263
275
by rw [coe_reindex, range_reindex']
264
276
265
277
/-- `b.reindex_range` is a basis indexed by `range b`, the basis vectors themselves. -/
266
- def reindex_range [nontrivial R] : basis (range b) R M :=
267
- b.reindex (equiv.of_injective b b.injective)
278
+ def reindex_range : basis (range b) R M :=
279
+ if h : nontrivial R then
280
+ by letI := h; exact b.reindex (equiv.of_injective b (basis.injective b))
281
+ else
282
+ by letI : subsingleton R := not_nontrivial_iff_subsingleton.mp h; exact
283
+ basis.of_repr (module.subsingleton_equiv R M (range b))
268
284
269
285
lemma finsupp.single_apply_left {α β γ : Type *} [has_zero γ]
270
286
{f : α → β} (hf : function.injective f)
271
287
(x z : α) (y : γ) :
272
288
finsupp.single (f x) y (f z) = finsupp.single x y z :=
273
289
by simp [finsupp.single_apply, hf.eq_iff]
274
290
275
- lemma reindex_range_self [nontrivial R] (i : ι) (h := set.mem_range_self i) :
291
+ lemma reindex_range_self (i : ι) (h := set.mem_range_self i) :
276
292
b.reindex_range ⟨b i, h⟩ = b i :=
277
- by rw [reindex_range, reindex_apply, equiv.apply_of_injective_symm b b.injective, subtype.coe_mk]
293
+ begin
294
+ by_cases htr : nontrivial R,
295
+ { letI := htr,
296
+ simp [htr, reindex_range, reindex_apply, equiv.apply_of_injective_symm b b.injective,
297
+ subtype.coe_mk] },
298
+ { letI : subsingleton R := not_nontrivial_iff_subsingleton.mp htr,
299
+ letI := module.subsingleton R M,
300
+ simp [reindex_range] }
301
+ end
278
302
279
- lemma reindex_range_repr_self [nontrivial R] (i : ι) :
303
+ lemma reindex_range_repr_self (i : ι) :
280
304
b.reindex_range.repr (b i) = finsupp.single ⟨b i, mem_range_self i⟩ 1 :=
281
305
calc b.reindex_range.repr (b i) = b.reindex_range.repr (b.reindex_range ⟨b i, mem_range_self i⟩) :
282
306
congr_arg _ (b.reindex_range_self _ _).symm
283
307
... = finsupp.single ⟨b i, mem_range_self i⟩ 1 : b.reindex_range.repr_self _
284
308
285
- @[simp] lemma reindex_range_apply [nontrivial R] (x : range b) : b.reindex_range x = x :=
309
+ @[simp] lemma reindex_range_apply (x : range b) : b.reindex_range x = x :=
286
310
by { rcases x with ⟨bi, ⟨i, rfl⟩⟩, exact b.reindex_range_self i, }
287
311
288
- lemma reindex_range_repr' [nontrivial R] (x : M) {bi : M} {i : ι} (h : b i = bi) :
312
+ lemma reindex_range_repr' (x : M) {bi : M} {i : ι} (h : b i = bi) :
289
313
b.reindex_range.repr x ⟨bi, ⟨i, h⟩⟩ = b.repr x i :=
290
314
begin
315
+ nontriviality,
291
316
subst h,
292
317
refine (b.repr_apply_eq (λ x i, b.reindex_range.repr x ⟨b i, _⟩) _ _ _ x i).symm,
293
318
{ intros x y,
@@ -303,7 +328,7 @@ begin
303
328
exact λ i j h, b.injective (subtype.mk.inj h) }
304
329
end
305
330
306
- @[simp] lemma reindex_range_repr [nontrivial R] (x : M) (i : ι) (h := set.mem_range_self i) :
331
+ @[simp] lemma reindex_range_repr (x : M) (i : ι) (h := set.mem_range_self i) :
307
332
b.reindex_range.repr x ⟨b i, h⟩ = b.repr x i :=
308
333
b.reindex_range_repr' _ rfl
309
334
@@ -400,18 +425,6 @@ b.ext' (λ i, by simp)
400
425
401
426
end equiv
402
427
403
- section map
404
-
405
- variables (f : M ≃ₗ[R] M')
406
-
407
- /-- Apply the linear equivalence `f` to the basis vectors. -/
408
- protected def map : basis ι R M' :=
409
- of_repr (f.symm.trans b.repr)
410
-
411
- @[simp] lemma map_apply (i) : b.map f i = f (b i) := rfl
412
-
413
- end map
414
-
415
428
section prod
416
429
417
430
variables (b' : basis ι' R M')
0 commit comments