Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(LinearAlgebra/{ExteriorPower,LinearIndependent,TensorPower}): define the exterior powers of a module and prove some of their basic properties #10654

Open
wants to merge 27 commits into
base: master
Choose a base branch
from

Conversation

smorel394
Copy link
Collaborator

@smorel394 smorel394 commented Feb 17, 2024

This introduces the exterior powers of a module and proves some of their basic properties, in LinearAlgebra/ExteriorPower/Basic.lean and LinearAlgebra/ExteriorPower/Generators.lean. It also adds a lemma in LinearAlgebra/LinearIndependent.lean (linearIndependent_of_dualFamily : if a family of vectors admits a "dual" family of linear forms, then it is linearly independent) and a construction in LinearAlgebra/TensorPower.lean (linearFormOfFamily : the linear form on the tensor power of M obtained by multiplying a family of linear forms on M).

Main definitions

In LinearAlgebra/ExteriorPower/Basic.lean:

  • ExteriorPower R n M is the nth exterior power of a R-module M, defined as LinearMap.range (ExteriorAlgebra.ι R : M →ₗ[R] ExteriorAlgebra R M) ^ n. We also introduce the notation Λ[R]^n M for ExteriorPower R n M.

  • ExteriorPower.ιMulti is the canonical alternating map on M with values in Λ[R]^n M.

  • ExteriorPower.map: functoriality of exterior powers with respect to linear maps between modules.

  • ExteriorPower.toTensorPower: linear map from the nth exterior power to the nth
    tensor power (coming from MultilinearMap.alternatization via the universal property of
    exterior powers).

In LinearAlgebra/ExteriorPower/Generators.lean:

  • ExteriorPower.BasisOfBasis: If b is a basis of M (indexed by a linearly ordered type),
    the basis of the nth exterior power of M formed by the n-fold exterior products of elements
    of b.

Main theorems

In LinearAlgebra/ExteriorPower/Basic.lean:

  • The image of ExteriorPower.ιMulti spans Λ[R]^n M.

  • ExteriorPower.liftAlternatingEquiv (universal property of the nth exterior power of M):
    the linear equivalence between linear maps from Λ[R]^n M to a module N and n-fold
    alternating maps from M to N.

  • ExteriorPower.map_injective_field: If f : M →ₗ[R] N is injective and R is a field, then
    ExteriorPower.map n f is injective.

  • ExteriorPower.map_surjective: If f : M →ₗ[R] N is surjective, then ExteriorPower.map n f
    is surjective.

  • ExteriorPower.mem_exteriorPower_is_mem_finite: Every element of Λ[R]^n M is in the image of
    Λ[R]^n P for some finitely generated submodule P of M.

In LinearAlgebra/ExteriorPower/Generators.lean:

  • ExteriorPower.Finite: The nth exterior power of a finite module is a finite module.

  • ExteriorPower.span_top_of_span_top and ExteriorPower.span_top_of_span_top': If a family of
    vectors spans M, then the family of its n-fold exterior products spans Λ[R]^n M. (We give
    versions in the exterior algebra and in the exterior power.)

  • ExteriorPower.FreeOfFree: If M is a free module, then so is its nth exterior power.

  • ExteriorPower.FinrankOfFiniteFree: If R satisfies the strong rank condition and M is
    finite free of rank r, then the nth exterior power of M is of finrank Nat.choose r n.

  • ExteriorPower.ιMulti_family_linearIndependent_field: If R is a field, and if v is a
    linearly independent family of vectors (indexed by a linearly ordered type), then the family of
    its n-fold exterior products is also linearly independent.


Open in Gitpod

@smorel394 smorel394 added awaiting-review t-algebra Algebra (groups, rings, fields etc) labels Feb 17, 2024
@smorel394 smorel394 changed the title feat(LinearAlgebra/{ExteriorPower,LinearIndependent,TensorPower}): definition and basic properties of the exterior powers of a module feat(LinearAlgebra/{ExteriorPower,LinearIndependent,TensorPower}): define the exterior powers of a module and prove some of their basic properties Feb 17, 2024
@eric-wieser eric-wieser self-assigned this Feb 17, 2024
Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
Comment on lines 65 to 70
`Λ[R]^n M` for `ExteriorPower R n M`. -/
@[reducible]
def ExteriorPower := (LinearMap.range (ExteriorAlgebra.ι R : M →ₗ[R] ExteriorAlgebra R M) ^ n)

