@@ -450,13 +450,13 @@ append_inj_right h rfl
450450theorem append_right_cancel {s₁ s₂ t : list α} (h : s₁ ++ t = s₂ ++ t) : s₁ = s₂ :=
451451append_inj_left' h rfl
452452
453- theorem append_right_injective (s : list α) : function. injective (λ t, s ++ t) :=
453+ theorem append_right_injective (s : list α) : injective (λ t, s ++ t) :=
454454λ t₁ t₂, append_left_cancel
455455
456456theorem append_right_inj {t₁ t₂ : list α} (s) : s ++ t₁ = s ++ t₂ ↔ t₁ = t₂ :=
457457(append_right_injective s).eq_iff
458458
459- theorem append_left_injective (t : list α) : function. injective (λ s, s ++ t) :=
459+ theorem append_left_injective (t : list α) : injective (λ s, s ++ t) :=
460460λ s₁ s₂, append_right_cancel
461461
462462theorem append_left_inj {s₁ s₂ : list α} (t) : s₁ ++ t = s₂ ++ t ↔ s₁ = s₂ :=
475475
476476/-! ### replicate -/
477477
478+ @[simp] theorem replicate_zero (a : α) : replicate 0 a = [] := rfl
478479@[simp] theorem replicate_succ (a : α) (n) : replicate (n + 1 ) a = a :: replicate n a := rfl
480+ theorem replicate_one (a : α) : replicate 1 a = [a] := rfl
479481
480482@[simp] theorem length_replicate : ∀ n (a : α), length (replicate n a) = n
481483| 0 a := rfl
@@ -498,16 +500,19 @@ theorem eq_replicate {a : α} {n} {l : list α} : l = replicate n a ↔ length l
498500⟨λ h, h.symm ▸ ⟨length_replicate _ _, λ b, eq_of_mem_replicate⟩,
499501 λ ⟨e, al⟩, e ▸ eq_replicate_of_mem al⟩
500502
501- theorem replicate_add (a : α ) (m n ) : replicate (m + n) a = replicate m a ++ replicate n a :=
503+ theorem replicate_add (m n ) (a : α ) : replicate (m + n) a = replicate m a ++ replicate n a :=
502504by induction m; simp only [*, zero_add, succ_add, replicate]; refl
503505
504- theorem replicate_subset_singleton (a : α) (n) : replicate n a ⊆ [a] :=
506+ theorem replicate_succ' (n) (a : α) : replicate (n + 1 ) a = replicate n a ++ [a] :=
507+ replicate_add n 1 a
508+
509+ theorem replicate_subset_singleton (n) (a : α) : replicate n a ⊆ [a] :=
505510λ b h, mem_singleton.2 (eq_of_mem_replicate h)
506511
507512lemma subset_singleton_iff {a : α} {L : list α} : L ⊆ [a] ↔ ∃ n, L = replicate n a :=
508513by simp only [eq_replicate, subset_def, mem_singleton, exists_eq_left']
509514
510- @[simp] theorem map_replicate (f : α → β) (a : α) (n ) : map f (replicate n a) = replicate n (f a) :=
515+ @[simp] theorem map_replicate (f : α → β) (n a ) : map f (replicate n a) = replicate n (f a) :=
511516by induction n; [refl, simp only [*, replicate, map]]; split; refl
512517
513518@[simp] theorem tail_replicate (n) (a : α) : tail (replicate n a) = replicate (n - 1 ) a :=
@@ -516,8 +521,7 @@ by cases n; refl
516521@[simp] theorem join_replicate_nil (n : ℕ) : join (replicate n []) = @nil α :=
517522by induction n; [refl, simp only [*, replicate, join, append_nil]]
518523
519- lemma replicate_right_injective {n : ℕ} (hn : n ≠ 0 ) :
520- function.injective (replicate n : α → list α) :=
524+ lemma replicate_right_injective {n : ℕ} (hn : n ≠ 0 ) : injective (replicate n : α → list α) :=
521525λ _ _ h, (eq_replicate.1 h).2 _ $ mem_replicate.2 ⟨hn, rfl⟩
522526
523527lemma replicate_right_inj {a b : α} {n : ℕ} (hn : n ≠ 0 ) :
@@ -529,8 +533,8 @@ lemma replicate_right_inj {a b : α} {n : ℕ} (hn : n ≠ 0) :
529533| 0 := by simp
530534| (n + 1 ) := (replicate_right_inj n.succ_ne_zero).trans $ by simp only [n.succ_ne_zero, false_or]
531535
532- lemma replicate_left_injective (a : α) : function. injective (λ n, replicate n a) :=
533- function. left_inverse.injective (λ n, length_replicate n a)
536+ lemma replicate_left_injective (a : α) : injective (λ n, replicate n a) :=
537+ left_inverse.injective (λ n, length_replicate n a)
534538
535539@[simp] lemma replicate_left_inj {a : α} {n m : ℕ} :
536540 replicate n a = replicate m a ↔ n = m :=
@@ -660,8 +664,8 @@ by simp only [reverse_core_eq, map_append, map_reverse]
660664by induction l; [refl, simp only [*, reverse_cons, mem_append, mem_singleton, mem_cons_iff,
661665 not_mem_nil, false_or, or_false, or_comm]]
662666
663- @[simp] theorem reverse_replicate (a : α) (n ) : reverse (replicate n a) = replicate n a :=
664- eq_replicate.2 ⟨by simp only [length_reverse, length_replicate],
667+ @[simp] theorem reverse_replicate (n) ( a : α) : reverse (replicate n a) = replicate n a :=
668+ eq_replicate.2 ⟨by rw [length_reverse, length_replicate],
665669 λ b h, eq_of_mem_replicate (mem_reverse.1 h)⟩
666670
667671/-! ### empty -/
@@ -729,12 +733,11 @@ theorem last_mem : ∀ {l : list α} (h : l ≠ []), last l h ∈ l
729733| [a] h := or.inl rfl
730734| (a::b::l) h := or.inr $ by { rw [last_cons_cons], exact last_mem (cons_ne_nil b l) }
731735
732- lemma last_replicate_succ (a m : ℕ) :
736+ lemma last_replicate_succ (m : ℕ) (a : α ) :
733737 (replicate (m + 1 ) a).last (ne_nil_of_length_eq_succ (length_replicate (m + 1 ) a)) = a :=
734738begin
735- induction m with k IH,
736- { simp },
737- { simpa only [replicate_succ, last] }
739+ simp only [replicate_succ'],
740+ exact last_append_singleton _
738741end
739742
740743/-! ### last' -/
@@ -1796,12 +1799,13 @@ lemma map_eq_replicate_iff {l : list α} {f : α → β} {b : β} :
17961799 l.map f = replicate l.length b ↔ (∀ x ∈ l, f x = b) :=
17971800by simp [eq_replicate]
17981801
1799- @[simp]
1800- theorem map_const (l : list α) (b : β) : map (function.const α b) l = replicate l.length b :=
1802+ @[simp] theorem map_const (l : list α) (b : β) : map (const α b) l = replicate l.length b :=
18011803map_eq_replicate_iff.mpr (λ x _, rfl)
18021804
1803- theorem eq_of_mem_map_const {b₁ b₂ : β} {l : list α} (h : b₁ ∈ map (function.const α b₂) l) :
1804- b₁ = b₂ :=
1805+ -- Not a `simp` lemma because `function.const` is reducible in Lean 3
1806+ theorem map_const' (l : list α) (b : β) : map (λ _, b) l = replicate l.length b := map_const l b
1807+
1808+ theorem eq_of_mem_map_const {b₁ b₂ : β} {l : list α} (h : b₁ ∈ map (const α b₂) l) : b₁ = b₂ :=
18051809by rw map_const at h; exact eq_of_mem_replicate h
18061810
18071811/-! ### map₂ -/
0 commit comments