Skip to content

Commit c41aa54

Browse files
committed
Merge branch 'wojciech/hashmap_beq2' into wojciech/treemap_beq
2 parents 5f625c1 + 7ef173e commit c41aa54

File tree

7 files changed

+20
-21
lines changed

7 files changed

+20
-21
lines changed

src/Init/Data/List/Perm.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,15 @@ theorem sum_nat {l₁ l₂ : List Nat} (h : l₁ ~ l₂) : l₁.sum = l₂.sum :
601601
| swap => simpa [List.sum_cons] using Nat.add_left_comm ..
602602
| trans _ _ ih₁ ih₂ => simp [ih₁, ih₂]
603603

604+
theorem all_eq {l₁ l₂ : List α} {f : α → Bool} (hp : l₁.Perm l₂) : l₁.all f = l₂.all f := by
605+
rw [Bool.eq_iff_iff, Bool.eq_iff_iff, List.all_eq_true, List.all_eq_true]
606+
simp only [iff_true]
607+
constructor
608+
· intro hyp e mem
609+
exact hyp e (@Perm.mem_iff _ e l₁ l₂ hp |>.2 mem)
610+
· intro hyp e mem
611+
exact hyp e (@Perm.mem_iff _ e l₂ l₁ hp.symm |>.2 mem)
612+
604613
grind_pattern Perm.sum_nat => l₁ ~ l₂, l₁.sum
605614
grind_pattern Perm.sum_nat => l₁ ~ l₂, l₂.sum
606615

src/Std/Data/DHashMap/RawLemmas.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ prelude
99
public import Std.Data.DHashMap.Internal.Raw
1010
public import Std.Data.DHashMap.Internal.RawLemmas
1111
import all Std.Data.DHashMap.Raw
12+
1213
public section
1314

1415
/-!

src/Std/Data/ExtDHashMap/Basic.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -409,14 +409,14 @@ end Const
409409
namespace Const
410410

411411
@[inline, inherit_doc DHashMap.beq]
412-
def beq_unit [LawfulBEq α] (m₁ m₂ : ExtDHashMap α fun _ => Unit) : Bool := lift₂ (fun x y : DHashMap α fun _ => Unit => DHashMap.Const.beq x y)
412+
def beqUnit [LawfulBEq α] (m₁ m₂ : ExtDHashMap α fun _ => Unit) : Bool := lift₂ (fun x y : DHashMap α fun _ => Unit => DHashMap.Const.beq x y)
413413
(fun _ _ _ _ => DHashMap.Const.Equiv.beq_congr) m₁ m₂
414414

415-
theorem beq_unit_of_eq [LawfulBEq α] (m₁ m₂ : ExtDHashMap α fun _ => Unit) (h : m₁ = m₂) : Const.beq_unit m₁ m₂ := by
415+
theorem beqUnit_of_eq [LawfulBEq α] (m₁ m₂ : ExtDHashMap α fun _ => Unit) (h : m₁ = m₂) : Const.beqUnit m₁ m₂ := by
416416
apply beq_of_eq
417417
exact h
418418

419-
theorem eq_of_beq_unit [LawfulBEq α] (m₁ m₂ : ExtDHashMap α fun _ => Unit) (h : Const.beq_unit m₁ m₂) : m₁ = m₂ := by
419+
theorem eq_of_beqUnit [LawfulBEq α] (m₁ m₂ : ExtDHashMap α fun _ => Unit) (h : Const.beqUnit m₁ m₂) : m₁ = m₂ := by
420420
apply eq_of_beq
421421
exact h
422422

src/Std/Data/ExtHashSet/Basic.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ def union [EquivBEq α] [LawfulHashable α] (m₁ m₂ : ExtHashSet α) : ExtHas
205205
instance [EquivBEq α] [LawfulHashable α] : Union (ExtHashSet α) := ⟨union⟩
206206

207207
@[inline, inherit_doc ExtHashMap.beq]
208-
def beq [LawfulBEq α] (m₁ m₂ : ExtHashSet α) : Bool := ExtDHashMap.Const.beq_unit m₁.inner.inner m₂.inner.inner
208+
def beq [LawfulBEq α] (m₁ m₂ : ExtHashSet α) : Bool := ExtDHashMap.Const.beqUnit m₁.inner.inner m₂.inner.inner
209209

210210
instance [LawfulBEq α] : BEq (ExtHashSet α) := ⟨beq⟩
211211

@@ -214,15 +214,15 @@ instance [LawfulBEq α] : ReflBEq (ExtHashSet α) where
214214
intro a
215215
cases a
216216
case mk a =>
217-
apply ExtDHashMap.Const.beq_unit_of_eq
217+
apply ExtDHashMap.Const.beqUnit_of_eq
218218
rfl
219219

220220
instance [LawfulBEq α] : LawfulBEq (ExtHashSet α) where
221221
eq_of_beq {a} {b} hyp := by
222222
have ⟨⟨a⟩⟩ := a
223223
have ⟨⟨b⟩⟩ := b
224224
simp only [mk.injEq, ExtHashMap.mk.injEq] at |- hyp
225-
exact ExtDHashMap.Const.eq_of_beq_unit _ _ hyp
225+
exact ExtDHashMap.Const.eq_of_beqUnit _ _ hyp
226226

227227
/--
228228
Computes the intersection of the given hash sets.

src/Std/Data/HashMap/Raw.lean

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,6 @@ def beq {β : Type v} [BEq α] [Hashable α] [BEq β] (m₁ m₂ : Raw α β) :
256256

257257
instance [BEq α] [Hashable α] [BEq β] : BEq (Raw α β) := ⟨beq⟩
258258

