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

[Merged by Bors] - refactor(LinearIndependent): refactor to use LinearIndepOn #21886

Closed
wants to merge 16 commits into from

Conversation

apnelson1
Copy link
Collaborator

@apnelson1 apnelson1 commented Feb 14, 2025

Currently, if s is a set of vectors in a module W, the way to state that the vectors in s are linearly independent is
LinearIndependent R (Subtype.val : ↥s → W) (or similar), and if v : ι -> W and s : Set ι is a set of indices, the way to state that s indexes a linearly independent subcollection is LinearIndependent R (fun x : ↥s ↦ (f x : W)) or similar.

#21799 introduced a definition LinearIndepOn, which gives an alternative spelling
LinearIndepOn R f s instead of LinearIndependent R (fun x : ↥s ↦ (f x : W)) for the indexed version, and (therefore) LinearIndepOn R id s for the set version.

This PR updates spellings throughout mathlib, changing terms of type LinearIndependent R (Subtype.val : ↥s → W) to LinearIndepOn R id s and
LinearIndependent R (fun x : ↥s ↦ (f x : W)) to LinearIndepOn R f s.

The API using the old spellings has been deprecated, and replaced with new one - the diff is designed to be as small as possible subject to deprecating the old spellings. In some cases, where no extra work was needed, we generalized lemmas that previously apply to LinearIndepOn R id s to LinearIndepOn R v s for arbitrary v. But there is room to do this further in other places, some of which have been marked TODO.

Most changes happen in LinearAlgebra/LinearIndependent.lean, but only about 100 lines have been added to the length, many of which are deprecated alias lines. Nearly all other changes are knock-on effects, where statements, proofs and (in two cases) definitions that use the old spellings are updated. 22 files are affected, but the majority only in the form of slight modifications of proofs to avoid deprecated lemmas.

The two files other than LinearIndependent.lean with changed definitions are:

  • Mathlib/LinearAlgebra/Dimension/Basic.lean (definition of Module.rank)
  • Mathlib/LinearAlgebra/Dimension/RankNullity.lean (changed structure field of HasRankNullity)

The files with changed theorem statements are:

  • Mathlib/FieldTheory/Fixed.lean
  • Mathlib/LinearAlgebra/Basis/VectorSpace.lean
  • Mathlib/LinearAlgebra/Dimension/Constructions.lean
  • Mathlib/LinearAlgebra/Dimension/Finite.lean
  • Mathlib/LinearAlgebra/Dimension/FreeAndStrongRankCondition.lean
  • Mathlib/LinearAlgebra/Dimension/LinearMap.lean
  • Mathlib/LinearAlgebra/Dimension/Localization.lean
  • Mathlib/LinearAlgebra/Dimension/StrongRankCondition.lean

Zulip discussion


Open in Gitpod

@apnelson1 apnelson1 added the WIP Work in progress label Feb 14, 2025
@github-actions github-actions bot added the t-algebra Algebra (groups, rings, fields, etc) label Feb 14, 2025
Copy link

github-actions bot commented Feb 14, 2025

PR summary e9c9122503

Import changes for modified files

No significant changes to the import graph

Import changes for all files
Files Import difference

Declarations diff

