@@ -660,6 +660,42 @@ theorem get_insert! [TransOrd α] [LawfulEqOrd α] (h : t.WF) {k a : α} {v : β
660660 t.get a (contains_of_contains_insert! h h₁ h₂) := by
661661 simpa only [insert_eq_insert!] using get_insert h (h₁ := by simpa [insert_eq_insert!])
662662
663+ theorem toList_insert_perm [BEq α] [TransOrd α] [LawfulBEqOrd α] (h : t.WF) {k : α} {v : β k} :
664+ (t.insert k v h.balanced).1 .toList.Perm (⟨k, v⟩ :: t.toList.filter (¬k == ·.1 )) := by
665+ simp_to_model
666+ refine List.Perm.trans (toListModel_insert _ h.ordered) <| List.Perm.trans (List.insertEntry_perm_filter _ _ h.ordered.distinctKeys) ?_
667+ simp
668+
669+ theorem toList_insert!_perm [BEq α] [TransOrd α] [LawfulBEqOrd α] (h : t.WF) {k : α} {v : β k} :
670+ (t.insert! k v).toList.Perm (⟨k, v⟩ :: t.toList.filter (¬k == ·.1 )) := by
671+ simpa only [insert_eq_insert!] using toList_insert_perm h
672+
673+ theorem Const.toList_insert_perm {β : Type v} {t : Impl α (fun _ => β)} [BEq α] [TransOrd α] [LawfulBEqOrd α] (h : t.WF) {k : α} {v : β} :
674+ (Const.toList (t.insert k v h.balanced).1 ).Perm (⟨k, v⟩ :: (Const.toList t).filter (¬k == ·.1 )) := by
675+ simp_to_model
676+ apply List.Perm.trans <| List.Perm.map _ <| toListModel_insert _ h.ordered
677+ apply List.Perm.trans <| List.Const.map_insertEntry_perm_filter_map _ _ h.ordered.distinctKeys
678+ simp
679+
680+ theorem Const.toList_insert!_perm {β : Type v} {t : Impl α (fun _ => β)} [BEq α] [TransOrd α] [LawfulBEqOrd α] (h : t.WF) {k : α} {v : β} :
681+ (Const.toList (t.insert! k v)).Perm (⟨k, v⟩ :: (Const.toList t).filter (¬k == ·.1 )) := by
682+ simpa only [insert_eq_insert!] using Const.toList_insert_perm h
683+
684+ theorem keys_insertIfNew_perm [BEq α] [TransOrd α] [LawfulBEqOrd α] (h : t.WF) {k : α} {v : β k} :
685+ (t.insertIfNew k v h.balanced).1 .keys.Perm (if t.contains k then t.keys else k :: t.keys) := by
686+ simp_to_model
687+ apply List.Perm.trans
688+ simp only [List.keys_eq_map]
689+ apply List.Perm.map _ <| toListModel_insertIfNew _ h.ordered
690+ simp only [← List.keys_eq_map]
691+ apply List.Perm.trans
692+ apply List.keys_insertEntryIfNew_perm
693+ simp
694+
695+ theorem keys_insertIfNew!_perm {t : Impl α β} [BEq α] [TransOrd α] [LawfulBEqOrd α] (h : t.WF) {k : α} {v : β k} :
696+ (t.insertIfNew! k v).keys.Perm (if t.contains k then t.keys else k :: t.keys) := by
697+ simpa only [insertIfNew_eq_insertIfNew!] using keys_insertIfNew_perm h
698+
663699theorem get_insert_self [TransOrd α] [LawfulEqOrd α] (h : t.WF) {k : α} {v : β k} :
664700 (t.insert k v h.balanced).impl.get k (contains_insert_self h) = v := by
665701 simp_to_model [insert, get] using List.getValueCast_insertEntry_self
0 commit comments