Skip to content

Commit 4675dfc

Browse files
kim-emluisacicolini
authored andcommitted
feat: LawfulBEq instances for Array and Vector (leanprover#6922)
This PR adds `LawfulBEq` instances for `Array` and `Vector`. (Note this replaces a contribution of @mehbark to Batteries for the LawfulBEq instance for Vector, which was dropped during the release process due to conflicts. Thanks for that contribution!)
1 parent 238f453 commit 4675dfc

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

Diff for: src/Init/Data/Array/DecidableEq.lean

+10
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,13 @@ namespace List
108108
simp [beq_eq_decide, Array.beq_eq_decide]
109109

110110
end List
111+
112+
namespace Array
113+
114+
instance [BEq α] [LawfulBEq α] : LawfulBEq (Array α) where
115+
rfl := by simp [BEq.beq, isEqv_self_beq]
116+
eq_of_beq := by
117+
rintro ⟨a⟩ ⟨b⟩ h
118+
simpa using h
119+
120+
end Array

Diff for: src/Init/Data/Vector/DecidableEq.lean

+10
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,20 @@ theorem beq_eq_decide [BEq α] (a b : Vector α n) :
4949
(a == b) = decide (∀ (i : Nat) (h' : i < n), a[i] == b[i]) := by
5050
simp [BEq.beq, isEqv_eq_decide]
5151

52+
@[simp] theorem beq_mk [BEq α] (a b : Array α) (ha : a.size = n) (hb : b.size = n) :
53+
(mk a ha == mk b hb) = (a == b) := by
54+
simp [BEq.beq]
55+
5256
@[simp] theorem beq_toArray [BEq α] (a b : Vector α n) : (a.toArray == b.toArray) = (a == b) := by
5357
simp [beq_eq_decide, Array.beq_eq_decide]
5458

5559
@[simp] theorem beq_toList [BEq α] (a b : Vector α n) : (a.toList == b.toList) = (a == b) := by
5660
simp [beq_eq_decide, List.beq_eq_decide]
5761

62+
instance [BEq α] [LawfulBEq α] : LawfulBEq (Vector α n) where
63+
rfl := by simp [BEq.beq, isEqv_self_beq]
64+
eq_of_beq := by
65+
rintro ⟨a, rfl⟩ ⟨b, h⟩ h'
66+
simpa using h'
67+
5868
end Vector

Diff for: src/Init/Data/Vector/Lemmas.lean

+2-5
Original file line numberDiff line numberDiff line change
@@ -1289,12 +1289,9 @@ theorem mem_setIfInBounds (v : Vector α n) (i : Nat) (hi : i < n) (a : α) :
12891289
· intro h
12901290
constructor
12911291
· rintro ⟨a, ha⟩ ⟨b, hb⟩ h
1292-
simp at h
1293-
obtain ⟨hs, hi⟩ := Array.isEqv_iff_rel.mp h
1294-
ext i h
1295-
· simpa using hi _ (by omega)
1292+
simp_all
12961293
· rintro ⟨a, ha⟩
1297-
simpa using Array.isEqv_self_beq ..
1294+
simp
12981295

12991296
/-! ### isEqv -/
13001297

0 commit comments

Comments
 (0)