+ LinearIndepOn.comp_of_image
+ LinearIndepOn.extend
+ LinearIndepOn.extend_subset
+ LinearIndepOn.id_image
+ LinearIndepOn.id_imageₛ
+ LinearIndepOn.id_singleton
+ LinearIndepOn.id_union
+ LinearIndepOn.image
+ LinearIndepOn.image_of_comp
+ LinearIndepOn.injOn
+ LinearIndepOn.insert
+ LinearIndepOn.linearIndepOn_extend
+ LinearIndepOn.linearIndependent
+ LinearIndepOn.linearIndependent_restrict
+ LinearIndepOn.map_injOn
+ LinearIndepOn.ne_zero
+ LinearIndepOn.of_comp
+ LinearIndepOn.of_subsingleton
+ LinearIndepOn.singleton
+ LinearIndepOn.span_extend_eq_span
+ LinearIndepOn.subset_extend
+ LinearIndepOn.subset_span_extend
+ LinearIndepOn.union_of_quotient
+ LinearIndependent.linearIndepOn
+ LinearIndependent.linearIndepOn_id
+ LinearIndependent.linearIndepOn_id'
+ LinearIndependent.of_linearIndepOn_id_range
+ LinearIndependent.of_linearIndepOn_range
+ LinearMap.linearIndepOn_iff_of_injOn
+ eq_of_linearIndepOn_id_of_span_subtype
+ exists_linearIndepOn_id_extension
+ exists_linearIndepOn_of_lt_rank
+ exists_maximal_linearIndepOn
+ exists_maximal_linearIndepOn'
+ exists_of_linearIndepOn_of_finite_span
+ linearDepOn_iff
+ linearDepOn_iff'
+ linearDepOn_iff'ₛ
+ linearDepOn_iffₛ
+ linearIndepOn_biUnion_of_directed
+ linearIndepOn_equiv
+ linearIndepOn_iUnion_of_directed
+ linearIndepOn_id_iUnion_finite
+ linearIndepOn_id_insert
+ linearIndepOn_id_pair
+ linearIndepOn_id_range_iff
+ linearIndepOn_iff
+ linearIndepOn_iff_disjoint:
+ linearIndepOn_iff_image
+ linearIndepOn_iff_linearCombinationOn
+ linearIndepOn_iff_linearCombinationOnₛ
+ linearIndepOn_iffₛ
+ linearIndepOn_insert
+ linearIndepOn_of_finite
+ linearIndepOn_range_iff
+ linearIndepOn_sUnion_of_directed
+ linearIndependent_comp_subtype_iff
+ linearIndependent_set_coe_iff
+ linearIndependent_subtype_iff
+++- _
- LinearIndependent.coe_range
- LinearIndependent.extend_subset
- LinearIndependent.image
- LinearIndependent.image_of_comp
- LinearIndependent.image_subtypeₛ
- LinearIndependent.linearIndependent_extend
- LinearIndependent.span_extend_eq_span
- LinearIndependent.subset_extend
- LinearIndependent.subset_span_extend
- eq_of_linearIndependent_of_span_subtype
- exists_linearIndependent_of_lt_rank
- exists_maximal_independent
- exists_maximal_independent'
- exists_of_linearIndependent_of_finite_span
- linearIndependent_biUnion_of_directed
- linearIndependent_iUnion_finite_subtype
- linearIndependent_iUnion_of_directed
- linearIndependent_iff_linearCombinationOnₛ
- linearIndependent_sUnion_of_directed
- linearIndependent_set_subtype
- linearIndependent_singleton

You can run this locally as follows
## summary with just the declaration names:
./scripts/declarations_diff.sh <optional_commit>

## more verbose report:
./scripts/declarations_diff.sh long <optional_commit>

The doc-module for script/declarations_diff.sh contains some details about this script.


No changes to technical debt.

You can run this locally as

./scripts/technical-debt-metrics.sh pr_summary
  • The relative value is the weighted sum of the differences with weight given by the inverse of the current value of the statistic.
  • The absolute value is the relative value divided by the total sum of the inverses of the current values (i.e. the weighted average of the differences).

@apnelson1 apnelson1 removed the WIP Work in progress label Feb 18, 2025
@apnelson1 apnelson1 changed the title chore(LinearIndependent): refactor to use LinearIndepOn refactor(LinearIndependent): refactor to use LinearIndepOn Feb 18, 2025
Copy link
Collaborator

@j-loreaux j-loreaux left a comment

Choose a reason for hiding this comment

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

Thanks @apnelson1 ! I think this is quite nice. I really appreciate the work you did here and in the creation of LinearIndepOn. I'm going to leave it just a bit longer in case anyone else has something to say, but if, after addressing these minor issues below, it's not merged in a few days, I'll come back to do it.

@j-loreaux j-loreaux added the awaiting-author A reviewer has asked the author a question or requested changes label Feb 19, 2025
@apnelson1 apnelson1 removed the awaiting-author A reviewer has asked the author a question or requested changes label Feb 19, 2025
Copy link
Contributor

@Vierkantor Vierkantor left a comment

