@@ -64,20 +64,20 @@ multiset.decidable_mem _ _
64
64
/-! ### set coercion -/
65
65
66
66
/-- Convert a finset to a set in the natural way. -/
67
- instance : has_lift (finset α) (set α) := ⟨λ s, {x | x ∈ s}⟩
67
+ instance : has_coe_t (finset α) (set α) := ⟨λ s, {x | x ∈ s}⟩
68
68
69
- @[simp, norm_cast] lemma mem_coe {a : α} {s : finset α} : a ∈ (↑ s : set α) ↔ a ∈ s := iff.rfl
69
+ @[simp, norm_cast] lemma mem_coe {a : α} {s : finset α} : a ∈ (s : set α) ↔ a ∈ s := iff.rfl
70
70
71
- @[simp] lemma set_of_mem {α} {s : finset α} : {a | a ∈ s} = ↑ s := rfl
71
+ @[simp] lemma set_of_mem {α} {s : finset α} : {a | a ∈ s} = s := rfl
72
72
73
- @[simp] lemma coe_mem {s : finset α} (x : (↑ s : set α)) : ↑x ∈ s := x.2
73
+ @[simp] lemma coe_mem {s : finset α} (x : (s : set α)) : ↑x ∈ s := x.2
74
74
75
- @[simp] lemma mk_coe {s : finset α} (x : (↑ s : set α)) {h} :
76
- (⟨↑ x, h⟩ : (↑ s : set α)) = x :=
77
- by { apply subtype.eq, refl, }
75
+ @[simp] lemma mk_coe {s : finset α} (x : (s : set α)) {h} :
76
+ (⟨x, h⟩ : (s : set α)) = x :=
77
+ subtype.coe_eta _ _
78
78
79
79
instance decidable_mem' [decidable_eq α] (a : α) (s : finset α) :
80
- decidable (a ∈ (↑ s : set α)) := s.decidable_mem _
80
+ decidable (a ∈ (s : set α)) := s.decidable_mem _
81
81
82
82
/-! ### extensionality -/
83
83
theorem ext_iff {s₁ s₂ : finset α} : s₁ = s₂ ↔ ∀ a, a ∈ s₁ ↔ a ∈ s₂ :=
@@ -87,7 +87,7 @@ val_inj.symm.trans $ nodup_ext s₁.2 s₂.2
87
87
theorem ext {s₁ s₂ : finset α} : (∀ a, a ∈ s₁ ↔ a ∈ s₂) → s₁ = s₂ :=
88
88
ext_iff.2
89
89
90
- @[simp, norm_cast] theorem coe_inj {s₁ s₂ : finset α} : (↑ s₁ : set α) = ↑ s₂ ↔ s₁ = s₂ :=
90
+ @[simp, norm_cast] theorem coe_inj {s₁ s₂ : finset α} : (s₁ : set α) = s₂ ↔ s₁ = s₂ :=
91
91
set.ext_iff.trans ext_iff.symm
92
92
93
93
lemma coe_injective {α} : function.injective (coe : finset α → set α) :=
@@ -119,7 +119,7 @@ ext $ λ a, ⟨@H₁ a, @H₂ a⟩
119
119
theorem subset_iff {s₁ s₂ : finset α} : s₁ ⊆ s₂ ↔ ∀ ⦃x⦄, x ∈ s₁ → x ∈ s₂ := iff.rfl
120
120
121
121
@[simp, norm_cast] theorem coe_subset {s₁ s₂ : finset α} :
122
- (↑ s₁ : set α) ⊆ ↑ s₂ ↔ s₁ ⊆ s₂ := iff.rfl
122
+ (s₁ : set α) ⊆ s₂ ↔ s₁ ⊆ s₂ := iff.rfl
123
123
124
124
@[simp] theorem val_le_iff {s₁ s₂ : finset α} : s₁.1 ≤ s₂.1 ↔ s₁ ⊆ s₂ := le_iff_subset s₁.2
125
125
@@ -138,8 +138,8 @@ le_antisymm_iff
138
138
@[simp] theorem le_iff_subset {s₁ s₂ : finset α} : s₁ ≤ s₂ ↔ s₁ ⊆ s₂ := iff.rfl
139
139
@[simp] theorem lt_iff_ssubset {s₁ s₂ : finset α} : s₁ < s₂ ↔ s₁ ⊂ s₂ := iff.rfl
140
140
141
- @[simp, norm_cast] lemma coe_ssubset {s₁ s₂ : finset α} : (↑ s₁ : set α) ⊂ ↑ s₂ ↔ s₁ ⊂ s₂ :=
142
- show (↑ s₁ : set α) ⊂ ↑ s₂ ↔ s₁ ⊆ s₂ ∧ ¬s₂ ⊆ s₁,
141
+ @[simp, norm_cast] lemma coe_ssubset {s₁ s₂ : finset α} : (s₁ : set α) ⊂ s₂ ↔ s₁ ⊂ s₂ :=
142
+ show (s₁ : set α) ⊂ s₂ ↔ s₁ ⊆ s₂ ∧ ¬s₂ ⊆ s₁,
143
143
by simp only [set.ssubset_def, finset.coe_subset]
144
144
145
145
@[simp] theorem val_lt_iff {s₁ s₂ : finset α} : s₁.1 < s₂.1 ↔ s₁ ⊂ s₂ :=
@@ -155,7 +155,7 @@ in theorem assumptions instead of `∃ x, x ∈ s` or `s ≠ ∅` as it gives ac
155
155
to the dot notation. -/
156
156
protected def nonempty (s : finset α) : Prop := ∃ x:α, x ∈ s
157
157
158
- @[simp, norm_cast] lemma coe_nonempty {s : finset α} : (↑ s:set α).nonempty ↔ s.nonempty := iff.rfl
158
+ @[simp, norm_cast] lemma coe_nonempty {s : finset α} : (s:set α).nonempty ↔ s.nonempty := iff.rfl
159
159
160
160
lemma nonempty.bex {s : finset α} (h : s.nonempty) : ∃ x:α, x ∈ s := h
161
161
@@ -207,7 +207,7 @@ theorem nonempty_iff_ne_empty {s : finset α} : s.nonempty ↔ s ≠ ∅ :=
207
207
theorem eq_empty_or_nonempty (s : finset α) : s = ∅ ∨ s.nonempty :=
208
208
classical.by_cases or.inl (λ h, or.inr (nonempty_of_ne_empty h))
209
209
210
- @[simp] lemma coe_empty : ↑( ∅ : finset α) = (∅ : set α) := rfl
210
+ @[simp] lemma coe_empty : (( ∅ : finset α) : set α) = ∅ := rfl
211
211
212
212
/-- A `finset` for an empty type is empty. -/
213
213
lemma eq_empty_of_not_nonempty (h : ¬ nonempty α) (s : finset α) : s = ∅ :=
@@ -236,7 +236,8 @@ theorem singleton_nonempty (a : α) : ({a} : finset α).nonempty := ⟨a, mem_si
236
236
237
237
@[simp] theorem singleton_ne_empty (a : α) : ({a} : finset α) ≠ ∅ := (singleton_nonempty a).ne_empty
238
238
239
- @[simp] lemma coe_singleton (a : α) : ↑({a} : finset α) = ({a} : set α) := by { ext, simp }
239
+ @[simp, norm_cast] lemma coe_singleton (a : α) : (({a} : finset α) : set α) = {a} :=
240
+ by { ext, simp }
240
241
241
242
lemma eq_singleton_iff_unique_mem {s : finset α} {a : α} :
242
243
s = {a} ↔ a ∈ s ∧ ∀ x ∈ s, x = a :=
@@ -324,7 +325,7 @@ theorem mem_of_mem_insert_of_ne {a b : α} {s : finset α} (h : b ∈ insert a s
324
325
ext $ λ a, by simp
325
326
326
327
@[simp, norm_cast] lemma coe_insert (a : α) (s : finset α) :
327
- ↑(insert a s) = (insert a ↑ s : set α) :=
328
+ ↑(insert a s) = (insert a s : set α) :=
328
329
set.ext $ λ x, by simp only [mem_coe, mem_insert, set.mem_insert_iff]
329
330
330
331
instance : is_lawful_singleton α (finset α) := ⟨λ a, by { ext, simp }⟩
@@ -364,7 +365,7 @@ theorem insert_subset_insert (a : α) {s t : finset α} (h : s ⊆ t) : insert a
364
365
insert_subset.2 ⟨mem_insert_self _ _, subset.trans h (subset_insert _ _)⟩
365
366
366
367
lemma ssubset_iff {s t : finset α} : s ⊂ t ↔ (∃a ∉ s, insert a s ⊆ t) :=
367
- by exact_mod_cast @set.ssubset_iff_insert α ↑s ↑ t
368
+ by exact_mod_cast @set.ssubset_iff_insert α s t
368
369
369
370
lemma ssubset_insert {s : finset α} {a : α} (h : a ∉ s) : s ⊂ insert a s :=
370
371
ssubset_iff.mpr ⟨a, h, subset.refl _⟩
@@ -432,7 +433,7 @@ theorem not_mem_union {a : α} {s₁ s₂ : finset α} : a ∉ s₁ ∪ s₂ ↔
432
433
by rw [mem_union, not_or_distrib]
433
434
434
435
@[simp, norm_cast]
435
- lemma coe_union (s₁ s₂ : finset α) : ↑(s₁ ∪ s₂) = (↑ s₁ ∪ ↑ s₂ : set α) := set.ext $ λ x, mem_union
436
+ lemma coe_union (s₁ s₂ : finset α) : ↑(s₁ ∪ s₂) = (s₁ ∪ s₂ : set α) := set.ext $ λ x, mem_union
436
437
437
438
theorem union_subset {s₁ s₂ s₃ : finset α} (h₁ : s₁ ⊆ s₃) (h₂ : s₂ ⊆ s₃) : s₁ ∪ s₂ ⊆ s₃ :=
438
439
val_le_iff.1 (ndunion_le.2 ⟨h₁, val_le_iff.2 h₂⟩)
@@ -538,7 +539,7 @@ theorem subset_inter {s₁ s₂ s₃ : finset α} : s₁ ⊆ s₂ → s₁ ⊆ s
538
539
by simp only [subset_iff, mem_inter] {contextual:=tt}; intros; split; trivial
539
540
540
541
@[simp, norm_cast]
541
- lemma coe_inter (s₁ s₂ : finset α) : ↑(s₁ ∩ s₂) = (↑ s₁ ∩ ↑ s₂ : set α) := set.ext $ λ _, mem_inter
542
+ lemma coe_inter (s₁ s₂ : finset α) : ↑(s₁ ∩ s₂) = (s₁ ∩ s₂ : set α) := set.ext $ λ _, mem_inter
542
543
543
544
@[simp] theorem union_inter_cancel_left {s t : finset α} : (s ∪ t) ∩ s = s :=
544
545
by rw [← coe_inj, coe_inter, coe_union, set.union_inter_cancel_left]
@@ -697,7 +698,7 @@ val_le_iff.1 $ erase_le_erase _ $ val_le_iff.2 h
697
698
698
699
theorem erase_subset (a : α) (s : finset α) : erase s a ⊆ s := erase_subset _ _
699
700
700
- @[simp, norm_cast] lemma coe_erase (a : α) (s : finset α) : ↑(erase s a) = (↑ s \ {a} : set α) :=
701
+ @[simp, norm_cast] lemma coe_erase (a : α) (s : finset α) : ↑(erase s a) = (s \ {a} : set α) :=
701
702
set.ext $ λ _, mem_erase.trans $ by rw [and_comm, set.mem_diff, set.mem_singleton_iff]; refl
702
703
703
704
lemma erase_ssubset {a : α} {s : finset α} (h : a ∈ s) : s.erase a ⊂ s :=
@@ -776,7 +777,7 @@ theorem sdiff_subset_self {s₁ s₂ : finset α} : s₁ \ s₂ ⊆ s₁ :=
776
777
suffices s₁ \ s₂ ⊆ s₁ \ ∅, by simpa [sdiff_empty] using this ,
777
778
sdiff_subset_sdiff (subset.refl _) (empty_subset _)
778
779
779
- @[simp, norm_cast] lemma coe_sdiff (s₁ s₂ : finset α) : ↑(s₁ \ s₂) = (↑ s₁ \ ↑ s₂ : set α) :=
780
+ @[simp, norm_cast] lemma coe_sdiff (s₁ s₂ : finset α) : ↑(s₁ \ s₂) = (s₁ \ s₂ : set α) :=
780
781
set.ext $ λ _, mem_sdiff
781
782
782
783
@[simp] theorem union_sdiff_self_eq_union {s t : finset α} : s ∪ (t \ s) = s ∪ t :=
@@ -805,14 +806,14 @@ lemma insert_sdiff_of_not_mem (s : finset α) {t : finset α} {x : α} (h : x
805
806
(insert x s) \ t = insert x (s \ t) :=
806
807
begin
807
808
rw [← coe_inj, coe_insert, coe_sdiff, coe_sdiff, coe_insert],
808
- exact set.insert_diff_of_not_mem ↑ s h
809
+ exact set.insert_diff_of_not_mem s h
809
810
end
810
811
811
812
lemma insert_sdiff_of_mem (s : finset α) {t : finset α} {x : α} (h : x ∈ t) :
812
813
(insert x s) \ t = s \ t :=
813
814
begin
814
815
rw [← coe_inj, coe_sdiff, coe_sdiff, coe_insert],
815
- exact set.insert_diff_of_mem ↑ s h
816
+ exact set.insert_diff_of_mem s h
816
817
end
817
818
818
819
@[simp] lemma insert_sdiff_insert (s t : finset α) (x : α) :
@@ -887,8 +888,8 @@ by { ext i, simp [piecewise] }
887
888
888
889
variable [∀j, decidable (j ∈ s)]
889
890
890
- @[norm_cast] lemma piecewise_coe [∀j, decidable (j ∈ (↑ s : set α))] :
891
- (↑ s : set α).piecewise f g = s.piecewise f g :=
891
+ @[norm_cast] lemma piecewise_coe [∀j, decidable (j ∈ (s : set α))] :
892
+ (s : set α).piecewise f g = s.piecewise f g :=
892
893
by { ext, congr }
893
894
894
895
@[simp, priority 980 ]
0 commit comments