@@ -423,7 +423,7 @@ by induction l; simp [*, or_comm]
423
423
@[simp] theorem reverse_repeat (a : α) (n) : reverse (repeat a n) = repeat a n :=
424
424
eq_repeat.2 ⟨by simp, λ b h, eq_of_mem_repeat (mem_reverse.1 h)⟩
425
425
426
- @[elab_as_eliminator] theorem reverse_rec_on {C : list α → Sort *}
426
+ @[elab_as_eliminator] def reverse_rec_on {C : list α → Sort *}
427
427
(l : list α) (H0 : C [])
428
428
(H1 : ∀ (l : list α) (a : α), C l → C (l ++ [a])) : C l :=
429
429
begin
@@ -2548,6 +2548,8 @@ variable [decidable_eq α]
2548
2548
@[simp] theorem diff_cons (l₁ l₂ : list α) (a : α) : l₁.diff (a::l₂) = (l₁.erase a).diff l₂ :=
2549
2549
by by_cases a ∈ l₁; simp [list.diff, h]
2550
2550
2551
+ @[simp] theorem nil_diff (l : list α) : [].diff l = [] := by induction l; simp *
2552
+
2551
2553
theorem diff_eq_foldl : ∀ (l₁ l₂ : list α), l₁.diff l₂ = foldl list.erase l₁ l₂
2552
2554
| l₁ [] := rfl
2553
2555
| l₁ (a::l₂) := (diff_cons l₁ l₂ a).trans (diff_eq_foldl _ _)
@@ -2559,6 +2561,11 @@ by simp [diff_eq_foldl]
2559
2561
map f (l₁.diff l₂) = (map f l₁).diff (map f l₂) :=
2560
2562
by simp [diff_eq_foldl, map_foldl_erase finj]
2561
2563
2564
+ theorem diff_sublist : ∀ l₁ l₂ : list α, l₁.diff l₂ <+ l₁
2565
+ | l₁ [] := by simp
2566
+ | l₁ (a::l₂) := calc l₁.diff (a :: l₂) = (l₁.erase a).diff l₂ : diff_cons _ _ _
2567
+ ... <+ l₁.erase a : diff_sublist _ _
2568
+ ... <+ l₁ : list.erase_sublist _ _
2562
2569
2563
2570
end diff
2564
2571
0 commit comments