Skip to content

Commit 26e169e

Browse files
committed
feat: congruence in the domain and codomain of MultilinearMap (#25142)
I found myself wanting these in #25141 We already have some of these results with inconsistent names elsewhere; for now this just adds crosslinks, we can unify the names later. The names are a little inconsistent here; for the domain we have: * `LinearEquiv.multilinearMapCongrLeft` (new in this PR) * `AlternatingMap.domLCongr` * `ContinuousLinearEquiv.continuousMultilinearMapCongrRight` * `ContinuousLinearEquiv.continuousAlternatingMapCongrLeft` * `ContinuousLinearEquiv.continuousAlternatingMapCongrLeftEquiv` (not a linear equiv) and for the range: * `LinearEquiv.multilinearMapCongrRight` (new in this PR) * `LinearEquiv.alternatingMapCongrRight` (new in this PR) * `ContinuousLinearEquiv.continuousMultilinearMapCongrRight` * `ContinuousLinearEquiv.continuousAlternatingMapCongrRight`
1 parent 44140d7 commit 26e169e

File tree

4 files changed

+56
-7
lines changed

4 files changed

+56
-7
lines changed

Mathlib/Analysis/NormedSpace/Alternating/Basic.lean

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,10 @@ def ContinuousAlternatingMap.compContinuousLinearMapCLM (f : E →L[𝕜] F) :
452452
(g.norm_compContinuousLinearMap_le f).trans_eq (mul_comm _ _)
453453

454454
/-- Given a continuous linear isomorphism between the domains,
455-
generate a continuous linear isomorphism between the spaces of continuous alternating maps. -/
455+
generate a continuous linear isomorphism between the spaces of continuous alternating maps.
456+
457+
This is `ContinuousAlternatingMap.compContinuousLinearMap` as an equivalence,
458+
and is the continuous version of `AlternatingMap.domLCongr`. -/
456459
@[simps apply]
457460
def ContinuousLinearEquiv.continuousAlternatingMapCongrLeft (f : E ≃L[𝕜] F) :
458461
E [⋀^ι]→L[𝕜] G ≃L[𝕜] (F [⋀^ι]→L[𝕜] G) where

Mathlib/LinearAlgebra/Alternating/Basic.lean

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,11 @@ section DomLcongr
565565
variable (ι R N)
566566
variable (S : Type*) [Semiring S] [Module S N] [SMulCommClass R S N]
567567

568-
/-- Construct a linear equivalence between maps from a linear equivalence between domains. -/
568+
/-- Construct a linear equivalence between maps from a linear equivalence between domains.
569+
570+
This is `AlternatingMap.compLinearMap` as an isomorphism,
571+
and the alternating version of `LinearEquiv.multilinearMapCongrLeft`.
572+
It could also have been called `LinearEquiv.alternatingMapCongrLeft`. -/
569573
@[simps apply]
570574
def domLCongr (e : M ≃ₗ[R] M₂) : M [⋀^ι]→ₗ[R] N ≃ₗ[S] (M₂ [⋀^ι]→ₗ[R] N) where
571575
toFun f := f.compLinearMap e.symm
@@ -894,6 +898,20 @@ variable {R' : Type*} {M'' M₂'' N'' N₂'' : Type*} [CommSemiring R'] [AddComm
894898
[AddCommMonoid M₂''] [AddCommMonoid N''] [AddCommMonoid N₂''] [Module R' M''] [Module R' M₂'']
895899
[Module R' N''] [Module R' N₂'']
896900

901+
/-- An isomorphism of multilinear maps given an isomorphism between their codomains.
902+
903+
This is `Linear.compAlternatingMap` as an isomorphism,
904+
and the alternating version of `LinearEquiv.multilinearMapCongrRight`. -/
905+
@[simps!]
906+
def LinearEquiv.alternatingMapCongrRight (e : N'' ≃ₗ[R'] N₂'') :
907+
M''[⋀^ι]→ₗ[R'] N'' ≃ₗ[R'] (M'' [⋀^ι]→ₗ[R'] N₂'') where
908+
toFun f := e.compAlternatingMap f
909+
invFun f := e.symm.compAlternatingMap f
910+
map_add' _ _ := by ext; simp
911+
map_smul' _ _ := by ext; simp
912+
left_inv _ := by ext; simp
913+
right_inv _ := by ext; simp
914+
897915
/-- The space of constant maps is equivalent to the space of maps that are alternating with respect
898916
to an empty family. -/
899917
@[simps]
@@ -904,4 +922,3 @@ def AlternatingMap.constLinearEquivOfIsEmpty [IsEmpty ι] : N'' ≃ₗ[R'] (M''
904922
invFun f := f 0
905923
left_inv _ := rfl
906924
right_inv f := ext fun _ => AlternatingMap.congr_arg f <| Subsingleton.elim _ _
907-

Mathlib/LinearAlgebra/Multilinear/Basic.lean

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -882,14 +882,26 @@ variable [AddCommMonoid M₃] [Module S M₃] [Module R M₃] [SMulCommClass R S
882882
variable (S) in
883883
/-- `LinearMap.compMultilinearMap` as an `S`-linear map. -/
884884
@[simps]
885-
def _root_.LinearMap.compMultilinearMapₗ [Semiring S] [Module S M₂] [Module S M₃]
886-
[SMulCommClass R S M₂] [SMulCommClass R S M₃] [LinearMap.CompatibleSMul M₂ M₃ S R]
887-
(g : M₂ →ₗ[R] M₃) :
885+
def _root_.LinearMap.compMultilinearMapₗ [LinearMap.CompatibleSMul M₂ M₃ S R] (g : M₂ →ₗ[R] M₃) :
888886
MultilinearMap R M₁ M₂ →ₗ[S] MultilinearMap R M₁ M₃ where
889887
toFun := g.compMultilinearMap
890888
map_add' := g.compMultilinearMap_add
891889
map_smul' := g.compMultilinearMap_smul
892890

891+
variable (S) in
892+
/-- An isomorphism of multilinear maps given an isomorphism between their codomains.
893+
894+
This is `LinearMap.compMultilinearMap` as an `S`-linear equivalence,
895+
and the multilinear version of `LinearEquiv.congrRight`. -/
896+
@[simps! apply symm_apply]
897+
def _root_.LinearEquiv.multilinearMapCongrRight
898+
[LinearMap.CompatibleSMul M₂ M₃ S R] [LinearMap.CompatibleSMul M₃ M₂ S R] (g : M₂ ≃ₗ[R] M₃) :
899+
MultilinearMap R M₁ M₂ ≃ₗ[S] MultilinearMap R M₁ M₃ where
900+
__ := g.toLinearMap.compMultilinearMapₗ S
901+
invFun := g.symm.toLinearMap.compMultilinearMapₗ S
902+
left_inv _ := by ext; simp
903+
right_inv _ := by ext; simp
904+
893905
variable (R S M₁ M₂ M₃)
894906

895907
section OfSubsingleton
@@ -1048,6 +1060,18 @@ sending a multilinear map `g` to `g (f₁ ⬝ , ..., fₙ ⬝ )` is linear in `g
10481060
map_add' := fun _ _ ↦ rfl
10491061
map_smul' := fun _ _ ↦ rfl
10501062

1063+
/-- An isomorphism of multilinear maps given an isomorphism between their domains.
1064+
1065+
This is `MultilinearMap.compLinearMap` as a linear equivalence,
1066+
and the multilinear version of `LinearEquiv.congrLeft`. -/
1067+
@[simps! apply symm_apply]
1068+
def _root_.LinearEquiv.multilinearMapCongrLeft (e : Π (i : ι), M₁ i ≃ₗ[R] M₁' i) :
1069+
(MultilinearMap R M₁' M₂) ≃ₗ[R] MultilinearMap R M₁ M₂ where
1070+
__ := compLinearMapₗ (e · |>.toLinearMap)
1071+
invFun := compLinearMapₗ (e · |>.symm.toLinearMap)
1072+
left_inv _ := by ext; simp
1073+
right_inv _ := by ext; simp
1074+
10511075
/-- If `f` is a collection of linear maps, then the construction `MultilinearMap.compLinearMap`
10521076
sending a multilinear map `g` to `g (f₁ ⬝ , ..., fₙ ⬝ )` is linear in `g` and multilinear in
10531077
`f₁, ..., fₙ`. -/

Mathlib/Topology/Algebra/Module/Alternating/Basic.lean

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,12 @@ theorem _root_.ContinuousLinearMap.compContinuousAlternatingMap_coe (g : N →L[
333333
rfl
334334

335335
/-- A continuous linear equivalence of domains
336-
defines an equivalence between continuous alternating maps. -/
336+
defines an equivalence between continuous alternating maps.
337+
338+
This is available as a continuous linear isomorphism at
339+
`ContinuousLinearEquiv.continuousAlternatingMapCongrLeft`.
340+
341+
This is `ContinuousAlternatingMap.compContinuousLinearMap` as an equivalence. -/
337342
@[simps -fullyApplied apply]
338343
def _root_.ContinuousLinearEquiv.continuousAlternatingMapCongrLeftEquiv (e : M ≃L[R] M') :
339344
M [⋀^ι]→L[R] N ≃ M' [⋀^ι]→L[R] N where

0 commit comments

Comments
 (0)