Erasing duplicates by a comparison #
List.eraseDupsBy r l keeps, in order, each entry of l that r relates to no entry kept
before it. This file supplies the lemmas that core Lean lacks: the result is a sublist of l
(List.eraseDupsBy_sublist), no kept entry is related to an earlier one
(List.pairwise_eraseDupsBy), and every entry of l is related to some kept entry or is one
(List.exists_mem_eraseDupsBy). The function is also a left fold that appends an entry
when no kept entry is related to it (List.eraseDupsBy_eq_foldl), which lets fold rules
certify it.
Main results #
List.eraseDupsBy_eq_foldl:eraseDupsByas a left fold.List.eraseDupsBy_sublist,List.pairwise_eraseDupsBy,List.exists_mem_eraseDupsBy.List.nodup_map_eraseDupsBy: erasing duplicates by equal labels keeps distinct labels.List.nodup_eraseDupsBy_eq,List.mem_eraseDupsBy_eq: erasing duplicates by equality keeps one copy of each entry.
eraseDupsBy keeps a sublist.
No entry kept by eraseDupsBy is related to an earlier kept entry.
Erasing duplicates by equal labels keeps entries with distinct labels.
Erasing duplicates by equality leaves no duplicates.
Erasing duplicates by equality keeps every entry.