Skip to content

[Merged by Bors] - feat(Data.List): Add List.nodup_permutations_iff#15512

Closed
casavaca wants to merge 3 commits intomasterfrom
casavaca_list_nodup_permutations_iff
Closed

[Merged by Bors] - feat(Data.List): Add List.nodup_permutations_iff#15512
casavaca wants to merge 3 commits intomasterfrom
casavaca_list_nodup_permutations_iff

Conversation

@casavaca
Copy link
Copy Markdown
Contributor

@casavaca casavaca commented Aug 5, 2024


Open in Gitpod

@github-actions
Copy link
Copy Markdown

github-actions bot commented Aug 5, 2024

PR summary b9e2f8f266

Import changes for modified files

Dependency changes

File Base Count Head Count Change
Mathlib.Data.List.Perm 337 338 +1 (+0.30%)
Import changes for all files
Files Import difference
112 files Mathlib.Data.Multiset.Sum Mathlib.Data.Multiset.Nodup Mathlib.Data.Multiset.NatAntidiagonal Mathlib.Algebra.GradedMonoid Mathlib.Data.Multiset.Sym Mathlib.Tactic.IntervalCases Mathlib.Data.FinEnum Mathlib.Data.Multiset.Antidiagonal Mathlib.Order.CountableDenseLinearOrder Mathlib.Data.Vector3 Mathlib.Data.Fin.Tuple.Finset Mathlib.Data.Finset.Option Mathlib.Data.Fintype.Quotient Mathlib.Logic.Small.List Mathlib.Data.List.Sigma Mathlib.Data.Multiset.Functor Mathlib.Algebra.Order.BigOperators.Ring.List Mathlib.CategoryTheory.SingleObj Mathlib.Data.Finset.Lattice Mathlib.CategoryTheory.Localization.CalculusOfFractions.ComposableArrows Mathlib.Dynamics.PeriodicPts Mathlib.Data.Finset.Image Mathlib.Algebra.Order.Ring.Finset Mathlib.Data.Finset.Fin Mathlib.Data.Finset.Sum Mathlib.Data.Finset.Pi Mathlib.Data.Finset.Powerset Mathlib.Algebra.GCDMonoid.Multiset Mathlib.Algebra.BigOperators.Ring.List Mathlib.Algebra.Category.MonCat.Adjunctions Mathlib.Data.Finset.Sym Mathlib.Data.Finset.Piecewise Mathlib.SetTheory.Game.Basic Mathlib.Algebra.Order.BigOperators.Ring.Multiset Mathlib.Algebra.FreeMonoid.Basic Mathlib.Data.Set.Constructions Mathlib.Data.Finset.Update Mathlib.Tactic.FinCases Mathlib.Data.Num.Bitwise Mathlib.Data.Finset.Pairwise Mathlib.Algebra.BigOperators.Ring.Multiset Mathlib.Algebra.Order.BigOperators.Group.List Mathlib.Data.Multiset.Bind Mathlib.Data.Vector.Zip Mathlib.Data.Fintype.Basic Mathlib.Order.SupIndep Mathlib.Order.Irreducible Mathlib.Data.Multiset.FinsetOps Mathlib.Data.Sym.Basic Mathlib.Data.Vector.Mem Mathlib.CategoryTheory.ComposableArrows Mathlib.Data.Set.Pointwise.ListOfFn Mathlib.Data.Vector.MapLemmas Mathlib.Data.Multiset.Basic Mathlib.Data.Num.Prime Mathlib.Data.TypeVec Mathlib.Data.Finset.Order Mathlib.Data.Nat.BitIndices Mathlib.SetTheory.Game.Impartial Mathlib.Data.Fin.Fin2 Mathlib.Data.Fintype.Sigma Mathlib.Data.Finset.Fold Mathlib.Data.Nat.Factors Mathlib.Data.Multiset.Fold Mathlib.Data.List.Sublists Mathlib.Data.Num.Lemmas Mathlib.Data.Multiset.Range Mathlib.Data.Fintype.List Mathlib.Data.Finset.PImage Mathlib.SetTheory.Game.PGame Mathlib.Algebra.BigOperators.Group.Multiset Mathlib.Data.Finset.Card Mathlib.Algebra.FreeMonoid.Count Mathlib.Control.EquivFunctor.Instances Mathlib.Data.Finset.Basic Mathlib.Data.Vector.Basic Mathlib.Order.GameAdd Mathlib.Control.Fold Mathlib.Algebra.BigOperators.Group.List Mathlib.Data.Multiset.Sort Mathlib.RepresentationTheory.Action.Basic Mathlib.Data.Finset.Union Mathlib.CategoryTheory.Limits.Bicones Mathlib.Control.Functor.Multivariate Mathlib.Algebra.GradedMulAction Mathlib.Data.Multiset.Sections Mathlib.Data.Finmap Mathlib.Data.Sym.Sym2 Mathlib.Data.Fintype.Pi Mathlib.Data.Finset.Sigma Mathlib.Data.Vector.Snoc Mathlib.Combinatorics.SetFamily.Compression.Down Mathlib.Data.List.AList Mathlib.Algebra.Order.BigOperators.Group.Multiset Mathlib.Data.Fintype.Vector Mathlib.Data.List.Sym Mathlib.Data.Multiset.Pi Mathlib.GroupTheory.FreeGroup.Basic Mathlib.GroupTheory.FreeGroup.IsFreeGroup Mathlib.Data.List.Prime Mathlib.Data.Multiset.Powerset Mathlib.Data.List.Pi Mathlib.Algebra.GCDMonoid.Finset Mathlib.CategoryTheory.Category.Grpd Mathlib.Data.Finset.Prod Mathlib.Data.PNat.Factors Mathlib.Data.Sym.Sym2.Order Mathlib.CategoryTheory.FinCategory.Basic Mathlib.Data.List.Cycle Mathlib.Data.List.Perm Mathlib.Data.Multiset.Dedup Mathlib.Data.Multiset.Lattice
1