Choose a reason for hiding this comment

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

This is some nice work, I'm happy to redo my split of LinearIndependent.lean so that this can be merged first in peace. :)

@apnelson1
Copy link
Collaborator Author

This is some nice work, I'm happy to redo my split of LinearIndependent.lean so that this can be merged first in peace. :)

Thanks for the review and the patience!

@j-loreaux
Copy link
Collaborator

Thanks!

bors merge

@leanprover-community-mathlib4-bot leanprover-community-mathlib4-bot added the ready-to-merge This PR has been sent to bors. label Feb 20, 2025
mathlib-bors bot pushed a commit that referenced this pull request Feb 20, 2025
Currently, if `s` is a set of vectors in a module `W`, the way to state that the vectors in `s` are linearly independent is 
`LinearIndependent R (Subtype.val : ↥s → W)` (or similar), and if `v : ι -> W` and `s : Set ι` is a set of indices, the way to state that `s` indexes a linearly independent subcollection is `LinearIndependent  R (fun x : ↥s ↦ (f x : W))` or similar. 

#21799 introduced a definition `LinearIndepOn`, which gives an alternative spelling 
`LinearIndepOn R f s` instead of `LinearIndependent  R (fun x : ↥s ↦ (f x : W))` for the indexed version, and (therefore) `LinearIndepOn R id s` for the set version. 

This PR updates spellings throughout mathlib, changing terms of type `LinearIndependent R (Subtype.val : ↥s → W)` to `LinearIndepOn R id s` and 
`LinearIndependent  R (fun x : ↥s ↦ (f x : W))` to `LinearIndepOn R f s`.

The API using the old spellings has been deprecated, and replaced with new one - the diff is designed to be as small as possible subject to deprecating the old spellings. In some cases, where no extra work was needed, we generalized lemmas that previously apply to `LinearIndepOn R id s` to `LinearIndepOn R v s` for arbitrary `v`. But there is room to do this further in other places, some of which have been marked TODO. 

Most changes happen in `LinearAlgebra/LinearIndependent.lean`, but only about 100 lines have been added to the length, many of which are deprecated alias lines.  Nearly all other changes are knock-on effects, where statements, proofs and (in two cases) definitions that use the old spellings are updated.  22 files are affected, but the majority only in the form of slight modifications of proofs to avoid deprecated lemmas. 

The two files other than `LinearIndependent.lean` with changed definitions are: 

- `Mathlib/LinearAlgebra/Dimension/Basic.lean` (definition of Module.rank)
- `Mathlib/LinearAlgebra/Dimension/RankNullity.lean` (changed structure field of `HasRankNullity`)

The files with changed theorem statements are: 

- `Mathlib/FieldTheory/Fixed.lean`
- `Mathlib/LinearAlgebra/Basis/VectorSpace.lean`
- `Mathlib/LinearAlgebra/Dimension/Constructions.lean`
- `Mathlib/LinearAlgebra/Dimension/Finite.lean`
- `Mathlib/LinearAlgebra/Dimension/FreeAndStrongRankCondition.lean`
- `Mathlib/LinearAlgebra/Dimension/LinearMap.lean`
- `Mathlib/LinearAlgebra/Dimension/Localization.lean`
- `Mathlib/LinearAlgebra/Dimension/StrongRankCondition.lean`

