Skip to content

Commit 7dd86a8

Browse files
committed
feat: add union congruence lemmas to HashSets
1 parent eb81b62 commit 7dd86a8

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/Std/Data/HashSet/Lemmas.lean

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,18 @@ theorem mem_of_mem_union_of_not_mem_left [EquivBEq α]
793793
k ∈ m₁ ∪ m₂ → ¬k ∈ m₁ → k ∈ m₂ :=
794794
@HashMap.mem_of_mem_union_of_not_mem_left _ _ _ _ m₁.inner m₂.inner _ _ k
795795

796-
/- getKey? -/
796+
/- Equiv -/
797+
theorem union_equiv_congr_left {m₃ : HashSet α} [EquivBEq α] [LawfulHashable α]
798+
(equiv : m₁ ~m m₂) :
799+
(m₁ ∪ m₃) ~m (m₂ ∪ m₃) :=
800+
⟨HashMap.union_equiv_congr_left equiv.1
801+
802+
theorem union_equiv_congr_right {m₃ : HashSet α} [EquivBEq α] [LawfulHashable α]
803+
(equiv : m₂ ~m m₃) :
804+
(m₁ ∪ m₂) ~m (m₁ ∪ m₃) :=
805+
⟨HashMap.union_equiv_congr_right equiv.1
806+
807+
/- get? -/
797808
theorem get?_union [EquivBEq α] [LawfulHashable α] {k : α} :
798809
(m₁ ∪ m₂).get? k = (m₂.get? k).or (m₁.get? k) :=
799810
@HashMap.getKey?_union _ _ _ _ m₁.inner m₂.inner _ _ k

src/Std/Data/HashSet/RawLemmas.lean

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,17 @@ theorem mem_of_mem_union_of_not_mem_left [EquivBEq α]
821821
k ∈ m₁ ∪ m₂ → ¬k ∈ m₁ → k ∈ m₂ :=
822822
@HashMap.Raw.mem_of_mem_union_of_not_mem_left _ _ _ _ m₁.inner m₂.inner _ _ h₁.out h₂.out k
823823

824+
/- Equiv -/
825+
theorem union_equiv_congr_left {m₃ : Raw α} [EquivBEq α] [LawfulHashable α] (h₁ : m₁.WF) (h₂ : m₂.WF) (h₃ : m₃.WF)
826+
(equiv : m₁ ~m m₂) :
827+
(m₁ ∪ m₃) ~m (m₂ ∪ m₃) :=
828+
⟨@HashMap.Raw.union_equiv_congr_left _ _ _ _ m₁.inner m₂.inner m₃.inner _ _ h₁.out h₂.out h₃.out equiv.1
829+
830+
theorem union_equiv_congr_right {m₃ : Raw α} [EquivBEq α] [LawfulHashable α] (h₁ : m₁.WF) (h₂ : m₂.WF) (h₃ : m₃.WF)
831+
(equiv : m₂ ~m m₃) :
832+
(m₁ ∪ m₂) ~m (m₁ ∪ m₃) :=
833+
⟨@HashMap.Raw.union_equiv_congr_right _ _ _ _ m₁.inner m₂.inner m₃.inner _ _ h₁.out h₂.out h₃.out equiv.1
834+
824835
/- get? -/
825836
theorem get?_union [EquivBEq α] [LawfulHashable α]
826837
(h₁ : m₁.WF) (h₂ : m₂.WF)

0 commit comments

Comments
 (0)