@@ -5,8 +5,9 @@ Author: Leonardo de Moura, Jeremy Avigad, Minchao Wu, Mario Carneiro
5
5
6
6
Finite sets.
7
7
-/
8
- import data.multiset order.boolean_algebra algebra.order_functions
9
- data.sigma.basic logic.embedding
8
+ import logic.embedding order.boolean_algebra algebra.order_functions
9
+ data.multiset data.sigma.basic data.set.lattice
10
+
10
11
open multiset subtype nat lattice
11
12
12
13
variables {α : Type *} {β : Type *} {γ : Type *}
@@ -341,9 +342,6 @@ by simp [subset_iff] {contextual:=tt}; finish
341
342
342
343
@[simp] theorem empty_inter (s : finset α) : ∅ ∩ s = ∅ := ext.2 $ by simp
343
344
344
- theorem inter_eq_empty_iff_disjoint {s₁ s₂ : finset α} : s₁ ∩ s₂ = ∅ ↔ s₁.1 .disjoint s₂.1 :=
345
- by rw ← val_eq_zero; simp [inter_eq_zero_iff_disjoint]
346
-
347
345
@[simp] theorem insert_inter_of_mem {s₁ s₂ : finset α} {a : α} (h : a ∈ s₂) :
348
346
insert a s₁ ∩ s₂ = insert a (s₁ ∩ s₂) :=
349
347
ext.2 $ by simp; intro x; constructor; finish
@@ -1272,8 +1270,62 @@ sort_eq _ _
1272
1270
1273
1271
@[simp] theorem sort_to_finset [decidable_eq α] (s : finset α) : (sort r s).to_finset = s :=
1274
1272
list.to_finset_eq (sort_nodup r s) ▸ eq_of_veq (sort_eq r s)
1273
+
1275
1274
end sort
1276
1275
1276
+ section disjoint
1277
+ variable [decidable_eq α]
1278
+
1279
+ theorem disjoint_iff_inter_eq_empty {s t : finset α} : disjoint s t ↔ s ∩ t = ∅ :=
1280
+ iff.rfl
1281
+
1282
+ theorem disjoint_left {s t : finset α} : disjoint s t ↔ ∀ {a}, a ∈ s → a ∉ t :=
1283
+ by simp [disjoint_iff_inter_eq_empty, ext, mem_inter]
1284
+
1285
+ theorem disjoint_right {s t : finset α} : disjoint s t ↔ ∀ {a}, a ∈ t → a ∉ s :=
1286
+ by rw [_root_.disjoint_comm, disjoint_left]
1287
+
1288
+ theorem disjoint_iff_ne {s t : finset α} : disjoint s t ↔ ∀ a ∈ s, ∀ b ∈ t, a ≠ b :=
1289
+ by simp [disjoint_left, imp_not_comm]
1290
+
1291
+ theorem disjoint_of_subset_left {s t u : finset α} (h : s ⊆ u) (d : disjoint u t) : disjoint s t :=
1292
+ disjoint_left.2 (λ x m₁, (disjoint_left.1 d) (h m₁))
1293
+
1294
+ theorem disjoint_of_subset_right {s t u : finset α} (h : t ⊆ u) (d : disjoint s u) : disjoint s t :=
1295
+ disjoint_right.2 (λ x m₁, (disjoint_right.1 d) (h m₁))
1296
+
1297
+ @[simp] theorem disjoint_empty_left (s : finset α) : disjoint ∅ s := bot_inf_eq
1298
+
1299
+ @[simp] theorem disjoint_empty_right (s : finset α) : disjoint s ∅ := inf_bot_eq
1300
+
1301
+ @[simp] theorem singleton_disjoint {s : finset α} {a : α} : disjoint (singleton a) s ↔ a ∉ s :=
1302
+ by simp [disjoint_left]; refl
1303
+
1304
+ @[simp] theorem disjoint_singleton {s : finset α} {a : α} : disjoint s (singleton a) ↔ a ∉ s :=
1305
+ by rw _root_.disjoint_comm; simp
1306
+
1307
+ @[simp] theorem disjoint_insert_left {a : α} {s t : finset α} :
1308
+ disjoint (insert a s) t ↔ a ∉ t ∧ disjoint s t :=
1309
+ by simp [disjoint_left, or_imp_distrib, forall_and_distrib]; refl
1310
+
1311
+ @[simp] theorem disjoint_insert_right {a : α} {s t : finset α} :
1312
+ disjoint s (insert a t) ↔ a ∉ s ∧ disjoint s t :=
1313
+ _root_.disjoint_comm.trans $ by simp [disjoint_insert_left]
1314
+
1315
+ @[simp] theorem disjoint_union_left {s t u : finset α} :
1316
+ disjoint (s ∪ t) u ↔ disjoint s u ∧ disjoint t u :=
1317
+ by simp [disjoint_left, or_imp_distrib, forall_and_distrib]
1318
+
1319
+ @[simp] theorem disjoint_union_right {s t u : finset α} :
1320
+ disjoint s (t ∪ u) ↔ disjoint s t ∧ disjoint s u :=
1321
+ by simp [disjoint_right, or_imp_distrib, forall_and_distrib]
1322
+
1323
+ @[simp] theorem card_disjoint_union {s t : finset α} :
1324
+ disjoint s t → card (s ∪ t) = card s + card t :=
1325
+ finset.induction_on s (by simp) $ by simp {contextual := tt}
1326
+
1327
+ end disjoint
1328
+
1277
1329
theorem sort_sorted_lt [decidable_linear_order α] (s : finset α) :
1278
1330
list.sorted (<) (sort (≤) s) :=
1279
1331
(sort_sorted _ _).imp₂ (@lt_of_le_of_ne _ _) (sort_nodup _ _)
0 commit comments