Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit b64eb68

Browse files
committed
refactor(data/finset): use generic set notation for finsets
1 parent 5292cf1 commit b64eb68

File tree

1 file changed

+42
-42
lines changed

1 file changed

+42
-42
lines changed

data/finset/basic.lean

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@ quot.lift_on s (λ l, a ∈ l.1)
7777

7878
instance : has_mem α (finset α) := ⟨mem⟩
7979

80-
theorem mem_of_mem_list {a : α} {l : nodup_list α} : a ∈ l.1mem a ⟦l⟧ :=
80+
theorem mem_of_mem_list {a : α} {l : nodup_list α} : a ∈ l.1a ∈ @id (finset α) ⟦l⟧ :=
8181
λ ainl, ainl
8282

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 :=
8484
λ ainl, ainl
8585

8686
instance decidable_mem [h : decidable_eq α] : ∀ (a : α) (s : finset α), decidable (a ∈ s) :=
@@ -147,7 +147,7 @@ quot.lift_on s
147147

148148
instance : has_insert α (finset α) := ⟨insert⟩
149149

150-
theorem mem_insert (a : α) (s : finset α) : a ∈ insert a s :=
150+
theorem mem_insert (a : α) (s : finset α) : a ∈ has_insert.insert a s :=
151151
quot.induction_on s
152152
(λ l : nodup_list α, mem_to_finset_of_nodup _ (mem_insert_self _ _))
153153

@@ -161,36 +161,36 @@ quot.induction_on s (λ l : nodup_list α, λ H, list.eq_or_mem_of_mem_insert H)
161161
theorem mem_of_mem_insert_of_ne {x a : α} {s : finset α} (xin : x ∈ insert a s) : x ≠ a → x ∈ s :=
162162
or_resolve_right (eq_or_mem_of_mem_insert xin)
163163

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) :=
165165
iff.intro eq_or_mem_of_mem_insert
166166
(λ h, or.elim h (λ l, by rw l; apply mem_insert) (λ r, mem_insert_of_mem _ r))
167167

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]
170170

171-
theorem mem_singleton (a : α) : a ∈ insert a ∅ := mem_insert a ∅
171+
theorem mem_singleton (a : α) : a ∈ ({a} : finset α) := mem_insert a ∅
172172

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
175175

176176
theorem eq_of_mem_singleton {x a : α} (H : x ∈ insert a ∅) : x = a := iff.mp (mem_singleton_iff _ _) H
177177

178178
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,
180180
eq_of_mem_singleton this
181181

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 :=
183183
ext (λ x, by rw mem_insert_iff; apply or_iff_right_of_imp; intro eq; rw eq; assumption)
184184

185-
theorem singleton_ne_empty (a : α) : insert a ∅ ≠ ∅ :=
185+
theorem singleton_ne_empty (a : α) : ({a} : finset α) ≠ ∅ :=
186186
begin
187187
intro H,
188188
apply not_mem_empty a,
189-
rewrite ←H,
189+
rw ←H,
190190
apply mem_insert
191191
end
192192

193-
theorem pair_eq_singleton (a : α) : insert a (insert a ∅) = insert a ∅ :=
193+
theorem pair_eq_singleton (a : α) : ({a, a} : finset α) = {a} :=
194194
by rw [insert_eq_of_mem]; apply mem_singleton
195195

196196
-- useful in proofs by induction
@@ -199,7 +199,7 @@ theorem forall_of_forall_insert {p : α → Prop} {a : α} {s : finset α}
199199
∀ x, x ∈ s → p x :=
200200
λ x xs, H x (mem_insert_of_mem _ xs)
201201

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) :=
203203
ext (λ a, begin repeat {rw mem_insert_iff}, rw [propext or.left_comm] end)
204204

205205
theorem card_insert_of_mem {a : α} {s : finset α} : a ∈ s → card (insert a s) = card s :=
@@ -212,15 +212,15 @@ quot.induction_on s
212212

213213
theorem card_insert_le (a : α) (s : finset α) :
214214
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]
217217

218218
theorem perm_insert_cons_of_not_mem [decidable_eq α] {a : α} {l : list α} (h : a ∉ l) : perm (list.insert a l) (a :: l) :=
219219
have list.insert a l = a :: l, from if_neg h, by rw this
220220

221221
@[recursor 6] protected theorem induction {p : finset α → Prop}
222222
(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)) :
224224
∀s, p s :=
225225
λ s,
226226
quot.induction_on s
@@ -234,7 +234,7 @@ quot.induction_on s
234234
have aux₁: a ∉ l', from not_mem_of_nodup_cons nodup_al',
235235
have ndl' : nodup l', from nodup_of_nodup_cons nodup_al',
236236
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₁,
238238
have p' : p (insert a (quot.mk _ (subtype.mk l' ndl'))), from H2 this p1,
239239
have list.insert a l' = a :: l', from if_neg aux₁,
240240
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 α)
251251
finset.induction H1 H2 s
252252

