Skip to content

Commit bc234f9

Browse files
authored
feat: align List/Array/Vector.zip/zipWith/zipWithAll/unzip (#6840)
This PR completes the alignment of `List/Array/Vector.zip/zipWith/zipWithAll/unzip` lemmas.
1 parent 08ec254 commit bc234f9

18 files changed

+700
-37
lines changed

src/Init/Data/Array.lean

+1
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ import Init.Data.Array.FinRange
2323
import Init.Data.Array.Perm
2424
import Init.Data.Array.Find
2525
import Init.Data.Array.Lex
26+
import Init.Data.Array.Zip

src/Init/Data/Array/Basic.lean

+3-3
Original file line numberDiff line numberDiff line change
@@ -941,13 +941,13 @@ def zipWithAux (as : Array α) (bs : Array β) (f : α → β → γ) (i : Nat)
941941
cs
942942
decreasing_by simp_wf; decreasing_trivial_pre_omega
943943

944-
@[inline] def zipWith (as : Array α) (bs : Array β) (f : α → β → γ) : Array γ :=
944+
@[inline] def zipWith (f : α → β → γ) (as : Array α) (bs : Array β) : Array γ :=
945945
zipWithAux as bs f 0 #[]
946946

947947
def zip (as : Array α) (bs : Array β) : Array (α × β) :=
948-
zipWith as bs Prod.mk
948+
zipWith Prod.mk as bs
949949

950-
def zipWithAll (as : Array α) (bs : Array β) (f : Option α → Option β → γ) : Array γ :=
950+
def zipWithAll (f : Option α → Option β → γ) (as : Array α) (bs : Array β) : Array γ :=
951951
go as bs 0 #[]
952952
where go (as : Array α) (bs : Array β) (i : Nat) (cs : Array γ) :=
953953
if i < max as.size bs.size then

src/Init/Data/Array/Lemmas.lean

+6-6
Original file line numberDiff line numberDiff line change
@@ -3543,32 +3543,32 @@ theorem eraseIdx_eq_eraseIdxIfInBounds {a : Array α} {i : Nat} (h : i < a.size)
35433543
/-! ### zipWith -/
35443544

35453545
@[simp] theorem toList_zipWith (f : α → β → γ) (as : Array α) (bs : Array β) :
3546-
(Array.zipWith as bs f).toList = List.zipWith f as.toList bs.toList := by
3546+
(zipWith f as bs).toList = List.zipWith f as.toList bs.toList := by
35473547
cases as
35483548
cases bs
35493549
simp
35503550

35513551
@[simp] theorem toList_zip (as : Array α) (bs : Array β) :
3552-
(Array.zip as bs).toList = List.zip as.toList bs.toList := by
3552+
(zip as bs).toList = List.zip as.toList bs.toList := by
35533553
simp [zip, toList_zipWith, List.zip]
35543554

35553555
@[simp] theorem toList_zipWithAll (f : Option α → Option β → γ) (as : Array α) (bs : Array β) :
3556-
(Array.zipWithAll as bs f).toList = List.zipWithAll f as.toList bs.toList := by
3556+
(zipWithAll f as bs).toList = List.zipWithAll f as.toList bs.toList := by
35573557
cases as
35583558
cases bs
35593559
simp
35603560

35613561
@[simp] theorem size_zipWith (as : Array α) (bs : Array β) (f : α → β → γ) :
3562-
(as.zipWith bs f).size = min as.size bs.size := by
3562+
(zipWith f as bs).size = min as.size bs.size := by
35633563
rw [size_eq_length_toList, toList_zipWith, List.length_zipWith]
35643564

35653565
@[simp] theorem size_zip (as : Array α) (bs : Array β) :
35663566
(as.zip bs).size = min as.size bs.size :=
35673567
as.size_zipWith bs Prod.mk
35683568

35693569
@[simp] theorem getElem_zipWith (as : Array α) (bs : Array β) (f : α → β → γ) (i : Nat)
3570-
(hi : i < (as.zipWith bs f).size) :
3571-
(as.zipWith bs f)[i] = f (as[i]'(by simp at hi; omega)) (bs[i]'(by simp at hi; omega)) := by
3570+
(hi : i < (zipWith f as bs).size) :
3571+
(zipWith f as bs)[i] = f (as[i]'(by simp at hi; omega)) (bs[i]'(by simp at hi; omega)) := by
35723572
cases as
35733573
cases bs
35743574
simp

0 commit comments

Comments
 (0)