@@ -77,10 +77,10 @@ quot.lift_on s (λ l, a ∈ l.1)
77
77
78
78
instance : has_mem α (finset α) := ⟨mem⟩
79
79
80
- theorem mem_of_mem_list {a : α} {l : nodup_list α} : a ∈ l.1 → mem a ⟦l⟧ :=
80
+ theorem mem_of_mem_list {a : α} {l : nodup_list α} : a ∈ l.1 → a ∈ @id (finset α) ⟦l⟧ :=
81
81
λ ainl, ainl
82
82
83
- theorem mem_list_of_mem {a : α} {l : nodup_list α} : mem a ⟦l⟧ → a ∈ l.1 :=
83
+ theorem mem_list_of_mem {a : α} {l : nodup_list α} : a ∈ @id (finset α) ⟦l⟧ → a ∈ l.1 :=
84
84
λ ainl, ainl
85
85
86
86
instance decidable_mem [h : decidable_eq α] : ∀ (a : α) (s : finset α), decidable (a ∈ s) :=
@@ -147,7 +147,7 @@ quot.lift_on s
147
147
148
148
instance : has_insert α (finset α) := ⟨insert⟩
149
149
150
- theorem mem_insert (a : α) (s : finset α) : a ∈ insert a s :=
150
+ theorem mem_insert (a : α) (s : finset α) : a ∈ has_insert. insert a s :=
151
151
quot.induction_on s
152
152
(λ l : nodup_list α, mem_to_finset_of_nodup _ (mem_insert_self _ _))
153
153
@@ -161,36 +161,36 @@ quot.induction_on s (λ l : nodup_list α, λ H, list.eq_or_mem_of_mem_insert H)
161
161
theorem mem_of_mem_insert_of_ne {x a : α} {s : finset α} (xin : x ∈ insert a s) : x ≠ a → x ∈ s :=
162
162
or_resolve_right (eq_or_mem_of_mem_insert xin)
163
163
164
- theorem mem_insert_iff (x a : α) (s : finset α) : x ∈ insert a s ↔ (x = a ∨ x ∈ s) :=
164
+ theorem mem_insert_iff (x a : α) (s : finset α) : x ∈ has_insert. insert a s ↔ (x = a ∨ x ∈ s) :=
165
165
iff.intro eq_or_mem_of_mem_insert
166
166
(λ h, or.elim h (λ l, by rw l; apply mem_insert) (λ r, mem_insert_of_mem _ r))
167
167
168
- theorem mem_singleton_iff (x a : α) : x ∈ insert a ∅ ↔ (x = a) :=
169
- by rewrite [mem_insert_iff, mem_empty_iff, or_false]
168
+ theorem mem_singleton_iff (x a : α) : x ∈ (has_insert. insert a (∅ : finset α)) ↔ (x = a) :=
169
+ by rw [mem_insert_iff, mem_empty_iff, or_false]
170
170
171
- theorem mem_singleton (a : α) : a ∈ insert a ∅ := mem_insert a ∅
171
+ theorem mem_singleton (a : α) : a ∈ ({a} : finset α) := mem_insert a ∅
172
172
173
- theorem mem_singleton_of_eq {x a : α} (H : x = a) : x ∈ insert a ∅ :=
174
- by rewrite H; apply mem_insert
173
+ theorem mem_singleton_of_eq {x a : α} (H : x = a) : x ∈ ({a} : finset α) :=
174
+ by rw H; apply mem_insert
175
175
176
176
theorem eq_of_mem_singleton {x a : α} (H : x ∈ insert a ∅) : x = a := iff.mp (mem_singleton_iff _ _) H
177
177
178
178
theorem eq_of_singleton_eq {a b : α} (H : insert a ∅ = insert b ∅) : a = b :=
179
- have a ∈ insert b ∅, by rewrite ←H; apply mem_singleton,
179
+ have a ∈ insert b ∅, by rw ←H; apply mem_singleton,
180
180
eq_of_mem_singleton this
181
181
182
- theorem insert_eq_of_mem {a : α} {s : finset α} (H : a ∈ s) : insert a s = s :=
182
+ theorem insert_eq_of_mem {a : α} {s : finset α} (H : a ∈ s) : has_insert. insert a s = s :=
183
183
ext (λ x, by rw mem_insert_iff; apply or_iff_right_of_imp; intro eq; rw eq; assumption)
184
184
185
- theorem singleton_ne_empty (a : α) : insert a ∅ ≠ ∅ :=
185
+ theorem singleton_ne_empty (a : α) : ({a} : finset α) ≠ ∅ :=
186
186
begin
187
187
intro H,
188
188
apply not_mem_empty a,
189
- rewrite ←H,
189
+ rw ←H,
190
190
apply mem_insert
191
191
end
192
192
193
- theorem pair_eq_singleton (a : α) : insert a (insert a ∅ ) = insert a ∅ :=
193
+ theorem pair_eq_singleton (a : α) : ({a, a} : finset α ) = {a} :=
194
194
by rw [insert_eq_of_mem]; apply mem_singleton
195
195
196
196
-- useful in proofs by induction
@@ -199,7 +199,7 @@ theorem forall_of_forall_insert {p : α → Prop} {a : α} {s : finset α}
199
199
∀ x, x ∈ s → p x :=
200
200
λ x xs, H x (mem_insert_of_mem _ xs)
201
201
202
- theorem insert.comm (x y : α) (s : finset α) : insert x (insert y s) = insert y (insert x s) :=
202
+ theorem insert.comm (x y : α) (s : finset α) : has_insert. insert x (has_insert. insert y s) = has_insert. insert y (has_insert. insert x s) :=
203
203
ext (λ a, begin repeat {rw mem_insert_iff}, rw [propext or.left_comm] end )
204
204
205
205
theorem card_insert_of_mem {a : α} {s : finset α} : a ∈ s → card (insert a s) = card s :=
@@ -212,15 +212,15 @@ quot.induction_on s
212
212
213
213
theorem card_insert_le (a : α) (s : finset α) :
214
214
card (insert a s) ≤ card s + 1 :=
215
- if H : a ∈ s then by rewrite [card_insert_of_mem H]; apply le_succ
216
- else by rewrite [card_insert_of_not_mem H]
215
+ if H : a ∈ s then by rw [card_insert_of_mem H]; apply le_succ
216
+ else by rw [card_insert_of_not_mem H]
217
217
218
218
theorem perm_insert_cons_of_not_mem [decidable_eq α] {a : α} {l : list α} (h : a ∉ l) : perm (list.insert a l) (a :: l) :=
219
219
have list.insert a l = a :: l, from if_neg h, by rw this
220
220
221
221
@[recursor 6 ] protected theorem induction {p : finset α → Prop }
222
222
(H1 : p empty)
223
- (H2 : ∀ ⦃a : α⦄, ∀{s : finset α}, ¬ mem a s → p s → p (insert a s)) :
223
+ (H2 : ∀ ⦃a : α⦄, ∀{s : finset α}, ¬ a ∈ s → p s → p (insert a s)) :
224
224
∀s, p s :=
225
225
λ s,
226
226
quot.induction_on s
@@ -234,7 +234,7 @@ quot.induction_on s
234
234
have aux₁: a ∉ l', from not_mem_of_nodup_cons nodup_al',
235
235
have ndl' : nodup l', from nodup_of_nodup_cons nodup_al',
236
236
have p1 : p (quot.mk _ (subtype.mk l' ndl')), from IH ndl',
237
- have ¬ mem a (quot.mk _ (subtype.mk l' ndl')), from aux₁,
237
+ have a ∉ @id (finset α) (quot.mk _ (subtype.mk l' ndl')), from aux₁,
238
238
have p' : p (insert a (quot.mk _ (subtype.mk l' ndl'))), from H2 this p1,
239
239
have list.insert a l' = a :: l', from if_neg aux₁,
240
240
have hperm : perm (list.insert a l') (a :: l'), by rw this ,
@@ -251,7 +251,7 @@ protected theorem induction_on {p : finset α → Prop} (s : finset α)
251
251
finset.induction H1 H2 s
252
252
253
253
theorem exists_mem_of_ne_empty {s : finset α} : s ≠ ∅ → ∃ a : α, a ∈ s :=
254
- @finset.induction_on _ _ (λ x, x ≠ empty → ∃ a : α, mem a x) s
254
+ @finset.induction_on _ _ (λ x, x ≠ empty → ∃ a : α, a ∈ x) s
255
255
(λ h, absurd rfl h)
256
256
(by intros a s nin ih h; existsi a; apply mem_insert)
257
257
@@ -298,7 +298,7 @@ iff.intro
298
298
(λ H, mem_erase_of_ne_of_mem (and.right H) (and.left H))
299
299
300
300
open decidable
301
- theorem erase_insert {a : α} {s : finset α} : a ∉ s → erase a (insert a s) = s :=
301
+ theorem erase_insert {a : α} {s : finset α} : a ∉ s → erase a (has_insert. insert a s) = s :=
302
302
λ anins, finset.ext (λ b, by_cases
303
303
(λ beqa : b = a, iff.intro
304
304
(λ bin, by subst b; exact absurd bin (not_mem_erase _ _))
@@ -382,11 +382,11 @@ theorem empty_union (s : finset α) : empty ∪ s = s :=
382
382
calc empty ∪ s = s ∪ empty : union_comm _ _
383
383
... = s : union_empty _
384
384
385
- theorem insert_eq (a : α) (s : finset α) : insert a s = insert a ∅ ∪ s :=
385
+ theorem insert_eq (a : α) (s : finset α) : has_insert. insert a s = has_insert. insert a ∅ ∪ s :=
386
386
ext (λ x, by rw [mem_insert_iff, mem_union_iff, mem_singleton_iff])
387
387
388
- theorem insert_union (a : α) (s t : finset α) : insert a (s ∪ t) = insert a s ∪ t :=
389
- by rewrite [insert_eq, insert_eq a s, union_assoc]
388
+ theorem insert_union (a : α) (s t : finset α) : has_insert. insert a (s ∪ t) = has_insert. insert a s ∪ t :=
389
+ by rw [insert_eq, insert_eq a s, union_assoc]
390
390
391
391
end union
392
392
@@ -444,20 +444,20 @@ calc empty ∩ s = s ∩ empty : inter_comm _ _
444
444
... = empty : inter_empty _
445
445
446
446
theorem singleton_inter_of_mem {a : α} {s : finset α} (H : a ∈ s) :
447
- insert a ∅ ∩ s = insert a ∅ :=
447
+ has_insert. insert a ∅ ∩ s = has_insert. insert a ∅ :=
448
448
ext (λ x,
449
449
begin
450
- rewrite [mem_inter_iff, mem_singleton_iff],
450
+ rw [mem_inter_iff, mem_singleton_iff],
451
451
exact iff.intro
452
452
(λ h, h.left)
453
453
(λ h, ⟨h, (eq.subst (eq.symm h) H)⟩)
454
454
end )
455
455
456
456
theorem singleton_inter_of_not_mem {a : α} {s : finset α} (H : a ∉ s) :
457
- insert a ∅ ∩ s = (∅ : finset α) :=
457
+ has_insert. insert a ∅ ∩ s = (∅ : finset α) :=
458
458
ext (λ x,
459
459
begin
460
- rewrite [mem_inter_iff, mem_singleton_iff, mem_empty_iff],
460
+ rw [mem_inter_iff, mem_singleton_iff, mem_empty_iff],
461
461
exact iff.intro
462
462
(λ h, H (eq.subst h.left h.right))
463
463
(false.elim)
@@ -526,7 +526,7 @@ theorem eq_empty_of_subset_empty {x : finset α} (H : x ⊆ empty) : x = empty :
526
526
subset.antisymm H (empty_subset x)
527
527
528
528
theorem subset_empty_iff (x : finset α) : x ⊆ empty ↔ x = empty :=
529
- iff.intro eq_empty_of_subset_empty (λ xeq, by rewrite xeq; apply subset.refl empty)
529
+ iff.intro eq_empty_of_subset_empty (λ xeq, by rw xeq; apply subset.refl empty)
530
530
531
531
section
532
532
variable [decidable_eq α]
@@ -544,7 +544,7 @@ theorem erase_subset (a : α) (s : finset α) : erase a s ⊆ s :=
544
544
begin
545
545
apply subset_of_forall,
546
546
intro x,
547
- rewrite mem_erase_iff,
547
+ rw mem_erase_iff,
548
548
intro H,
549
549
apply and.left H
550
550
end
@@ -555,21 +555,21 @@ eq_of_subset_of_subset (erase_subset _ _)
555
555
have x ≠ a, from λ H', anins (eq.subst H' xs),
556
556
mem_erase_of_ne_of_mem this xs))
557
557
558
- theorem erase_insert_subset (a : α) (s : finset α) : erase a (insert a s) ⊆ s :=
558
+ theorem erase_insert_subset (a : α) (s : finset α) : erase a (has_insert. insert a s) ⊆ s :=
559
559
decidable.by_cases
560
- (λ ains : a ∈ s, by rewrite [insert_eq_of_mem ains]; apply erase_subset)
561
- (λ nains : a ∉ s, by rewrite [erase_insert nains]; apply subset.refl)
560
+ (λ ains : a ∈ s, by rw [insert_eq_of_mem ains]; apply erase_subset)
561
+ (λ nains : a ∉ s, by rw [erase_insert nains]; apply subset.refl)
562
562
563
563
theorem erase_subset_of_subset_insert {a : α} {s t : finset α} (H : s ⊆ insert a t) :
564
564
erase a s ⊆ t :=
565
565
subset.trans (erase_subset_erase _ H) (erase_insert_subset _ _)
566
566
567
567
theorem insert_erase_subset (a : α) (s : finset α) : s ⊆ insert a (erase a s) :=
568
568
decidable.by_cases
569
- (λ ains : a ∈ s, by rewrite [insert_erase ains]; apply subset.refl)
570
- (λ nains : a ∉ s, by rewrite [erase_eq_of_not_mem nains]; apply subset_insert)
569
+ (λ ains : a ∈ s, by rw [insert_erase ains]; apply subset.refl)
570
+ (λ nains : a ∉ s, by rw [erase_eq_of_not_mem nains]; apply subset_insert)
571
571
572
- theorem insert_subset_insert (a : α) {s t : finset α} (H : s ⊆ t) : insert a s ⊆ insert a t :=
572
+ theorem insert_subset_insert (a : α) {s t : finset α} (H : s ⊆ t) : has_insert. insert a s ⊆ has_insert. insert a t :=
573
573
begin
574
574
apply subset_of_forall,
575
575
intro x,
@@ -614,7 +614,7 @@ end upto
614
614
615
615
theorem upto_zero : upto 0 = empty := rfl
616
616
617
- theorem upto_succ (n : ℕ) : upto (succ n) = upto n ∪ insert n ∅ :=
617
+ theorem upto_succ (n : ℕ) : upto (succ n) = upto n ∪ has_insert. insert n ∅ :=
618
618
begin
619
619
apply ext, intro x,
620
620
rw [mem_union_iff], repeat {rw mem_upto_iff},
@@ -625,14 +625,14 @@ begin
625
625
end
626
626
627
627
/- useful rules for calculations with quantifiers -/
628
- theorem exists_mem_empty_iff {α : Type } (p : α → Prop ) : (∃ x, mem x empty ∧ p x) ↔ false :=
628
+ theorem exists_mem_empty_iff (p : α → Prop ) : (∃ x, x ∈ (∅ : finset α) ∧ p x) ↔ false :=
629
629
iff.intro
630
630
(λ H,
631
631
let ⟨x,H1⟩ := H in
632
632
not_mem_empty α (H1.left))
633
633
(λ H, false.elim H)
634
634
635
- theorem exists_mem_insert_iff {α : Type } [d : decidable_eq α]
635
+ theorem exists_mem_insert_iff [d : decidable_eq α]
636
636
(a : α) (s : finset α) (p : α → Prop ) :
637
637
(∃ x, x ∈ insert a s ∧ p x) ↔ p a ∨ (∃ x, x ∈ s ∧ p x) :=
638
638
iff.intro
@@ -646,10 +646,10 @@ iff.intro
646
646
(λ l, ⟨a, ⟨mem_insert _ _, l⟩⟩)
647
647
(λ r, let ⟨x,H2,H3⟩ := r in ⟨x, ⟨mem_insert_of_mem _ H2, H3⟩⟩))
648
648
649
- theorem forall_mem_empty_iff {α : Type } (p : α → Prop ) : (∀ x, mem x empty → p x) ↔ true :=
650
- iff.intro (λ H, trivial) (λ H x H', absurd H' (not_mem_empty α ))
649
+ theorem forall_mem_empty_iff (p : α → Prop ) : (∀ x, x ∈ (∅ : finset α) → p x) ↔ true :=
650
+ iff.intro (λ H, trivial) (λ H x H', absurd H' (not_mem_empty _ ))
651
651
652
- theorem forall_mem_insert_iff {α : Type } [d : decidable_eq α]
652
+ theorem forall_mem_insert_iff [d : decidable_eq α]
653
653
(a : α) (s : finset α) (p : α → Prop ) :
654
654
(∀ x, x ∈ insert a s → p x) ↔ p a ∧ (∀ x, x ∈ s → p x) :=
655
655
iff.intro
0 commit comments