@@ -1100,12 +1100,22 @@ lemma nth_le_append_right : ∀ {l₁ l₂ : list α} {n : ℕ} (h₁ : l₁.len
1100
1100
(list.repeat a n).nth_le m h = a :=
1101
1101
eq_of_mem_repeat (nth_le_mem _ _ _)
1102
1102
1103
- lemma nth_append {l₁ l₂ : list α} {n : ℕ} (hn : n < l₁.length) :
1103
+ lemma nth_append {l₁ l₂ : list α} {n : ℕ} (hn : n < l₁.length) :
1104
1104
(l₁ ++ l₂).nth n = l₁.nth n :=
1105
1105
have hn' : n < (l₁ ++ l₂).length := lt_of_lt_of_le hn
1106
1106
(by rw length_append; exact le_add_right _ _),
1107
1107
by rw [nth_le_nth hn, nth_le_nth hn', nth_le_append]
1108
1108
1109
+ lemma nth_append_right {l₁ l₂ : list α} {n : ℕ} (hn : l₁.length ≤ n) :
1110
+ (l₁ ++ l₂).nth n = l₂.nth (n - l₁.length) :=
1111
+ begin
1112
+ by_cases hl : n < (l₁ ++ l₂).length,
1113
+ { rw [nth_le_nth hl, nth_le_nth, nth_le_append_right hn] },
1114
+ { rw [nth_len_le (le_of_not_lt hl), nth_len_le],
1115
+ rw [not_lt, length_append] at hl,
1116
+ exact nat.le_sub_left_of_add_le hl }
1117
+ end
1118
+
1109
1119
lemma last_eq_nth_le : ∀ (l : list α) (h : l ≠ []),
1110
1120
last l h = l.nth_le (l.length - 1 ) (sub_lt (length_pos_of_ne_nil h) one_pos)
1111
1121
| [] h := rfl
@@ -1519,6 +1529,33 @@ lemma nth_le_take' (L : list α) {i j : ℕ} (hi : i < (L.take j).length) :
1519
1529
nth_le (L.take j) i hi = nth_le L i (lt_of_lt_of_le hi (by simp [le_refl])) :=
1520
1530
by { simp at hi, rw nth_le_take L _ hi.1 }
1521
1531
1532
+ lemma nth_take {l : list α} {n m : ℕ} (h : m < n) :
1533
+ (l.take n).nth m = l.nth m :=
1534
+ begin
1535
+ induction n with n hn generalizing l m,
1536
+ { simp only [nat.nat_zero_eq_zero] at h,
1537
+ exact absurd h (not_lt_of_le m.zero_le) },
1538
+ { cases l with hd tl,
1539
+ { simp only [take_nil] },
1540
+ { cases m,
1541
+ { simp only [nth, take] },
1542
+ { simpa only using hn (nat.lt_of_succ_lt_succ h) } } },
1543
+ end
1544
+
1545
+ @[simp] lemma nth_take_of_succ {l : list α} {n : ℕ} :
1546
+ (l.take (n + 1 )).nth n = l.nth n :=
1547
+ nth_take (nat.lt_succ_self n)
1548
+
1549
+ lemma take_succ {l : list α} {n : ℕ} :
1550
+ l.take (n + 1 ) = l.take n ++ (l.nth n).to_list :=
1551
+ begin
1552
+ induction l with hd tl hl generalizing n,
1553
+ { simp only [option.to_list, nth, take_nil, append_nil]},
1554
+ { cases n,
1555
+ { simp only [option.to_list, nth, eq_self_iff_true, and_self, take, nil_append] },
1556
+ { simp only [hl, cons_append, nth, eq_self_iff_true, and_self, take] } }
1557
+ end
1558
+
1522
1559
@[simp] theorem drop_nil : ∀ n, drop n [] = ([] : list α)
1523
1560
| 0 := rfl
1524
1561
| (n+1 ) := rfl
0 commit comments