259-
260259
section Unverified
261260

262261
@[inline, inherit_doc DHashMap.Raw.filterMap] def filterMap {γ : Type w} (f : α → β → Option γ)

src/Std/Data/HashSet/Basic.lean

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,6 @@ def beq [BEq α] (m₁ m₂ : HashSet α) : Bool :=
266266

267267
instance [BEq α] : BEq (HashSet α) := ⟨beq⟩
268268

269-
270269
/--
271270
Computes the difference of the given hash sets.
272271

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

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3617,7 +3617,7 @@ theorem length_le_length_of_containsKey [BEq α] [EquivBEq α]
36173617
simp [mem]
36183618
· exact dl₂
36193619

3620-
theorem containsKey_of_subset_of_length_eq [BEq α] [EquivBEq α] {l₁ l₂ : List ((a : α) × β a)} (dl₁ : DistinctKeys l₁) (dl₂ : DistinctKeys l₂) (hl : l₂.length = l₁.length) (hs : ∀ (a : α), containsKey a l₁ → containsKey a l₂) : ∀ (a : α), containsKey a l₂ → containsKey a l₁ := by
3620+
theorem containsKey_of_length_eq [BEq α] [EquivBEq α] {l₁ l₂ : List ((a : α) × β a)} (dl₁ : DistinctKeys l₁) (dl₂ : DistinctKeys l₂) (hl : l₂.length = l₁.length) (hs : ∀ (a : α), containsKey a l₁ → containsKey a l₂) : ∀ (a : α), containsKey a l₂ → containsKey a l₁ := by
36213621
intro a ha
36223622
apply Classical.byContradiction
36233623
intro hb
@@ -7692,7 +7692,7 @@ theorem perm_of_beqModel [BEq α] [LawfulBEq α] [∀ k, BEq (β k)] [∀ k, Law
76927692
by_cases hc₂ : containsKey a l₂
76937693
case pos =>
76947694
suffices (∀ (a : α), containsKey a l₁ = true → containsKey a l₂ = true) by
7695-
rw [@containsKey_of_subset_of_length_eq α β _ _ l₁ l₂ hl₁ hl₂ he.symm this a hc₂] at hc₁
7695+
rw [@containsKey_of_length_eq α β _ _ l₁ l₂ hl₁ hl₂ he.symm this a hc₂] at hc₁
76967696
contradiction
76977697
intro k' mem
76987698
have := eq_of_beq <| hyp2 k' mem
@@ -7703,15 +7703,6 @@ theorem perm_of_beqModel [BEq α] [LawfulBEq α] [∀ k, BEq (β k)] [∀ k, Law
77037703
rw [Bool.not_eq_true] at hc₂
77047704
rw [getValueCast?_eq_none hc₁, getValueCast?_eq_none hc₂]
77057705

7706-
theorem all_congr [BEq α] {l₁ l₂ : List ((a : α) × β a)} {f : (a : α) × β a → Bool} (hp : l₁.Perm l₂) : l₁.all f = l₂.all f := by
7707-
rw [Bool.eq_iff_iff, Bool.eq_iff_iff, List.all_eq_true, List.all_eq_true]
7708-
simp only [iff_true]
7709-
constructor
7710-
· intro hyp ⟨k,v⟩ mem
7711-
exact hyp ⟨k,v⟩ (@Perm.mem_iff _ ⟨k,v⟩ l₁ l₂ hp |>.2 mem)
7712-
· intro hyp ⟨k,v⟩ mem
7713-
exact hyp ⟨k,v⟩ (@Perm.mem_iff _ ⟨k,v⟩ l₂ l₁ hp.symm |>.2 mem)
7714-
77157706
theorem beqModel_congr [BEq α] [LawfulBEq α] [∀ k, BEq (β k)] {l₁ l₂ l₃ l₄ : List ((a : α) × β a)}
77167707
(hl : DistinctKeys l₂) (p₁ : l₁.Perm l₃) (p₂ : l₂.Perm l₄) : beqModel l₁ l₂ = beqModel l₃ l₄ := by
77177708
rw [beqModel]
@@ -7732,7 +7723,7 @@ theorem beqModel_congr [BEq α] [LawfulBEq α] [∀ k, BEq (β k)] {l₁ l₂ l
77327723
ext x
77337724
rw [getValueCast?_of_perm hl p₂]
77347725
rw [this]
7735-
apply all_congr p₁
7726+
apply List.Perm.all_eq p₁
77367727

77377728
theorem Const.beqModel_congr {β : Type v} [BEq α] [LawfulBEq α] [BEq β] {l₁ l₂ l₃ l₄ : List ((_ : α) × β)}
77387729
(hl : DistinctKeys l₂) (p₁ : l₁.Perm l₃) (p₂ : l₂.Perm l₄) : beqModel l₁ l₂ = beqModel l₃ l₄ := by
@@ -7754,7 +7745,7 @@ theorem Const.beqModel_congr {β : Type v} [BEq α] [LawfulBEq α] [BEq β] {l
77547745
ext x
77557746
rw [getValue?_of_perm hl p₂]
77567747
rw [this]
7757-
apply all_congr p₁
7748+
apply List.Perm.all_eq p₁
77587749

77597750
theorem beqModel_eq_constBeqModel {β : Type v} [BEq α] [LawfulBEq α] [BEq β] {l₁ l₂ : List ((_ : α) × β)} : beqModel l₁ l₂ = Const.beqModel l₁ l₂ := by
77607751
rw [beqModel, Const.beqModel]

0 commit comments

Comments
 (0)