@@ -89,9 +89,8 @@ private def queryNames : Array Name :=
89
89
``Const.get_eq_getValue, ``get!_eq_getValueCast!, ``getD_eq_getValueCastD,
90
90
``Const.get!_eq_getValue!, ``Const.getD_eq_getValueD, ``getKey?_eq_getKey?,
91
91
``getKey_eq_getKey, ``getKeyD_eq_getKeyD, ``getKey!_eq_getKey!,
92
- ``Raw.length_keys_eq_length_keys, ``Raw.isEmpty_keys_eq_isEmpty_keys,
93
- ``Raw.contains_keys_eq_contains_keys, ``Raw.mem_keys_iff_contains_keys,
94
- ``Raw.pairwise_keys_iff_pairwise_keys]
92
+ ``Raw.toList_eq_toListModel, ``Raw.keys_eq_keys_toListModel,
93
+ ``Raw.Const.toList_eq_toListModel_map]
95
94
96
95
private def modifyMap : Std.DHashMap Name (fun _ => Name) :=
97
96
.ofList
@@ -848,13 +847,95 @@ theorem contains_keys [EquivBEq α] [LawfulHashable α] (h : m.1.WF) {k : α} :
848
847
@[simp]
849
848
theorem mem_keys [LawfulBEq α] (h : m.1 .WF) {k : α} :
850
849
k ∈ m.1 .keys ↔ m.contains k := by
850
+ rw [← List.contains_iff]
851
851
simp_to_model
852
852
rw [List.containsKey_eq_keys_contains]
853
853
854
854
theorem distinct_keys [EquivBEq α] [LawfulHashable α] (h : m.1 .WF) :
855
855
m.1 .keys.Pairwise (fun a b => (a == b) = false ) := by
856
856
simp_to_model using (Raw.WF.out h).distinct.distinct
857
857
858
+ theorem map_sigma_fst_toList_eq_keys [EquivBEq α] [LawfulHashable α] :
859
+ m.1 .toList.map Sigma.fst = m.1 .keys := by
860
+ simp_to_model
861
+ rw [List.keys_eq_map]
862
+
863
+ theorem length_toList [EquivBEq α] [LawfulHashable α] (h : m.1 .WF) :
864
+ m.1 .toList.length = m.1 .size := by
865
+ simp_to_model
866
+
867
+ theorem isEmpty_toList [EquivBEq α] [LawfulHashable α] (h : m.1 .WF) :
868
+ m.1 .toList.isEmpty = m.1 .isEmpty := by
869
+ simp_to_model
870
+
871
+ theorem mem_toList_iff_get?_eq_some [LawfulBEq α] (h : m.1 .WF)
872
+ {k : α} {v : β k} :
873
+ ⟨k, v⟩ ∈ m.1 .toList ↔ m.get? k = some v := by
874
+ simp_to_model using List.mem_iff_getValueCast?_eq_some
875
+
876
+ theorem find?_toList_eq_some_iff_get?_eq_some [LawfulBEq α]
877
+ (h : m.1 .WF) {k : α} {v : β k} :
878
+ m.1 .toList.find? (·.1 == k) = some ⟨k, v⟩ ↔ m.get? k = some v := by
879
+ simp_to_model using List.find?_eq_some_iff_getValueCast?_eq_some
880
+
881
+ theorem find?_toList_eq_none_iff_contains_eq_false [EquivBEq α] [LawfulHashable α]
882
+ (h : m.1 .WF) {k : α} :
883
+ m.1 .toList.find? (·.1 == k) = none ↔ m.contains k = false := by
884
+ simp_to_model using List.find?_eq_none_iff_containsKey_eq_false
885
+
886
+ theorem distinct_keys_toList [EquivBEq α] [LawfulHashable α] (h : m.1 .WF) :
887
+ m.1 .toList.Pairwise (fun a b => (a.1 == b.1 ) = false ) := by
888
+ simp_to_model using List.pairwise_fst_eq_false
889
+
890
+ namespace Const
891
+
892
+ variable {β : Type v} (m : Raw₀ α (fun _ => β))
893
+
894
+ theorem map_prod_fst_toList_eq_keys [EquivBEq α] [LawfulHashable α] :
895
+ (Raw.Const.toList m.1 ).map Prod.fst = m.1 .keys := by
896
+ simp_to_model using List.map_prod_fst_map_toProd_eq_keys
897
+
898
+ theorem length_toList [EquivBEq α] [LawfulHashable α] (h : m.1 .WF) :
899
+ (Raw.Const.toList m.1 ).length = m.1 .size := by
900
+ simp_to_model using List.length_map
901
+
902
+ theorem isEmpty_toList [EquivBEq α] [LawfulHashable α] (h : m.1 .WF) :
903
+ (Raw.Const.toList m.1 ).isEmpty = m.1 .isEmpty := by
904
+ simp_to_model
905
+ rw [Bool.eq_iff_iff, List.isEmpty_iff,List.isEmpty_iff, List.map_eq_nil_iff]
906
+
907
+ theorem mem_toList_iff_get?_eq_some [LawfulBEq α] (h : m.1 .WF)
908
+ {k : α} {v : β} :
909
+ (k, v) ∈ Raw.Const.toList m.1 ↔ get? m k = some v := by
910
+ simp_to_model using List.mem_map_toProd_iff_getValue?_eq_some
911
+
912
+ theorem get?_eq_some_iff_exists_beq_and_mem_toList [EquivBEq α] [LawfulHashable α] (h : m.1 .WF)
913
+ {k : α} {v : β} :
914
+ get? m k = some v ↔ ∃ (k' : α), k == k' ∧ (k', v) ∈ Raw.Const.toList m.1 := by
915
+ simp_to_model using getValue?_eq_some_iff_exists_beq_and_mem_toList
916
+
917
+ theorem find?_toList_eq_some_iff_getKey?_eq_some_and_get?_eq_some
918
+ [EquivBEq α] [LawfulHashable α] (h : m.1 .WF) {k k' : α} {v : β} :
919
+ (Raw.Const.toList m.1 ).find? (fun a => a.1 == k) = some ⟨k', v⟩ ↔
920
+ m.getKey? k = some k' ∧ get? m k = some v := by
921
+ simp_to_model using List.find?_map_toProd_eq_some_iff_getKey?_eq_some_and_getValue?_eq_some
922
+
923
+ theorem find?_toList_eq_none_iff_contains_eq_false [EquivBEq α] [LawfulHashable α]
924
+ (h : m.1 .WF) {k : α} :
925
+ (Raw.Const.toList m.1 ).find? (·.1 == k) = none ↔ m.contains k = false := by
926
+ simp_to_model using List.find?_map_eq_none_iff_containsKey_eq_false
927
+
928
+ theorem mem_toList_iff_getKey?_eq_some_and_get?_eq_some [EquivBEq α] [LawfulHashable α]
929
+ (h : m.1 .WF) {k: α} {v : β} :
930
+ (k, v) ∈ (Raw.Const.toList m.1 ) ↔ m.getKey? k = some k ∧ get? m k = some v := by
931
+ simp_to_model using List.mem_map_toProd_iff_getKey?_eq_some_and_getValue?_eq_some
932
+
933
+ theorem distinct_keys_toList [EquivBEq α] [LawfulHashable α] (h : m.1 .WF) :
934
+ (Raw.Const.toList m.1 ).Pairwise (fun a b => (a.1 == b.1 ) = false ) := by
935
+ simp_to_model using List.pairwise_fst_eq_false_map_toProd
936
+
937
+ end Const
938
+
858
939
@[simp]
859
940
theorem insertMany_nil :
860
941
m.insertMany [] = m := by
@@ -1230,7 +1311,7 @@ theorem getKey?_insertManyIfNewUnit_list_of_contains [EquivBEq α] [LawfulHashab
1230
1311
simp_to_model [Const.insertManyIfNewUnit] using List.getKey?_insertListIfNewUnit_of_contains
1231
1312
1232
1313
theorem getKey_insertManyIfNewUnit_list_of_contains [EquivBEq α] [LawfulHashable α]
1233
- (h : m.1 .WF) {l : List α} {k : α} {h'} (contains : m.contains k):
1314
+ (h : m.1 .WF) {l : List α} {k : α} {h'} (contains : m.contains k) :
1234
1315
getKey (insertManyIfNewUnit m l).1 k h' = getKey m k contains := by
1235
1316
simp_to_model [Const.insertManyIfNewUnit] using List.getKey_insertListIfNewUnit_of_contains
1236
1317
0 commit comments