@@ -237,3 +237,71 @@ lemma map_congr_perm [fintype ι] (σ : equiv.perm ι) :
237
237
by { rw [g.map_perm, smul_smul], simp }
238
238
239
239
end alternating_map
240
+
241
+ open_locale big_operators
242
+
243
+ namespace multilinear_map
244
+
245
+ open equiv
246
+
247
+ variables [fintype ι]
248
+
249
+ private lemma alternization_map_eq_zero_of_eq_aux
250
+ (m : multilinear_map R (λ i : ι, M) L)
251
+ (v : ι → M) (i j : ι) (i_ne_j : i ≠ j) (hv : v i = v j) :
252
+ ∑ (σ : perm ι), (σ.sign : ℤ) • m.dom_dom_congr σ v = 0 :=
253
+ finset.sum_involution
254
+ (λ σ _, swap i j * σ)
255
+ (λ σ _, begin
256
+ convert add_right_neg (↑σ.sign • m.dom_dom_congr σ v),
257
+ rw [perm.sign_mul, perm.sign_swap i_ne_j, ←neg_smul,
258
+ multilinear_map.dom_dom_congr_apply, multilinear_map.dom_dom_congr_apply],
259
+ congr' 2 ,
260
+ { simp },
261
+ { ext, simp [apply_swap_eq_self hv] },
262
+ end )
263
+ (λ σ _ _, (not_congr swap_mul_eq_iff).mpr i_ne_j)
264
+ (λ σ _, finset.mem_univ _)
265
+ (λ σ _, swap_mul_involutive i j σ)
266
+
267
+ /-- Produce an `alternating_map` out of a `multilinear_map`, by summing over all argument
268
+ permutations. -/
269
+ def alternatization : multilinear_map R (λ i : ι, M) L →+ alternating_map R M L ι :=
270
+ { to_fun := λ m,
271
+ { to_fun := λ v, ∑ (σ : perm ι), (σ.sign : ℤ) • m.dom_dom_congr σ v,
272
+ map_add' := λ v i a b, by simp_rw [←finset.sum_add_distrib, multilinear_map.map_add, smul_add],
273
+ map_smul' := λ v i c a, by simp_rw [finset.smul_sum, multilinear_map.map_smul, smul_comm],
274
+ map_eq_zero_of_eq' := λ v i j hvij hij, alternization_map_eq_zero_of_eq_aux m v i j hij hvij },
275
+ map_add' := λ a b, begin
276
+ ext,
277
+ simp only [
278
+ finset.sum_add_distrib, smul_add, add_apply, dom_dom_congr_apply, alternating_map.add_apply,
279
+ alternating_map.coe_mk],
280
+ end ,
281
+ map_zero' := begin
282
+ ext,
283
+ simp only [
284
+ dom_dom_congr_apply, alternating_map.zero_apply, finset.sum_const_zero, smul_zero,
285
+ alternating_map.coe_mk, zero_apply]
286
+ end }
287
+
288
+ lemma alternatization_apply (m : multilinear_map R (λ i : ι, M) L) (v : ι → M) :
289
+ alternatization m v = ∑ (σ : perm ι), (σ.sign : ℤ) • m.dom_dom_congr σ v := rfl
290
+
291
+ end multilinear_map
292
+
293
+ namespace alternating_map
294
+
295
+ /-- Alternatizing a multilinear map that is already alternating results in a scale factor of `n!`,
296
+ where `n` is the number of inputs. -/
297
+ lemma to_multilinear_map_alternization [fintype ι] (a : alternating_map R M L ι) :
298
+ a.to_multilinear_map.alternatization = nat.factorial (fintype.card ι) • a :=
299
+ begin
300
+ ext,
301
+ simp only [multilinear_map.alternatization_apply, map_perm, smul_smul, ←nat.smul_def, coe_mk,
302
+ smul_apply, add_monoid_hom.coe_mk, finset.sum_const, coe_multilinear_map, one_smul,
303
+ multilinear_map.dom_dom_congr_apply, int.units_coe_mul_self, to_multilinear_map_eq_coe,
304
+ finset.card_univ, fintype.card_perm],
305
+ end
306
+
307
+ end alternating_map
0 commit comments