fix: add mem_eraseDups lemma for List deduplication #11811
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR proves that membership is preserved by eraseDups: an element exists in the deduplicated list iff it was in the original.
Includes a helper lemma for the loop invariant of eraseDupsBy.loop to establish the relationship between membership in the result, remaining list, and accumulator.
The proof changed compared to the proposal discussed on Zulip: https://leanprover.zulipchat.com/#narrow/channel/348111-batteries/topic/Where.20should.20List.2Emem_eraseDup.20and.20List.2Emem_eraseDups.20l.2E.2E.2E
Specifically, I could not apply @Rob23oba 's short proof suggestion because it is located in
src/Init/Data, a context where thegrindstrategy is not yet available.In the Zulip thread, there is a discussion about the similarities/differences between Lean's
List.eraseDupsand Batteries'List.eraseDup; whether it makes sense to keep both (perhaps with a suitable renaming of Batterie's definition) or deprecate one (if any, it would be Batteries' since it is currently unused whereas Lean's is used across the board in Lean, Batteries, and Mathlib). See the Batteries PR: leanprover-community/batteries#1580changelog-library
Closes #11786