Alternating Maps #
We construct the bundled function alternating_map
, which extends multilinear_map
with all the
arguments of the same type.
Main definitions #
alternating_map R M N ι
is the space ofR
-linear alternating maps fromι → M
toN
.f.map_eq_zero_of_eq
expresses thatf
is zero when two inputs are equal.f.map_swap
expresses thatf
is negated when two inputs are swapped.f.map_perm
expresses howf
varies by a sign change under a permutation of its inputs.- An
add_comm_monoid
,add_comm_group
, andmodule
structure overalternating_map
s that matches the definitions overmultilinear_map
s. multilinear_map.alternatization
, which makes an alternating map out of a non-alternating one.alternating_map.dom_coprod
, which behaves as a product between two alternating maps.
Implementation notes #
alternating_map
is defined in terms of map_eq_zero_of_eq
, as this is easier to work with than
using map_swap
as a definition, and does not require has_neg N
.
alternating_map
s are provided with a coercion to multilinear_map
, along with a set of
norm_cast
lemmas that act on the algebraic structure:
The multilinear map associated to an alternating map
- to_fun : (Π (i : ι), (λ (i : ι), M) i) → N
- map_add' : ∀ (m : Π (i : ι), (λ (i : ι), M) i) (i : ι) (x y : (λ (i : ι), M) i), self.to_fun (function.update m i (x + y)) = self.to_fun (function.update m i x) + self.to_fun (function.update m i y)
- map_smul' : ∀ (m : Π (i : ι), (λ (i : ι), M) i) (i : ι) (c : R) (x : (λ (i : ι), M) i), self.to_fun (function.update m i (c • x)) = c • self.to_fun (function.update m i x)
- map_eq_zero_of_eq' : ∀ (v : ι → M) (i j : ι), v i = v j → i ≠ j → self.to_fun v = 0
An alternating map is a multilinear map that vanishes when two of its arguments are equal.
Basic coercion simp lemmas, largely copied from ring_hom
and multilinear_map
Equations
- alternating_map.has_coe_to_fun = {coe := λ (x : alternating_map R M N ι), x.to_fun}
Equations
- alternating_map.multilinear_map.has_coe = {coe := λ (x : alternating_map R M N ι), x.to_multilinear_map}
Simp-normal forms of the structure fields #
These are expressed in terms of ⇑f
instead of f.to_fun
.
Algebraic structure inherited from multilinear_map
#
alternating_map
carries the same add_comm_monoid
, add_comm_group
, and module
structure
as multilinear_map
Equations
- alternating_map.has_scalar = {smul := λ (c : S) (f : alternating_map R M N ι), {to_fun := (c • ↑f).to_fun, map_add' := _, map_smul' := _, map_eq_zero_of_eq' := _}}
Equations
- alternating_map.has_add = {add := λ (a b : alternating_map R M N ι), {to_fun := (↑a + ↑b).to_fun, map_add' := _, map_smul' := _, map_eq_zero_of_eq' := _}}
Equations
- alternating_map.has_zero = {zero := {to_fun := 0.to_fun, map_add' := _, map_smul' := _, map_eq_zero_of_eq' := _}}
Equations
Equations
- alternating_map.add_comm_monoid = function.injective.add_comm_monoid coe_fn alternating_map.add_comm_monoid._proof_2 alternating_map.add_comm_monoid._proof_3 alternating_map.add_comm_monoid._proof_4 alternating_map.add_comm_monoid._proof_5
Equations
- alternating_map.has_neg = {neg := λ (f : alternating_map R M N' ι), {to_fun := (-↑f).to_fun, map_add' := _, map_smul' := _, map_eq_zero_of_eq' := _}}
Equations
- alternating_map.has_sub = {sub := λ (f g : alternating_map R M N' ι), {to_fun := (↑f - ↑g).to_fun, map_add' := _, map_smul' := _, map_eq_zero_of_eq' := _}}
Equations
- alternating_map.add_comm_group = function.injective.add_comm_group coe_fn alternating_map.add_comm_group._proof_3 alternating_map.add_comm_group._proof_4 alternating_map.add_comm_group._proof_5 alternating_map.add_comm_group._proof_6 alternating_map.add_comm_group._proof_7 alternating_map.add_comm_group._proof_8 alternating_map.add_comm_group._proof_9
Equations
- alternating_map.distrib_mul_action = {to_mul_action := {to_has_scalar := alternating_map.has_scalar _inst_13, one_smul := _, mul_smul := _}, smul_add := _, smul_zero := _}
The space of multilinear maps over an algebra over R
is a module over R
, for the pointwise
addition and scalar multiplication.
Equations
- alternating_map.module = {to_distrib_mul_action := alternating_map.distrib_mul_action _inst_13, add_smul := _, zero_smul := _}
The evaluation map from ι → N
to N
at a given i
is alternating when ι
is subsingleton.
Equations
- alternating_map.of_subsingleton R N i = {to_fun := function.eval i, map_add' := _, map_smul' := _, map_eq_zero_of_eq' := _}
Composition with linear maps #
Composing a alternating map with a linear map on the left gives again an alternating map.
Equations
- g.comp_alternating_map = {to_fun := λ (f : alternating_map R M N ι), {to_fun := (g.comp_multilinear_map ↑f).to_fun, map_add' := _, map_smul' := _, map_eq_zero_of_eq' := _}, map_zero' := _, map_add' := _}
Composing a alternating map with the same linear map on each argument gives again an alternating map.
Equations
- f.comp_linear_map g = {to_fun := (↑f.comp_linear_map (λ (_x : ι), g)).to_fun, map_add' := _, map_smul' := _, map_eq_zero_of_eq' := _}
Composing an alternating map twice with the same linear map in each argument is the same as composing with their composition.
Composing an alternating map with the identity linear map in each argument.
Composing with a surjective linear map is injective.
Construct a linear equivalence between maps from a linear equivalence between domains.
Equations
- alternating_map.dom_lcongr R N ι S e = {to_fun := λ (f : alternating_map R M N ι), f.comp_linear_map ↑(e.symm), map_add' := _, map_smul' := _, inv_fun := λ (g : alternating_map R M₂ N ι), g.comp_linear_map ↑e, left_inv := _, right_inv := _}
Composing an alternating map with the same linear equiv on each argument gives the zero map if and only if the alternating map is the zero map.
Other lemmas from multilinear_map
#
Theorems specific to alternating maps #
Various properties of reordered and repeated inputs which follow from
alternating_map.map_eq_zero_of_eq
.
If the arguments are linearly dependent then the result is 0
.
Produce an alternating_map
out of a multilinear_map
, by summing over all argument
permutations.
Equations
- multilinear_map.alternatization = {to_fun := λ (m : multilinear_map R (λ (i : ι), M) N'), {to_fun := ⇑∑ (σ : equiv.perm ι), ⇑equiv.perm.sign σ • multilinear_map.dom_dom_congr σ m, map_add' := _, map_smul' := _, map_eq_zero_of_eq' := _}, map_zero' := _, map_add' := _}
Alternatizing a multilinear map that is already alternating results in a scale factor of n!
,
where n
is the number of inputs.
Composition with a linear map before and after alternatization are equivalent.
Elements which are considered equivalent if they differ only by swaps within α or β
summand used in alternating_map.dom_coprod
Equations
- alternating_map.dom_coprod.summand a b σ = quotient.lift_on' σ (λ (σ : equiv.perm (ιa ⊕ ιb)), ⇑equiv.perm.sign σ • multilinear_map.dom_dom_congr σ (↑a.dom_coprod ↑b)) _
Swapping elements in σ
with equal values in v
results in an addition that cancels
Swapping elements in σ
with equal values in v
result in zero if the swap has no effect
on the quotient.
Like multilinear_map.dom_coprod
, but ensures the result is also alternating.
Note that this is usually defined (for instance, as used in Proposition 22.24 in [GQ11])
over integer indices ιa = fin n
and ιb = fin m
, as
$$
(f \wedge g)(u_1, \ldots, u_{m+n}) =
\sum_{\operatorname{shuffle}(m, n)} \operatorname{sign}(\sigma)
f(u_{\sigma(1)}, \ldots, u_{\sigma(m)}) g(u_{\sigma(m+1)}, \ldots, u_{\sigma(m+n)}),
$$
where $\operatorname{shuffle}(m, n)$ consists of all permutations of $[1, m+n]$ such that
$\sigma(1) < \cdots < \sigma(m)$ and $\sigma(m+1) < \cdots < \sigma(m+n)$.
Here, we generalize this by replacing:
- the product in the sum with a tensor product
- the filtering of $[1, m+n]$ to shuffles with an isomorphic quotient
- the additions in the subscripts of $\sigma$ with an index of type
sum
The specialized version can be obtained by combining this definition with fin_sum_fin_equiv
and
algebra.lmul'
.
Equations
- a.dom_coprod b = {to_fun := λ (v : Π (i : ιa ⊕ ιb), (λ (i : ιa ⊕ ιb), Mᵢ) i), (⇑∑ (σ : equiv.perm.mod_sum_congr ιa ιb), alternating_map.dom_coprod.summand a b σ) v, map_add' := _, map_smul' := _, map_eq_zero_of_eq' := _}
A more bundled version of alternating_map.dom_coprod
that maps
((ι₁ → N) → N₁) ⊗ ((ι₂ → N) → N₂)
to (ι₁ ⊕ ι₂ → N) → N₁ ⊗ N₂
.
Equations
- alternating_map.dom_coprod' = tensor_product.lift (linear_map.mk₂ R' alternating_map.dom_coprod alternating_map.dom_coprod'._proof_7 alternating_map.dom_coprod'._proof_8 alternating_map.dom_coprod'._proof_9 alternating_map.dom_coprod'._proof_10)
A helper lemma for multilinear_map.dom_coprod_alternization
.
Computing the multilinear_map.alternatization
of the multilinear_map.dom_coprod
is the same
as computing the alternating_map.dom_coprod
of the multilinear_map.alternatization
s.
Taking the multilinear_map.alternatization
of the multilinear_map.dom_coprod
of two
alternating_map
s gives a scaled version of the alternating_map.coprod
of those maps.
Two alternating maps indexed by a fintype
are equal if they are equal when all arguments
are distinct basis vectors.