Declarations diff

+ nodup_permutations_iff
+ permutations_take_two

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.

@casavaca casavaca changed the title Add List.nodup_permutations_iff feat(Data.List) Add List.nodup_permutations_iff Aug 5, 2024
Comment on lines +637 to +649
theorem nodup_permutations_iff (s : List α) : Nodup s.permutations ↔ Nodup s := by
refine ⟨?_, nodup_permutations s⟩
contrapose
rw [← exists_duplicate_iff_not_nodup]
intro ⟨x, hs⟩
rw [duplicate_iff_sublist] at hs
obtain ⟨l, ht⟩ := List.Sublist.exists_perm_append hs
rw [List.Perm.nodup_iff (List.Perm.permutations ht)]
rw [← exists_duplicate_iff_not_nodup]
use x :: x :: l
rw [List.duplicate_iff_sublist]
rw [← permutations_first_two]
exact take_sublist 2 _
Copy link
Copy Markdown
Member

@eric-wieser eric-wieser Aug 5, 2024

Choose a reason for hiding this comment

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

Some slight golfing:

Suggested change
theorem nodup_permutations_iff (s : List α) : Nodup s.permutations ↔ Nodup s := by
refine ⟨?_, nodup_permutations s⟩
contrapose
rw [← exists_duplicate_iff_not_nodup]
intro ⟨x, hs⟩
rw [duplicate_iff_sublist] at hs
obtain ⟨l, ht⟩ := List.Sublist.exists_perm_append hs
rw [List.Perm.nodup_iff (List.Perm.permutations ht)]
rw [← exists_duplicate_iff_not_nodup]
use x :: x :: l
rw [List.duplicate_iff_sublist]
rw [← permutations_first_two]
exact take_sublist 2 _
@[simp]
theorem nodup_permutations_iff {s : List α} : Nodup s.permutations ↔ Nodup s := by
refine ⟨?_, nodup_permutations s⟩
contrapose
rw [← exists_duplicate_iff_not_nodup]
intro ⟨x, hs⟩
rw [duplicate_iff_sublist] at hs
obtain ⟨l, ht⟩ := hs.exists_perm_append
rw [ht.permutations.nodup_iff, ← exists_duplicate_iff_not_nodup]
use x :: x :: l
rw [duplicate_iff_sublist, ← permutations_first_two]
exact take_sublist 2 _

exact nthLe_mem _ _ _

-- TODO: `nodup s.permutations ↔ nodup s`
lemma permutations_first_two (x y : α) (s : List α) :
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think permutations_take_two would be a better name

@eric-wieser eric-wieser added the awaiting-author A reviewer has asked the author a question or requested changes. label Aug 5, 2024
@casavaca casavaca removed the awaiting-author A reviewer has asked the author a question or requested changes. label Aug 6, 2024
Add @[simp]

Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@eric-wieser eric-wieser changed the title feat(Data.List) Add List.nodup_permutations_iff feat(Data.List): Add List.nodup_permutations_iff Aug 6, 2024
Copy link
Copy Markdown
Member

@eric-wieser eric-wieser left a comment

Choose a reason for hiding this comment

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

thanks!

bors merge

@ghost ghost added the ready-to-merge This PR has been sent to bors. label Aug 6, 2024
@mathlib-bors
Copy link
Copy Markdown
Contributor

mathlib-bors bot commented Aug 6, 2024

Pull request successfully merged into master.

Build succeeded:

@mathlib-bors mathlib-bors bot changed the title feat(Data.List): Add List.nodup_permutations_iff [Merged by Bors] - feat(Data.List): Add List.nodup_permutations_iff Aug 6, 2024
@mathlib-bors mathlib-bors bot closed this Aug 6, 2024
@mathlib-bors mathlib-bors bot deleted the casavaca_list_nodup_permutations_iff branch August 6, 2024 18:54
mathlib-bors bot pushed a commit that referenced this pull request Oct 27, 2024
Covered in #15512.



Co-authored-by: LeoDog896 <LeoDog896@hotmail.com>
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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants