31 lines
739 B
Plaintext
31 lines
739 B
Plaintext
import Mathlib.Logic.Basic
|
||
|
||
namespace List
|
||
|
||
/--
|
||
The length of any empty list is definitionally zero.
|
||
-/
|
||
theorem nil_length_eq_zero : @length α [] = 0 := rfl
|
||
|
||
/--
|
||
If the length of a list is greater than zero, it cannot be `List.nil`.
|
||
-/
|
||
theorem length_gt_zero_imp_not_nil : xs.length > 0 → xs ≠ [] := by
|
||
intro h
|
||
by_contra nh
|
||
rw [nh] at h
|
||
have : 0 > 0 := calc 0
|
||
_ = length [] := by rw [←nil_length_eq_zero]
|
||
_ > 0 := h
|
||
simp at this
|
||
|
||
/--
|
||
Given a list `xs` of length `k`, produces a list of length `k - 1` where the
|
||
`i`th member of the resulting list is `f xs[i] xs[i + 1]`.
|
||
-/
|
||
def pairwise (xs : List α) (f : α → α → β) : List β :=
|
||
match xs.tail? with
|
||
| none => []
|
||
| some ys => zipWith f xs ys
|
||
|
||
end List |