Skip to content

Commit add5ed2

Browse files
committed
feat(List): add lemmas about Sublist (#12326)
- Move `tail_sublist` to `Basic` - Rename `sublist_of_cons_sublist_cons` to `Sublist.of_cons_cos` - Rename `cons_sublist_cons_iff` to `cons_sublist_cons` - Add `Sublist.tail`, `drop_sublist_drop_left`, `Sublist.drop` - Protect some lemmas
1 parent b53e4a3 commit add5ed2

File tree

7 files changed

+35
-14
lines changed

7 files changed

+35
-14
lines changed

Mathlib/Data/List/Basic.lean

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,13 +1026,25 @@ theorem sublist_cons_of_sublist (a : α) (h : l₁ <+ l₂) : l₁ <+ a :: l₂
10261026
#align list.sublist_append_of_sublist_left List.sublist_append_of_sublist_left
10271027
#align list.sublist_append_of_sublist_right List.sublist_append_of_sublist_right
10281028

1029-
theorem sublist_of_cons_sublist_cons {l₁ l₂ : List α} : ∀ {a : α}, a :: l₁ <+ a :: l₂ → l₁ <+ l₂
1030-
| _, Sublist.cons _ s => sublist_of_cons_sublist s
1031-
| _, Sublist.cons₂ _ s => s
1032-
#align list.sublist_of_cons_sublist_cons List.sublist_of_cons_sublist_cons
1029+
theorem tail_sublist : ∀ l : List α, tail l <+ l
1030+
| [] => .slnil
1031+
| a::l => sublist_cons a l
1032+
#align list.tail_sublist List.tail_sublist
10331033

1034-
theorem cons_sublist_cons_iff {l₁ l₂ : List α} {a : α} : a :: l₁ <+ a :: l₂ ↔ l₁ <+ l₂ :=
1035-
⟨sublist_of_cons_sublist_cons, Sublist.cons_cons _⟩
1034+
@[gcongr] protected theorem Sublist.tail : ∀ {l₁ l₂ : List α}, l₁ <+ l₂ → tail l₁ <+ tail l₂
1035+
| _, _, slnil => .slnil
1036+
| _, _, Sublist.cons _ h => (tail_sublist _).trans h
1037+
| _, _, Sublist.cons₂ _ h => h
1038+
1039+
theorem Sublist.of_cons_cons {l₁ l₂ : List α} {a b : α} (h : a :: l₁ <+ b :: l₂) : l₁ <+ l₂ :=
1040+
h.tail
1041+
#align list.sublist_of_cons_sublist_cons List.Sublist.of_cons_cons
1042+
1043+
@[deprecated] -- 2024-04-07
1044+
theorem sublist_of_cons_sublist_cons {a} (h : a :: l₁ <+ a :: l₂) : l₁ <+ l₂ := h.of_cons_cons
1045+
1046+
attribute [simp] cons_sublist_cons
1047+
@[deprecated] alias cons_sublist_cons_iff := cons_sublist_cons -- 2024-04-07
10361048
#align list.cons_sublist_cons_iff List.cons_sublist_cons_iff
10371049

10381050
#align list.append_sublist_append_left List.append_sublist_append_left

Mathlib/Data/List/Chain.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Mario Carneiro, Kenny Lau, Yury Kudryashov
66
import Mathlib.Logic.Relation
77
import Mathlib.Data.List.Forall2
88
import Mathlib.Data.List.Lex
9+
import Mathlib.Data.List.Infix
910

1011
#align_import data.list.chain from "leanprover-community/mathlib"@"dd71334db81d0bd444af1ee339a29298bef40734"
1112

Mathlib/Data/List/Duplicate.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ theorem duplicate_iff_sublist : x ∈+ l ↔ [x, x] <+ l := by
118118
induction' l with y l IH
119119
· simp
120120
· by_cases hx : x = y
121-
· simp [hx, cons_sublist_cons_iff, singleton_sublist]
121+
· simp [hx, cons_sublist_cons, singleton_sublist]
122122
· rw [duplicate_cons_iff_of_ne hx, IH]
123123
refine' ⟨sublist_cons_of_sublist y, fun h => _⟩
124124
cases h

Mathlib/Data/List/Forall2.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Copyright (c) 2018 Mario Carneiro. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Mario Carneiro, Johannes Hölzl
55
-/
6-
import Mathlib.Data.List.Infix
6+
import Mathlib.Data.List.Basic
77

88
#align_import data.list.forall2 from "leanprover-community/mathlib"@"5a3e819569b0f12cbec59d740a2613018e7b8eec"
99

Mathlib/Data/List/Infix.lean

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@ theorem prefix_concat_iff {l₁ l₂ : List α} {a : α} :
9090
#align list.reverse_prefix List.reverse_prefix
9191
#align list.reverse_infix List.reverse_infix
9292

93-
alias ⟨_, isSuffix.reverse⟩ := reverse_prefix
93+
protected alias ⟨_, isSuffix.reverse⟩ := reverse_prefix
9494
#align list.is_suffix.reverse List.isSuffix.reverse
9595

96-
alias ⟨_, isPrefix.reverse⟩ := reverse_suffix
96+
protected alias ⟨_, isPrefix.reverse⟩ := reverse_suffix
9797
#align list.is_prefix.reverse List.isPrefix.reverse
9898

99-
alias ⟨_, isInfix.reverse⟩ := reverse_infix
99+
protected alias ⟨_, isInfix.reverse⟩ := reverse_infix
100100
#align list.is_infix.reverse List.isInfix.reverse
101101

102102
#align list.is_infix.length_le List.IsInfix.length_le
@@ -182,9 +182,10 @@ theorem dropLast_sublist (l : List α) : l.dropLast <+ l :=
182182
(dropLast_prefix l).sublist
183183
#align list.init_sublist List.dropLast_sublist
184184

185-
theorem tail_sublist (l : List α) : l.tail <+ l :=
186-
(tail_suffix l).sublist
187-
#align list.tail_sublist List.tail_sublist
185+
@[gcongr]
186+
theorem drop_sublist_drop_left (l : List α) {m n : ℕ} (h : m ≤ n) : drop n l <+ drop m l := by
187+
rw [← Nat.sub_add_cancel h, drop_add]
188+
apply drop_sublist
188189

189190
theorem dropLast_subset (l : List α) : l.dropLast ⊆ l :=
190191
(dropLast_sublist l).subset
@@ -202,6 +203,11 @@ theorem mem_of_mem_tail (h : a ∈ l.tail) : a ∈ l :=
202203
tail_subset l h
203204
#align list.mem_of_mem_tail List.mem_of_mem_tail
204205

206+
@[gcongr]
207+
protected theorem Sublist.drop : ∀ {l₁ l₂ : List α}, l₁ <+ l₂ → ∀ n, l₁.drop n <+ l₂.drop n
208+
| _, _, h, 0 => h
209+
| _, _, h, n + 1 => by rw [← drop_tail, ← drop_tail]; exact h.tail.drop n
210+
205211
theorem prefix_iff_eq_append : l₁ <+: l₂ ↔ l₁ ++ drop (length l₁) l₂ = l₂ :=
206212
by rintro ⟨r, rfl⟩; rw [drop_left], fun e => ⟨_, e⟩⟩
207213
#align list.prefix_iff_eq_append List.prefix_iff_eq_append

Mathlib/Data/List/Rotate.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Chris Hughes, Yakov Pechersky
66
import Mathlib.Data.List.Nodup
77
import Mathlib.Data.List.Zip
88
import Mathlib.Data.Nat.Defs
9+
import Mathlib.Data.List.Infix
910

1011
#align_import data.list.rotate from "leanprover-community/mathlib"@"f694c7dead66f5d4c80f446c796a5aad14707f0e"
1112

Mathlib/Data/List/Sort.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Jeremy Avigad
55
-/
66
import Mathlib.Data.List.OfFn
77
import Mathlib.Data.List.Nodup
8+
import Mathlib.Data.List.Infix
89

910
#align_import data.list.sort from "leanprover-community/mathlib"@"f694c7dead66f5d4c80f446c796a5aad14707f0e"
1011

0 commit comments

Comments
 (0)