@@ -171,19 +171,15 @@ end
171
171
theorem to_dual_ker : b.to_dual.ker = ⊥ :=
172
172
ker_eq_bot'.mpr b.to_dual_inj
173
173
174
- theorem to_dual_range [fin : fintype ι] : b.to_dual.range = ⊤ :=
174
+ theorem to_dual_range [_root_.finite ι] : b.to_dual.range = ⊤ :=
175
175
begin
176
- rw eq_top_iff' ,
177
- intro f ,
176
+ casesI nonempty_fintype ι ,
177
+ refine eq_top_iff'. 2 (λ f, _) ,
178
178
rw linear_map.mem_range,
179
- let lin_comb : ι →₀ R := finsupp.on_finset fin.elems (λ i, f.to_fun (b i)) _,
180
- { use finsupp.total ι M R b lin_comb,
181
- apply b.ext,
182
- { intros i,
183
- rw [b.to_dual_eq_repr _ i, repr_total b],
184
- { refl } } },
185
- { intros a _,
186
- apply fin.complete }
179
+ let lin_comb : ι →₀ R := finsupp.equiv_fun_on_fintype.2 (λ i, f.to_fun (b i)),
180
+ refine ⟨finsupp.total ι M R b lin_comb, b.ext $ λ i, _⟩,
181
+ rw [b.to_dual_eq_repr _ i, repr_total b],
182
+ refl,
187
183
end
188
184
189
185
end comm_semiring
@@ -207,53 +203,52 @@ section comm_ring
207
203
variables [comm_ring R] [add_comm_group M] [module R M] [decidable_eq ι]
208
204
variables (b : basis ι R M)
209
205
206
+ section finite
207
+ variables [_root_.finite ι]
208
+
210
209
/-- A vector space is linearly equivalent to its dual space. -/
211
210
@[simps]
212
- def to_dual_equiv [fintype ι] : M ≃ₗ[R] ( dual R M) :=
211
+ def to_dual_equiv : M ≃ₗ[R] dual R M :=
213
212
linear_equiv.of_bijective b.to_dual
214
213
(ker_eq_bot.mp b.to_dual_ker) (range_eq_top.mp b.to_dual_range)
215
214
216
215
/-- Maps a basis for `V` to a basis for the dual space. -/
217
- def dual_basis [fintype ι] : basis ι R (dual R M) :=
218
- b.map b.to_dual_equiv
216
+ def dual_basis : basis ι R (dual R M) := b.map b.to_dual_equiv
219
217
220
218
-- We use `j = i` to match `basis.repr_self`
221
- lemma dual_basis_apply_self [fintype ι] (i j : ι) :
222
- b.dual_basis i (b j) = if j = i then 1 else 0 :=
219
+ lemma dual_basis_apply_self (i j : ι) : b.dual_basis i (b j) = if j = i then 1 else 0 :=
223
220
by { convert b.to_dual_apply i j using 2 , rw @eq_comm _ j i }
224
221
225
- lemma total_dual_basis [fintype ι] (f : ι →₀ R) (i : ι) :
222
+ lemma total_dual_basis (f : ι →₀ R) (i : ι) :
226
223
finsupp.total ι (dual R M) R b.dual_basis f (b i) = f i :=
227
224
begin
225
+ casesI nonempty_fintype ι,
228
226
rw [finsupp.total_apply, finsupp.sum_fintype, linear_map.sum_apply],
229
227
{ simp_rw [linear_map.smul_apply, smul_eq_mul, dual_basis_apply_self, mul_boole,
230
228
finset.sum_ite_eq, if_pos (finset.mem_univ i)] },
231
229
{ intro, rw zero_smul },
232
230
end
233
231
234
- lemma dual_basis_repr [fintype ι] (l : dual R M) (i : ι) :
235
- b.dual_basis.repr l i = l (b i) :=
232
+ lemma dual_basis_repr (l : dual R M) (i : ι) : b.dual_basis.repr l i = l (b i) :=
236
233
by rw [← total_dual_basis b, basis.total_repr b.dual_basis l]
237
234
238
- lemma dual_basis_equiv_fun [fintype ι] (l : dual R M) (i : ι) :
239
- b.dual_basis.equiv_fun l i = l (b i) :=
240
- by rw [basis.equiv_fun_apply, dual_basis_repr]
241
-
242
- lemma dual_basis_apply [fintype ι] (i : ι) (m : M) : b.dual_basis i m = b.repr m i :=
243
- b.to_dual_apply_right i m
235
+ lemma dual_basis_apply (i : ι) (m : M) : b.dual_basis i m = b.repr m i := b.to_dual_apply_right i m
244
236
245
- @[simp] lemma coe_dual_basis [fintype ι] :
246
- ⇑b.dual_basis = b.coord :=
247
- by { ext i x, apply dual_basis_apply }
237
+ @[simp] lemma coe_dual_basis : ⇑b.dual_basis = b.coord := by { ext i x, apply dual_basis_apply }
248
238
249
- @[simp] lemma to_dual_to_dual [fintype ι] :
250
- b.dual_basis.to_dual.comp b.to_dual = dual.eval R M :=
239
+ @[simp] lemma to_dual_to_dual : b.dual_basis.to_dual.comp b.to_dual = dual.eval R M :=
251
240
begin
252
241
refine b.ext (λ i, b.dual_basis.ext (λ j, _)),
253
242
rw [linear_map.comp_apply, to_dual_apply_left, coe_to_dual_self, ← coe_dual_basis,
254
243
dual.eval_apply, basis.repr_self, finsupp.single_apply, dual_basis_apply_self]
255
244
end
256
245
246
+ end finite
247
+
248
+ lemma dual_basis_equiv_fun [fintype ι] (l : dual R M) (i : ι) :
249
+ b.dual_basis.equiv_fun l i = l (b i) :=
250
+ by rw [basis.equiv_fun_apply, dual_basis_repr]
251
+
257
252
theorem eval_ker {ι : Type *} (b : basis ι R M) :
258
253
(dual.eval R M).ker = ⊥ :=
259
254
begin
@@ -263,20 +258,20 @@ begin
263
258
exact (basis.forall_coord_eq_zero_iff _).mp (λ i, hm (b.coord i))
264
259
end
265
260
266
- lemma eval_range {ι : Type *} [fintype ι] (b : basis ι R M) :
267
- (eval R M).range = ⊤ :=
261
+ lemma eval_range {ι : Type *} [_root_.finite ι] (b : basis ι R M) : (eval R M).range = ⊤ :=
268
262
begin
269
263
classical,
264
+ casesI nonempty_fintype ι,
270
265
rw [← b.to_dual_to_dual, range_comp, b.to_dual_range, map_top, to_dual_range _],
271
266
apply_instance
272
267
end
273
268
274
269
/-- A module with a basis is linearly equivalent to the dual of its dual space. -/
275
- def eval_equiv {ι : Type *} [fintype ι] (b : basis ι R M) : M ≃ₗ[R] dual R (dual R M) :=
270
+ def eval_equiv {ι : Type *} [_root_.finite ι] (b : basis ι R M) : M ≃ₗ[R] dual R (dual R M) :=
276
271
linear_equiv.of_bijective (eval R M)
277
272
(ker_eq_bot.mp b.eval_ker) (range_eq_top.mp b.eval_range)
278
273
279
- @[simp] lemma eval_equiv_to_linear_map {ι : Type *} [fintype ι] (b : basis ι R M) :
274
+ @[simp] lemma eval_equiv_to_linear_map {ι : Type *} [_root_.finite ι] (b : basis ι R M) :
280
275
(b.eval_equiv).to_linear_map = dual.eval R M := rfl
281
276
282
277
section
@@ -294,16 +289,17 @@ end
294
289
end comm_ring
295
290
296
291
/-- `simp` normal form version of `total_dual_basis` -/
297
- @[simp] lemma total_coord [comm_ring R] [add_comm_group M] [module R M] [fintype ι]
292
+ @[simp] lemma total_coord [comm_ring R] [add_comm_group M] [module R M] [_root_.finite ι]
298
293
(b : basis ι R M) (f : ι →₀ R) (i : ι) :
299
294
finsupp.total ι (dual R M) R b.coord f (b i) = f i :=
300
295
by { haveI := classical.dec_eq ι, rw [← coe_dual_basis, total_dual_basis] }
301
296
302
- -- TODO(jmc): generalize to rings, once ` module.rank` is generalized
303
- theorem dual_dim_eq [field K] [add_comm_group V] [module K V] [fintype ι] (b : basis ι K V) :
297
+ lemma dual_dim_eq [comm_ring K] [add_comm_group V] [ module K V] [_root_.finite ι]
298
+ (b : basis ι K V) :
304
299
cardinal.lift (module.rank K V) = module.rank K (dual K V) :=
305
300
begin
306
301
classical,
302
+ casesI nonempty_fintype ι,
307
303
have := linear_equiv.lift_dim_eq b.to_dual_equiv,
308
304
simp only [cardinal.lift_umax] at this ,
309
305
rw [this , ← cardinal.lift_umax],
0 commit comments