Skip to content

Commit e1b4565

Browse files
committed
Merge branch 'wojciech/hashmap_beq2' into wojciech/hashmap_deceq
2 parents 4ced8f0 + d0e16d9 commit e1b4565

File tree

8 files changed

+25
-29
lines changed

8 files changed

+25
-29
lines changed

src/Std/Data/DHashMap/Basic.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,7 @@ instance [BEq α] [Hashable α] : SDiff (DHashMap α β) := ⟨diff⟩
362362

363363
/--
364364
Compares two hash maps using Boolean equality on keys and values.
365+
365366
Returns `true` if the maps contain the same key-value pairs, `false` otherwise.
366367
-/
367368
def beq [LawfulBEq α] [∀ k, BEq (β k)] (a b : DHashMap α β) : Bool :=

src/Std/Data/DHashMap/Raw.lean

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -513,25 +513,20 @@ instance [BEq α] [Hashable α] : Inter (Raw α β) := ⟨inter⟩
513513

514514
/--
515515
Compares two hash maps using Boolean equality on keys and values.
516+
516517
Returns `true` if the maps contain the same key-value pairs, `false` otherwise.
517518
-/
518519
def beq [BEq α] [Hashable α] [LawfulBEq α] [∀ k, BEq (β k)] (m₁ m₂ : Raw α β) : Bool :=
519-
if h₁ : 0 < m₁.buckets.size then
520-
if h₂ : 0 < m₂.buckets.size then
521-
Raw₀.beq ⟨m₁, h₁⟩ ⟨m₂, h₂⟩
522-
else
523-
false
520+
if h : 0 < m₁.buckets.size ∧ 0 < m₂.buckets.size then
521+
Raw₀.beq ⟨m₁, h.1⟩ ⟨m₂, h.2
524522
else
525523
false
526524

527525
instance [BEq α] [Hashable α] [LawfulBEq α] [∀ k, BEq (β k)] : BEq (Raw α β) := ⟨beq⟩
528526

529527
@[inherit_doc DHashMap.Raw.beq] def Const.beq {β : Type v} [BEq α] [Hashable α] [BEq β] (m₁ m₂ : Raw α (fun _ => β)) : Bool :=
530-
if h₁ : 0 < m₁.buckets.size then
531-
if h₂ : 0 < m₂.buckets.size then
532-
Raw₀.Const.beq ⟨m₁, h₁⟩ ⟨m₂, h₂⟩
533-
else
534-
false
528+
if h : 0 < m₁.buckets.size ∧ 0 < m₂.buckets.size then
529+
Raw₀.Const.beq ⟨m₁, h.1⟩ ⟨m₂, h.2
535530
else
536531
false
537532