@[inherit_doc]
notation:100 "Λ[" R "]^" n:arg => ExteriorPower R n
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think (LinearMap.range (ExteriorAlgebra.ι R : M →ₗ[R] ExteriorAlgebra R M) ^ n) is already used quite a lot throughout mathlib; can you split out a PR that just adds this new def and notation, and replaces all the existing uses with the new notation?

Copy link
Collaborator Author

@smorel394 smorel394 Feb 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can do. Given that this expression already appears in LinearAlgebra/ExteriorAlgebra/Basic.lean, I guess it would make sense to introduce ExteriorPower there.

Copy link
Member

@eric-wieser eric-wieser Feb 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's maybe worth waiting to see what Zulip says about the type of this expression, Right now Lean is inferring this as Submodule R (ExteriorAlgebra R M)

Suggested change
[R]^n M` for `ExteriorPower R n M`. -/
@[reducible]
def ExteriorPower := (LinearMap.range (ExteriorAlgebra.ι R : M →ₗ[R] ExteriorAlgebra R M) ^ n)
@[inherit_doc]
notation:100 "Λ[" R "]^" n:arg => ExteriorPower R n
[R]^n M` for `ExteriorPower R n M`. -/
@[reducible]
def ExteriorPower : Submodule R (ExteriorAlgebra R M) :=
(LinearMap.range (ExteriorAlgebra.ι R : M →ₗ[R] ExteriorAlgebra R M) ^ n)
@[inherit_doc]
notation:100 "Λ[" R "]^" n:arg => ExteriorPower R n

but this goes against the naming convention, since ExteriorPower is not a type.