[Zulip discussion](https://leanprover.zulipchat.com/#narrow/channel/144837-PR-reviews/topic/.2321886.20LinearIndepOn.20refactor/near/500527995)
@mathlib-bors
Copy link
Contributor

mathlib-bors bot commented Feb 20, 2025

Pull request successfully merged into master.

Build succeeded:

@mathlib-bors mathlib-bors bot changed the title refactor(LinearIndependent): refactor to use LinearIndepOn [Merged by Bors] - refactor(LinearIndependent): refactor to use LinearIndepOn Feb 20, 2025
@mathlib-bors mathlib-bors bot closed this Feb 20, 2025
@mathlib-bors mathlib-bors bot deleted the linearIndepOn_api branch February 20, 2025 19:49
Julian added a commit that referenced this pull request Feb 21, 2025
* origin/master: (823 commits)
  chore(Computability): fix naming of lemmas about Sum.inl, Sum.inr, Sum.casesOn (#22156)
  feat: `Fintype Ordering` (#22154)
  chore: more renamings to fit the naming convention (#22148)
  feat(CategoryTheory): any monomorphism in a Grothendieck abelian category is a transfinite composition of pushouts of monomorphisms in a small family (#22157)
  chore: rename `{Continuous., continuous_}sum_map` to `sumMap` (#22155)
  chore: remove initial space followed by `-/` (#22158)
  chore: make arg in HeightOneSpectrum.valuation explicit (#22139)
  feat(Data/List): `List.maximum` is monotone (#22091)
  chore(Combinatorics/SimpleGraph): extract WalkDecomp from Walk (#21981)
  feat: if a monoid M acts, then so does (s : S) with [SubmonoidClass S M] (#21123)
  chore: backport changes to `getElem` lemmas (#22146)
  feat(CategoryTheory): generating monomorphisms in Grothendieck abelian categories (#22150)
  feat: rename variables to fit doc (#22143)
  feat(CategoryTheory): IsDetecting.isIso_iff_of_mono (#22135)
  feat(CategoryTheory): truncations of transfinite compositions (#22149)
  chore: simplify a proof (#22134)
  feat(CategoryTheory): monomorphisms are stable under coproducts in Grothendieck abelian categories (#22133)
  feat(Order): Set.Ici.isSuccLimit_coe (#22103)
  chore(Analysis/Convex/Normed): split into smaller files (#22015)
  feat(Algebra/Algebra/Lie): max nilpotent ideal <= radical (#22140)
  refactor(LinearIndependent): refactor to use LinearIndepOn (#21886)
  chore: rename some more `Foo.sum_elim` -> `sumElim` (#22130)
  chore: rename Injective.sum_elim and friends (#22129)
  chore: fix naming oversight from #22070 (#22128)
  chore: fix spelling mistakes (#22136)
  feat(RingTheory/Ideal/Quotient): define transtition map between ring or module quotient by powers of ideal (#21900)
  fix: initialize_simps_projections print warning when projection data already exists (#20339)
  chore: rename ContMDiff.sum_{elim,map} (#22131)
  feat(CategoryTheory): characterization of injective objects in terms of lifting properties (#22104)
  chore(Lean,Tactic): un-indent some doc-strings (#22118)
  feat(Algebra/MvPolynomial): add `comp` versions of rename lemmas (#21259)
  chose: add deprecation (#22124)
  feat(CategoryTheory/Abelian/GrothendieckCategory): computing colimits in Subobject (#22123)
  feat(CategoryTheory/Subobject): hasCardinalLT_of_mono (#22122)
  feat: add `DenseRange.piMap` (#22114)
  feat(Algebra/Algebra/Lie): define the maximal nilpotent ideal of Lie algebras (#22061)
  chore(Data/Finset): don't import algebra when defining `Finset.card` (#21866)
  feat: a function on a discrete space is smooth (#22113)
  feat: commutative group objects in additive categories (#21521)
  style(Geometry/Manifold): remove superfluous indentation in doc-strings (#22117)
  chore: rename PushNeg.lean to Push.lean (#22108)
  feat: add Is{Open,Closed}Embedding.sum_elim (#22070)
  feat(RingTheory/Perfectoid): define the untilt map and generalize pretilt (#21563)
  feature(Topology/Algebra/Module/WeakBilin): Linear map from F into the topological dual of E with the weak topology (#21078)
  feat(CategoryTheory/Abelian): the exact sequence attached to a pushout square (#22110)
  chore(ChartedSpace.lean): group constructions together (#22107)
  feat(CategoryTheory/MorphismProperty): more basic API (#22099)
  chore(Data/Fintype): split `Fintype/Card.lean` (#21840)
  chore(SetTheory/Cardinal/Cofinality): make `IsStrongLimit` into a structure (#21971)
  feat(Combinatorics/SimpleGraph): Add a theorem about cliques in induced subgraphs (#20705)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ready-to-merge This PR has been sent to bors. t-algebra Algebra (groups, rings, fields, etc)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants