Documentation

Init.Data.List.MinMax

Lemmas about List.min? and `List.max?. #

Minima and maxima #

min? #

@[simp]
theorem List.min?_nil {α : Type u_1} [Min α] :
theorem List.min?_cons' {α : Type u_1} {x : α} [Min α] {xs : List α} :
(x :: xs).min? = some (foldl min x xs)
@[simp]
theorem List.min?_cons {α : Type u_1} {x : α} [Min α] [Std.Associative min] {xs : List α} :
(x :: xs).min? = some (xs.min?.elim x (min x))
@[simp]
theorem List.min?_eq_none_iff {α : Type u_1} {xs : List α} [Min α] :
xs.min? = none ↔ xs = []
theorem List.isSome_min?_of_mem {α : Type u_1} {l : List α} [Min α] {a : α} (h : a ∈ l) :
theorem List.isSome_min?_of_ne_nil {α : Type u_1} [Min α] {l : List α} (hl : l ≠ []) :
theorem List.min?_eq_head? {α : Type u} [Min α] {l : List α} (h : Pairwise (fun (a b : α) => min a b = a) l) :
theorem List.min?_mem {α : Type u_1} {a : α} [Min α] [Std.MinEqOr α] {xs : List α} :
xs.min? = some a → a ∈ xs
theorem List.le_min?_iff {α : Type u_1} {a : α} [Min α] [LE α] [Std.LawfulOrderInf α] {xs : List α} :
xs.min? = some a → ∀ {x : α}, x ≤ a ↔ ∀ (b : α), b ∈ xs → x ≤ b
theorem List.min?_eq_some_iff {α : Type u_1} {a : α} [Min α] [LE α] {xs : List α} [Std.IsLinearOrder α] [Std.LawfulOrderMin α] :
xs.min? = some a ↔ a ∈ xs ∧ ∀ (b : α), b ∈ xs → a ≤ b
theorem List.min?_eq_some_iff_subtype {α : Type u_1} {a : α} [Min α] [LE α] {xs : List α} [Std.MinEqOr α] [Std.IsLinearOrder { x : α // x ∈ xs }] [Std.LawfulOrderMin { x : α // x ∈ xs }] :
xs.min? = some a ↔ a ∈ xs ∧ ∀ (b : α), b ∈ xs → a ≤ b
theorem List.min?_replicate {α : Type u_1} [Min α] [Std.IdempotentOp min] {n : Nat} {a : α} :
@[simp]
theorem List.min?_replicate_of_pos {α : Type u_1} [Min α] [Std.MinEqOr α] {n : Nat} {a : α} (h : 0 < n) :
theorem List.foldl_min {α : Type u_1} [Min α] [Std.IdempotentOp min] [Std.Associative min] {l : List α} {a : α} :
foldl min a l = min a (l.min?.getD a)

This lemma is also applicable given the following instances:

[LE α] [Min α] [IsLinearOrder α] [LawfulOrderMin α]

min #

theorem List.min?_eq_some_min {α : Type u_1} [Min α] {l : List α} (hl : l ≠ []) :
l.min? = some (l.min hl)
theorem List.min_eq_get_min? {α : Type u_1} [Min α] (l : List α) (hl : l ≠ []) :
l.min hl = l.min?.get ⋯
theorem List.min_eq_head {α : Type u} [Min α] {l : List α} (hl : l ≠ []) (h : Pairwise (fun (a b : α) => min a b = a) l) :
l.min hl = l.head hl
theorem List.min_mem {α : Type u_1} [Min α] [Std.MinEqOr α] {l : List α} (hl : l ≠ []) :
l.min hl ∈ l
theorem List.min_le_of_mem {α : Type u_1} [Min α] [LE α] [Std.IsLinearOrder α] [Std.LawfulOrderMin α] {l : List α} {a : α} (ha : a ∈ l) :
l.min ⋯ ≤ a
theorem List.le_min_iff {α : Type u_1} [Min α] [LE α] [Std.LawfulOrderInf α] {l : List α} (hl : l ≠ []) {x : α} :
x ≤ l.min hl ↔ ∀ (b : α), b ∈ l → x ≤ b
theorem List.min_eq_iff {α : Type u_1} {a : α} [Min α] [LE α] {l : List α} [Std.IsLinearOrder α] [Std.LawfulOrderMin α] (hl : l ≠ []) :
l.min hl = a ↔ a ∈ l ∧ ∀ (b : α), b ∈ l → a ≤ b
@[simp]
theorem List.min_replicate {α : Type u_1} [Min α] [Std.MinEqOr α] {n : Nat} {a : α} (h : replicate n a ≠ []) :
(replicate n a).min h = a
theorem List.foldl_min_eq_min {α : Type u_1} [Min α] [Std.IdempotentOp min] [Std.Associative min] {l : List α} (hl : l ≠ []) {a : α} :
foldl min a l = min a (l.min hl)

max? #

@[simp]
theorem List.max?_nil {α : Type u_1} [Max α] :
theorem List.max?_cons' {α : Type u_1} {x : α} [Max α] {xs : List α} :
(x :: xs).max? = some (foldl max x xs)
@[simp]
theorem List.max?_cons {α : Type u_1} {x : α} [Max α] [Std.Associative max] {xs : List α} :
(x :: xs).max? = some (xs.max?.elim x (max x))
@[simp]
theorem List.max?_eq_none_iff {α : Type u_1} {xs : List α} [Max α] :
xs.max? = none ↔ xs = []
theorem List.isSome_max?_of_mem {α : Type u_1} {l : List α} [Max α] {a : α} (h : a ∈ l) :
theorem List.isSome_max?_of_ne_nil {α : Type u_1} [Max α] {l : List α} (hl : l ≠ []) :
theorem List.max?_eq_head? {α : Type u} [Max α] {l : List α} (h : Pairwise (fun (a b : α) => max a b = a) l) :
theorem List.max?_mem {α : Type u_1} {a : α} [Max α] [Std.MaxEqOr α] {xs : List α} :
xs.max? = some a → a ∈ xs
theorem List.max?_le_iff {α : Type u_1} {a : α} [Max α] [LE α] [Std.LawfulOrderSup α] {xs : List α} :
xs.max? = some a → ∀ {x : α}, a ≤ x ↔ ∀ (b : α), b ∈ xs → b ≤ x
theorem List.max?_eq_some_iff {α : Type u_1} {a : α} [Max α] [LE α] {xs : List α} [Std.IsLinearOrder α] [Std.LawfulOrderMax α] :
xs.max? = some a ↔ a ∈ xs ∧ ∀ (b : α), b ∈ xs → b ≤ a
theorem List.max?_eq_some_iff_subtype {α : Type u_1} {a : α} [Max α] [LE α] {xs : List α} [Std.MaxEqOr α] [Std.IsLinearOrder { x : α // x ∈ xs }] [Std.LawfulOrderMax { x : α // x ∈ xs }] :
xs.max? = some a ↔ a ∈ xs ∧ ∀ (b : α), b ∈ xs → b ≤ a
@[deprecated List.max?_eq_some_iff (since := "2025-08-01")]
theorem List.max?_eq_some_iff_legacy {α : Type u_1} {a : α} [Max α] [LE α] [anti : Std.Antisymm fun (x1 x2 : α) => x1 ≤ x2] (le_refl : ∀ (a : α), a ≤ a) (max_eq_or : ∀ (a b : α), max a b = a ∨ max a b = b) (max_le_iff : ∀ (a b c : α), max b c ≤ a ↔ b ≤ a ∧ c ≤ a) {xs : List α} :
xs.max? = some a ↔ a ∈ xs ∧ ∀ (b : α), b ∈ xs → b ≤ a
theorem List.max?_replicate {α : Type u_1} [Max α] [Std.IdempotentOp max] {n : Nat} {a : α} :
@[simp]
theorem List.max?_replicate_of_pos {α : Type u_1} [Max α] [Std.MaxEqOr α] {n : Nat} {a : α} (h : 0 < n) :
theorem List.foldl_max {α : Type u_1} [Max α] [Std.IdempotentOp max] [Std.Associative max] {l : List α} {a : α} :
foldl max a l = max a (l.max?.getD a)

This lemma is also applicable given the following instances:

[LE α] [Min α] [IsLinearOrder α] [LawfulOrderMax α]

max #

theorem List.max?_eq_some_max {α : Type u_1} [Max α] {l : List α} (hl : l ≠ []) :
l.max? = some (l.max hl)
theorem List.max_eq_get_max? {α : Type u_1} [Max α] (l : List α) (hl : l ≠ []) :
l.max hl = l.max?.get ⋯
theorem List.max_eq_head {α : Type u} [Max α] {l : List α} (hl : l ≠ []) (h : Pairwise (fun (a b : α) => max a b = a) l) :
l.max hl = l.head hl
theorem List.max_mem {α : Type u_1} [Max α] [Std.MaxEqOr α] {l : List α} (hl : l ≠ []) :
l.max hl ∈ l
theorem List.max_le_iff {α : Type u_1} [Max α] [LE α] [Std.LawfulOrderSup α] {l : List α} (hl : l ≠ []) {x : α} :
l.max hl ≤ x ↔ ∀ (b : α), b ∈ l → b ≤ x
theorem List.max_eq_iff {α : Type u_1} {a : α} [Max α] [LE α] {l : List α} [Std.IsLinearOrder α] [Std.LawfulOrderMax α] (hl : l ≠ []) :
l.max hl = a ↔ a ∈ l ∧ ∀ (b : α), b ∈ l → b ≤ a
theorem List.le_max_of_mem {α : Type u_1} [Max α] [LE α] [Std.IsLinearOrder α] [Std.LawfulOrderMax α] {l : List α} {a : α} (ha : a ∈ l) :
a ≤ l.max ⋯
@[simp]
theorem List.max_replicate {α : Type u_1} [Max α] [Std.MaxEqOr α] {n : Nat} {a : α} (h : replicate n a ≠ []) :
(replicate n a).max h = a
theorem List.foldl_max_eq_max {α : Type u_1} [Max α] [Std.IdempotentOp max] [Std.Associative max] {l : List α} (hl : l ≠ []) {a : α} :
foldl max a l = max a (l.max hl)