Either we should make it a type (in which case it won't actually work as a substitute in a handful of places), or we should rename it to exteriorPower.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, I am actually using that it's a submodule of the exterior algebra in a few places. Anyway, I started a new branch that defined ExteriorPower earlier and started substituting it there, and it's creating timeouts in ExteriorAlgebra/Grading.lean. I need to play around with it more to see if I can figure out what happened.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, I changed all the ExteriorPowers to exteriorPowers and created PR #10744 to introduce the definition and notation. (But it does have that annoying instance synthesization problem.)

Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>
@mattrobball
Copy link
Collaborator

!bench

@leanprover-bot
Copy link
Collaborator

Here are the benchmark results for commit 3c3d7f9.
There were no significant changes against commit 29c27c3.

eric-wieser and others added 5 commits February 18, 2024 16:42
Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>
Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>
@smorel394 smorel394 added the blocked-by-other-PR This PR depends on another PR to Mathlib label Feb 26, 2024
mathlib-bors bot pushed a commit that referenced this pull request Feb 29, 2024
…tion and notation for the exterior powers of a module (#10744)

This is split off from PR #10654 (that actually proves some properties of the exterior powers). It introduces the reducible definition `exteriorPower R n M` for the `n`th exterior power of the `R`-module `M`; this is of type `Submodule R (ExteriorAlgebra R M)` and defined as `LinearMap.range (ExteriorAlgebra.ι R : M →ₗ[R] ExteriorAlgebra R M) ^ n`. 
It also introduces the notation `Λ[R]^n M` for `exteriorPower R n M`.

Note: for a reason that I don't understand, Lean becomes unable to synthesize the `SetLike.GradedMonoid` instance on `fun (i : ℕ) ↦ (Λ[R]^i) M`, so I added it manually in `ExteriorAlgebra/Graded.lean`. I am far from sure that this is the correct solution.



Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Richard Copley <buster@buster.me.uk>
@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot removed the blocked-by-other-PR This PR depends on another PR to Mathlib label Feb 29, 2024

/-- A family `f` of linear forms on `M` indexed by `Fin n` defines a linear form on
`⨂[R]^n M`, by multiplying the components of `f`. -/
noncomputable def linearFormOfFamily (f : (_ : Fin n) → (M →ₗ[R] R)) : (⨂[R]^n) M →ₗ[R] R :=
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
noncomputable def linearFormOfFamily (f : (_ : Fin n) → (M →ₗ[R] R)) : (⨂[R]^n) M →ₗ[R] R :=
noncomputable def linearFormOfFamily (f : (_ : Fin n) → Module.Dual R M) : Module.Dual R (⨂[R]^n M) :=

I think this holds more generally for the n-ary tensor products, rather than just tensor powers; can you add that definition instead?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that it should make it more complicated, so I'll try.
You suggested having a name that contains dual instead of linearFormOfFamily, and I'm not against that, but I don't feel very inspired.

Copy link
Member

@eric-wieser eric-wieser Mar 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TensorProduct.dualDistrib seems pretty analogous to this result; ideally we would bundle this map slightly further, and use the same name.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, my linearFormOfFamily is basically PiTensorProduct.dualDistrib applied to the case of a constant family. PiTensorProduct.dualDistrib doesn't exist yet, but I'll get to work on it.
I don't know if you were also suggesting to unify the case of the tensor product of two modules and that of the tensor product of a finite family of modules; if so, I don't know how to do that.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, so there is no PiTensorProduct.map, I have to define that too... I am making this into another PR, because I am afraid that it will grow.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I started working in a new branch. Let's hope this doesn't grow too large.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know if you were also suggesting to unify the case of the tensor product of two modules and that of the tensor product of a finite family of modules; if so, I don't know how to do that.

No, I am certainly not suggesting this! Just that we should try to match the names of the AP

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I started working in a new branch. Let's hope this doesn't grow too large.

It looks like you haven't pushed this branch yet.

Copy link
Collaborator Author

@smorel394 smorel394 Mar 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did push it, but I didn't create a PR yet. I also got my link wrong somehow. Let's try again.

smorel394 and others added 2 commits March 1, 2024 15:56
Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
riccardobrasca pushed a commit that referenced this pull request Mar 1, 2024
…tion and notation for the exterior powers of a module (#10744)

This is split off from PR #10654 (that actually proves some properties of the exterior powers). It introduces the reducible definition `exteriorPower R n M` for the `n`th exterior power of the `R`-module `M`; this is of type `Submodule R (ExteriorAlgebra R M)` and defined as `LinearMap.range (ExteriorAlgebra.ι R : M →ₗ[R] ExteriorAlgebra R M) ^ n`. 
It also introduces the notation `Λ[R]^n M` for `exteriorPower R n M`.

Note: for a reason that I don't understand, Lean becomes unable to synthesize the `SetLike.GradedMonoid` instance on `fun (i : ℕ) ↦ (Λ[R]^i) M`, so I added it manually in `ExteriorAlgebra/Graded.lean`. I am far from sure that this is the correct solution.



Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Richard Copley <buster@buster.me.uk>
Copy link
Collaborator

@bustercopley bustercopley left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm really looking forward to this.

Comment on lines 55 to 57
theorem finite [Module.Finite R M]: Module.Finite R (⋀[R]^n M) :=
Module.Finite.mk ((Submodule.fg_top _).mpr (Submodule.FG.pow (by
rw [LinearMap.range_eq_map]; exact Submodule.FG.map _ (Module.finite_def.mp inferInstance)) _ ))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
theorem finite [Module.Finite R M]: Module.Finite R (⋀[R]^n M) :=
Module.Finite.mk ((Submodule.fg_top _).mpr (Submodule.FG.pow (by
rw [LinearMap.range_eq_map]; exact Submodule.FG.map _ (Module.finite_def.mp inferInstance)) _ ))
instance instFinite [Module.Finite R M]: Module.Finite R (⋀[R]^n M) :=
Module.Finite.mk ((Submodule.fg_top _).mpr (Submodule.FG.pow (by
rw [LinearMap.range_eq_map]; exact Submodule.FG.map _ (Module.finite_def.mp inferInstance)) _ ))


/-- If `b` is a basis of `M` (indexed by a linearly ordered type), the basis of the `n`th
exterior power of `M` formed by the `n`-fold exterior products of elements of `b`. -/
noncomputable def BasisOfBasis {I : Type*} [LinearOrder I] (b : Basis I R M) :
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
noncomputable def BasisOfBasis {I : Type*} [LinearOrder I] (b : Basis I R M) :
noncomputable def basisOfBasis {I : Type*} [LinearOrder I] (b : Basis I R M) :

and throughout

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or _root_.Basis.exteriorPower?

(by rw [span_top_of_span_top']; rw [Basis.span_eq])

@[simp]
lemma BasisOfBasis_coe {I : Type*} [LinearOrder I] (b : Basis I R M) :
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
lemma BasisOfBasis_coe {I : Type*} [LinearOrder I] (b : Basis I R M) :
lemma coe_basisOfBasis {I : Type*} [LinearOrder I] (b : Basis I R M) :

and throughout

Comment on lines 332 to 335
lemma FreeOfFree (hfree : Module.Free R M) : Module.Free R (⋀[R]^n M) :=
let ⟨I, b⟩ := (Classical.choice hfree.exists_basis)
letI := WellFounded.wellOrderExtension (emptyWf (α := I)).wf
Module.Free.of_basis (BasisOfBasis R n b)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
lemma FreeOfFree (hfree : Module.Free R M) : Module.Free R (⋀[R]^n M) :=
let ⟨I, b⟩ := (Classical.choice hfree.exists_basis)
letI := WellFounded.wellOrderExtension (emptyWf (α := I)).wf
Module.Free.of_basis (BasisOfBasis R n b)
instance instFree [hfree : Module.Free R M] : Module.Free R (⋀[R]^n M) :=
let ⟨I, b⟩ := hfree.exists_basis
letI := WellFounded.wellOrderExtension (emptyWf (α := I)).wf
Module.Free.of_basis (basisOfBasis R n b)

Comment on lines 374 to 379
lemma nonemptyOfNonempty {I : Type*} [LinearOrder I]
(hne : Nonempty {v : I → E // LinearIndependent K v}) :
Nonempty {v : {s : Finset I // Finset.card s = n} →
(⋀[K]^n) E // LinearIndependent K v} :=
let v := Classical.choice hne
Nonempty.intro ⟨ιMulti_family K n v, ιMulti_family_linearIndependent_field n v.2⟩
Copy link
Collaborator

@bustercopley bustercopley Mar 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
lemma nonemptyOfNonempty {I : Type*} [LinearOrder I]
(hne : Nonempty {v : I → E // LinearIndependent K v}) :
Nonempty {v : {s : Finset I // Finset.card s = n} →
(⋀[K]^n) E // LinearIndependent K v} :=
let v := Classical.choice hne
Nonempty.intro ⟨ιMulti_family K n v, ιMulti_family_linearIndependent_field n v.2
instance instNonempty {I : Type*} [LinearOrder I] [Nonempty {v : I → E // LinearIndependent K v}] :
Nonempty {v : {s : Finset I // Finset.card s = n} → (⋀[K]^n) E // LinearIndependent K v} :=
Nonempty.map (fun v : {v : I → E // LinearIndependent K v} ↦
⟨ιMulti_family K n v, ιMulti_family_linearIndependent_field n v.2⟩) ‹_›

Comment on lines 341 to 347
lemma FinrankOfFiniteFree (hfree : Module.Free R M) [Module.Finite R M] :
FiniteDimensional.finrank R (⋀[R]^n M) =
Nat.choose (FiniteDimensional.finrank R M) n :=
letI := WellFounded.wellOrderExtension (emptyWf (α := hfree.ChooseBasisIndex)).wf
let B := BasisOfBasis R n (hfree.chooseBasis)
by rw [FiniteDimensional.finrank_eq_card_basis hfree.chooseBasis,
FiniteDimensional.finrank_eq_card_basis B, Fintype.card_finset_len]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
lemma FinrankOfFiniteFree (hfree : Module.Free R M) [Module.Finite R M] :
FiniteDimensional.finrank R (⋀[R]^n M) =
Nat.choose (FiniteDimensional.finrank R M) n :=
letI := WellFounded.wellOrderExtension (emptyWf (α := hfree.ChooseBasisIndex)).wf
let B := BasisOfBasis R n (hfree.chooseBasis)
by rw [FiniteDimensional.finrank_eq_card_basis hfree.chooseBasis,
FiniteDimensional.finrank_eq_card_basis B, Fintype.card_finset_len]
lemma finrank_eq_of_finite_free [hfree : Module.Free R M] [Module.Finite R M] :
FiniteDimensional.finrank R (⋀[R]^n M) =
Nat.choose (FiniteDimensional.finrank R M) n := by
letI := WellFounded.wellOrderExtension (emptyWf (α := hfree.ChooseBasisIndex)).wf
let B := basisOfBasis R n hfree.chooseBasis
rw [FiniteDimensional.finrank_eq_card_basis hfree.chooseBasis,
FiniteDimensional.finrank_eq_card_basis B, Fintype.card_finset_len]

or just finrank_eq?

* `exteriorPower.BasisOfBases` -> `Basis.exteriorPower`
* `exteriorPower.BasisOfBasis_coe` -> `exteriorPower.coe_basis`
* `exteriorPower.BasisOfBasis_apply` -> `exteriorPower.basis_apply`
* `exteriorPower.BasisOfBasis_coord` -> `exteriorPower.basis_coord`
* `FinrankOfFiniteFree` -> `finrank_eq`
* `theorem finite` -> `instance instFinite`
* `theorem FreeOfFree` -> `instance instFree`

Use instance-implicit arguments for `Module.Free` and `Nonempty`.
@bustercopley
Copy link
Collaborator

bustercopley commented Mar 4, 2024

I've made those changes, along with a separate golf commit, on [edit: deleted branch]. Feel free to use any or all of it if you want.

@smorel394
Copy link
Collaborator Author

I've made those changes, along with a separate golf commit, on branch https://github.com/leanprover-community/mathlib4/commits/RC/ExteriorPower/ . Feel free to use any or all of it if you want.

Thanks ! I'm happy to use all of them, you can make them directly here if you want, otherwise I'll try to get to it this evening.
Sorry, yesterday I was concentrating on the tensor power stuff, generalizing linearFormOfFamily as Eric Wieser suggested, and it turns out there's a lot of stuff that is only done for TensorProduct and not PiTensorProduct, so I was writing some of it.

@eric-wieser
Copy link
Member

eric-wieser commented Mar 4, 2024

turns out there's a lot of stuff that is only done for TensorProduct and not PiTensorProduct, so I was writing some of it.

Don't feel like you have to write everything that's missing, especially not in one go; the changes in PiTensorProduct.lean alone would make a good standalone PR, and I think cover most of what you actually need in this one.

@smorel394
Copy link
Collaborator Author

turns out there's a lot of stuff that is only done for TensorProduct and not PiTensorProduct, so I was writing some of it.

Don't feel like you have to write everything that's missing, especially not in one go; the changes in PiTensorProduct.lean alone would make a good standalone PR, and I think cover most of what you actually need in this one.

I got slightly carried away...
Anyway, I realized that the functoriality of PiTensorProducts (i.e. PiTensorProduct.map) had been recently added to mathlib, but there were still some missing features of it, so I added them there: #11152

But I also constructed a basis of the PiTensorProduct, and for this proved that it distributes over DirectSums, and... I an preparing the PRs now.

@smorel394
Copy link
Collaborator Author

smorel394 commented Mar 4, 2024

But I also constructed a basis of the PiTensorProduct, and for this proved that it distributes over DirectSums, and... I > an preparing the PRs now.

Here is the PR proving that PiTensorProducts distribute over DirectSums: #11155
The final part is the construction of PiTensorProduct.dualDistrib and the proof that finite PiTensorProducts of finite free modules commute with taking duals; this is in PR #11156, which depends on the two previous ones.

kbuzzard pushed a commit that referenced this pull request Mar 12, 2024
…tion and notation for the exterior powers of a module (#10744)

This is split off from PR #10654 (that actually proves some properties of the exterior powers). It introduces the reducible definition `exteriorPower R n M` for the `n`th exterior power of the `R`-module `M`; this is of type `Submodule R (ExteriorAlgebra R M)` and defined as `LinearMap.range (ExteriorAlgebra.ι R : M →ₗ[R] ExteriorAlgebra R M) ^ n`. 
It also introduces the notation `Λ[R]^n M` for `exteriorPower R n M`.

Note: for a reason that I don't understand, Lean becomes unable to synthesize the `SetLike.GradedMonoid` instance on `fun (i : ℕ) ↦ (Λ[R]^i) M`, so I added it manually in `ExteriorAlgebra/Graded.lean`. I am far from sure that this is the correct solution.



Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Richard Copley <buster@buster.me.uk>
@smorel394 smorel394 added the blocked-by-other-PR This PR depends on another PR to Mathlib label Mar 14, 2024
dagurtomas pushed a commit that referenced this pull request Mar 22, 2024
…tion and notation for the exterior powers of a module (#10744)

This is split off from PR #10654 (that actually proves some properties of the exterior powers). It introduces the reducible definition `exteriorPower R n M` for the `n`th exterior power of the `R`-module `M`; this is of type `Submodule R (ExteriorAlgebra R M)` and defined as `LinearMap.range (ExteriorAlgebra.ι R : M →ₗ[R] ExteriorAlgebra R M) ^ n`. 
It also introduces the notation `Λ[R]^n M` for `exteriorPower R n M`.

Note: for a reason that I don't understand, Lean becomes unable to synthesize the `SetLike.GradedMonoid` instance on `fun (i : ℕ) ↦ (Λ[R]^i) M`, so I added it manually in `ExteriorAlgebra/Graded.lean`. I am far from sure that this is the correct solution.



Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Richard Copley <buster@buster.me.uk>
utensil pushed a commit that referenced this pull request Mar 26, 2024
…tion and notation for the exterior powers of a module (#10744)

This is split off from PR #10654 (that actually proves some properties of the exterior powers). It introduces the reducible definition `exteriorPower R n M` for the `n`th exterior power of the `R`-module `M`; this is of type `Submodule R (ExteriorAlgebra R M)` and defined as `LinearMap.range (ExteriorAlgebra.ι R : M →ₗ[R] ExteriorAlgebra R M) ^ n`. 
It also introduces the notation `Λ[R]^n M` for `exteriorPower R n M`.

Note: for a reason that I don't understand, Lean becomes unable to synthesize the `SetLike.GradedMonoid` instance on `fun (i : ℕ) ↦ (Λ[R]^i) M`, so I added it manually in `ExteriorAlgebra/Graded.lean`. I am far from sure that this is the correct solution.



Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Richard Copley <buster@buster.me.uk>
Louddy pushed a commit that referenced this pull request Apr 15, 2024
…tion and notation for the exterior powers of a module (#10744)

This is split off from PR #10654 (that actually proves some properties of the exterior powers). It introduces the reducible definition `exteriorPower R n M` for the `n`th exterior power of the `R`-module `M`; this is of type `Submodule R (ExteriorAlgebra R M)` and defined as `LinearMap.range (ExteriorAlgebra.ι R : M →ₗ[R] ExteriorAlgebra R M) ^ n`. 
It also introduces the notation `Λ[R]^n M` for `exteriorPower R n M`.

Note: for a reason that I don't understand, Lean becomes unable to synthesize the `SetLike.GradedMonoid` instance on `fun (i : ℕ) ↦ (Λ[R]^i) M`, so I added it manually in `ExteriorAlgebra/Graded.lean`. I am far from sure that this is the correct solution.



Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
Co-authored-by: Richard Copley <buster@buster.me.uk>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
blocked-by-other-PR This PR depends on another PR to Mathlib t-algebra Algebra (groups, rings, fields etc)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

9 participants