order.partition.finpartition
⟷
Mathlib.Order.Partition.Finpartition
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -625,7 +625,7 @@ theorem mem_atomise :
t.Nonempty ∧ ∃ (Q : _) (_ : Q ⊆ F), (s.filterₓ fun i => ∀ u ∈ F, u ∈ Q ↔ i ∈ u) = t :=
by
simp only [atomise, of_erase, bot_eq_empty, mem_erase, mem_image, nonempty_iff_ne_empty,
- mem_singleton, and_comm', mem_powerset, exists_prop]
+ mem_singleton, and_comm, mem_powerset, exists_prop]
#align finpartition.mem_atomise Finpartition.mem_atomise
-/
@@ -668,7 +668,7 @@ theorem card_filter_atomise_le_two_pow (ht : t ∈ F) :
· refine' (card_le_of_subset h).trans (card_image_le.trans _)
rw [card_powerset, card_erase_of_mem ht]
rw [subset_iff]
- simp only [mem_erase, mem_sdiff, mem_powerset, mem_image, exists_prop, mem_filter, and_assoc',
+ simp only [mem_erase, mem_sdiff, mem_powerset, mem_image, exists_prop, mem_filter, and_assoc,
Finset.Nonempty, exists_imp, and_imp, mem_atomise, forall_apply_eq_imp_iff₂]
rintro P' i hi P PQ rfl hy₂ j hj
refine' ⟨P.erase t, erase_subset_erase _ PQ, _⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -618,7 +618,7 @@ def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
variable {F : Finset (Finset α)}
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (Q «expr ⊆ » F) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (Q «expr ⊆ » F) -/
#print Finpartition.mem_atomise /-
theorem mem_atomise :
t ∈ (atomise s F).parts ↔
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -275,9 +275,9 @@ instance [Decidable (a = ⊥)] : OrderTop (Finpartition a)
theorem parts_top_subset (a : α) [Decidable (a = ⊥)] : (⊤ : Finpartition a).parts ⊆ {a} :=
by
intro b hb
- change b ∈ Finpartition.parts (dite _ _ _) at hb
- split_ifs at hb
- · simp only [copy_parts, empty_parts, not_mem_empty] at hb
+ change b ∈ Finpartition.parts (dite _ _ _) at hb
+ split_ifs at hb
+ · simp only [copy_parts, empty_parts, not_mem_empty] at hb
exact hb.elim
· exact hb
#align finpartition.parts_top_subset Finpartition.parts_top_subset
@@ -338,12 +338,12 @@ instance : SemilatticeInf (Finpartition a) :=
inf_le_left := fun P Q b hb =>
by
obtain ⟨c, hc, rfl⟩ := mem_image.1 (mem_of_mem_erase hb)
- rw [mem_product] at hc
+ rw [mem_product] at hc
exact ⟨c.1, hc.1, inf_le_left⟩
inf_le_right := fun P Q b hb =>
by
obtain ⟨c, hc, rfl⟩ := mem_image.1 (mem_of_mem_erase hb)
- rw [mem_product] at hc
+ rw [mem_product] at hc
exact ⟨c.2, hc.2, inf_le_right⟩
le_inf := fun P Q R hPQ hPR b hb =>
by
@@ -402,7 +402,7 @@ def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finparti
SupIndep := by
rw [sup_indep_iff_pairwise_disjoint]
rintro a ha b hb h
- rw [Finset.mem_coe, Finset.mem_biUnion] at ha hb
+ rw [Finset.mem_coe, Finset.mem_biUnion] at ha hb
obtain ⟨⟨A, hA⟩, -, ha⟩ := ha
obtain ⟨⟨B, hB⟩, -, hb⟩ := hb
obtain rfl | hAB := eq_or_ne A B
@@ -413,7 +413,7 @@ def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finparti
rw [eq_comm, ← Finset.sup_attach]
exact sup_congr rfl fun b hb => (Q b.1 b.2).sup_parts.symm
not_bot_mem h := by
- rw [Finset.mem_biUnion] at h
+ rw [Finset.mem_biUnion] at h
obtain ⟨⟨A, hA⟩, -, h⟩ := h
exact (Q A hA).not_bot_mem h
#align finpartition.bind Finpartition.bind
@@ -439,7 +439,7 @@ theorem card_bind (Q : ∀ i ∈ P.parts, Finpartition i) :
rintro ⟨b, hb⟩ - ⟨c, hc⟩ - hbc
rw [Finset.disjoint_left]
rintro d hdb hdc
- rw [Ne.def, Subtype.mk_eq_mk] at hbc
+ rw [Ne.def, Subtype.mk_eq_mk] at hbc
exact
(Q b hb).ne_bot hdb
(eq_bot_iff.2 <|
@@ -515,7 +515,7 @@ theorem nonempty_of_mem_parts {a : Finset α} (ha : a ∈ P.parts) : a.Nonempty
-/
#print Finpartition.exists_mem /-
-theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by simp_rw [← P.sup_parts] at ha ;
+theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by simp_rw [← P.sup_parts] at ha;
exact mem_sup.1 ha
#align finpartition.exists_mem Finpartition.exists_mem
-/
@@ -569,7 +569,7 @@ theorem mem_bot_iff : t ∈ (⊥ : Finpartition s).parts ↔ ∃ a ∈ s, {a} =
instance (s : Finset α) : OrderBot (Finpartition s) :=
{ Finpartition.hasBot s with
bot_le := fun P t ht => by
- rw [mem_bot_iff] at ht
+ rw [mem_bot_iff] at ht
obtain ⟨a, ha, rfl⟩ := ht
obtain ⟨t, ht, hat⟩ := P.exists_mem ha
exact ⟨t, ht, singleton_subset_iff.2 hat⟩ }
@@ -590,20 +590,20 @@ def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
(Set.PairwiseDisjoint.supIndep fun x hx y hy h =>
disjoint_left.mpr fun z hz1 hz2 =>
h (by
- rw [mem_coe, mem_image] at hx hy
+ rw [mem_coe, mem_image] at hx hy
obtain ⟨Q, hQ, rfl⟩ := hx
obtain ⟨R, hR, rfl⟩ := hy
suffices h : Q = R
· subst h
- rw [id, mem_filter] at hz1 hz2
- rw [mem_powerset] at hQ hR
+ rw [id, mem_filter] at hz1 hz2
+ rw [mem_powerset] at hQ hR
ext i
refine' ⟨fun hi => _, fun hi => _⟩
· rwa [hz2.2 _ (hQ hi), ← hz1.2 _ (hQ hi)]
· rwa [hz1.2 _ (hR hi), ← hz2.2 _ (hR hi)]))
(by
refine' (Finset.sup_le fun t ht => _).antisymm fun a ha => _
- · rw [mem_image] at ht
+ · rw [mem_image] at ht
obtain ⟨A, hA, rfl⟩ := ht
exact s.filter_subset _
· rw [mem_sup]
@@ -653,7 +653,7 @@ theorem biUnion_filter_atomise (ht : t ∈ F) (hts : t ⊆ s) :
obtain ⟨u, hu, hau⟩ := (atomise s F).exists_mem (hts ha)
refine' ⟨u, mem_filter.2 ⟨hu, fun b hb => _, _, hau⟩, hau⟩
obtain ⟨Q, hQ, rfl⟩ := (mem_atomise.1 hu).2
- rw [mem_filter] at hau hb
+ rw [mem_filter] at hau hb
rwa [← hb.2 _ ht, hau.2 _ ht]
#align finpartition.bUnion_filter_atomise Finpartition.biUnion_filter_atomise
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -70,7 +70,7 @@ variable {α : Type _}
structure Finpartition [Lattice α] [OrderBot α] (a : α) where
parts : Finset α
SupIndep : parts.SupIndep id
- supParts : parts.sup id = a
+ sup_parts : parts.sup id = a
not_bot_mem : ⊥ ∉ parts
deriving DecidableEq
#align finpartition Finpartition
@@ -92,7 +92,7 @@ def ofErase [DecidableEq α] {a : α} (parts : Finset α) (sup_indep : parts.Sup
where
parts := parts.eraseₓ ⊥
SupIndep := sup_indep.Subset (erase_subset _ _)
- supParts := (sup_erase_bot _).trans sup_parts
+ sup_parts := (sup_erase_bot _).trans sup_parts
not_bot_mem := not_mem_erase _ _
#align finpartition.of_erase Finpartition.ofErase
-/
@@ -104,7 +104,7 @@ def ofSubset {a b : α} (P : Finpartition a) {parts : Finset α} (subset : parts
(sup_parts : parts.sup id = b) : Finpartition b :=
{ parts
SupIndep := P.SupIndep.Subset subset
- supParts
+ sup_parts
not_bot_mem := fun h => P.not_bot_mem (subset h) }
#align finpartition.of_subset Finpartition.ofSubset
-/
@@ -116,7 +116,7 @@ def copy {a b : α} (P : Finpartition a) (h : a = b) : Finpartition b
where
parts := P.parts
SupIndep := P.SupIndep
- supParts := h ▸ P.supParts
+ sup_parts := h ▸ P.sup_parts
not_bot_mem := P.not_bot_mem
#align finpartition.copy Finpartition.copy
-/
@@ -130,7 +130,7 @@ protected def empty : Finpartition (⊥ : α)
where
parts := ∅
SupIndep := supIndep_empty _
- supParts := Finset.sup_empty
+ sup_parts := Finset.sup_empty
not_bot_mem := not_mem_empty ⊥
#align finpartition.empty Finpartition.empty
-/
@@ -154,7 +154,7 @@ def indiscrete (ha : a ≠ ⊥) : Finpartition a
where
parts := {a}
SupIndep := supIndep_singleton _ _
- supParts := Finset.sup_singleton
+ sup_parts := Finset.sup_singleton
not_bot_mem h := ha (mem_singleton.1 h).symm
#align finpartition.indiscrete Finpartition.indiscrete
-/
@@ -163,7 +163,7 @@ variable (P : Finpartition a)
#print Finpartition.le /-
protected theorem le {b : α} (hb : b ∈ P.parts) : b ≤ a :=
- (le_sup hb).trans P.supParts.le
+ (le_sup hb).trans P.sup_parts.le
#align finpartition.le Finpartition.le
-/
@@ -408,10 +408,10 @@ def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finparti
obtain rfl | hAB := eq_or_ne A B
· exact (Q A hA).Disjoint ha hb h
· exact (P.disjoint hA hB hAB).mono ((Q A hA).le ha) ((Q B hB).le hb)
- supParts := by
+ sup_parts := by
simp_rw [sup_bUnion, ← P.sup_parts]
rw [eq_comm, ← Finset.sup_attach]
- exact sup_congr rfl fun b hb => (Q b.1 b.2).supParts.symm
+ exact sup_congr rfl fun b hb => (Q b.1 b.2).sup_parts.symm
not_bot_mem h := by
rw [Finset.mem_biUnion] at h
obtain ⟨⟨A, hA⟩, -, h⟩ := h
@@ -458,7 +458,7 @@ def extend (P : Finpartition a) (hb : b ≠ ⊥) (hab : Disjoint a b) (hc : a
SupIndep := by
rw [sup_indep_iff_pairwise_disjoint, coe_insert]
exact P.disjoint.insert fun d hd hbd => hab.symm.mono_right <| P.le hd
- supParts := by rwa [sup_insert, P.sup_parts, id, _root_.sup_comm]
+ sup_parts := by rwa [sup_insert, P.sup_parts, id, _root_.sup_comm]
not_bot_mem h := (mem_insert.1 h).elim hb.symm P.not_bot_mem
#align finpartition.extend Finpartition.extend
-/
@@ -522,7 +522,7 @@ theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by si
#print Finpartition.biUnion_parts /-
theorem biUnion_parts : P.parts.biUnion id = s :=
- (sup_eq_biUnion _ _).symm.trans P.supParts
+ (sup_eq_biUnion _ _).symm.trans P.sup_parts
#align finpartition.bUnion_parts Finpartition.biUnion_parts
-/
@@ -543,7 +543,7 @@ instance (s : Finset α) : Bot (Finpartition s) :=
(by
rw [Finset.coe_map]
exact finset.pairwise_disjoint_range_singleton.subset (Set.image_subset_range _ _))
- supParts := by rw [sup_map, comp.left_id, embedding.coe_fn_mk, Finset.sup_singleton']
+ sup_parts := by rw [sup_map, comp.left_id, embedding.coe_fn_mk, Finset.sup_singleton']
not_bot_mem := by simp }⟩
#print Finpartition.parts_bot /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -375,6 +375,14 @@ theorem exists_le_of_le {a b : α} {P Q : Finpartition a} (h : P ≤ Q) (hb : b
#print Finpartition.card_mono /-
theorem card_mono {a : α} {P Q : Finpartition a} (h : P ≤ Q) : Q.parts.card ≤ P.parts.card := by
classical
+ have : ∀ b ∈ Q.parts, ∃ c ∈ P.parts, c ≤ b := fun b => exists_le_of_le h
+ choose f hP hf using this
+ rw [← card_attach]
+ refine' card_le_card_of_inj_on (fun b => f _ b.2) (fun b _ => hP _ b.2) fun b hb c hc h => _
+ exact
+ Subtype.coe_injective
+ (Q.disjoint.elim b.2 c.2 fun H =>
+ P.ne_bot (hP _ b.2) <| disjoint_self.1 <| H.mono (hf _ b.2) <| h.le.trans <| hf _ c.2)
#align finpartition.card_mono Finpartition.card_mono
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -375,14 +375,6 @@ theorem exists_le_of_le {a b : α} {P Q : Finpartition a} (h : P ≤ Q) (hb : b
#print Finpartition.card_mono /-
theorem card_mono {a : α} {P Q : Finpartition a} (h : P ≤ Q) : Q.parts.card ≤ P.parts.card := by
classical
- have : ∀ b ∈ Q.parts, ∃ c ∈ P.parts, c ≤ b := fun b => exists_le_of_le h
- choose f hP hf using this
- rw [← card_attach]
- refine' card_le_card_of_inj_on (fun b => f _ b.2) (fun b _ => hP _ b.2) fun b hb c hc h => _
- exact
- Subtype.coe_injective
- (Q.disjoint.elim b.2 c.2 fun H =>
- P.ne_bot (hP _ b.2) <| disjoint_self.1 <| H.mono (hf _ b.2) <| h.le.trans <| hf _ c.2)
#align finpartition.card_mono Finpartition.card_mono
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -640,7 +640,7 @@ theorem atomise_empty (hs : s.Nonempty) : (atomise s ∅).parts = {s} :=
#print Finpartition.card_atomise_le /-
theorem card_atomise_le : (atomise s F).parts.card ≤ 2 ^ F.card :=
- (card_le_of_subset <| erase_subset _ _).trans <| Finset.card_image_le.trans (card_powerset _).le
+ (card_le_card <| erase_subset _ _).trans <| Finset.card_image_le.trans (card_powerset _).le
#align finpartition.card_atomise_le Finpartition.card_atomise_le
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -361,7 +361,7 @@ end Inf
#print Finpartition.exists_le_of_le /-
theorem exists_le_of_le {a b : α} {P Q : Finpartition a} (h : P ≤ Q) (hb : b ∈ Q.parts) :
∃ c ∈ P.parts, c ≤ b := by
- by_contra' H
+ by_contra! H
refine' Q.ne_bot hb (disjoint_self.1 <| Disjoint.mono_right (Q.le hb) _)
rw [← P.sup_parts, Finset.disjoint_sup_right]
rintro c hc
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2022 Yaël Dillies, Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies, Bhavik Mehta
-/
-import Mathbin.Algebra.BigOperators.Basic
-import Mathbin.Order.Atoms.Finite
-import Mathbin.Order.SupIndep
+import Algebra.BigOperators.Basic
+import Order.Atoms.Finite
+import Order.SupIndep
#align_import order.partition.finpartition from "leanprover-community/mathlib"@"0a0ec35061ed9960bf0e7ffb0335f44447b58977"
@@ -618,7 +618,7 @@ def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
variable {F : Finset (Finset α)}
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (Q «expr ⊆ » F) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (Q «expr ⊆ » F) -/
#print Finpartition.mem_atomise /-
theorem mem_atomise :
t ∈ (atomise s F).parts ↔
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2022 Yaël Dillies, Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies, Bhavik Mehta
-
-! This file was ported from Lean 3 source module order.partition.finpartition
-! leanprover-community/mathlib commit 0a0ec35061ed9960bf0e7ffb0335f44447b58977
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.BigOperators.Basic
import Mathbin.Order.Atoms.Finite
import Mathbin.Order.SupIndep
+#align_import order.partition.finpartition from "leanprover-community/mathlib"@"0a0ec35061ed9960bf0e7ffb0335f44447b58977"
+
/-!
# Finite partitions
@@ -621,7 +618,7 @@ def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
variable {F : Finset (Finset α)}
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (Q «expr ⊆ » F) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (Q «expr ⊆ » F) -/
#print Finpartition.mem_atomise /-
theorem mem_atomise :
t ∈ (atomise s F).parts ↔
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -126,6 +126,7 @@ def copy {a b : α} (P : Finpartition a) (h : a = b) : Finpartition b
variable (α)
+#print Finpartition.empty /-
/-- The empty finpartition. -/
@[simps]
protected def empty : Finpartition (⊥ : α)
@@ -135,17 +136,21 @@ protected def empty : Finpartition (⊥ : α)
supParts := Finset.sup_empty
not_bot_mem := not_mem_empty ⊥
#align finpartition.empty Finpartition.empty
+-/
instance : Inhabited (Finpartition (⊥ : α)) :=
⟨Finpartition.empty α⟩
+#print Finpartition.default_eq_empty /-
@[simp]
theorem default_eq_empty : (default : Finpartition (⊥ : α)) = Finpartition.empty α :=
rfl
#align finpartition.default_eq_empty Finpartition.default_eq_empty
+-/
variable {α} {a : α}
+#print Finpartition.indiscrete /-
/-- The finpartition in one part, aka indiscrete finpartition. -/
@[simps]
def indiscrete (ha : a ≠ ⊥) : Finpartition a
@@ -155,6 +160,7 @@ def indiscrete (ha : a ≠ ⊥) : Finpartition a
supParts := Finset.sup_singleton
not_bot_mem h := ha (mem_singleton.1 h).symm
#align finpartition.indiscrete Finpartition.indiscrete
+-/
variable (P : Finpartition a)
@@ -164,8 +170,10 @@ protected theorem le {b : α} (hb : b ∈ P.parts) : b ≤ a :=
#align finpartition.le Finpartition.le
-/
+#print Finpartition.ne_bot /-
theorem ne_bot {b : α} (hb : b ∈ P.parts) : b ≠ ⊥ := fun h => P.not_bot_mem <| h.subst hb
#align finpartition.ne_bot Finpartition.ne_bot
+-/
#print Finpartition.disjoint /-
protected theorem disjoint : (P.parts : Set α).PairwiseDisjoint id :=
@@ -175,6 +183,7 @@ protected theorem disjoint : (P.parts : Set α).PairwiseDisjoint id :=
variable {P}
+#print Finpartition.parts_eq_empty_iff /-
theorem parts_eq_empty_iff : P.parts = ∅ ↔ a = ⊥ :=
by
simp_rw [← P.sup_parts]
@@ -183,20 +192,26 @@ theorem parts_eq_empty_iff : P.parts = ∅ ↔ a = ⊥ :=
exact Finset.sup_empty
· rwa [← le_bot_iff.1 ((le_sup hb).trans h.le)]
#align finpartition.parts_eq_empty_iff Finpartition.parts_eq_empty_iff
+-/
+#print Finpartition.parts_nonempty_iff /-
theorem parts_nonempty_iff : P.parts.Nonempty ↔ a ≠ ⊥ := by
rw [nonempty_iff_ne_empty, not_iff_not, parts_eq_empty_iff]
#align finpartition.parts_nonempty_iff Finpartition.parts_nonempty_iff
+-/
+#print Finpartition.parts_nonempty /-
theorem parts_nonempty (P : Finpartition a) (ha : a ≠ ⊥) : P.parts.Nonempty :=
parts_nonempty_iff.2 ha
#align finpartition.parts_nonempty Finpartition.parts_nonempty
+-/
instance : Unique (Finpartition (⊥ : α)) :=
{ Finpartition.inhabited α with
uniq := fun P => by ext a;
exact iff_of_false (fun h => P.ne_bot h <| le_bot_iff.1 <| P.le h) (not_mem_empty a) }
+#print IsAtom.uniqueFinpartition /-
-- See note [reducible non instances]
/-- There's a unique partition of an atom. -/
@[reducible]
@@ -214,6 +229,7 @@ def IsAtom.uniqueFinpartition (ha : IsAtom a) : Unique (Finpartition a)
simp_rw [← h c hc]
exact hc
#align is_atom.unique_finpartition IsAtom.uniqueFinpartition
+-/
instance [Fintype α] [DecidableEq α] (a : α) : Fintype (Finpartition a) :=
@Fintype.ofSurjective { p : Finset α // p.SupIndep id ∧ p.sup id = a ∧ ⊥ ∉ p } (Finpartition a) _
@@ -258,6 +274,7 @@ instance [Decidable (a = ⊥)] : OrderTop (Finpartition a)
simpa [h, P.ne_bot hx] using P.le hx
· exact fun b hb => ⟨a, mem_singleton_self _, P.le hb⟩
+#print Finpartition.parts_top_subset /-
theorem parts_top_subset (a : α) [Decidable (a = ⊥)] : (⊤ : Finpartition a).parts ⊆ {a} :=
by
intro b hb
@@ -267,11 +284,14 @@ theorem parts_top_subset (a : α) [Decidable (a = ⊥)] : (⊤ : Finpartition a)
exact hb.elim
· exact hb
#align finpartition.parts_top_subset Finpartition.parts_top_subset
+-/
+#print Finpartition.parts_top_subsingleton /-
theorem parts_top_subsingleton (a : α) [Decidable (a = ⊥)] :
((⊤ : Finpartition a).parts : Set α).Subsingleton :=
Set.subsingleton_of_subset_singleton fun b hb => mem_singleton.1 <| parts_top_subset _ hb
#align finpartition.parts_top_subsingleton Finpartition.parts_top_subsingleton
+-/
end Order
@@ -307,11 +327,13 @@ instance : Inf (Finpartition a) :=
· rw [P.sup_parts, Q.sup_parts, inf_idem])⟩
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finpartition.parts_inf /-
@[simp]
theorem parts_inf (P Q : Finpartition a) :
(P ⊓ Q).parts = ((P.parts ×ˢ Q.parts).image fun bc : α × α => bc.1 ⊓ bc.2).eraseₓ ⊥ :=
rfl
#align finpartition.parts_inf Finpartition.parts_inf
+-/
instance : SemilatticeInf (Finpartition a) :=
{ Finpartition.partialOrder,
@@ -339,6 +361,7 @@ instance : SemilatticeInf (Finpartition a) :=
end Inf
+#print Finpartition.exists_le_of_le /-
theorem exists_le_of_le {a b : α} {P Q : Finpartition a} (h : P ≤ Q) (hb : b ∈ Q.parts) :
∃ c ∈ P.parts, c ≤ b := by
by_contra' H
@@ -350,7 +373,9 @@ theorem exists_le_of_le {a b : α} {P Q : Finpartition a} (h : P ≤ Q) (hb : b
rintro rfl
exact H _ hc hcd
#align finpartition.exists_le_of_le Finpartition.exists_le_of_le
+-/
+#print Finpartition.card_mono /-
theorem card_mono {a : α} {P Q : Finpartition a} (h : P ≤ Q) : Q.parts.card ≤ P.parts.card := by
classical
have : ∀ b ∈ Q.parts, ∃ c ∈ P.parts, c ≤ b := fun b => exists_le_of_le h
@@ -362,6 +387,7 @@ theorem card_mono {a : α} {P Q : Finpartition a} (h : P ≤ Q) : Q.parts.card
(Q.disjoint.elim b.2 c.2 fun H =>
P.ne_bot (hP _ b.2) <| disjoint_self.1 <| H.mono (hf _ b.2) <| h.le.trans <| hf _ c.2)
#align finpartition.card_mono Finpartition.card_mono
+-/
variable [DecidableEq α] {a b c : α}
@@ -426,6 +452,7 @@ theorem card_bind (Q : ∀ i ∈ P.parts, Finpartition i) :
end Bind
+#print Finpartition.extend /-
/-- Adds `b` to a finpartition of `a` to make a finpartition of `a ⊔ b`. -/
@[simps]
def extend (P : Finpartition a) (hb : b ≠ ⊥) (hab : Disjoint a b) (hc : a ⊔ b = c) : Finpartition c
@@ -437,11 +464,14 @@ def extend (P : Finpartition a) (hb : b ≠ ⊥) (hab : Disjoint a b) (hc : a
supParts := by rwa [sup_insert, P.sup_parts, id, _root_.sup_comm]
not_bot_mem h := (mem_insert.1 h).elim hb.symm P.not_bot_mem
#align finpartition.extend Finpartition.extend
+-/
+#print Finpartition.card_extend /-
theorem card_extend (P : Finpartition a) (b c : α) {hb : b ≠ ⊥} {hab : Disjoint a b}
{hc : a ⊔ b = c} : (P.extend hb hab hc).parts.card = P.parts.card + 1 :=
card_insert_of_not_mem fun h => hb <| hab.symm.eq_bot_of_le <| P.le h
#align finpartition.card_extend Finpartition.card_extend
+-/
end DistribLattice
@@ -449,13 +479,16 @@ section GeneralizedBooleanAlgebra
variable [GeneralizedBooleanAlgebra α] [DecidableEq α] {a b c : α} (P : Finpartition a)
+#print Finpartition.avoid /-
/-- Restricts a finpartition to avoid a given element. -/
@[simps]
def avoid (b : α) : Finpartition (a \ b) :=
ofErase (P.parts.image (· \ b)) (P.Disjoint.image_finset_of_le fun a => sdiff_le).SupIndep
(by rw [sup_image, comp.left_id, Finset.sup_sdiff_right, ← id_def, P.sup_parts])
#align finpartition.avoid Finpartition.avoid
+-/
+#print Finpartition.mem_avoid /-
@[simp]
theorem mem_avoid : c ∈ (P.avoid b).parts ↔ ∃ d ∈ P.parts, ¬d ≤ b ∧ d \ b = c :=
by
@@ -465,6 +498,7 @@ theorem mem_avoid : c ∈ (P.avoid b).parts ↔ ∃ d ∈ P.parts, ¬d ≤ b ∧
rintro rfl
rw [sdiff_eq_bot_iff]
#align finpartition.mem_avoid Finpartition.mem_avoid
+-/
end GeneralizedBooleanAlgebra
@@ -477,24 +511,32 @@ namespace Finpartition
variable [DecidableEq α] {s t : Finset α} (P : Finpartition s)
+#print Finpartition.nonempty_of_mem_parts /-
theorem nonempty_of_mem_parts {a : Finset α} (ha : a ∈ P.parts) : a.Nonempty :=
nonempty_iff_ne_empty.2 <| P.ne_bot ha
#align finpartition.nonempty_of_mem_parts Finpartition.nonempty_of_mem_parts
+-/
+#print Finpartition.exists_mem /-
theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by simp_rw [← P.sup_parts] at ha ;
exact mem_sup.1 ha
#align finpartition.exists_mem Finpartition.exists_mem
+-/
+#print Finpartition.biUnion_parts /-
theorem biUnion_parts : P.parts.biUnion id = s :=
(sup_eq_biUnion _ _).symm.trans P.supParts
#align finpartition.bUnion_parts Finpartition.biUnion_parts
+-/
+#print Finpartition.sum_card_parts /-
theorem sum_card_parts : ∑ i in P.parts, i.card = s.card :=
by
convert congr_arg Finset.card P.bUnion_parts
rw [card_bUnion P.sup_indep.pairwise_disjoint]
rfl
#align finpartition.sum_card_parts Finpartition.sum_card_parts
+-/
/-- `⊥` is the partition in singletons, aka discrete partition. -/
instance (s : Finset α) : Bot (Finpartition s) :=
@@ -535,12 +577,15 @@ instance (s : Finset α) : OrderBot (Finpartition s) :=
obtain ⟨t, ht, hat⟩ := P.exists_mem ha
exact ⟨t, ht, singleton_subset_iff.2 hat⟩ }
+#print Finpartition.card_parts_le_card /-
theorem card_parts_le_card (P : Finpartition s) : P.parts.card ≤ s.card := by rw [← card_bot s];
exact card_mono bot_le
#align finpartition.card_parts_le_card Finpartition.card_parts_le_card
+-/
section Atomise
+#print Finpartition.atomise /-
/-- Cuts `s` along the finsets in `F`: Two elements of `s` will be in the same part if they are
in the same finsets of `F`. -/
def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
@@ -572,6 +617,7 @@ def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
rw [mem_filter]
exact and_iff_right ht)
#align finpartition.atomise Finpartition.atomise
+-/
variable {F : Finset (Finset α)}
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -489,7 +489,7 @@ theorem biUnion_parts : P.parts.biUnion id = s :=
(sup_eq_biUnion _ _).symm.trans P.supParts
#align finpartition.bUnion_parts Finpartition.biUnion_parts
-theorem sum_card_parts : (∑ i in P.parts, i.card) = s.card :=
+theorem sum_card_parts : ∑ i in P.parts, i.card = s.card :=
by
convert congr_arg Finset.card P.bUnion_parts
rw [card_bUnion P.sup_indep.pairwise_disjoint]
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -575,7 +575,7 @@ def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
variable {F : Finset (Finset α)}
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (Q «expr ⊆ » F) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (Q «expr ⊆ » F) -/
#print Finpartition.mem_atomise /-
theorem mem_atomise :
t ∈ (atomise s F).parts ↔
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -262,7 +262,7 @@ theorem parts_top_subset (a : α) [Decidable (a = ⊥)] : (⊤ : Finpartition a)
by
intro b hb
change b ∈ Finpartition.parts (dite _ _ _) at hb
- split_ifs at hb
+ split_ifs at hb
· simp only [copy_parts, empty_parts, not_mem_empty] at hb
exact hb.elim
· exact hb
@@ -353,14 +353,14 @@ theorem exists_le_of_le {a b : α} {P Q : Finpartition a} (h : P ≤ Q) (hb : b
theorem card_mono {a : α} {P Q : Finpartition a} (h : P ≤ Q) : Q.parts.card ≤ P.parts.card := by
classical
- have : ∀ b ∈ Q.parts, ∃ c ∈ P.parts, c ≤ b := fun b => exists_le_of_le h
- choose f hP hf using this
- rw [← card_attach]
- refine' card_le_card_of_inj_on (fun b => f _ b.2) (fun b _ => hP _ b.2) fun b hb c hc h => _
- exact
- Subtype.coe_injective
- (Q.disjoint.elim b.2 c.2 fun H =>
- P.ne_bot (hP _ b.2) <| disjoint_self.1 <| H.mono (hf _ b.2) <| h.le.trans <| hf _ c.2)
+ have : ∀ b ∈ Q.parts, ∃ c ∈ P.parts, c ≤ b := fun b => exists_le_of_le h
+ choose f hP hf using this
+ rw [← card_attach]
+ refine' card_le_card_of_inj_on (fun b => f _ b.2) (fun b _ => hP _ b.2) fun b hb c hc h => _
+ exact
+ Subtype.coe_injective
+ (Q.disjoint.elim b.2 c.2 fun H =>
+ P.ne_bot (hP _ b.2) <| disjoint_self.1 <| H.mono (hf _ b.2) <| h.le.trans <| hf _ c.2)
#align finpartition.card_mono Finpartition.card_mono
variable [DecidableEq α] {a b c : α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -261,9 +261,9 @@ instance [Decidable (a = ⊥)] : OrderTop (Finpartition a)
theorem parts_top_subset (a : α) [Decidable (a = ⊥)] : (⊤ : Finpartition a).parts ⊆ {a} :=
by
intro b hb
- change b ∈ Finpartition.parts (dite _ _ _) at hb
- split_ifs at hb
- · simp only [copy_parts, empty_parts, not_mem_empty] at hb
+ change b ∈ Finpartition.parts (dite _ _ _) at hb
+ split_ifs at hb
+ · simp only [copy_parts, empty_parts, not_mem_empty] at hb
exact hb.elim
· exact hb
#align finpartition.parts_top_subset Finpartition.parts_top_subset
@@ -319,12 +319,12 @@ instance : SemilatticeInf (Finpartition a) :=
inf_le_left := fun P Q b hb =>
by
obtain ⟨c, hc, rfl⟩ := mem_image.1 (mem_of_mem_erase hb)
- rw [mem_product] at hc
+ rw [mem_product] at hc
exact ⟨c.1, hc.1, inf_le_left⟩
inf_le_right := fun P Q b hb =>
by
obtain ⟨c, hc, rfl⟩ := mem_image.1 (mem_of_mem_erase hb)
- rw [mem_product] at hc
+ rw [mem_product] at hc
exact ⟨c.2, hc.2, inf_le_right⟩
le_inf := fun P Q R hPQ hPR b hb =>
by
@@ -379,7 +379,7 @@ def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finparti
SupIndep := by
rw [sup_indep_iff_pairwise_disjoint]
rintro a ha b hb h
- rw [Finset.mem_coe, Finset.mem_biUnion] at ha hb
+ rw [Finset.mem_coe, Finset.mem_biUnion] at ha hb
obtain ⟨⟨A, hA⟩, -, ha⟩ := ha
obtain ⟨⟨B, hB⟩, -, hb⟩ := hb
obtain rfl | hAB := eq_or_ne A B
@@ -390,7 +390,7 @@ def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finparti
rw [eq_comm, ← Finset.sup_attach]
exact sup_congr rfl fun b hb => (Q b.1 b.2).supParts.symm
not_bot_mem h := by
- rw [Finset.mem_biUnion] at h
+ rw [Finset.mem_biUnion] at h
obtain ⟨⟨A, hA⟩, -, h⟩ := h
exact (Q A hA).not_bot_mem h
#align finpartition.bind Finpartition.bind
@@ -416,7 +416,7 @@ theorem card_bind (Q : ∀ i ∈ P.parts, Finpartition i) :
rintro ⟨b, hb⟩ - ⟨c, hc⟩ - hbc
rw [Finset.disjoint_left]
rintro d hdb hdc
- rw [Ne.def, Subtype.mk_eq_mk] at hbc
+ rw [Ne.def, Subtype.mk_eq_mk] at hbc
exact
(Q b hb).ne_bot hdb
(eq_bot_iff.2 <|
@@ -481,7 +481,7 @@ theorem nonempty_of_mem_parts {a : Finset α} (ha : a ∈ P.parts) : a.Nonempty
nonempty_iff_ne_empty.2 <| P.ne_bot ha
#align finpartition.nonempty_of_mem_parts Finpartition.nonempty_of_mem_parts
-theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by simp_rw [← P.sup_parts] at ha;
+theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by simp_rw [← P.sup_parts] at ha ;
exact mem_sup.1 ha
#align finpartition.exists_mem Finpartition.exists_mem
@@ -530,7 +530,7 @@ theorem mem_bot_iff : t ∈ (⊥ : Finpartition s).parts ↔ ∃ a ∈ s, {a} =
instance (s : Finset α) : OrderBot (Finpartition s) :=
{ Finpartition.hasBot s with
bot_le := fun P t ht => by
- rw [mem_bot_iff] at ht
+ rw [mem_bot_iff] at ht
obtain ⟨a, ha, rfl⟩ := ht
obtain ⟨t, ht, hat⟩ := P.exists_mem ha
exact ⟨t, ht, singleton_subset_iff.2 hat⟩ }
@@ -548,20 +548,20 @@ def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
(Set.PairwiseDisjoint.supIndep fun x hx y hy h =>
disjoint_left.mpr fun z hz1 hz2 =>
h (by
- rw [mem_coe, mem_image] at hx hy
+ rw [mem_coe, mem_image] at hx hy
obtain ⟨Q, hQ, rfl⟩ := hx
obtain ⟨R, hR, rfl⟩ := hy
suffices h : Q = R
· subst h
- rw [id, mem_filter] at hz1 hz2
- rw [mem_powerset] at hQ hR
+ rw [id, mem_filter] at hz1 hz2
+ rw [mem_powerset] at hQ hR
ext i
refine' ⟨fun hi => _, fun hi => _⟩
· rwa [hz2.2 _ (hQ hi), ← hz1.2 _ (hQ hi)]
· rwa [hz1.2 _ (hR hi), ← hz2.2 _ (hR hi)]))
(by
refine' (Finset.sup_le fun t ht => _).antisymm fun a ha => _
- · rw [mem_image] at ht
+ · rw [mem_image] at ht
obtain ⟨A, hA, rfl⟩ := ht
exact s.filter_subset _
· rw [mem_sup]
@@ -579,7 +579,7 @@ variable {F : Finset (Finset α)}
#print Finpartition.mem_atomise /-
theorem mem_atomise :
t ∈ (atomise s F).parts ↔
- t.Nonempty ∧ ∃ (Q : _)(_ : Q ⊆ F), (s.filterₓ fun i => ∀ u ∈ F, u ∈ Q ↔ i ∈ u) = t :=
+ t.Nonempty ∧ ∃ (Q : _) (_ : Q ⊆ F), (s.filterₓ fun i => ∀ u ∈ F, u ∈ Q ↔ i ∈ u) = t :=
by
simp only [atomise, of_erase, bot_eq_empty, mem_erase, mem_image, nonempty_iff_ne_empty,
mem_singleton, and_comm', mem_powerset, exists_prop]
@@ -610,7 +610,7 @@ theorem biUnion_filter_atomise (ht : t ∈ F) (hts : t ⊆ s) :
obtain ⟨u, hu, hau⟩ := (atomise s F).exists_mem (hts ha)
refine' ⟨u, mem_filter.2 ⟨hu, fun b hb => _, _, hau⟩, hau⟩
obtain ⟨Q, hQ, rfl⟩ := (mem_atomise.1 hu).2
- rw [mem_filter] at hau hb
+ rw [mem_filter] at hau hb
rwa [← hb.2 _ ht, hau.2 _ ht]
#align finpartition.bUnion_filter_atomise Finpartition.biUnion_filter_atomise
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -62,10 +62,11 @@ the literature and turn the order around?
open Finset Function
-open BigOperators
+open scoped BigOperators
variable {α : Type _}
+#print Finpartition /-
/-- A finite partition of `a : α` is a pairwise disjoint finite set of elements whose supremum is
`a`. We forbid `⊥` as a part. -/
@[ext]
@@ -76,6 +77,7 @@ structure Finpartition [Lattice α] [OrderBot α] (a : α) where
not_bot_mem : ⊥ ∉ parts
deriving DecidableEq
#align finpartition Finpartition
+-/
attribute [protected] Finpartition.supIndep
@@ -85,6 +87,7 @@ section Lattice
variable [Lattice α] [OrderBot α]
+#print Finpartition.ofErase /-
/-- A `finpartition` constructor which does not insist on `⊥` not being a part. -/
@[simps]
def ofErase [DecidableEq α] {a : α} (parts : Finset α) (sup_indep : parts.SupIndep id)
@@ -95,7 +98,9 @@ def ofErase [DecidableEq α] {a : α} (parts : Finset α) (sup_indep : parts.Sup
supParts := (sup_erase_bot _).trans sup_parts
not_bot_mem := not_mem_erase _ _
#align finpartition.of_erase Finpartition.ofErase
+-/
+#print Finpartition.ofSubset /-
/-- A `finpartition` constructor from a bigger existing finpartition. -/
@[simps]
def ofSubset {a b : α} (P : Finpartition a) {parts : Finset α} (subset : parts ⊆ P.parts)
@@ -105,7 +110,9 @@ def ofSubset {a b : α} (P : Finpartition a) {parts : Finset α} (subset : parts
supParts
not_bot_mem := fun h => P.not_bot_mem (subset h) }
#align finpartition.of_subset Finpartition.ofSubset
+-/
+#print Finpartition.copy /-
/-- Changes the type of a finpartition to an equal one. -/
@[simps]
def copy {a b : α} (P : Finpartition a) (h : a = b) : Finpartition b
@@ -115,6 +122,7 @@ def copy {a b : α} (P : Finpartition a) (h : a = b) : Finpartition b
supParts := h ▸ P.supParts
not_bot_mem := P.not_bot_mem
#align finpartition.copy Finpartition.copy
+-/
variable (α)
@@ -150,16 +158,20 @@ def indiscrete (ha : a ≠ ⊥) : Finpartition a
variable (P : Finpartition a)
+#print Finpartition.le /-
protected theorem le {b : α} (hb : b ∈ P.parts) : b ≤ a :=
(le_sup hb).trans P.supParts.le
#align finpartition.le Finpartition.le
+-/
theorem ne_bot {b : α} (hb : b ∈ P.parts) : b ≠ ⊥ := fun h => P.not_bot_mem <| h.subst hb
#align finpartition.ne_bot Finpartition.ne_bot
+#print Finpartition.disjoint /-
protected theorem disjoint : (P.parts : Set α).PairwiseDisjoint id :=
P.SupIndep.PairwiseDisjoint
#align finpartition.disjoint Finpartition.disjoint
+-/
variable {P}
@@ -357,6 +369,7 @@ section Bind
variable {P : Finpartition a} {Q : ∀ i ∈ P.parts, Finpartition i}
+#print Finpartition.bind /-
/-- Given a finpartition `P` of `a` and finpartitions of each part of `P`, this yields the
finpartition of `a` obtained by juxtaposing all the subpartitions. -/
@[simps]
@@ -381,7 +394,9 @@ def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finparti
obtain ⟨⟨A, hA⟩, -, h⟩ := h
exact (Q A hA).not_bot_mem h
#align finpartition.bind Finpartition.bind
+-/
+#print Finpartition.mem_bind /-
theorem mem_bind : b ∈ (P.bind Q).parts ↔ ∃ A hA, b ∈ (Q A hA).parts :=
by
rw [bind, mem_bUnion]
@@ -391,7 +406,9 @@ theorem mem_bind : b ∈ (P.bind Q).parts ↔ ∃ A hA, b ∈ (Q A hA).parts :=
· rintro ⟨A, hA, h⟩
exact ⟨⟨A, hA⟩, mem_attach _ ⟨A, hA⟩, h⟩
#align finpartition.mem_bind Finpartition.mem_bind
+-/
+#print Finpartition.card_bind /-
theorem card_bind (Q : ∀ i ∈ P.parts, Finpartition i) :
(P.bind Q).parts.card = ∑ A in P.parts.attach, (Q _ A.2).parts.card :=
by
@@ -405,6 +422,7 @@ theorem card_bind (Q : ∀ i ∈ P.parts, Finpartition i) :
(eq_bot_iff.2 <|
(le_inf ((Q b hb).le hdb) <| (Q c hc).le hdc).trans <| (P.disjoint hb hc hbc).le_bot)
#align finpartition.card_bind Finpartition.card_bind
+-/
end Bind
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -66,12 +66,6 @@ open BigOperators
variable {α : Type _}
-/- warning: finpartition -> Finpartition is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], α -> Type.{u1}
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], α -> Type.{u1}
-Case conversion may be inaccurate. Consider using '#align finpartition Finpartitionₓ'. -/
/-- A finite partition of `a : α` is a pairwise disjoint finite set of elements whose supremum is
`a`. We forbid `⊥` as a part. -/
@[ext]
@@ -91,12 +85,6 @@ section Lattice
variable [Lattice α] [OrderBot α]
-/- warning: finpartition.of_erase -> Finpartition.ofErase is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (parts : Finset.{u1} α), (Finset.SupIndep.{u1, u1} α α _inst_1 _inst_2 parts (id.{succ u1} α)) -> (Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α _inst_1) _inst_2 parts (id.{succ u1} α)) a) -> (Finpartition.{u1} α _inst_1 _inst_2 a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (parts : Finset.{u1} α), (Finset.SupIndep.{u1, u1} α α _inst_1 _inst_2 parts (id.{succ u1} α)) -> (Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α _inst_1) _inst_2 parts (id.{succ u1} α)) a) -> (Finpartition.{u1} α _inst_1 _inst_2 a)
-Case conversion may be inaccurate. Consider using '#align finpartition.of_erase Finpartition.ofEraseₓ'. -/
/-- A `finpartition` constructor which does not insist on `⊥` not being a part. -/
@[simps]
def ofErase [DecidableEq α] {a : α} (parts : Finset α) (sup_indep : parts.SupIndep id)
@@ -108,12 +96,6 @@ def ofErase [DecidableEq α] {a : α} (parts : Finset α) (sup_indep : parts.Sup
not_bot_mem := not_mem_erase _ _
#align finpartition.of_erase Finpartition.ofErase
-/- warning: finpartition.of_subset -> Finpartition.ofSubset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {b : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {parts : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) parts (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α _inst_1) _inst_2 parts (id.{succ u1} α)) b) -> (Finpartition.{u1} α _inst_1 _inst_2 b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {b : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {parts : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) parts (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α _inst_1) _inst_2 parts (id.{succ u1} α)) b) -> (Finpartition.{u1} α _inst_1 _inst_2 b)
-Case conversion may be inaccurate. Consider using '#align finpartition.of_subset Finpartition.ofSubsetₓ'. -/
/-- A `finpartition` constructor from a bigger existing finpartition. -/
@[simps]
def ofSubset {a b : α} (P : Finpartition a) {parts : Finset α} (subset : parts ⊆ P.parts)
@@ -124,12 +106,6 @@ def ofSubset {a b : α} (P : Finpartition a) {parts : Finset α} (subset : parts
not_bot_mem := fun h => P.not_bot_mem (subset h) }
#align finpartition.of_subset Finpartition.ofSubset
-/- warning: finpartition.copy -> Finpartition.copy is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {b : α}, (Finpartition.{u1} α _inst_1 _inst_2 a) -> (Eq.{succ u1} α a b) -> (Finpartition.{u1} α _inst_1 _inst_2 b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {b : α}, (Finpartition.{u1} α _inst_1 _inst_2 a) -> (Eq.{succ u1} α a b) -> (Finpartition.{u1} α _inst_1 _inst_2 b)
-Case conversion may be inaccurate. Consider using '#align finpartition.copy Finpartition.copyₓ'. -/
/-- Changes the type of a finpartition to an equal one. -/
@[simps]
def copy {a b : α} (P : Finpartition a) (h : a = b) : Finpartition b
@@ -142,12 +118,6 @@ def copy {a b : α} (P : Finpartition a) (h : a = b) : Finpartition b
variable (α)
-/- warning: finpartition.empty -> Finpartition.empty is a dubious translation:
-lean 3 declaration is
- forall (α : Type.{u1}) [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))
-but is expected to have type
- forall (α : Type.{u1}) [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))
-Case conversion may be inaccurate. Consider using '#align finpartition.empty Finpartition.emptyₓ'. -/
/-- The empty finpartition. -/
@[simps]
protected def empty : Finpartition (⊥ : α)
@@ -161,12 +131,6 @@ protected def empty : Finpartition (⊥ : α)
instance : Inhabited (Finpartition (⊥ : α)) :=
⟨Finpartition.empty α⟩
-/- warning: finpartition.default_eq_empty -> Finpartition.default_eq_empty is a dubious translation:
-lean 3 declaration is
- forall (α : Type.{u1}) [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], Eq.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) (Inhabited.default.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) (Finpartition.inhabited.{u1} α _inst_1 _inst_2)) (Finpartition.empty.{u1} α _inst_1 _inst_2)
-but is expected to have type
- forall (α : Type.{u1}) [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], Eq.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) (Inhabited.default.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) (Finpartition.instInhabitedFinpartitionBotToBotToLEToPreorderToPartialOrderToSemilatticeInf.{u1} α _inst_1 _inst_2)) (Finpartition.empty.{u1} α _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align finpartition.default_eq_empty Finpartition.default_eq_emptyₓ'. -/
@[simp]
theorem default_eq_empty : (default : Finpartition (⊥ : α)) = Finpartition.empty α :=
rfl
@@ -174,12 +138,6 @@ theorem default_eq_empty : (default : Finpartition (⊥ : α)) = Finpartition.em
variable {α} {a : α}
-/- warning: finpartition.indiscrete -> Finpartition.indiscrete is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α}, (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) -> (Finpartition.{u1} α _inst_1 _inst_2 a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α}, (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) -> (Finpartition.{u1} α _inst_1 _inst_2 a)
-Case conversion may be inaccurate. Consider using '#align finpartition.indiscrete Finpartition.indiscreteₓ'. -/
/-- The finpartition in one part, aka indiscrete finpartition. -/
@[simps]
def indiscrete (ha : a ≠ ⊥) : Finpartition a
@@ -192,43 +150,19 @@ def indiscrete (ha : a ≠ ⊥) : Finpartition a
variable (P : Finpartition a)
-/- warning: finpartition.le -> Finpartition.le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) b a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) b a)
-Case conversion may be inaccurate. Consider using '#align finpartition.le Finpartition.leₓ'. -/
protected theorem le {b : α} (hb : b ∈ P.parts) : b ≤ a :=
(le_sup hb).trans P.supParts.le
#align finpartition.le Finpartition.le
-/- warning: finpartition.ne_bot -> Finpartition.ne_bot is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
-Case conversion may be inaccurate. Consider using '#align finpartition.ne_bot Finpartition.ne_botₓ'. -/
theorem ne_bot {b : α} (hb : b ∈ P.parts) : b ≠ ⊥ := fun h => P.not_bot_mem <| h.subst hb
#align finpartition.ne_bot Finpartition.ne_bot
-/- warning: finpartition.disjoint -> Finpartition.disjoint is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a), Set.PairwiseDisjoint.{u1, u1} α α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)) _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) (id.{succ u1} α)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a), Set.PairwiseDisjoint.{u1, u1} α α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)) _inst_2 (Finset.toSet.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) (id.{succ u1} α)
-Case conversion may be inaccurate. Consider using '#align finpartition.disjoint Finpartition.disjointₓ'. -/
protected theorem disjoint : (P.parts : Set α).PairwiseDisjoint id :=
P.SupIndep.PairwiseDisjoint
#align finpartition.disjoint Finpartition.disjoint
variable {P}
-/- warning: finpartition.parts_eq_empty_iff -> Finpartition.parts_eq_empty_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {P : Finpartition.{u1} α _inst_1 _inst_2 a}, Iff (Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α _inst_1 _inst_2 a P) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))) (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {P : Finpartition.{u1} α _inst_1 _inst_2 a}, Iff (Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α _inst_1 _inst_2 a P) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))) (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
-Case conversion may be inaccurate. Consider using '#align finpartition.parts_eq_empty_iff Finpartition.parts_eq_empty_iffₓ'. -/
theorem parts_eq_empty_iff : P.parts = ∅ ↔ a = ⊥ :=
by
simp_rw [← P.sup_parts]
@@ -238,22 +172,10 @@ theorem parts_eq_empty_iff : P.parts = ∅ ↔ a = ⊥ :=
· rwa [← le_bot_iff.1 ((le_sup hb).trans h.le)]
#align finpartition.parts_eq_empty_iff Finpartition.parts_eq_empty_iff
-/- warning: finpartition.parts_nonempty_iff -> Finpartition.parts_nonempty_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {P : Finpartition.{u1} α _inst_1 _inst_2 a}, Iff (Finset.Nonempty.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {P : Finpartition.{u1} α _inst_1 _inst_2 a}, Iff (Finset.Nonempty.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
-Case conversion may be inaccurate. Consider using '#align finpartition.parts_nonempty_iff Finpartition.parts_nonempty_iffₓ'. -/
theorem parts_nonempty_iff : P.parts.Nonempty ↔ a ≠ ⊥ := by
rw [nonempty_iff_ne_empty, not_iff_not, parts_eq_empty_iff]
#align finpartition.parts_nonempty_iff Finpartition.parts_nonempty_iff
-/- warning: finpartition.parts_nonempty -> Finpartition.parts_nonempty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a), (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) -> (Finset.Nonempty.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a), (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) -> (Finset.Nonempty.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P))
-Case conversion may be inaccurate. Consider using '#align finpartition.parts_nonempty Finpartition.parts_nonemptyₓ'. -/
theorem parts_nonempty (P : Finpartition a) (ha : a ≠ ⊥) : P.parts.Nonempty :=
parts_nonempty_iff.2 ha
#align finpartition.parts_nonempty Finpartition.parts_nonempty
@@ -263,12 +185,6 @@ instance : Unique (Finpartition (⊥ : α)) :=
uniq := fun P => by ext a;
exact iff_of_false (fun h => P.ne_bot h <| le_bot_iff.1 <| P.le h) (not_mem_empty a) }
-/- warning: is_atom.unique_finpartition -> IsAtom.uniqueFinpartition is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α}, (IsAtom.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))) _inst_2 a) -> (Unique.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 a))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {ha : Finpartition.{u1} α _inst_1 _inst_2 a}, (IsAtom.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))) _inst_2 a) -> (Unique.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 a))
-Case conversion may be inaccurate. Consider using '#align is_atom.unique_finpartition IsAtom.uniqueFinpartitionₓ'. -/
-- See note [reducible non instances]
/-- There's a unique partition of an atom. -/
@[reducible]
@@ -330,12 +246,6 @@ instance [Decidable (a = ⊥)] : OrderTop (Finpartition a)
simpa [h, P.ne_bot hx] using P.le hx
· exact fun b hb => ⟨a, mem_singleton_self _, P.le hb⟩
-/- warning: finpartition.parts_top_subset -> Finpartition.parts_top_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] (a : α) [_inst_3 : Decidable (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))], HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finpartition.parts.{u1} α _inst_1 _inst_2 a (Top.top.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (OrderTop.toHasTop.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.hasLe.{u1} α _inst_1 _inst_2 a) (Finpartition.orderTop.{u1} α _inst_1 _inst_2 a _inst_3)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] (a : α) [_inst_3 : Decidable (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))], HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finpartition.parts.{u1} α _inst_1 _inst_2 a (Top.top.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (OrderTop.toTop.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.instLEFinpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.instOrderTopFinpartitionInstLEFinpartition.{u1} α _inst_1 _inst_2 a _inst_3)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
-Case conversion may be inaccurate. Consider using '#align finpartition.parts_top_subset Finpartition.parts_top_subsetₓ'. -/
theorem parts_top_subset (a : α) [Decidable (a = ⊥)] : (⊤ : Finpartition a).parts ⊆ {a} :=
by
intro b hb
@@ -346,12 +256,6 @@ theorem parts_top_subset (a : α) [Decidable (a = ⊥)] : (⊤ : Finpartition a)
· exact hb
#align finpartition.parts_top_subset Finpartition.parts_top_subset
-/- warning: finpartition.parts_top_subsingleton -> Finpartition.parts_top_subsingleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] (a : α) [_inst_3 : Decidable (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))], Set.Subsingleton.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Finpartition.parts.{u1} α _inst_1 _inst_2 a (Top.top.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (OrderTop.toHasTop.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.hasLe.{u1} α _inst_1 _inst_2 a) (Finpartition.orderTop.{u1} α _inst_1 _inst_2 a _inst_3)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] (a : α) [_inst_3 : Decidable (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))], Set.Subsingleton.{u1} α (Finset.toSet.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a (Top.top.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (OrderTop.toTop.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.instLEFinpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.instOrderTopFinpartitionInstLEFinpartition.{u1} α _inst_1 _inst_2 a _inst_3)))))
-Case conversion may be inaccurate. Consider using '#align finpartition.parts_top_subsingleton Finpartition.parts_top_subsingletonₓ'. -/
theorem parts_top_subsingleton (a : α) [Decidable (a = ⊥)] :
((⊤ : Finpartition a).parts : Set α).Subsingleton :=
Set.subsingleton_of_subset_singleton fun b hb => mem_singleton.1 <| parts_top_subset _ hb
@@ -390,12 +294,6 @@ instance : Inf (Finpartition a) :=
rfl
· rw [P.sup_parts, Q.sup_parts, inf_idem])⟩
-/- warning: finpartition.parts_inf -> Finpartition.parts_inf is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Inf.inf.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.hasInf.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a) P Q)) (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_3 a b) (fun (bc : Prod.{u1, u1} α α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Prod.fst.{u1, u1} α α bc) (Prod.snd.{u1, u1} α α bc)) (Finset.product.{u1, u1} α α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Inf.inf.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.instInfFinpartitionToLattice.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a) P Q)) (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_3 a b) (fun (bc : Prod.{u1, u1} α α) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (Prod.fst.{u1, u1} α α bc) (Prod.snd.{u1, u1} α α bc)) (Finset.product.{u1, u1} α α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q))) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2)))
-Case conversion may be inaccurate. Consider using '#align finpartition.parts_inf Finpartition.parts_infₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
theorem parts_inf (P Q : Finpartition a) :
@@ -429,12 +327,6 @@ instance : SemilatticeInf (Finpartition a) :=
end Inf
-/- warning: finpartition.exists_le_of_le -> Finpartition.exists_le_of_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {a : α} {b : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a}, (LE.le.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.hasLe.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) P Q) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q)) -> (Exists.{succ u1} α (fun (c : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) c b)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {a : α} {b : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a}, (LE.le.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.instLEFinpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) P Q) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q)) -> (Exists.{succ u1} α (fun (c : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) c b)))
-Case conversion may be inaccurate. Consider using '#align finpartition.exists_le_of_le Finpartition.exists_le_of_leₓ'. -/
theorem exists_le_of_le {a b : α} {P Q : Finpartition a} (h : P ≤ Q) (hb : b ∈ Q.parts) :
∃ c ∈ P.parts, c ≤ b := by
by_contra' H
@@ -447,12 +339,6 @@ theorem exists_le_of_le {a b : α} {P Q : Finpartition a} (h : P ≤ Q) (hb : b
exact H _ hc hcd
#align finpartition.exists_le_of_le Finpartition.exists_le_of_le
-/- warning: finpartition.card_mono -> Finpartition.card_mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {a : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a}, (LE.le.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.hasLe.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) P Q) -> (LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q)) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {a : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a}, (LE.le.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.instLEFinpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) P Q) -> (LE.le.{0} Nat instLENat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q)) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)))
-Case conversion may be inaccurate. Consider using '#align finpartition.card_mono Finpartition.card_monoₓ'. -/
theorem card_mono {a : α} {P Q : Finpartition a} (h : P ≤ Q) : Q.parts.card ≤ P.parts.card := by
classical
have : ∀ b ∈ Q.parts, ∃ c ∈ P.parts, c ≤ b := fun b => exists_le_of_le h
@@ -471,12 +357,6 @@ section Bind
variable {P : Finpartition a} {Q : ∀ i ∈ P.parts, Finpartition i}
-/- warning: finpartition.bind -> Finpartition.bind is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), (forall (i : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), (forall (i : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a)
-Case conversion may be inaccurate. Consider using '#align finpartition.bind Finpartition.bindₓ'. -/
/-- Given a finpartition `P` of `a` and finpartitions of each part of `P`, this yields the
finpartition of `a` obtained by juxtaposing all the subpartitions. -/
@[simps]
@@ -502,12 +382,6 @@ def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finparti
exact (Q A hA).not_bot_mem h
#align finpartition.bind Finpartition.bind
-/- warning: finpartition.mem_bind -> Finpartition.mem_bind is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : forall (i : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Finpartition.bind.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a P Q))) (Exists.{succ u1} α (fun (A : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) A (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (fun (hA : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) A (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 A (Q A hA)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : forall (i : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Finpartition.bind.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a P Q))) (Exists.{succ u1} α (fun (A : α) => Exists.{0} (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) A (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (fun (hA : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) A (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 A (Q A hA)))))
-Case conversion may be inaccurate. Consider using '#align finpartition.mem_bind Finpartition.mem_bindₓ'. -/
theorem mem_bind : b ∈ (P.bind Q).parts ↔ ∃ A hA, b ∈ (Q A hA).parts :=
by
rw [bind, mem_bUnion]
@@ -518,12 +392,6 @@ theorem mem_bind : b ∈ (P.bind Q).parts ↔ ∃ A hA, b ∈ (Q A hA).parts :=
exact ⟨⟨A, hA⟩, mem_attach _ ⟨A, hA⟩, h⟩
#align finpartition.mem_bind Finpartition.mem_bind
-/- warning: finpartition.card_bind -> Finpartition.card_bind is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} (Q : forall (i : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)), Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Finpartition.bind.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a P Q))) (Finset.sum.{0, u1} Nat (Subtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P))) Nat.addCommMonoid (Finset.attach.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (fun (A : Subtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P))) => Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 (Subtype.val.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A) (Q (Subtype.val.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A) (Subtype.property.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} (Q : forall (i : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)), Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Finpartition.bind.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a P Q))) (Finset.sum.{0, u1} Nat (Subtype.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P))) Nat.addCommMonoid (Finset.attach.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (fun (A : Subtype.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P))) => Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A) (Q (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A) (Subtype.property.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A)))))
-Case conversion may be inaccurate. Consider using '#align finpartition.card_bind Finpartition.card_bindₓ'. -/
theorem card_bind (Q : ∀ i ∈ P.parts, Finpartition i) :
(P.bind Q).parts.card = ∑ A in P.parts.attach, (Q _ A.2).parts.card :=
by
@@ -540,12 +408,6 @@ theorem card_bind (Q : ∀ i ∈ P.parts, Finpartition i) :
end Bind
-/- warning: finpartition.extend -> Finpartition.extend is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α}, (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b) -> (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α}, (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b) -> (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c)
-Case conversion may be inaccurate. Consider using '#align finpartition.extend Finpartition.extendₓ'. -/
/-- Adds `b` to a finpartition of `a` to make a finpartition of `a ⊔ b`. -/
@[simps]
def extend (P : Finpartition a) (hb : b ≠ ⊥) (hab : Disjoint a b) (hc : a ⊔ b = c) : Finpartition c
@@ -558,12 +420,6 @@ def extend (P : Finpartition a) (hb : b ≠ ⊥) (hab : Disjoint a b) (hc : a
not_bot_mem h := (mem_insert.1 h).elim hb.symm P.not_bot_mem
#align finpartition.extend Finpartition.extend
-/- warning: finpartition.card_extend -> Finpartition.card_extend is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (b : α) (c : α) {hb : Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))} {hab : Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b} {hc : Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c}, Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c (Finpartition.extend.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a b c P hb hab hc))) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (b : α) (c : α) {hb : Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))} {hab : Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b} {hc : Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c}, Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c (Finpartition.extend.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a b c P hb hab hc))) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
-Case conversion may be inaccurate. Consider using '#align finpartition.card_extend Finpartition.card_extendₓ'. -/
theorem card_extend (P : Finpartition a) (b c : α) {hb : b ≠ ⊥} {hab : Disjoint a b}
{hc : a ⊔ b = c} : (P.extend hb hab hc).parts.card = P.parts.card + 1 :=
card_insert_of_not_mem fun h => hb <| hab.symm.eq_bot_of_le <| P.le h
@@ -575,12 +431,6 @@ section GeneralizedBooleanAlgebra
variable [GeneralizedBooleanAlgebra α] [DecidableEq α] {a b c : α} (P : Finpartition a)
-/- warning: finpartition.avoid -> Finpartition.avoid is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : GeneralizedBooleanAlgebra.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {a : α}, (Finpartition.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a) -> (forall (b : α), Finpartition.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toHasSdiff.{u1} α _inst_1) a b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : GeneralizedBooleanAlgebra.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {a : α}, (Finpartition.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a) -> (forall (b : α), Finpartition.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toSDiff.{u1} α _inst_1) a b))
-Case conversion may be inaccurate. Consider using '#align finpartition.avoid Finpartition.avoidₓ'. -/
/-- Restricts a finpartition to avoid a given element. -/
@[simps]
def avoid (b : α) : Finpartition (a \ b) :=
@@ -588,12 +438,6 @@ def avoid (b : α) : Finpartition (a \ b) :=
(by rw [sup_image, comp.left_id, Finset.sup_sdiff_right, ← id_def, P.sup_parts])
#align finpartition.avoid Finpartition.avoid
-/- warning: finpartition.mem_avoid -> Finpartition.mem_avoid is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : GeneralizedBooleanAlgebra.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α} (P : Finpartition.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a), Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toHasSdiff.{u1} α _inst_1) a b) (Finpartition.avoid.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a P b))) (Exists.{succ u1} α (fun (d : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) d (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a P)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) d (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a P)) => And (Not (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) d b)) (Eq.{succ u1} α (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toHasSdiff.{u1} α _inst_1) d b) c))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : GeneralizedBooleanAlgebra.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α} (P : Finpartition.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a), Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toSDiff.{u1} α _inst_1) a b) (Finpartition.avoid.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a P b))) (Exists.{succ u1} α (fun (d : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) d (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a P)) (And (Not (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) d b)) (Eq.{succ u1} α (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toSDiff.{u1} α _inst_1) d b) c))))
-Case conversion may be inaccurate. Consider using '#align finpartition.mem_avoid Finpartition.mem_avoidₓ'. -/
@[simp]
theorem mem_avoid : c ∈ (P.avoid b).parts ↔ ∃ d ∈ P.parts, ¬d ≤ b ∧ d \ b = c :=
by
@@ -615,42 +459,18 @@ namespace Finpartition
variable [DecidableEq α] {s t : Finset α} (P : Finpartition s)
-/- warning: finpartition.nonempty_of_mem_parts -> Finpartition.nonempty_of_mem_parts is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s) {a : Finset.{u1} α}, (Membership.Mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.hasMem.{u1} (Finset.{u1} α)) a (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s P)) -> (Finset.Nonempty.{u1} α a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s) {a : Finset.{u1} α}, (Membership.mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.instMembershipFinset.{u1} (Finset.{u1} α)) a (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s P)) -> (Finset.Nonempty.{u1} α a)
-Case conversion may be inaccurate. Consider using '#align finpartition.nonempty_of_mem_parts Finpartition.nonempty_of_mem_partsₓ'. -/
theorem nonempty_of_mem_parts {a : Finset α} (ha : a ∈ P.parts) : a.Nonempty :=
nonempty_iff_ne_empty.2 <| P.ne_bot ha
#align finpartition.nonempty_of_mem_parts Finpartition.nonempty_of_mem_parts
-/- warning: finpartition.exists_mem -> Finpartition.exists_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s) {a : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (Exists.{succ u1} (Finset.{u1} α) (fun (t : Finset.{u1} α) => Exists.{0} (Membership.Mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.hasMem.{u1} (Finset.{u1} α)) t (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s P)) (fun (H : Membership.Mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.hasMem.{u1} (Finset.{u1} α)) t (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s P)) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a t)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s) {a : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (Exists.{succ u1} (Finset.{u1} α) (fun (t : Finset.{u1} α) => And (Membership.mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.instMembershipFinset.{u1} (Finset.{u1} α)) t (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s P)) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a t)))
-Case conversion may be inaccurate. Consider using '#align finpartition.exists_mem Finpartition.exists_memₓ'. -/
theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by simp_rw [← P.sup_parts] at ha;
exact mem_sup.1 ha
#align finpartition.exists_mem Finpartition.exists_mem
-/- warning: finpartition.bUnion_parts -> Finpartition.biUnion_parts is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} (Finset.{u1} α) α (fun (a : α) (b : α) => _inst_1 a b) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s P) (id.{succ u1} (Finset.{u1} α))) s
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} (Finset.{u1} α) α (fun (a : α) (b : α) => _inst_1 a b) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s P) (id.{succ u1} (Finset.{u1} α))) s
-Case conversion may be inaccurate. Consider using '#align finpartition.bUnion_parts Finpartition.biUnion_partsₓ'. -/
theorem biUnion_parts : P.parts.biUnion id = s :=
(sup_eq_biUnion _ _).symm.trans P.supParts
#align finpartition.bUnion_parts Finpartition.biUnion_parts
-/- warning: finpartition.sum_card_parts -> Finpartition.sum_card_parts is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s), Eq.{1} Nat (Finset.sum.{0, u1} Nat (Finset.{u1} α) Nat.addCommMonoid (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s P) (fun (i : Finset.{u1} α) => Finset.card.{u1} α i)) (Finset.card.{u1} α s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s), Eq.{1} Nat (Finset.sum.{0, u1} Nat (Finset.{u1} α) Nat.addCommMonoid (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s P) (fun (i : Finset.{u1} α) => Finset.card.{u1} α i)) (Finset.card.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align finpartition.sum_card_parts Finpartition.sum_card_partsₓ'. -/
theorem sum_card_parts : (∑ i in P.parts, i.card) = s.card :=
by
convert congr_arg Finset.card P.bUnion_parts
@@ -697,24 +517,12 @@ instance (s : Finset α) : OrderBot (Finpartition s) :=
obtain ⟨t, ht, hat⟩ := P.exists_mem ha
exact ⟨t, ht, singleton_subset_iff.2 hat⟩ }
-/- warning: finpartition.card_parts_le_card -> Finpartition.card_parts_le_card is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s), LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} (Finset.{u1} α) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s P)) (Finset.card.{u1} α s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s), LE.le.{0} Nat instLENat (Finset.card.{u1} (Finset.{u1} α) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s P)) (Finset.card.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align finpartition.card_parts_le_card Finpartition.card_parts_le_cardₓ'. -/
theorem card_parts_le_card (P : Finpartition s) : P.parts.card ≤ s.card := by rw [← card_bot s];
exact card_mono bot_le
#align finpartition.card_parts_le_card Finpartition.card_parts_le_card
section Atomise
-/- warning: finpartition.atomise -> Finpartition.atomise is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), (Finset.{u1} (Finset.{u1} α)) -> (Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] (s : Finset.{u1} α), (Finset.{u1} (Finset.{u1} α)) -> (Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s)
-Case conversion may be inaccurate. Consider using '#align finpartition.atomise Finpartition.atomiseₓ'. -/
/-- Cuts `s` along the finsets in `F`: Two elements of `s` will be in the same part if they are
in the same finsets of `F`. -/
def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -260,8 +260,7 @@ theorem parts_nonempty (P : Finpartition a) (ha : a ≠ ⊥) : P.parts.Nonempty
instance : Unique (Finpartition (⊥ : α)) :=
{ Finpartition.inhabited α with
- uniq := fun P => by
- ext a
+ uniq := fun P => by ext a;
exact iff_of_false (fun h => P.ne_bot h <| le_bot_iff.1 <| P.le h) (not_mem_empty a) }
/- warning: is_atom.unique_finpartition -> IsAtom.uniqueFinpartition is a dubious translation:
@@ -632,9 +631,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s) {a : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (Exists.{succ u1} (Finset.{u1} α) (fun (t : Finset.{u1} α) => And (Membership.mem.{u1, u1} (Finset.{u1} α) (Finset.{u1} (Finset.{u1} α)) (Finset.instMembershipFinset.{u1} (Finset.{u1} α)) t (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s P)) (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a t)))
Case conversion may be inaccurate. Consider using '#align finpartition.exists_mem Finpartition.exists_memₓ'. -/
-theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t :=
- by
- simp_rw [← P.sup_parts] at ha
+theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by simp_rw [← P.sup_parts] at ha;
exact mem_sup.1 ha
#align finpartition.exists_mem Finpartition.exists_mem
@@ -706,9 +703,7 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s), LE.le.{0} Nat instLENat (Finset.card.{u1} (Finset.{u1} α) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s P)) (Finset.card.{u1} α s)
Case conversion may be inaccurate. Consider using '#align finpartition.card_parts_le_card Finpartition.card_parts_le_cardₓ'. -/
-theorem card_parts_le_card (P : Finpartition s) : P.parts.card ≤ s.card :=
- by
- rw [← card_bot s]
+theorem card_parts_le_card (P : Finpartition s) : P.parts.card ≤ s.card := by rw [← card_bot s];
exact card_mono bot_le
#align finpartition.card_parts_le_card Finpartition.card_parts_le_card
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -66,7 +66,12 @@ open BigOperators
variable {α : Type _}
-#print Finpartition /-
+/- warning: finpartition -> Finpartition is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], α -> Type.{u1}
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], α -> Type.{u1}
+Case conversion may be inaccurate. Consider using '#align finpartition Finpartitionₓ'. -/
/-- A finite partition of `a : α` is a pairwise disjoint finite set of elements whose supremum is
`a`. We forbid `⊥` as a part. -/
@[ext]
@@ -77,7 +82,6 @@ structure Finpartition [Lattice α] [OrderBot α] (a : α) where
not_bot_mem : ⊥ ∉ parts
deriving DecidableEq
#align finpartition Finpartition
--/
attribute [protected] Finpartition.supIndep
@@ -87,7 +91,12 @@ section Lattice
variable [Lattice α] [OrderBot α]
-#print Finpartition.ofErase /-
+/- warning: finpartition.of_erase -> Finpartition.ofErase is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (parts : Finset.{u1} α), (Finset.SupIndep.{u1, u1} α α _inst_1 _inst_2 parts (id.{succ u1} α)) -> (Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α _inst_1) _inst_2 parts (id.{succ u1} α)) a) -> (Finpartition.{u1} α _inst_1 _inst_2 a)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (parts : Finset.{u1} α), (Finset.SupIndep.{u1, u1} α α _inst_1 _inst_2 parts (id.{succ u1} α)) -> (Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α _inst_1) _inst_2 parts (id.{succ u1} α)) a) -> (Finpartition.{u1} α _inst_1 _inst_2 a)
+Case conversion may be inaccurate. Consider using '#align finpartition.of_erase Finpartition.ofEraseₓ'. -/
/-- A `finpartition` constructor which does not insist on `⊥` not being a part. -/
@[simps]
def ofErase [DecidableEq α] {a : α} (parts : Finset α) (sup_indep : parts.SupIndep id)
@@ -98,9 +107,13 @@ def ofErase [DecidableEq α] {a : α} (parts : Finset α) (sup_indep : parts.Sup
supParts := (sup_erase_bot _).trans sup_parts
not_bot_mem := not_mem_erase _ _
#align finpartition.of_erase Finpartition.ofErase
--/
-#print Finpartition.ofSubset /-
+/- warning: finpartition.of_subset -> Finpartition.ofSubset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {b : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {parts : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) parts (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α _inst_1) _inst_2 parts (id.{succ u1} α)) b) -> (Finpartition.{u1} α _inst_1 _inst_2 b)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {b : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {parts : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) parts (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (Eq.{succ u1} α (Finset.sup.{u1, u1} α α (Lattice.toSemilatticeSup.{u1} α _inst_1) _inst_2 parts (id.{succ u1} α)) b) -> (Finpartition.{u1} α _inst_1 _inst_2 b)
+Case conversion may be inaccurate. Consider using '#align finpartition.of_subset Finpartition.ofSubsetₓ'. -/
/-- A `finpartition` constructor from a bigger existing finpartition. -/
@[simps]
def ofSubset {a b : α} (P : Finpartition a) {parts : Finset α} (subset : parts ⊆ P.parts)
@@ -110,9 +123,13 @@ def ofSubset {a b : α} (P : Finpartition a) {parts : Finset α} (subset : parts
supParts
not_bot_mem := fun h => P.not_bot_mem (subset h) }
#align finpartition.of_subset Finpartition.ofSubset
--/
-#print Finpartition.copy /-
+/- warning: finpartition.copy -> Finpartition.copy is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {b : α}, (Finpartition.{u1} α _inst_1 _inst_2 a) -> (Eq.{succ u1} α a b) -> (Finpartition.{u1} α _inst_1 _inst_2 b)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {b : α}, (Finpartition.{u1} α _inst_1 _inst_2 a) -> (Eq.{succ u1} α a b) -> (Finpartition.{u1} α _inst_1 _inst_2 b)
+Case conversion may be inaccurate. Consider using '#align finpartition.copy Finpartition.copyₓ'. -/
/-- Changes the type of a finpartition to an equal one. -/
@[simps]
def copy {a b : α} (P : Finpartition a) (h : a = b) : Finpartition b
@@ -122,13 +139,12 @@ def copy {a b : α} (P : Finpartition a) (h : a = b) : Finpartition b
supParts := h ▸ P.supParts
not_bot_mem := P.not_bot_mem
#align finpartition.copy Finpartition.copy
--/
variable (α)
/- warning: finpartition.empty -> Finpartition.empty is a dubious translation:
lean 3 declaration is
- forall (α : Type.{u1}) [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))
+ forall (α : Type.{u1}) [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))
but is expected to have type
forall (α : Type.{u1}) [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))
Case conversion may be inaccurate. Consider using '#align finpartition.empty Finpartition.emptyₓ'. -/
@@ -147,7 +163,7 @@ instance : Inhabited (Finpartition (⊥ : α)) :=
/- warning: finpartition.default_eq_empty -> Finpartition.default_eq_empty is a dubious translation:
lean 3 declaration is
- forall (α : Type.{u1}) [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], Eq.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) (Inhabited.default.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) (Finpartition.inhabited.{u1} α _inst_1 _inst_2)) (Finpartition.empty.{u1} α _inst_1 _inst_2)
+ forall (α : Type.{u1}) [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], Eq.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) (Inhabited.default.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) (Finpartition.inhabited.{u1} α _inst_1 _inst_2)) (Finpartition.empty.{u1} α _inst_1 _inst_2)
but is expected to have type
forall (α : Type.{u1}) [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))], Eq.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) (Inhabited.default.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) (Finpartition.instInhabitedFinpartitionBotToBotToLEToPreorderToPartialOrderToSemilatticeInf.{u1} α _inst_1 _inst_2)) (Finpartition.empty.{u1} α _inst_1 _inst_2)
Case conversion may be inaccurate. Consider using '#align finpartition.default_eq_empty Finpartition.default_eq_emptyₓ'. -/
@@ -160,7 +176,7 @@ variable {α} {a : α}
/- warning: finpartition.indiscrete -> Finpartition.indiscrete is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α}, (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) -> (Finpartition.{u1} α _inst_1 _inst_2 a)
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α}, (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) -> (Finpartition.{u1} α _inst_1 _inst_2 a)
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α}, (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) -> (Finpartition.{u1} α _inst_1 _inst_2 a)
Case conversion may be inaccurate. Consider using '#align finpartition.indiscrete Finpartition.indiscreteₓ'. -/
@@ -176,32 +192,40 @@ def indiscrete (ha : a ≠ ⊥) : Finpartition a
variable (P : Finpartition a)
-#print Finpartition.le /-
+/- warning: finpartition.le -> Finpartition.le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) b a)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) b a)
+Case conversion may be inaccurate. Consider using '#align finpartition.le Finpartition.leₓ'. -/
protected theorem le {b : α} (hb : b ∈ P.parts) : b ≤ a :=
(le_sup hb).trans P.supParts.le
#align finpartition.le Finpartition.le
--/
/- warning: finpartition.ne_bot -> Finpartition.ne_bot is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {b : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a) {b : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
Case conversion may be inaccurate. Consider using '#align finpartition.ne_bot Finpartition.ne_botₓ'. -/
theorem ne_bot {b : α} (hb : b ∈ P.parts) : b ≠ ⊥ := fun h => P.not_bot_mem <| h.subst hb
#align finpartition.ne_bot Finpartition.ne_bot
-#print Finpartition.disjoint /-
+/- warning: finpartition.disjoint -> Finpartition.disjoint is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a), Set.PairwiseDisjoint.{u1, u1} α α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)) _inst_2 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) (id.{succ u1} α)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a), Set.PairwiseDisjoint.{u1, u1} α α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)) _inst_2 (Finset.toSet.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) (id.{succ u1} α)
+Case conversion may be inaccurate. Consider using '#align finpartition.disjoint Finpartition.disjointₓ'. -/
protected theorem disjoint : (P.parts : Set α).PairwiseDisjoint id :=
P.SupIndep.PairwiseDisjoint
#align finpartition.disjoint Finpartition.disjoint
--/
variable {P}
/- warning: finpartition.parts_eq_empty_iff -> Finpartition.parts_eq_empty_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {P : Finpartition.{u1} α _inst_1 _inst_2 a}, Iff (Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α _inst_1 _inst_2 a P) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))) (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {P : Finpartition.{u1} α _inst_1 _inst_2 a}, Iff (Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α _inst_1 _inst_2 a P) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))) (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {P : Finpartition.{u1} α _inst_1 _inst_2 a}, Iff (Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α _inst_1 _inst_2 a P) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))) (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
Case conversion may be inaccurate. Consider using '#align finpartition.parts_eq_empty_iff Finpartition.parts_eq_empty_iffₓ'. -/
@@ -216,7 +240,7 @@ theorem parts_eq_empty_iff : P.parts = ∅ ↔ a = ⊥ :=
/- warning: finpartition.parts_nonempty_iff -> Finpartition.parts_nonempty_iff is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {P : Finpartition.{u1} α _inst_1 _inst_2 a}, Iff (Finset.Nonempty.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {P : Finpartition.{u1} α _inst_1 _inst_2 a}, Iff (Finset.Nonempty.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {P : Finpartition.{u1} α _inst_1 _inst_2 a}, Iff (Finset.Nonempty.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P)) (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))
Case conversion may be inaccurate. Consider using '#align finpartition.parts_nonempty_iff Finpartition.parts_nonempty_iffₓ'. -/
@@ -226,7 +250,7 @@ theorem parts_nonempty_iff : P.parts.Nonempty ↔ a ≠ ⊥ := by
/- warning: finpartition.parts_nonempty -> Finpartition.parts_nonempty is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a), (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) -> (Finset.Nonempty.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P))
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a), (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) -> (Finset.Nonempty.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} (P : Finpartition.{u1} α _inst_1 _inst_2 a), (Ne.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2))) -> (Finset.Nonempty.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a P))
Case conversion may be inaccurate. Consider using '#align finpartition.parts_nonempty Finpartition.parts_nonemptyₓ'. -/
@@ -242,7 +266,7 @@ instance : Unique (Finpartition (⊥ : α)) :=
/- warning: is_atom.unique_finpartition -> IsAtom.uniqueFinpartition is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α}, (IsAtom.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))) _inst_2 a) -> (Unique.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 a))
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α}, (IsAtom.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))) _inst_2 a) -> (Unique.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 a))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {ha : Finpartition.{u1} α _inst_1 _inst_2 a}, (IsAtom.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))) _inst_2 a) -> (Unique.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 a))
Case conversion may be inaccurate. Consider using '#align is_atom.unique_finpartition IsAtom.uniqueFinpartitionₓ'. -/
@@ -309,7 +333,7 @@ instance [Decidable (a = ⊥)] : OrderTop (Finpartition a)
/- warning: finpartition.parts_top_subset -> Finpartition.parts_top_subset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] (a : α) [_inst_3 : Decidable (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))], HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finpartition.parts.{u1} α _inst_1 _inst_2 a (Top.top.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (OrderTop.toHasTop.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.hasLe.{u1} α _inst_1 _inst_2 a) (Finpartition.orderTop.{u1} α _inst_1 _inst_2 a _inst_3)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] (a : α) [_inst_3 : Decidable (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))], HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finpartition.parts.{u1} α _inst_1 _inst_2 a (Top.top.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (OrderTop.toHasTop.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.hasLe.{u1} α _inst_1 _inst_2 a) (Finpartition.orderTop.{u1} α _inst_1 _inst_2 a _inst_3)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] (a : α) [_inst_3 : Decidable (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))], HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finpartition.parts.{u1} α _inst_1 _inst_2 a (Top.top.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (OrderTop.toTop.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.instLEFinpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.instOrderTopFinpartitionInstLEFinpartition.{u1} α _inst_1 _inst_2 a _inst_3)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
Case conversion may be inaccurate. Consider using '#align finpartition.parts_top_subset Finpartition.parts_top_subsetₓ'. -/
@@ -325,7 +349,7 @@ theorem parts_top_subset (a : α) [Decidable (a = ⊥)] : (⊤ : Finpartition a)
/- warning: finpartition.parts_top_subsingleton -> Finpartition.parts_top_subsingleton is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] (a : α) [_inst_3 : Decidable (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))], Set.Subsingleton.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Finpartition.parts.{u1} α _inst_1 _inst_2 a (Top.top.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (OrderTop.toHasTop.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.hasLe.{u1} α _inst_1 _inst_2 a) (Finpartition.orderTop.{u1} α _inst_1 _inst_2 a _inst_3)))))
+ forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] (a : α) [_inst_3 : Decidable (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))], Set.Subsingleton.{u1} α ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Finpartition.parts.{u1} α _inst_1 _inst_2 a (Top.top.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (OrderTop.toHasTop.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.hasLe.{u1} α _inst_1 _inst_2 a) (Finpartition.orderTop.{u1} α _inst_1 _inst_2 a _inst_3)))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] (a : α) [_inst_3 : Decidable (Eq.{succ u1} α a (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1)))) _inst_2)))], Set.Subsingleton.{u1} α (Finset.toSet.{u1} α (Finpartition.parts.{u1} α _inst_1 _inst_2 a (Top.top.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (OrderTop.toTop.{u1} (Finpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.instLEFinpartition.{u1} α _inst_1 _inst_2 a) (Finpartition.instOrderTopFinpartitionInstLEFinpartition.{u1} α _inst_1 _inst_2 a _inst_3)))))
Case conversion may be inaccurate. Consider using '#align finpartition.parts_top_subsingleton Finpartition.parts_top_subsingletonₓ'. -/
@@ -369,7 +393,7 @@ instance : Inf (Finpartition a) :=
/- warning: finpartition.parts_inf -> Finpartition.parts_inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Inf.inf.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.hasInf.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a) P Q)) (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_3 a b) (fun (bc : Prod.{u1, u1} α α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Prod.fst.{u1, u1} α α bc) (Prod.snd.{u1, u1} α α bc)) (Finset.product.{u1, u1} α α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2)))
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Inf.inf.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.hasInf.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a) P Q)) (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_3 a b) (fun (bc : Prod.{u1, u1} α α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Prod.fst.{u1, u1} α α bc) (Prod.snd.{u1, u1} α α bc)) (Finset.product.{u1, u1} α α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Inf.inf.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.instInfFinpartitionToLattice.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a) P Q)) (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_3 a b) (fun (bc : Prod.{u1, u1} α α) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (Prod.fst.{u1, u1} α α bc) (Prod.snd.{u1, u1} α α bc)) (Finset.product.{u1, u1} α α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q))) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2)))
Case conversion may be inaccurate. Consider using '#align finpartition.parts_inf Finpartition.parts_infₓ'. -/
@@ -408,7 +432,7 @@ end Inf
/- warning: finpartition.exists_le_of_le -> Finpartition.exists_le_of_le is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {a : α} {b : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a}, (LE.le.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.hasLe.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) P Q) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q)) -> (Exists.{succ u1} α (fun (c : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) => LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) c b)))
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {a : α} {b : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a}, (LE.le.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.hasLe.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) P Q) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q)) -> (Exists.{succ u1} α (fun (c : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) => LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) c b)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {a : α} {b : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a}, (LE.le.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.instLEFinpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) P Q) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q)) -> (Exists.{succ u1} α (fun (c : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) c b)))
Case conversion may be inaccurate. Consider using '#align finpartition.exists_le_of_le Finpartition.exists_le_of_leₓ'. -/
@@ -426,7 +450,7 @@ theorem exists_le_of_le {a b : α} {P Q : Finpartition a} (h : P ≤ Q) (hb : b
/- warning: finpartition.card_mono -> Finpartition.card_mono is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {a : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a}, (LE.le.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.hasLe.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) P Q) -> (LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q)) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)))
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {a : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a}, (LE.le.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.hasLe.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) P Q) -> (LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q)) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] {a : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a}, (LE.le.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.instLEFinpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) P Q) -> (LE.le.{0} Nat instLENat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q)) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)))
Case conversion may be inaccurate. Consider using '#align finpartition.card_mono Finpartition.card_monoₓ'. -/
@@ -448,7 +472,12 @@ section Bind
variable {P : Finpartition a} {Q : ∀ i ∈ P.parts, Finpartition i}
-#print Finpartition.bind /-
+/- warning: finpartition.bind -> Finpartition.bind is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), (forall (i : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), (forall (i : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a)
+Case conversion may be inaccurate. Consider using '#align finpartition.bind Finpartition.bindₓ'. -/
/-- Given a finpartition `P` of `a` and finpartitions of each part of `P`, this yields the
finpartition of `a` obtained by juxtaposing all the subpartitions. -/
@[simps]
@@ -473,9 +502,13 @@ def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finparti
obtain ⟨⟨A, hA⟩, -, h⟩ := h
exact (Q A hA).not_bot_mem h
#align finpartition.bind Finpartition.bind
--/
-#print Finpartition.mem_bind /-
+/- warning: finpartition.mem_bind -> Finpartition.mem_bind is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : forall (i : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Finpartition.bind.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a P Q))) (Exists.{succ u1} α (fun (A : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) A (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (fun (hA : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) A (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 A (Q A hA)))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} {Q : forall (i : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Finpartition.bind.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a P Q))) (Exists.{succ u1} α (fun (A : α) => Exists.{0} (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) A (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (fun (hA : Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) A (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) b (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 A (Q A hA)))))
+Case conversion may be inaccurate. Consider using '#align finpartition.mem_bind Finpartition.mem_bindₓ'. -/
theorem mem_bind : b ∈ (P.bind Q).parts ↔ ∃ A hA, b ∈ (Q A hA).parts :=
by
rw [bind, mem_bUnion]
@@ -485,9 +518,13 @@ theorem mem_bind : b ∈ (P.bind Q).parts ↔ ∃ A hA, b ∈ (Q A hA).parts :=
· rintro ⟨A, hA, h⟩
exact ⟨⟨A, hA⟩, mem_attach _ ⟨A, hA⟩, h⟩
#align finpartition.mem_bind Finpartition.mem_bind
--/
-#print Finpartition.card_bind /-
+/- warning: finpartition.card_bind -> Finpartition.card_bind is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} (Q : forall (i : α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)), Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Finpartition.bind.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a P Q))) (Finset.sum.{0, u1} Nat (Subtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P))) Nat.addCommMonoid (Finset.attach.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (fun (A : Subtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P))) => Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 (Subtype.val.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A) (Q (Subtype.val.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A) (Subtype.property.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A)))))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a} (Q : forall (i : α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) i (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 i)), Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Finpartition.bind.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a P Q))) (Finset.sum.{0, u1} Nat (Subtype.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P))) Nat.addCommMonoid (Finset.attach.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (fun (A : Subtype.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P))) => Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A) (Q (Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A) (Subtype.property.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) A)))))
+Case conversion may be inaccurate. Consider using '#align finpartition.card_bind Finpartition.card_bindₓ'. -/
theorem card_bind (Q : ∀ i ∈ P.parts, Finpartition i) :
(P.bind Q).parts.card = ∑ A in P.parts.attach, (Q _ A.2).parts.card :=
by
@@ -501,13 +538,12 @@ theorem card_bind (Q : ∀ i ∈ P.parts, Finpartition i) :
(eq_bot_iff.2 <|
(le_inf ((Q b hb).le hdb) <| (Q c hc).le hdc).trans <| (P.disjoint hb hc hbc).le_bot)
#align finpartition.card_bind Finpartition.card_bind
--/
end Bind
/- warning: finpartition.extend -> Finpartition.extend is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α}, (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b) -> (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c)
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α}, (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b) -> (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c)
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α}, (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b) -> (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c)
Case conversion may be inaccurate. Consider using '#align finpartition.extend Finpartition.extendₓ'. -/
@@ -525,7 +561,7 @@ def extend (P : Finpartition a) (hb : b ≠ ⊥) (hab : Disjoint a b) (hc : a
/- warning: finpartition.card_extend -> Finpartition.card_extend is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (b : α) (c : α) {hb : Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))} {hab : Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b} {hc : Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c}, Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c (Finpartition.extend.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a b c P hb hab hc))) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (b : α) (c : α) {hb : Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))} {hab : Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b} {hc : Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c}, Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c (Finpartition.extend.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a b c P hb hab hc))) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (b : α) (c : α) {hb : Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))} {hab : Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b} {hc : Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c}, Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c (Finpartition.extend.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a b c P hb hab hc))) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
Case conversion may be inaccurate. Consider using '#align finpartition.card_extend Finpartition.card_extendₓ'. -/
@@ -555,7 +591,7 @@ def avoid (b : α) : Finpartition (a \ b) :=
/- warning: finpartition.mem_avoid -> Finpartition.mem_avoid is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : GeneralizedBooleanAlgebra.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α} (P : Finpartition.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a), Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toHasSdiff.{u1} α _inst_1) a b) (Finpartition.avoid.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a P b))) (Exists.{succ u1} α (fun (d : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) d (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a P)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) d (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a P)) => And (Not (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) d b)) (Eq.{succ u1} α (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toHasSdiff.{u1} α _inst_1) d b) c))))
+ forall {α : Type.{u1}} [_inst_1 : GeneralizedBooleanAlgebra.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α} (P : Finpartition.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a), Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) c (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toHasSdiff.{u1} α _inst_1) a b) (Finpartition.avoid.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a P b))) (Exists.{succ u1} α (fun (d : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) d (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a P)) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) d (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a P)) => And (Not (LE.le.{u1} α (Preorder.toHasLe.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) d b)) (Eq.{succ u1} α (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toHasSdiff.{u1} α _inst_1) d b) c))))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : GeneralizedBooleanAlgebra.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α} (P : Finpartition.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a), Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) c (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toSDiff.{u1} α _inst_1) a b) (Finpartition.avoid.{u1} α _inst_1 (fun (a : α) (b : α) => _inst_2 a b) a P b))) (Exists.{succ u1} α (fun (d : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) d (Finpartition.parts.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)) (GeneralizedBooleanAlgebra.toOrderBot.{u1} α _inst_1) a P)) (And (Not (LE.le.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (GeneralizedCoheytingAlgebra.toLattice.{u1} α (GeneralizedBooleanAlgebra.toGeneralizedCoheytingAlgebra.{u1} α _inst_1)))))) d b)) (Eq.{succ u1} α (SDiff.sdiff.{u1} α (GeneralizedBooleanAlgebra.toSDiff.{u1} α _inst_1) d b) c))))
Case conversion may be inaccurate. Consider using '#align finpartition.mem_avoid Finpartition.mem_avoidₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -454,11 +454,11 @@ finpartition of `a` obtained by juxtaposing all the subpartitions. -/
@[simps]
def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finpartition a
where
- parts := P.parts.attach.bunionᵢ fun i => (Q i.1 i.2).parts
+ parts := P.parts.attach.biUnion fun i => (Q i.1 i.2).parts
SupIndep := by
rw [sup_indep_iff_pairwise_disjoint]
rintro a ha b hb h
- rw [Finset.mem_coe, Finset.mem_bunionᵢ] at ha hb
+ rw [Finset.mem_coe, Finset.mem_biUnion] at ha hb
obtain ⟨⟨A, hA⟩, -, ha⟩ := ha
obtain ⟨⟨B, hB⟩, -, hb⟩ := hb
obtain rfl | hAB := eq_or_ne A B
@@ -469,7 +469,7 @@ def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finparti
rw [eq_comm, ← Finset.sup_attach]
exact sup_congr rfl fun b hb => (Q b.1 b.2).supParts.symm
not_bot_mem h := by
- rw [Finset.mem_bunionᵢ] at h
+ rw [Finset.mem_biUnion] at h
obtain ⟨⟨A, hA⟩, -, h⟩ := h
exact (Q A hA).not_bot_mem h
#align finpartition.bind Finpartition.bind
@@ -602,15 +602,15 @@ theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t :=
exact mem_sup.1 ha
#align finpartition.exists_mem Finpartition.exists_mem
-/- warning: finpartition.bUnion_parts -> Finpartition.bunionᵢ_parts is a dubious translation:
+/- warning: finpartition.bUnion_parts -> Finpartition.biUnion_parts is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} (Finset.{u1} α) α (fun (a : α) (b : α) => _inst_1 a b) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s P) (id.{succ u1} (Finset.{u1} α))) s
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} (Finset.{u1} α) α (fun (a : α) (b : α) => _inst_1 a b) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.lattice.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.orderBot.{u1} α) s P) (id.{succ u1} (Finset.{u1} α))) s
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s), Eq.{succ u1} (Finset.{u1} α) (Finset.bunionᵢ.{u1, u1} (Finset.{u1} α) α (fun (a : α) (b : α) => _inst_1 a b) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s P) (id.{succ u1} (Finset.{u1} α))) s
-Case conversion may be inaccurate. Consider using '#align finpartition.bUnion_parts Finpartition.bunionᵢ_partsₓ'. -/
-theorem bunionᵢ_parts : P.parts.bunionᵢ id = s :=
- (sup_eq_bunionᵢ _ _).symm.trans P.supParts
-#align finpartition.bUnion_parts Finpartition.bunionᵢ_parts
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] {s : Finset.{u1} α} (P : Finpartition.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s), Eq.{succ u1} (Finset.{u1} α) (Finset.biUnion.{u1, u1} (Finset.{u1} α) α (fun (a : α) (b : α) => _inst_1 a b) (Finpartition.parts.{u1} (Finset.{u1} α) (Finset.instLatticeFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s P) (id.{succ u1} (Finset.{u1} α))) s
+Case conversion may be inaccurate. Consider using '#align finpartition.bUnion_parts Finpartition.biUnion_partsₓ'. -/
+theorem biUnion_parts : P.parts.biUnion id = s :=
+ (sup_eq_biUnion _ _).symm.trans P.supParts
+#align finpartition.bUnion_parts Finpartition.biUnion_parts
/- warning: finpartition.sum_card_parts -> Finpartition.sum_card_parts is a dubious translation:
lean 3 declaration is
@@ -744,9 +744,9 @@ theorem card_atomise_le : (atomise s F).parts.card ≤ 2 ^ F.card :=
#align finpartition.card_atomise_le Finpartition.card_atomise_le
-/
-#print Finpartition.bunionᵢ_filter_atomise /-
-theorem bunionᵢ_filter_atomise (ht : t ∈ F) (hts : t ⊆ s) :
- ((atomise s F).parts.filterₓ fun u => u ⊆ t ∧ u.Nonempty).bunionᵢ id = t :=
+#print Finpartition.biUnion_filter_atomise /-
+theorem biUnion_filter_atomise (ht : t ∈ F) (hts : t ⊆ s) :
+ ((atomise s F).parts.filterₓ fun u => u ⊆ t ∧ u.Nonempty).biUnion id = t :=
by
ext a
refine' mem_bUnion.trans ⟨fun ⟨u, hu, ha⟩ => (mem_filter.1 hu).2.1 ha, fun ha => _⟩
@@ -755,7 +755,7 @@ theorem bunionᵢ_filter_atomise (ht : t ∈ F) (hts : t ⊆ s) :
obtain ⟨Q, hQ, rfl⟩ := (mem_atomise.1 hu).2
rw [mem_filter] at hau hb
rwa [← hb.2 _ ht, hau.2 _ ht]
-#align finpartition.bUnion_filter_atomise Finpartition.bunionᵢ_filter_atomise
+#align finpartition.bUnion_filter_atomise Finpartition.biUnion_filter_atomise
-/
#print Finpartition.card_filter_atomise_le_two_pow /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/2651125b48fc5c170ab1111afd0817c903b1fc6c
@@ -240,16 +240,16 @@ instance : Unique (Finpartition (⊥ : α)) :=
ext a
exact iff_of_false (fun h => P.ne_bot h <| le_bot_iff.1 <| P.le h) (not_mem_empty a) }
-/- warning: is_atom.unique_finpartition -> Finpartition.IsAtom.uniqueFinpartition is a dubious translation:
+/- warning: is_atom.unique_finpartition -> IsAtom.uniqueFinpartition is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α}, (IsAtom.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))) _inst_2 a) -> (Unique.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 a))
but is expected to have type
forall {α : Type.{u1}} [_inst_1 : Lattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))))] {a : α} {ha : Finpartition.{u1} α _inst_1 _inst_2 a}, (IsAtom.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α _inst_1))) _inst_2 a) -> (Unique.{succ u1} (Finpartition.{u1} α _inst_1 _inst_2 a))
-Case conversion may be inaccurate. Consider using '#align is_atom.unique_finpartition Finpartition.IsAtom.uniqueFinpartitionₓ'. -/
+Case conversion may be inaccurate. Consider using '#align is_atom.unique_finpartition IsAtom.uniqueFinpartitionₓ'. -/
-- See note [reducible non instances]
/-- There's a unique partition of an atom. -/
@[reducible]
-def Finpartition.IsAtom.uniqueFinpartition (ha : IsAtom a) : Unique (Finpartition a)
+def IsAtom.uniqueFinpartition (ha : IsAtom a) : Unique (Finpartition a)
where
default := indiscrete ha.1
uniq P :=
@@ -262,7 +262,7 @@ def Finpartition.IsAtom.uniqueFinpartition (ha : IsAtom a) : Unique (Finpartitio
obtain ⟨c, hc⟩ := P.parts_nonempty ha.1
simp_rw [← h c hc]
exact hc
-#align is_atom.unique_finpartition Finpartition.IsAtom.uniqueFinpartition
+#align is_atom.unique_finpartition IsAtom.uniqueFinpartition
instance [Fintype α] [DecidableEq α] (a : α) : Fintype (Finpartition a) :=
@Fintype.ofSurjective { p : Finset α // p.SupIndep id ∧ p.sup id = a ∧ ⊥ ∉ p } (Finpartition a) _
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -718,7 +718,7 @@ def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
variable {F : Finset (Finset α)}
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (Q «expr ⊆ » F) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (Q «expr ⊆ » F) -/
#print Finpartition.mem_atomise /-
theorem mem_atomise :
t ∈ (atomise s F).parts ↔
mathlib commit https://github.com/leanprover-community/mathlib/commit/9da1b3534b65d9661eb8f42443598a92bbb49211
@@ -347,7 +347,7 @@ section Inf
variable [DecidableEq α] {a b c : α}
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-instance : HasInf (Finpartition a) :=
+instance : Inf (Finpartition a) :=
⟨fun P Q =>
ofErase ((P.parts ×ˢ Q.parts).image fun bc => bc.1 ⊓ bc.2)
(by
@@ -369,9 +369,9 @@ instance : HasInf (Finpartition a) :=
/- warning: finpartition.parts_inf -> Finpartition.parts_inf is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (HasInf.inf.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.hasInf.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a) P Q)) (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_3 a b) (fun (bc : Prod.{u1, u1} α α) => HasInf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Prod.fst.{u1, u1} α α bc) (Prod.snd.{u1, u1} α α bc)) (Finset.product.{u1, u1} α α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2)))
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Inf.inf.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.hasInf.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a) P Q)) (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_3 a b) (fun (bc : Prod.{u1, u1} α α) => Inf.inf.{u1} α (SemilatticeInf.toHasInf.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) (Prod.fst.{u1, u1} α α bc) (Prod.snd.{u1, u1} α α bc)) (Finset.product.{u1, u1} α α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q))) (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2)))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (HasInf.inf.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.instHasInfFinpartitionToLattice.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a) P Q)) (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_3 a b) (fun (bc : Prod.{u1, u1} α α) => HasInf.inf.{u1} α (Lattice.toHasInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (Prod.fst.{u1, u1} α α bc) (Prod.snd.{u1, u1} α α bc)) (Finset.product.{u1, u1} α α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q))) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2)))
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Q : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a), Eq.{succ u1} (Finset.{u1} α) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a (Inf.inf.{u1} (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (Finpartition.instInfFinpartitionToLattice.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a) P Q)) (Finset.erase.{u1} α (fun (a : α) (b : α) => _inst_3 a b) (Finset.image.{u1, u1} (Prod.{u1, u1} α α) α (fun (a : α) (b : α) => _inst_3 a b) (fun (bc : Prod.{u1, u1} α α) => Inf.inf.{u1} α (Lattice.toInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)) (Prod.fst.{u1, u1} α α bc) (Prod.snd.{u1, u1} α α bc)) (Finset.product.{u1, u1} α α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P) (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a Q))) (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2)))
Case conversion may be inaccurate. Consider using '#align finpartition.parts_inf Finpartition.parts_infₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[simp]
@@ -507,9 +507,9 @@ end Bind
/- warning: finpartition.extend -> Finpartition.extend is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α}, (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b) -> (Eq.{succ u1} α (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c)
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α}, (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b) -> (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α}, (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b) -> (Eq.{succ u1} α (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c)
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} {b : α} {c : α}, (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) -> (Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))) -> (Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b) -> (Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c) -> (Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c)
Case conversion may be inaccurate. Consider using '#align finpartition.extend Finpartition.extendₓ'. -/
/-- Adds `b` to a finpartition of `a` to make a finpartition of `a ⊔ b`. -/
@[simps]
@@ -525,9 +525,9 @@ def extend (P : Finpartition a) (hb : b ≠ ⊥) (hab : Disjoint a b) (hc : a
/- warning: finpartition.card_extend -> Finpartition.card_extend is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (b : α) (c : α) {hb : Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))} {hab : Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b} {hc : Eq.{succ u1} α (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c}, Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c (Finpartition.extend.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a b c P hb hab hc))) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (b : α) (c : α) {hb : Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toHasBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))} {hab : Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b} {hc : Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c}, Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c (Finpartition.extend.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a b c P hb hab hc))) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (b : α) (c : α) {hb : Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))} {hab : Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b} {hc : Eq.{succ u1} α (HasSup.sup.{u1} α (SemilatticeSup.toHasSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c}, Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c (Finpartition.extend.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a b c P hb hab hc))) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
+ forall {α : Type.{u1}} [_inst_1 : DistribLattice.{u1} α] [_inst_2 : OrderBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1)))))] [_inst_3 : DecidableEq.{succ u1} α] {a : α} (P : Finpartition.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a) (b : α) (c : α) {hb : Ne.{succ u1} α b (Bot.bot.{u1} α (OrderBot.toBot.{u1} α (Preorder.toLE.{u1} α (PartialOrder.toPreorder.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))))) _inst_2))} {hab : Disjoint.{u1} α (SemilatticeInf.toPartialOrder.{u1} α (Lattice.toSemilatticeInf.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) _inst_2 a b} {hc : Eq.{succ u1} α (Sup.sup.{u1} α (SemilatticeSup.toSup.{u1} α (Lattice.toSemilatticeSup.{u1} α (DistribLattice.toLattice.{u1} α _inst_1))) a b) c}, Eq.{1} Nat (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 c (Finpartition.extend.{u1} α _inst_1 _inst_2 (fun (a : α) (b : α) => _inst_3 a b) a b c P hb hab hc))) (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Finset.card.{u1} α (Finpartition.parts.{u1} α (DistribLattice.toLattice.{u1} α _inst_1) _inst_2 a P)) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))
Case conversion may be inaccurate. Consider using '#align finpartition.card_extend Finpartition.card_extendₓ'. -/
theorem card_extend (P : Finpartition a) (b c : α) {hb : b ≠ ⊥} {hab : Disjoint a b}
{hc : a ⊔ b = c} : (P.extend hb hab hc).parts.card = P.parts.card + 1 :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -304,8 +304,8 @@ instance : Inf (Finpartition a) :=
ofErase ((P.parts ×ˢ Q.parts).image fun bc ↦ bc.1 ⊓ bc.2)
(by
rw [supIndep_iff_disjoint_erase]
- simp only [mem_image, and_imp, exists_prop, forall_exists_index, id.def, Prod.exists,
- mem_product, Finset.disjoint_sup_right, mem_erase, Ne.def]
+ simp only [mem_image, and_imp, exists_prop, forall_exists_index, id, Prod.exists,
+ mem_product, Finset.disjoint_sup_right, mem_erase, Ne]
rintro _ x₁ y₁ hx₁ hy₁ rfl _ h x₂ y₂ hx₂ hy₂ rfl
rcases eq_or_ne x₁ x₂ with (rfl | xdiff)
· refine' Disjoint.mono inf_le_right inf_le_right (Q.disjoint hy₁ hy₂ _)
@@ -31,6 +31,8 @@ We provide many ways to build finpartitions:
* `Finpartition.discrete`: The discrete finpartition of `s : Finset α` made of singletons.
* `Finpartition.bind`: Puts together the finpartitions of the parts of a finpartition into a new
finpartition.
+* `Finpartition.ofSetoid`: With `Fintype α`, constructs the finpartition of `univ : Finset α`
+ induced by the equivalence classes of `s : Setoid α`.
* `Finpartition.atomise`: Makes a finpartition of `s : Finset α` by breaking `s` along all finsets
in `F : Finset (Finset α)`. Two elements of `s` belong to the same part iff they belong to the
same elements of `F`.
@@ -48,8 +50,6 @@ not because the parts of `P` and the parts of `Q` have the same elements that `P
## TODO
-Link `Finpartition` and `Setoid.isPartition`.
-
The order is the wrong way around to make `Finpartition a` a graded order. Is it bad to depart from
the literature and turn the order around?
-/
@@ -119,6 +119,29 @@ def copy {a b : α} (P : Finpartition a) (h : a = b) : Finpartition b
not_bot_mem := P.not_bot_mem
#align finpartition.copy Finpartition.copy
+/-- Transfer a finpartition over an order isomorphism. -/
+def map {β : Type*} [Lattice β] [OrderBot β] {a : α} (e : α ≃o β) (P : Finpartition a) :
+ Finpartition (e a) where
+ parts := P.parts.map e
+ supIndep u hu _ hb hbu _ hx hxu := by
+ rw [← map_symm_subset] at hu
+ simp only [mem_map_equiv] at hb
+ have := P.supIndep hu hb (by simp [hbu]) (map_rel e.symm hx) ?_
+ · rw [← e.symm.map_bot] at this
+ exact e.symm.map_rel_iff.mp this
+ · convert e.symm.map_rel_iff.mpr hxu
+ rw [map_finset_sup, sup_map]
+ rfl
+ sup_parts := by simp [← P.sup_parts]
+ not_bot_mem := by
+ rw [mem_map_equiv]
+ convert P.not_bot_mem
+ exact e.symm.map_bot
+
+@[simp]
+theorem parts_map {β : Type*} [Lattice β] [OrderBot β] {a : α} {e : α ≃o β} {P : Finpartition a} :
+ (P.map e).parts = P.parts.map e := rfl
+
variable (α)
/-- The empty finpartition. -/
@@ -466,7 +489,7 @@ theorem nonempty_of_mem_parts {a : Finset α} (ha : a ∈ P.parts) : a.Nonempty
lemma eq_of_mem_parts (ht : t ∈ P.parts) (hu : u ∈ P.parts) (hat : a ∈ t) (hau : a ∈ u) : t = u :=
P.disjoint.elim ht hu <| not_disjoint_iff.2 ⟨a, hat, hau⟩
-theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by
+theorem exists_mem (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by
simp_rw [← P.sup_parts] at ha
exact mem_sup.1 ha
#align finpartition.exists_mem Finpartition.exists_mem
@@ -475,6 +498,29 @@ theorem biUnion_parts : P.parts.biUnion id = s :=
(sup_eq_biUnion _ _).symm.trans P.sup_parts
#align finpartition.bUnion_parts Finpartition.biUnion_parts
+theorem existsUnique_mem (ha : a ∈ s) : ∃! t, t ∈ P.parts ∧ a ∈ t := by
+ obtain ⟨t, ht, ht'⟩ := P.exists_mem ha
+ refine' ⟨t, ⟨ht, ht'⟩, _⟩
+ rintro u ⟨hu, hu'⟩
+ exact P.eq_of_mem_parts hu ht hu' ht'
+
+/-- The part of the finpartition that `a` lies in. -/
+def part (a : α) : Finset α := if ha : a ∈ s then choose (hp := P.existsUnique_mem ha) else ∅
+
+theorem part_mem (ha : a ∈ s) : P.part a ∈ P.parts := by simp [part, ha, choose_mem]
+
+theorem mem_part (ha : a ∈ s) : a ∈ P.part a := by simp [part, ha, choose_property]
+
+theorem part_surjOn : Set.SurjOn P.part s P.parts := fun p hp ↦ by
+ obtain ⟨x, hx⟩ := P.nonempty_of_mem_parts hp
+ have hx' := mem_of_subset ((le_sup hp).trans P.sup_parts.le) hx
+ use x, hx', (P.existsUnique_mem hx').unique ⟨P.part_mem hx', P.mem_part hx'⟩ ⟨hp, hx⟩
+
+theorem exists_subset_part_bijOn : ∃ r ⊆ s, Set.BijOn P.part r P.parts := by
+ obtain ⟨r, hrs, hr⟩ := P.part_surjOn.exists_bijOn_subset
+ lift r to Finset α using s.finite_toSet.subset hrs
+ exact ⟨r, mod_cast hrs, hr⟩
+
theorem sum_card_parts : ∑ i in P.parts, i.card = s.card := by
convert congr_arg Finset.card P.biUnion_parts
rw [card_biUnion P.supIndep.pairwiseDisjoint]
@@ -519,6 +565,45 @@ theorem card_parts_le_card (P : Finpartition s) : P.parts.card ≤ s.card := by
exact card_mono bot_le
#align finpartition.card_parts_le_card Finpartition.card_parts_le_card
+variable [Fintype α]
+
+/-- A setoid over a finite type induces a finpartition of the type's elements,
+where the parts are the setoid's equivalence classes. -/
+def ofSetoid (s : Setoid α) [DecidableRel s.r] : Finpartition (univ : Finset α) where
+ parts := univ.image fun a => univ.filter (s.r a)
+ supIndep := by
+ simp only [mem_univ, forall_true_left, supIndep_iff_pairwiseDisjoint, Set.PairwiseDisjoint,
+ Set.Pairwise, coe_image, coe_univ, Set.image_univ, Set.mem_range, ne_eq,
+ forall_exists_index, forall_apply_eq_imp_iff]
+ intro _ _ q
+ contrapose! q
+ rw [not_disjoint_iff] at q
+ obtain ⟨c, ⟨d1, d2⟩⟩ := q
+ rw [id_eq, mem_filter] at d1 d2
+ ext y
+ simp only [mem_univ, forall_true_left, mem_filter, true_and]
+ exact ⟨fun r1 => s.trans (s.trans d2.2 (s.symm d1.2)) r1,
+ fun r2 => s.trans (s.trans d1.2 (s.symm d2.2)) r2⟩
+ sup_parts := by
+ ext a
+ simp only [sup_image, Function.id_comp, mem_univ, mem_sup, mem_filter, true_and, iff_true]
+ use a; exact s.refl a
+ not_bot_mem := by
+ rw [bot_eq_empty, mem_image, not_exists]
+ intro a
+ simp only [filter_eq_empty_iff, not_forall, mem_univ, forall_true_left, true_and, not_not]
+ use a; exact s.refl a
+
+theorem mem_part_ofSetoid_iff_rel {s : Setoid α} [DecidableRel s.r] {b : α} :
+ b ∈ (ofSetoid s).part a ↔ s.r a b := by
+ simp_rw [part, ofSetoid, mem_univ, reduceDite]
+ generalize_proofs H
+ have := choose_spec _ _ H
+ simp only [mem_univ, mem_image, true_and] at this
+ obtain ⟨⟨_, hc⟩, this⟩ := this
+ simp only [← hc, mem_univ, mem_filter, true_and] at this ⊢
+ exact ⟨s.trans (s.symm this), s.trans this⟩
+
section Atomise
/-- Cuts `s` along the finsets in `F`: Two elements of `s` will be in the same part if they are
@@ -398,7 +398,7 @@ theorem card_bind (Q : ∀ i ∈ P.parts, Finpartition i) :
rintro ⟨b, hb⟩ - ⟨c, hc⟩ - hbc
rw [Finset.disjoint_left]
rintro d hdb hdc
- rw [Ne.def, Subtype.mk_eq_mk] at hbc
+ rw [Ne, Subtype.mk_eq_mk] at hbc
exact
(Q b hb).ne_bot hdb
(eq_bot_iff.2 <|
@@ -441,7 +441,7 @@ def avoid (b : α) : Finpartition (a \ b) :=
@[simp]
theorem mem_avoid : c ∈ (P.avoid b).parts ↔ ∃ d ∈ P.parts, ¬d ≤ b ∧ d \ b = c := by
- simp only [avoid, ofErase, mem_erase, Ne.def, mem_image, exists_prop, ← exists_and_left,
+ simp only [avoid, ofErase, mem_erase, Ne, mem_image, exists_prop, ← exists_and_left,
@and_left_comm (c ≠ ⊥)]
refine' exists_congr fun d ↦ and_congr_right' <| and_congr_left _
rintro rfl
Some small changes to adapt to the 2024-03-16 nightly that can land in advance.
@@ -436,7 +436,7 @@ def avoid (b : α) : Finpartition (a \ b) :=
ofErase
(P.parts.image (· \ b))
(P.disjoint.image_finset_of_le fun a ↦ sdiff_le).supIndep
- (by rw [sup_image, id_comp, Finset.sup_sdiff_right, ← id_def, P.sup_parts])
+ (by rw [sup_image, id_comp, Finset.sup_sdiff_right, ← Function.id_def, P.sup_parts])
#align finpartition.avoid Finpartition.avoid
@[simp]
@@ -557,12 +557,9 @@ def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
variable {F : Finset (Finset α)}
--- Porting note:
-/- ./././Mathport/Syntax/Translate/Basic.lean:632:2: warning: expanding binder collection
- (Q «expr ⊆ » F) -/
theorem mem_atomise :
t ∈ (atomise s F).parts ↔
- t.Nonempty ∧ ∃ (Q : _) (_ : Q ⊆ F), (s.filter fun i ↦ ∀ u ∈ F, u ∈ Q ↔ i ∈ u) = t := by
+ t.Nonempty ∧ ∃ Q ⊆ F, (s.filter fun i ↦ ∀ u ∈ F, u ∈ Q ↔ i ∈ u) = t := by
simp only [atomise, ofErase, bot_eq_empty, mem_erase, mem_image, nonempty_iff_ne_empty,
mem_singleton, and_comm, mem_powerset, exists_prop]
#align finpartition.mem_atomise Finpartition.mem_atomise
@@ -597,7 +594,7 @@ theorem card_filter_atomise_le_two_pow (ht : t ∈ F) :
rw [card_powerset, card_erase_of_mem ht]
rw [subset_iff]
simp_rw [mem_image, mem_powerset, mem_filter, and_imp, Finset.Nonempty, exists_imp, mem_atomise,
- and_imp, Finset.Nonempty, exists_imp]
+ and_imp, Finset.Nonempty, exists_imp, and_imp]
rintro P' i hi P PQ rfl hy₂ j _hj
refine' ⟨P.erase t, erase_subset_erase _ PQ, _⟩
simp only [insert_erase (((mem_filter.1 hi).2 _ ht).2 <| hy₂ hi)]
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -63,7 +63,7 @@ variable {α : Type*}
`a`. We forbid `⊥` as a part. -/
@[ext]
structure Finpartition [Lattice α] [OrderBot α] (a : α) where
- -- porting note: Docstrings added
+ -- Porting note: Docstrings added
/-- The elements of the finite partition of `a` -/
parts : Finset α
/-- The partition is supremum-independent -/
@@ -557,7 +557,7 @@ def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
variable {F : Finset (Finset α)}
--- porting note:
+-- Porting note:
/- ./././Mathport/Syntax/Translate/Basic.lean:632:2: warning: expanding binder collection
(Q «expr ⊆ » F) -/
theorem mem_atomise :
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -531,8 +531,8 @@ def atomise (s : Finset α) (F : Finset (Finset α)) : Finpartition s :=
rw [mem_coe, mem_image] at hx hy
obtain ⟨Q, hQ, rfl⟩ := hx
obtain ⟨R, hR, rfl⟩ := hy
- suffices h' : Q = R
- · subst h'
+ suffices h' : Q = R by
+ subst h'
exact of_eq_true (eq_self (
filter (fun i ↦ ∀ (t : Finset α), t ∈ F → (t ∈ Q ↔ i ∈ t)) s))
rw [id, mem_filter] at hz1 hz2
@@ -592,8 +592,8 @@ theorem card_filter_atomise_le_two_pow (ht : t ∈ F) :
((atomise s F).parts.filter fun u ↦ u ⊆ t ∧ u.Nonempty).card ≤ 2 ^ (F.card - 1) := by
suffices h :
((atomise s F).parts.filter fun u ↦ u ⊆ t ∧ u.Nonempty) ⊆
- (F.erase t).powerset.image fun P ↦ s.filter fun i ↦ ∀ x ∈ F, x ∈ insert t P ↔ i ∈ x
- · refine' (card_le_card h).trans (card_image_le.trans _)
+ (F.erase t).powerset.image fun P ↦ s.filter fun i ↦ ∀ x ∈ F, x ∈ insert t P ↔ i ∈ x by
+ refine' (card_le_card h).trans (card_image_le.trans _)
rw [card_powerset, card_erase_of_mem ht]
rw [subset_iff]
simp_rw [mem_image, mem_powerset, mem_filter, and_imp, Finset.Nonempty, exists_imp, mem_atomise,
Finpartition.supParts
(#10223)
This should be Finpartition.sup_parts
according to the naming convention
@@ -69,14 +69,14 @@ structure Finpartition [Lattice α] [OrderBot α] (a : α) where
/-- The partition is supremum-independent -/
supIndep : parts.SupIndep id
/-- The supremum of the partition is `a` -/
- supParts : parts.sup id = a
+ sup_parts : parts.sup id = a
/-- No element of the partition is bottom-/
not_bot_mem : ⊥ ∉ parts
deriving DecidableEq
#align finpartition Finpartition
#align finpartition.parts Finpartition.parts
#align finpartition.sup_indep Finpartition.supIndep
-#align finpartition.sup_parts Finpartition.supParts
+#align finpartition.sup_parts Finpartition.sup_parts
#align finpartition.not_bot_mem Finpartition.not_bot_mem
-- Porting note: attribute [protected] doesn't work
@@ -95,7 +95,7 @@ def ofErase [DecidableEq α] {a : α} (parts : Finset α) (sup_indep : parts.Sup
where
parts := parts.erase ⊥
supIndep := sup_indep.subset (erase_subset _ _)
- supParts := (sup_erase_bot _).trans sup_parts
+ sup_parts := (sup_erase_bot _).trans sup_parts
not_bot_mem := not_mem_erase _ _
#align finpartition.of_erase Finpartition.ofErase
@@ -105,7 +105,7 @@ def ofSubset {a b : α} (P : Finpartition a) {parts : Finset α} (subset : parts
(sup_parts : parts.sup id = b) : Finpartition b :=
{ parts := parts
supIndep := P.supIndep.subset subset
- supParts := sup_parts
+ sup_parts := sup_parts
not_bot_mem := fun h ↦ P.not_bot_mem (subset h) }
#align finpartition.of_subset Finpartition.ofSubset
@@ -115,7 +115,7 @@ def copy {a b : α} (P : Finpartition a) (h : a = b) : Finpartition b
where
parts := P.parts
supIndep := P.supIndep
- supParts := h ▸ P.supParts
+ sup_parts := h ▸ P.sup_parts
not_bot_mem := P.not_bot_mem
#align finpartition.copy Finpartition.copy
@@ -127,7 +127,7 @@ protected def empty : Finpartition (⊥ : α)
where
parts := ∅
supIndep := supIndep_empty _
- supParts := Finset.sup_empty
+ sup_parts := Finset.sup_empty
not_bot_mem := not_mem_empty ⊥
#align finpartition.empty Finpartition.empty
@@ -147,14 +147,14 @@ def indiscrete (ha : a ≠ ⊥) : Finpartition a
where
parts := {a}
supIndep := supIndep_singleton _ _
- supParts := Finset.sup_singleton
+ sup_parts := Finset.sup_singleton
not_bot_mem h := ha (mem_singleton.1 h).symm
#align finpartition.indiscrete Finpartition.indiscrete
variable (P : Finpartition a)
protected theorem le {b : α} (hb : b ∈ P.parts) : b ≤ a :=
- (le_sup hb).trans P.supParts.le
+ (le_sup hb).trans P.sup_parts.le
#align finpartition.le Finpartition.le
theorem ne_bot {b : α} (hb : b ∈ P.parts) : b ≠ ⊥ := by
@@ -171,7 +171,7 @@ protected theorem disjoint : (P.parts : Set α).PairwiseDisjoint id :=
variable {P}
theorem parts_eq_empty_iff : P.parts = ∅ ↔ a = ⊥ := by
- simp_rw [← P.supParts]
+ simp_rw [← P.sup_parts]
refine' ⟨fun h ↦ _, fun h ↦ eq_empty_iff_forall_not_mem.2 fun b hb ↦ P.not_bot_mem _⟩
· rw [h]
exact Finset.sup_empty
@@ -294,7 +294,7 @@ instance : Inf (Finpartition a) :=
trans P.parts.sup id ⊓ Q.parts.sup id
· simp_rw [Finset.sup_inf_distrib_right, Finset.sup_inf_distrib_left]
rfl
- · rw [P.supParts, Q.supParts, inf_idem])⟩
+ · rw [P.sup_parts, Q.sup_parts, inf_idem])⟩
@[simp]
theorem parts_inf (P Q : Finpartition a) :
@@ -329,7 +329,7 @@ theorem exists_le_of_le {a b : α} {P Q : Finpartition a} (h : P ≤ Q) (hb : b
∃ c ∈ P.parts, c ≤ b := by
by_contra H
refine' Q.ne_bot hb (disjoint_self.1 <| Disjoint.mono_right (Q.le hb) _)
- rw [← P.supParts, Finset.disjoint_sup_right]
+ rw [← P.sup_parts, Finset.disjoint_sup_right]
rintro c hc
obtain ⟨d, hd, hcd⟩ := h hc
refine' (Q.disjoint hb hd _).mono_right hcd
@@ -371,12 +371,12 @@ def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finparti
obtain rfl | hAB := eq_or_ne A B
· exact (Q A hA).disjoint ha hb h
· exact (P.disjoint hA hB hAB).mono ((Q A hA).le ha) ((Q B hB).le hb)
- supParts := by
+ sup_parts := by
simp_rw [sup_biUnion]
trans (sup P.parts id)
· rw [eq_comm, ← Finset.sup_attach]
- exact sup_congr rfl fun b _hb ↦ (Q b.1 b.2).supParts.symm
- · exact P.supParts
+ exact sup_congr rfl fun b _hb ↦ (Q b.1 b.2).sup_parts.symm
+ · exact P.sup_parts
not_bot_mem h := by
rw [Finset.mem_biUnion] at h
obtain ⟨⟨A, hA⟩, -, h⟩ := h
@@ -415,7 +415,7 @@ def extend (P : Finpartition a) (hb : b ≠ ⊥) (hab : Disjoint a b) (hc : a
supIndep := by
rw [supIndep_iff_pairwiseDisjoint, coe_insert]
exact P.disjoint.insert fun d hd _ ↦ hab.symm.mono_right <| P.le hd
- supParts := by rwa [sup_insert, P.supParts, id, _root_.sup_comm]
+ sup_parts := by rwa [sup_insert, P.sup_parts, id, _root_.sup_comm]
not_bot_mem h := (mem_insert.1 h).elim hb.symm P.not_bot_mem
#align finpartition.extend Finpartition.extend
@@ -436,7 +436,7 @@ def avoid (b : α) : Finpartition (a \ b) :=
ofErase
(P.parts.image (· \ b))
(P.disjoint.image_finset_of_le fun a ↦ sdiff_le).supIndep
- (by rw [sup_image, id_comp, Finset.sup_sdiff_right, ← id_def, P.supParts])
+ (by rw [sup_image, id_comp, Finset.sup_sdiff_right, ← id_def, P.sup_parts])
#align finpartition.avoid Finpartition.avoid
@[simp]
@@ -467,12 +467,12 @@ lemma eq_of_mem_parts (ht : t ∈ P.parts) (hu : u ∈ P.parts) (hat : a ∈ t)
P.disjoint.elim ht hu <| not_disjoint_iff.2 ⟨a, hat, hau⟩
theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by
- simp_rw [← P.supParts] at ha
+ simp_rw [← P.sup_parts] at ha
exact mem_sup.1 ha
#align finpartition.exists_mem Finpartition.exists_mem
theorem biUnion_parts : P.parts.biUnion id = s :=
- (sup_eq_biUnion _ _).symm.trans P.supParts
+ (sup_eq_biUnion _ _).symm.trans P.sup_parts
#align finpartition.bUnion_parts Finpartition.biUnion_parts
theorem sum_card_parts : ∑ i in P.parts, i.card = s.card := by
@@ -489,7 +489,7 @@ instance (s : Finset α) : Bot (Finpartition s) :=
(by
rw [Finset.coe_map]
exact Finset.pairwiseDisjoint_range_singleton.subset (Set.image_subset_range _ _))
- supParts := by rw [sup_map, id_comp, Embedding.coeFn_mk, Finset.sup_singleton']
+ sup_parts := by rw [sup_map, id_comp, Embedding.coeFn_mk, Finset.sup_singleton']
not_bot_mem := by simp }⟩
@[simp]
@@ -4,8 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies, Bhavik Mehta
-/
import Mathlib.Algebra.BigOperators.Basic
-import Mathlib.Order.Atoms.Finite
import Mathlib.Order.SupIndep
+import Mathlib.Order.Atoms
+import Mathlib.Data.Fintype.Powerset
#align_import order.partition.finpartition from "leanprover-community/mathlib"@"d6fad0e5bf2d6f48da9175d25c3dc5706b3834ce"
Function.left_id
and Function.comp.left_id
into Function.id_comp
.Function.right_id
and Function.comp.right_id
into Function.comp_id
.Function.comp_const_right
and Function.comp_const
into Function.comp_const
, use explicit arguments.Function.const_comp
to Mathlib.Init.Function
, use explicit arguments.@@ -289,7 +289,7 @@ instance : Inf (Finpartition a) :=
simp [t] at h
exact Disjoint.mono inf_le_left inf_le_left (P.disjoint hx₁ hx₂ xdiff))
(by
- rw [sup_image, comp.left_id, sup_product_left]
+ rw [sup_image, id_comp, sup_product_left]
trans P.parts.sup id ⊓ Q.parts.sup id
· simp_rw [Finset.sup_inf_distrib_right, Finset.sup_inf_distrib_left]
rfl
@@ -435,7 +435,7 @@ def avoid (b : α) : Finpartition (a \ b) :=
ofErase
(P.parts.image (· \ b))
(P.disjoint.image_finset_of_le fun a ↦ sdiff_le).supIndep
- (by rw [sup_image, comp.left_id, Finset.sup_sdiff_right, ← id_def, P.supParts])
+ (by rw [sup_image, id_comp, Finset.sup_sdiff_right, ← id_def, P.supParts])
#align finpartition.avoid Finpartition.avoid
@[simp]
@@ -488,7 +488,7 @@ instance (s : Finset α) : Bot (Finpartition s) :=
(by
rw [Finset.coe_map]
exact Finset.pairwiseDisjoint_range_singleton.subset (Set.image_subset_range _ _))
- supParts := by rw [sup_map, comp.left_id, Embedding.coeFn_mk, Finset.sup_singleton']
+ supParts := by rw [sup_map, id_comp, Embedding.coeFn_mk, Finset.sup_singleton']
not_bot_mem := by simp }⟩
@[simp]
Finset
lemma names (#8894)
Change a few lemma names that have historically bothered me.
Finset.card_le_of_subset
→ Finset.card_le_card
Multiset.card_le_of_le
→ Multiset.card_le_card
Multiset.card_lt_of_lt
→ Multiset.card_lt_card
Set.ncard_le_of_subset
→ Set.ncard_le_ncard
Finset.image_filter
→ Finset.filter_image
CompleteLattice.finset_sup_compact_of_compact
→ CompleteLattice.isCompactElement_finset_sup
@@ -573,7 +573,7 @@ theorem atomise_empty (hs : s.Nonempty) : (atomise s ∅).parts = {s} := by
#align finpartition.atomise_empty Finpartition.atomise_empty
theorem card_atomise_le : (atomise s F).parts.card ≤ 2 ^ F.card :=
- (card_le_of_subset <| erase_subset _ _).trans <| Finset.card_image_le.trans (card_powerset _).le
+ (card_le_card <| erase_subset _ _).trans <| Finset.card_image_le.trans (card_powerset _).le
#align finpartition.card_atomise_le Finpartition.card_atomise_le
theorem biUnion_filter_atomise (ht : t ∈ F) (hts : t ⊆ s) :
@@ -592,7 +592,7 @@ theorem card_filter_atomise_le_two_pow (ht : t ∈ F) :
suffices h :
((atomise s F).parts.filter fun u ↦ u ⊆ t ∧ u.Nonempty) ⊆
(F.erase t).powerset.image fun P ↦ s.filter fun i ↦ ∀ x ∈ F, x ∈ insert t P ↔ i ∈ x
- · refine' (card_le_of_subset h).trans (card_image_le.trans _)
+ · refine' (card_le_card h).trans (card_image_le.trans _)
rw [card_powerset, card_erase_of_mem ht]
rw [subset_iff]
simp_rw [mem_image, mem_powerset, mem_filter, and_imp, Finset.Nonempty, exists_imp, mem_atomise,
@@ -456,12 +456,15 @@ end Finpartition
namespace Finpartition
-variable [DecidableEq α] {s t : Finset α} (P : Finpartition s)
+variable [DecidableEq α] {s t u : Finset α} (P : Finpartition s) {a : α}
theorem nonempty_of_mem_parts {a : Finset α} (ha : a ∈ P.parts) : a.Nonempty :=
nonempty_iff_ne_empty.2 <| P.ne_bot ha
#align finpartition.nonempty_of_mem_parts Finpartition.nonempty_of_mem_parts
+lemma eq_of_mem_parts (ht : t ∈ P.parts) (hu : u ∈ P.parts) (hat : a ∈ t) (hau : a ∈ u) : t = u :=
+ P.disjoint.elim ht hu <| not_disjoint_iff.2 ⟨a, hat, hau⟩
+
theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by
simp_rw [← P.supParts] at ha
exact mem_sup.1 ha
@@ -102,7 +102,7 @@ def ofErase [DecidableEq α] {a : α} (parts : Finset α) (sup_indep : parts.Sup
@[simps]
def ofSubset {a b : α} (P : Finpartition a) {parts : Finset α} (subset : parts ⊆ P.parts)
(sup_parts : parts.sup id = b) : Finpartition b :=
- { parts :=parts
+ { parts := parts
supIndep := P.supIndep.subset subset
supParts := sup_parts
not_bot_mem := fun h ↦ P.not_bot_mem (subset h) }
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -56,7 +56,7 @@ the literature and turn the order around?
open BigOperators Finset Function
-variable {α : Type _}
+variable {α : Type*}
/-- A finite partition of `a : α` is a pairwise disjoint finite set of elements whose supremum is
`a`. We forbid `⊥` as a part. -/
@@ -2,16 +2,13 @@
Copyright (c) 2022 Yaël Dillies, Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies, Bhavik Mehta
-
-! This file was ported from Lean 3 source module order.partition.finpartition
-! leanprover-community/mathlib commit d6fad0e5bf2d6f48da9175d25c3dc5706b3834ce
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.BigOperators.Basic
import Mathlib.Order.Atoms.Finite
import Mathlib.Order.SupIndep
+#align_import order.partition.finpartition from "leanprover-community/mathlib"@"d6fad0e5bf2d6f48da9175d25c3dc5706b3834ce"
+
/-!
# Finite partitions
∑'
precedence (#5615)
∑
, ∏
and variants).([^a-zA-Zα-ωΑ-Ω'𝓝ℳ₀𝕂ₛ)]) \(([∑∏][^()∑∏]*,[^()∑∏:]*)\) ([⊂⊆=<≤])
replaced by $1 $2 $3
@@ -474,7 +474,7 @@ theorem biUnion_parts : P.parts.biUnion id = s :=
(sup_eq_biUnion _ _).symm.trans P.supParts
#align finpartition.bUnion_parts Finpartition.biUnion_parts
-theorem sum_card_parts : (∑ i in P.parts, i.card) = s.card := by
+theorem sum_card_parts : ∑ i in P.parts, i.card = s.card := by
convert congr_arg Finset.card P.biUnion_parts
rw [card_biUnion P.supIndep.pairwiseDisjoint]
rfl
@@ -561,7 +561,7 @@ variable {F : Finset (Finset α)}
(Q «expr ⊆ » F) -/
theorem mem_atomise :
t ∈ (atomise s F).parts ↔
- t.Nonempty ∧ ∃ (Q : _)(_ : Q ⊆ F), (s.filter fun i ↦ ∀ u ∈ F, u ∈ Q ↔ i ∈ u) = t := by
+ t.Nonempty ∧ ∃ (Q : _) (_ : Q ⊆ F), (s.filter fun i ↦ ∀ u ∈ F, u ∈ Q ↔ i ∈ u) = t := by
simp only [atomise, ofErase, bot_eq_empty, mem_erase, mem_image, nonempty_iff_ne_empty,
mem_singleton, and_comm, mem_powerset, exists_prop]
#align finpartition.mem_atomise Finpartition.mem_atomise
SProd
to implement overloaded notation · ×ˢ ·
(#4200)
Currently, the following notations are changed from · ×ˢ ·
because Lean 4 can't deal with ambiguous notations.
| Definition | Notation |
| :
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Chris Hughes <chrishughes24@gmail.com>
@@ -280,7 +280,7 @@ variable [DecidableEq α] {a b c : α}
instance : Inf (Finpartition a) :=
⟨fun P Q ↦
- ofErase ((P.parts ×ᶠ Q.parts).image fun bc ↦ bc.1 ⊓ bc.2)
+ ofErase ((P.parts ×ˢ Q.parts).image fun bc ↦ bc.1 ⊓ bc.2)
(by
rw [supIndep_iff_disjoint_erase]
simp only [mem_image, and_imp, exists_prop, forall_exists_index, id.def, Prod.exists,
@@ -300,7 +300,7 @@ instance : Inf (Finpartition a) :=
@[simp]
theorem parts_inf (P Q : Finpartition a) :
- (P ⊓ Q).parts = ((P.parts ×ᶠ Q.parts).image fun bc : α × α ↦ bc.1 ⊓ bc.2).erase ⊥ :=
+ (P ⊓ Q).parts = ((P.parts ×ˢ Q.parts).image fun bc : α × α ↦ bc.1 ⊓ bc.2).erase ⊥ :=
rfl
#align finpartition.parts_inf Finpartition.parts_inf
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -363,30 +363,30 @@ finpartition of `a` obtained by juxtaposing all the subpartitions. -/
@[simps]
def bind (P : Finpartition a) (Q : ∀ i ∈ P.parts, Finpartition i) : Finpartition a
where
- parts := P.parts.attach.bunionᵢ fun i ↦ (Q i.1 i.2).parts
+ parts := P.parts.attach.biUnion fun i ↦ (Q i.1 i.2).parts
supIndep := by
rw [supIndep_iff_pairwiseDisjoint]
rintro a ha b hb h
- rw [Finset.mem_coe, Finset.mem_bunionᵢ] at ha hb
+ rw [Finset.mem_coe, Finset.mem_biUnion] at ha hb
obtain ⟨⟨A, hA⟩, -, ha⟩ := ha
obtain ⟨⟨B, hB⟩, -, hb⟩ := hb
obtain rfl | hAB := eq_or_ne A B
· exact (Q A hA).disjoint ha hb h
· exact (P.disjoint hA hB hAB).mono ((Q A hA).le ha) ((Q B hB).le hb)
supParts := by
- simp_rw [sup_bunionᵢ]
+ simp_rw [sup_biUnion]
trans (sup P.parts id)
· rw [eq_comm, ← Finset.sup_attach]
exact sup_congr rfl fun b _hb ↦ (Q b.1 b.2).supParts.symm
· exact P.supParts
not_bot_mem h := by
- rw [Finset.mem_bunionᵢ] at h
+ rw [Finset.mem_biUnion] at h
obtain ⟨⟨A, hA⟩, -, h⟩ := h
exact (Q A hA).not_bot_mem h
#align finpartition.bind Finpartition.bind
theorem mem_bind : b ∈ (P.bind Q).parts ↔ ∃ A hA, b ∈ (Q A hA).parts := by
- rw [bind, mem_bunionᵢ]
+ rw [bind, mem_biUnion]
constructor
· rintro ⟨⟨A, hA⟩, -, h⟩
exact ⟨A, hA, h⟩
@@ -396,7 +396,7 @@ theorem mem_bind : b ∈ (P.bind Q).parts ↔ ∃ A hA, b ∈ (Q A hA).parts :=
theorem card_bind (Q : ∀ i ∈ P.parts, Finpartition i) :
(P.bind Q).parts.card = ∑ A in P.parts.attach, (Q _ A.2).parts.card := by
- apply card_bunionᵢ
+ apply card_biUnion
rintro ⟨b, hb⟩ - ⟨c, hc⟩ - hbc
rw [Finset.disjoint_left]
rintro d hdb hdc
@@ -470,13 +470,13 @@ theorem exists_mem {a : α} (ha : a ∈ s) : ∃ t ∈ P.parts, a ∈ t := by
exact mem_sup.1 ha
#align finpartition.exists_mem Finpartition.exists_mem
-theorem bunionᵢ_parts : P.parts.bunionᵢ id = s :=
- (sup_eq_bunionᵢ _ _).symm.trans P.supParts
-#align finpartition.bUnion_parts Finpartition.bunionᵢ_parts
+theorem biUnion_parts : P.parts.biUnion id = s :=
+ (sup_eq_biUnion _ _).symm.trans P.supParts
+#align finpartition.bUnion_parts Finpartition.biUnion_parts
theorem sum_card_parts : (∑ i in P.parts, i.card) = s.card := by
- convert congr_arg Finset.card P.bunionᵢ_parts
- rw [card_bunionᵢ P.supIndep.pairwiseDisjoint]
+ convert congr_arg Finset.card P.biUnion_parts
+ rw [card_biUnion P.supIndep.pairwiseDisjoint]
rfl
#align finpartition.sum_card_parts Finpartition.sum_card_parts
@@ -576,16 +576,16 @@ theorem card_atomise_le : (atomise s F).parts.card ≤ 2 ^ F.card :=
(card_le_of_subset <| erase_subset _ _).trans <| Finset.card_image_le.trans (card_powerset _).le
#align finpartition.card_atomise_le Finpartition.card_atomise_le
-theorem bunionᵢ_filter_atomise (ht : t ∈ F) (hts : t ⊆ s) :
- ((atomise s F).parts.filter fun u ↦ u ⊆ t ∧ u.Nonempty).bunionᵢ id = t := by
+theorem biUnion_filter_atomise (ht : t ∈ F) (hts : t ⊆ s) :
+ ((atomise s F).parts.filter fun u ↦ u ⊆ t ∧ u.Nonempty).biUnion id = t := by
ext a
- refine' mem_bunionᵢ.trans ⟨fun ⟨u, hu, ha⟩ ↦ (mem_filter.1 hu).2.1 ha, fun ha ↦ _⟩
+ refine' mem_biUnion.trans ⟨fun ⟨u, hu, ha⟩ ↦ (mem_filter.1 hu).2.1 ha, fun ha ↦ _⟩
obtain ⟨u, hu, hau⟩ := (atomise s F).exists_mem (hts ha)
refine' ⟨u, mem_filter.2 ⟨hu, fun b hb ↦ _, _, hau⟩, hau⟩
obtain ⟨Q, _hQ, rfl⟩ := (mem_atomise.1 hu).2
rw [mem_filter] at hau hb
rwa [← hb.2 _ ht, hau.2 _ ht]
-#align finpartition.bUnion_filter_atomise Finpartition.bunionᵢ_filter_atomise
+#align finpartition.bUnion_filter_atomise Finpartition.biUnion_filter_atomise
theorem card_filter_atomise_le_two_pow (ht : t ∈ F) :
((atomise s F).parts.filter fun u ↦ u ⊆ t ∧ u.Nonempty).card ≤ 2 ^ (F.card - 1) := by
_root_
(#3630)
Mathport doesn't understand this, and apparently nor do many of the humans fixing the errors it creates.
If your #align
statement complains the def doesn't exist, don't change the #align; work out why it doesn't exist instead.
Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -197,7 +197,7 @@ instance : Unique (Finpartition (⊥ : α)) :=
-- See note [reducible non instances]
/-- There's a unique partition of an atom. -/
@[reducible]
-def IsAtom.uniqueFinpartition (ha : IsAtom a) : Unique (Finpartition a)
+def _root_.IsAtom.uniqueFinpartition (ha : IsAtom a) : Unique (Finpartition a)
where
default := indiscrete ha.1
uniq P := by
@@ -209,7 +209,7 @@ def IsAtom.uniqueFinpartition (ha : IsAtom a) : Unique (Finpartition a)
obtain ⟨c, hc⟩ := P.parts_nonempty ha.1
simp_rw [← h c hc]
exact hc
-#align is_atom.unique_finpartition Finpartition.IsAtom.uniqueFinpartition
+#align is_atom.unique_finpartition IsAtom.uniqueFinpartition
instance [Fintype α] [DecidableEq α] (a : α) : Fintype (Finpartition a) :=
@Fintype.ofSurjective { p : Finset α // p.SupIndep id ∧ p.sup id = a ∧ ⊥ ∉ p } (Finpartition a) _
@@ -278,7 +278,7 @@ section Inf
variable [DecidableEq α] {a b c : α}
-instance : HasInf (Finpartition a) :=
+instance : Inf (Finpartition a) :=
⟨fun P Q ↦
ofErase ((P.parts ×ᶠ Q.parts).image fun bc ↦ bc.1 ⊓ bc.2)
(by
@@ -306,7 +306,7 @@ theorem parts_inf (P Q : Finpartition a) :
instance : SemilatticeInf (Finpartition a) :=
{ (inferInstance : PartialOrder (Finpartition a)),
- (inferInstance : HasInf (Finpartition a)) with
+ (inferInstance : Inf (Finpartition a)) with
inf_le_left := fun P Q b hb ↦ by
obtain ⟨c, hc, rfl⟩ := mem_image.1 (mem_of_mem_erase hb)
rw [mem_product] at hc
simps
, just raises a linter error if you run simps
in a more expensive mode without writing !
.to_additive, simps
. Will do that systematically in future PR.OmegaCompletePartialOrder.ContinuousHom.ofMono
a bitCo-authored-by: Yury G. Kudryashov <urkud@urkud.name>
@@ -433,7 +433,7 @@ section GeneralizedBooleanAlgebra
variable [GeneralizedBooleanAlgebra α] [DecidableEq α] {a b c : α} (P : Finpartition a)
/-- Restricts a finpartition to avoid a given element. -/
-@[simps]
+@[simps!]
def avoid (b : α) : Finpartition (a \ b) :=
ofErase
(P.parts.image (· \ b))
Co-authored-by: Moritz Firsching <firsching@google.com> Co-authored-by: int-y1 <jason_yuen2007@hotmail.com> Co-authored-by: Joachim Breitner <mail@joachim-breitner.de>
The unported dependencies are