253253
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
255255
(λ h, absurd rfl h)
256256
(by intros a s nin ih h; existsi a; apply mem_insert)
257257

@@ -298,7 +298,7 @@ iff.intro
298298
(λ H, mem_erase_of_ne_of_mem (and.right H) (and.left H))
299299

300300
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 :=
302302
λ anins, finset.ext (λ b, by_cases
303303
(λ beqa : b = a, iff.intro
304304
(λ bin, by subst b; exact absurd bin (not_mem_erase _ _))
@@ -382,11 +382,11 @@ theorem empty_union (s : finset α) : empty ∪ s = s :=
382382
calc empty ∪ s = s ∪ empty : union_comm _ _
383383
... = s : union_empty _
384384

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 :=
386386
ext (λ x, by rw [mem_insert_iff, mem_union_iff, mem_singleton_iff])
387387

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]
390390

391391
end union
392392

@@ -444,20 +444,20 @@ calc empty ∩ s = s ∩ empty : inter_comm _ _
444444
... = empty : inter_empty _
445445

446446
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 ∅ :=
448448
ext (λ x,
449449
begin
450-
rewrite [mem_inter_iff, mem_singleton_iff],
450+
rw [mem_inter_iff, mem_singleton_iff],
451451
exact iff.intro
452452
(λ h, h.left)
453453
(λ h, ⟨h, (eq.subst (eq.symm h) H)⟩)
454454
end)
455455

456456
theorem singleton_inter_of_not_mem {a : α} {s : finset α} (H : a ∉ s) :
457-
insert a ∅ ∩ s = (∅ : finset α) :=
457+
has_insert.insert a ∅ ∩ s = (∅ : finset α) :=
458458
ext (λ x,
459459
begin
460-
rewrite [mem_inter_iff, mem_singleton_iff, mem_empty_iff],
460+
rw [mem_inter_iff, mem_singleton_iff, mem_empty_iff],
461461
exact iff.intro
462462
(λ h, H (eq.subst h.left h.right))
463463
(false.elim)
@@ -526,7 +526,7 @@ theorem eq_empty_of_subset_empty {x : finset α} (H : x ⊆ empty) : x = empty :
526526
subset.antisymm H (empty_subset x)
527527

528528
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)
530530

531531
section
532532
variable [decidable_eq α]
@@ -544,7 +544,7 @@ theorem erase_subset (a : α) (s : finset α) : erase a s ⊆ s :=
544544
begin
545545
apply subset_of_forall,
546546
intro x,
547-
rewrite mem_erase_iff,
547+
rw mem_erase_iff,
548548
intro H,
549549
apply and.left H
550550
end
@@ -555,21 +555,21 @@ eq_of_subset_of_subset (erase_subset _ _)
555555
have x ≠ a, from λ H', anins (eq.subst H' xs),
556556
mem_erase_of_ne_of_mem this xs))
557557

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 :=
559559
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)
562562

563563
theorem erase_subset_of_subset_insert {a : α} {s t : finset α} (H : s ⊆ insert a t) :
564564
erase a s ⊆ t :=
565565
subset.trans (erase_subset_erase _ H) (erase_insert_subset _ _)
566566

567567
theorem insert_erase_subset (a : α) (s : finset α) : s ⊆ insert a (erase a s) :=
568568
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)
571571

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 :=
573573
begin
574574
apply subset_of_forall,
575575
intro x,
@@ -614,7 +614,7 @@ end upto
614614

615615
theorem upto_zero : upto 0 = empty := rfl
616616

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 ∅ :=
618618
begin
619619
apply ext, intro x,
620620
rw [mem_union_iff], repeat {rw mem_upto_iff},
@@ -625,14 +625,14 @@ begin
625625
end
626626

627627
/- 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 :=
629629
iff.intro
630630
(λ H,
631631
let ⟨x,H1⟩ := H in
632632
not_mem_empty α (H1.left))
633633
(λ H, false.elim H)
634634

635-
theorem exists_mem_insert_iff {α : Type} [d : decidable_eq α]
635+
theorem exists_mem_insert_iff [d : decidable_eq α]
636636
(a : α) (s : finset α) (p : α → Prop) :
637637
(∃ x, x ∈ insert a s ∧ p x) ↔ p a ∨ (∃ x, x ∈ s ∧ p x) :=
638638
iff.intro
@@ -646,10 +646,10 @@ iff.intro
646646
(λ l, ⟨a, ⟨mem_insert _ _, l⟩⟩)
647647
(λ r, let ⟨x,H2,H3⟩ := r in ⟨x, ⟨mem_insert_of_mem _ H2, H3⟩⟩))
648648

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 _))
651651

652-
theorem forall_mem_insert_iff {α : Type} [d : decidable_eq α]
652+
theorem forall_mem_insert_iff [d : decidable_eq α]
653653
(a : α) (s : finset α) (p : α → Prop) :
654654
(∀ x, x ∈ insert a s → p x) ↔ p a ∧ (∀ x, x ∈ s → p x) :=
655655
iff.intro

0 commit comments

Comments
 (0)