src/Std/Data/DHashMap/RawLemmas.lean

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3766,11 +3766,13 @@ theorem Equiv.beq [∀ k, ReflBEq (β k)] (h₁ : m₁.WF) (h₂ : m₂.WF) (h :
37663766
simp only [BEq.beq]
37673767
simp_to_raw using Raw₀.Equiv.beq
37683768

3769-
theorem equiv_of_beq [∀ k, LawfulBEq (β k)] (h₁ : m₁.WF) (h₂ : m₂.WF) (h : beq m₁ m₂ = true) : m₁ ~m m₂ := by
3769+
theorem equiv_of_beq [∀ k, LawfulBEq (β k)] (h₁ : m₁.WF) (h₂ : m₂.WF) (h : m₁ == m₂) : m₁ ~m m₂ := by
37703770
revert h
3771+
simp only [BEq.beq]
37713772
simp_to_raw using Raw₀.equiv_of_beq
37723773

3773-
theorem Equiv.beq_congr {m₃ m₄ : Raw α β} (h₁ : m₁.WF) (h₂ : m₂.WF) (h₃ : m₃.WF) (h₄ : m₄.WF) (w₁ : m₁ ~m m₃) (w₂ : m₂ ~m m₄) : Raw.beq m₁ m₂ = Raw.beq m₃ m₄ := by
3774+
theorem Equiv.beq_congr {m₃ m₄ : Raw α β} (h₁ : m₁.WF) (h₂ : m₂.WF) (h₃ : m₃.WF) (h₄ : m₄.WF) (w₁ : m₁ ~m m₃) (w₂ : m₂ ~m m₄) : (m₁ == m₂) = (m₃ == m₄) := by
3775+
simp only [BEq.beq]
37743776
simp_to_raw using Raw₀.Equiv.beq_congr
37753777

37763778
end BEq
@@ -3782,7 +3784,7 @@ variable {β : Type v} {m₁ m₂ : Raw α (fun _ => β)}
37823784
theorem Const.Equiv.beq [EquivBEq α] [LawfulHashable α] [BEq β] [ReflBEq β] (h₁ : m₁.WF) (h₂ : m₂.WF) (h : m₁ ~m m₂) : beq m₁ m₂ := by
37833785
simp_to_raw using Raw₀.Const.Equiv.beq
37843786

3785-
theorem Const.equiv_of_beq [LawfulBEq α] [BEq β] [LawfulBEq β] (h₁ : m₁.WF) (h₂ : m₂.WF) (h : beq m₁ m₂ = true ) : m₁ ~m m₂ := by
3787+
theorem Const.equiv_of_beq [LawfulBEq α] [BEq β] [LawfulBEq β] (h₁ : m₁.WF) (h₂ : m₂.WF) (h : beq m₁ m₂ = true) : m₁ ~m m₂ := by
37863788
revert h
37873789
simp_to_raw using Raw₀.Const.equiv_of_beq
37883790

src/Std/Data/ExtHashMap/Basic.lean

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,8 +256,7 @@ instance [EquivBEq α] [LawfulHashable α] [BEq β] [ReflBEq β] : ReflBEq (ExtH
256256
rfl := ExtDHashMap.Const.beq_of_eq _ _ rfl
257257

258258
instance [LawfulBEq α] [BEq β] [LawfulBEq β] : LawfulBEq (ExtHashMap α β) where
259-
eq_of_beq {a} {b} hyp :=
260-
by
259+
eq_of_beq {a} {b} hyp := by
261260
have ⟨_⟩ := a
262261
have ⟨_⟩ := b
263262
simp only [mk.injEq] at |- hyp

src/Std/Data/ExtHashSet/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ instance [EquivBEq α] [LawfulHashable α] : ReflBEq (ExtHashSet α) where
211211
rfl := ExtDHashMap.Const.beq_of_eq _ _ rfl
212212

213213
instance [LawfulBEq α] : LawfulBEq (ExtHashSet α) where
214-
eq_of_beq {a} {b} hyp := by
214+
eq_of_beq {a} {b} hyp := by
215215
have ⟨⟨_⟩⟩ := a
216216
have ⟨⟨_⟩⟩ := b
217217
simp only [mk.injEq, ExtHashMap.mk.injEq] at |- hyp

src/Std/Data/HashSet/Basic.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,8 @@ instance [BEq α] [Hashable α] : Inter (HashSet α) := ⟨inter⟩
262262

263263
/--
264264
Compares two hash sets using Boolean equality on keys.
265-
Returns `true` if the sets contain the same keys pairs, `false` otherwise.
265+
266+
Returns `true` if the sets contain the same keys, `false` otherwise.
266267
-/
267268
def beq [BEq α] (m₁ m₂ : HashSet α) : Bool :=
268269
HashMap.beq m₁.inner m₂.inner

src/Std/Data/HashSet/Raw.lean

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,8 @@ instance [BEq α] [Hashable α] : Inter (Raw α) := ⟨inter⟩
246246

247247
/--
248248
Compares two hash sets using Boolean equality on keys.
249-
Returns `true` if the sets contain the same keys pairs, `false` otherwise.
249+
250+
Returns `true` if the sets contain the same keys, `false` otherwise.
250251
-/
251252
def beq [BEq α] [Hashable α] (m₁ m₂ : Raw α) : Bool :=
252253
HashMap.Raw.beq m₁.inner m₂.inner

src/Std/Data/Internal/List/Associative.lean

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3589,12 +3589,9 @@ theorem length_le_length_of_containsKey [BEq α] [EquivBEq α]
35893589
have hc := h hd.1 (by rw [containsKey_cons_self])
35903590
suffices tl.length ≤ (eraseKey hd.1 l₂).length by
35913591
rw [List.length_eraseKey, hc] at this
3592-
simp at this
3593-
simp
3594-
have : l₂.length > 0 := by
3595-
cases l₂
3596-
case nil => simp at hc
3597-
case cons => simp
3592+
simp only [↓reduceIte] at this
3593+
simp only [List.length_cons, ge_iff_le]
3594+
have : l₂.length > 0 := by cases l₂ <;> simp_all
35983595
omega
35993596
apply ih
36003597
· rw [List.distinctKeys_cons_iff] at dl₁
@@ -3621,7 +3618,7 @@ theorem containsKey_of_length_eq [BEq α] [EquivBEq α] {l₁ l₂ : List ((a :
36213618
intro a ha
36223619
apply Classical.byContradiction
36233620
intro hb
3624-
simp at hb
3621+
simp only [Bool.not_eq_true] at hb
36253622
suffices l₁.length < l₂.length by omega
36263623
suffices l₁.length ≤ (eraseKey a l₂).length ∧ 1 + (eraseKey a l₂).length = l₂.length by omega
36273624
apply And.intro
@@ -3640,9 +3637,9 @@ theorem containsKey_of_length_eq [BEq α] [EquivBEq α] {l₁ l₂ : List ((a :
36403637
exact mem₂
36413638
· simp only [length_eraseKey, ha, ↓reduceIte]
36423639
have : l₂.length > 0 := by
3643-
cases l₂
3644-
· simp at ha
3645-
· simp
3640+
cases l₂ with
3641+
| nil => simp at ha
3642+
| _ => simp
36463643
omega
36473644

36483645
section
@@ -7633,7 +7630,7 @@ theorem isEmpty_filter_key_iff [BEq α] [EquivBEq α] {f : α → Bool}
76337630
simp only [getKey, getKey?_eq_getEntry?, this] at h
76347631
exact h
76357632

7636-
theorem beqModel_eq_true_of_perm [BEq α] [LawfulBEq α] [LawfulBEq α] [∀ k, BEq (β k)] [∀ k, ReflBEq (β k)] {l₁ l₂ : List ((a : α) × β a)} (hl₁ : DistinctKeys l₁) : l₁.Perm l₂ → beqModel l₁ l₂ := by
7633+
theorem beqModel_eq_true_of_perm [BEq α] [LawfulBEq α] [∀ k, BEq (β k)] [∀ k, ReflBEq (β k)] {l₁ l₂ : List ((a : α) × β a)} (hl₁ : DistinctKeys l₁) : l₁.Perm l₂ → beqModel l₁ l₂ := by
76377634
intro hyp
76387635
rw [beqModel, if_neg (by simpa using hyp.length_eq)]
76397636
simp only [List.all_eq_true]

0 commit comments

Comments
 (0)