@@ -1017,4 +1017,131 @@ theorem isEmpty_inter_iff [EquivBEq α] [LawfulHashable α] :
10171017
10181018end Inter
10191019
1020+ section Diff
1021+
1022+ variable {m₁ m₂ : ExtHashSet α}
1023+
1024+ @[simp]
1025+ theorem diff_eq [EquivBEq α] [LawfulHashable α] : m₁.diff m₂ = m₁ \ m₂ := by
1026+ simp only [SDiff.sdiff]
1027+
1028+ /- contains -/
1029+ @[simp]
1030+ theorem contains_diff [EquivBEq α] [LawfulHashable α] {k : α} :
1031+ (m₁ \ m₂).contains k = (m₁.contains k && !m₂.contains k) :=
1032+ ExtHashMap.contains_diff
1033+
1034+ /- mem -/
1035+ @[simp]
1036+ theorem mem_diff_iff [EquivBEq α] [LawfulHashable α] {k : α} :
1037+ k ∈ m₁ \ m₂ ↔ k ∈ m₁ ∧ k ∉ m₂ :=
1038+ ExtHashMap.mem_diff_iff
1039+
1040+ theorem not_mem_diff_of_not_mem_left [EquivBEq α] [LawfulHashable α] {k : α}
1041+ (not_mem : k ∉ m₁) :
1042+ k ∉ m₁ \ m₂ :=
1043+ ExtHashMap.not_mem_diff_of_not_mem_left not_mem
1044+
1045+ theorem not_mem_diff_of_mem_right [EquivBEq α] [LawfulHashable α] {k : α}
1046+ (mem : k ∈ m₂) :
1047+ k ∉ m₁ \ m₂ :=
1048+ ExtHashMap.not_mem_diff_of_mem_right mem
1049+
1050+ /- get? -/
1051+ theorem get?_diff [EquivBEq α] [LawfulHashable α] {k : α} :
1052+ (m₁ \ m₂).get? k =
1053+ if k ∈ m₂ then none else m₁.get? k :=
1054+ ExtHashMap.getKey?_diff
1055+
1056+ theorem get?_diff_of_not_mem_right [EquivBEq α] [LawfulHashable α]
1057+ {k : α} (not_mem : k ∉ m₂) :
1058+ (m₁ \ m₂).get? k = m₁.get? k :=
1059+ ExtHashMap.getKey?_diff_of_not_mem_right not_mem
1060+
1061+ theorem get?_diff_of_not_mem_left [EquivBEq α] [LawfulHashable α]
1062+ {k : α} (not_mem : k ∉ m₁) :
1063+ (m₁ \ m₂).get? k = none :=
1064+ ExtHashMap.getKey?_diff_of_not_mem_left not_mem
1065+
1066+ theorem get?_diff_of_mem_right [EquivBEq α] [LawfulHashable α]
1067+ {k : α} (mem : k ∈ m₂) :
1068+ (m₁ \ m₂).get? k = none :=
1069+ ExtHashMap.getKey?_diff_of_mem_right mem
1070+
1071+ /- get -/
1072+ @[simp]
1073+ theorem get_diff [EquivBEq α] [LawfulHashable α]
1074+ {k : α} {h_mem : k ∈ m₁ \ m₂} :
1075+ (m₁ \ m₂).get k h_mem =
1076+ m₁.get k (mem_diff_iff.1 h_mem).1 :=
1077+ ExtHashMap.getKey_diff
1078+
1079+ /- getD -/
1080+ theorem getD_diff [EquivBEq α] [LawfulHashable α] {k fallback : α} :
1081+ (m₁ \ m₂).getD k fallback =
1082+ if k ∈ m₂ then fallback else m₁.getD k fallback :=
1083+ ExtHashMap.getKeyD_diff
1084+
1085+ theorem getD_diff_of_not_mem_right [EquivBEq α] [LawfulHashable α]
1086+ {k fallback : α} (not_mem : k ∉ m₂) :
1087+ (m₁ \ m₂).getD k fallback = m₁.getD k fallback :=
1088+ ExtHashMap.getKeyD_diff_of_not_mem_right not_mem
1089+
1090+ theorem getD_diff_of_mem_right [EquivBEq α] [LawfulHashable α]
1091+ {k fallback : α} (mem : k ∈ m₂) :
1092+ (m₁ \ m₂).getD k fallback = fallback :=
1093+ ExtHashMap.getKeyD_diff_of_mem_right mem
1094+
1095+ theorem getD_diff_of_not_mem_left [EquivBEq α] [LawfulHashable α]
1096+ {k fallback : α} (not_mem : k ∉ m₁) :
1097+ (m₁ \ m₂).getD k fallback = fallback :=
1098+ ExtHashMap.getKeyD_diff_of_not_mem_left not_mem
1099+
1100+ /- get! -/
1101+ theorem get!_diff [EquivBEq α] [LawfulHashable α] [Inhabited α] {k : α} :
1102+ (m₁ \ m₂).get! k =
1103+ if k ∈ m₂ then default else m₁.get! k :=
1104+ ExtHashMap.getKey!_diff
1105+
1106+ theorem get!_diff_of_not_mem_right [EquivBEq α] [LawfulHashable α] [Inhabited α]
1107+ {k : α} (not_mem : k ∉ m₂) :
1108+ (m₁ \ m₂).get! k = m₁.get! k :=
1109+ ExtHashMap.getKey!_diff_of_not_mem_right not_mem
1110+
1111+ theorem get!_diff_of_mem_right [EquivBEq α] [LawfulHashable α] [Inhabited α]
1112+ {k : α} (mem : k ∈ m₂) :
1113+ (m₁ \ m₂).get! k = default :=
1114+ ExtHashMap.getKey!_diff_of_mem_right mem
1115+
1116+ theorem get!_diff_of_not_mem_left [EquivBEq α] [LawfulHashable α] [Inhabited α]
1117+ {k : α} (not_mem : k ∉ m₁) :
1118+ (m₁ \ m₂).get! k = default :=
1119+ ExtHashMap.getKey!_diff_of_not_mem_left not_mem
1120+
1121+ /- size -/
1122+ theorem size_diff_le_size_left [EquivBEq α] [LawfulHashable α] :
1123+ (m₁ \ m₂).size ≤ m₁.size :=
1124+ ExtHashMap.size_diff_le_size_left
1125+
1126+ theorem size_diff_eq_size_left [EquivBEq α] [LawfulHashable α]
1127+ (h : ∀ (a : α), a ∈ m₁ → a ∉ m₂) :
1128+ (m₁ \ m₂).size = m₁.size :=
1129+ ExtHashMap.size_diff_eq_size_left h
1130+
1131+ theorem size_diff_add_size_inter_eq_size_left [EquivBEq α] [LawfulHashable α] :
1132+ (m₁ \ m₂).size + (m₁ ∩ m₂).size = m₁.size :=
1133+ ExtHashMap.size_diff_add_size_inter_eq_size_left
1134+
1135+ /- isEmpty -/
1136+ @[simp]
1137+ theorem isEmpty_diff_left [EquivBEq α] [LawfulHashable α] (h : m₁.isEmpty) :
1138+ (m₁ \ m₂).isEmpty = true :=
1139+ ExtHashMap.isEmpty_diff_left h
1140+
1141+ theorem isEmpty_diff_iff [EquivBEq α] [LawfulHashable α] :
1142+ (m₁ \ m₂).isEmpty ↔ ∀ k, k ∈ m₁ → k ∈ m₂ :=
1143+ ExtHashMap.isEmpty_diff_iff
1144+
1145+ end Diff
1146+
10201147end Std.ExtHashSet
0 commit comments