combinatorics.set_family.lym
β·
Mathlib.Combinatorics.SetFamily.LYM
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)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -5,7 +5,7 @@ Authors: Bhavik Mehta, Alena Gusakov, YaΓ«l Dillies
-/
import Algebra.BigOperators.Ring
import Algebra.Order.Field.Basic
-import Combinatorics.DoubleCounting
+import Combinatorics.Enumerative.DoubleCounting
import Combinatorics.SetFamily.Shadow
import Data.Rat.Order
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -78,11 +78,11 @@ theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
rw [β hπ.shadow hs, β card_compl, β card_image_of_inj_on (insert_inj_on' _)]
refine' card_le_of_subset fun t ht => _
infer_instance
- rw [mem_bipartite_above] at ht
+ rw [mem_bipartite_above] at ht
have : β
β π := by
rw [β mem_coe, hπ.empty_mem_iff, coe_eq_singleton]
rintro rfl
- rwa [shadow_singleton_empty] at hs
+ rwa [shadow_singleton_empty] at hs
obtain β¨a, ha, rflβ© :=
exists_eq_insert_iff.2 β¨ht.2, by rw [(sized_shadow_iff this).1 hπ.shadow ht.1, hπ.shadow hs]β©
exact mem_image_of_mem _ (mem_compl.2 ha)
@@ -103,7 +103,7 @@ theorem card_div_choose_le_card_shadow_div_choose (hr : r β 0) (hπ : (π
Β· cases r
Β· exact (hr rfl).elim
rw [Nat.succ_eq_add_one] at *
- rw [tsub_add_eq_add_tsub hr', add_tsub_add_eq_tsub_right] at hπ
+ rw [tsub_add_eq_add_tsub hr', add_tsub_add_eq_tsub_right] at hπ
apply le_of_mul_le_mul_right _ (pos_iff_ne_zero.2 hr)
convert Nat.mul_le_mul_right ((Fintype.card Ξ±).choose r) hπ using 1
Β· simp [mul_assoc, Nat.choose_succ_right_eq]
@@ -188,7 +188,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) : Disjoint (π # m) ((β ) (falling n π)) :=
disjoint_right.2 fun s hβ hβ =>
by
- simp_rw [mem_shadow_iff, exists_prop, mem_falling] at hβ
+ simp_rw [mem_shadow_iff, exists_prop, mem_falling] at hβ
obtain β¨s, β¨β¨t, ht, hstβ©, hsβ©, a, ha, rflβ© := hβ
refine' hπ (slice_subset hβ) ht _ ((erase_subset _ _).trans hst)
rintro rfl
@@ -256,13 +256,13 @@ theorem IsAntichain.sperner [Fintype Ξ±] {π : Finset (Finset Ξ±)}
β r in Iic (Fintype.card Ξ±), ((π # r).card : β) / (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2) β€
1
by
- rwa [β sum_div, β Nat.cast_sum, div_le_one, cast_le, sum_card_slice] at this
+ rwa [β sum_div, β Nat.cast_sum, div_le_one, cast_le, sum_card_slice] at this
norm_cast
exact choose_pos (Nat.div_le_self _ _)
rw [Iic_eq_Icc, β Ico_succ_right, bot_eq_zero, Ico_zero_eq_range]
refine' (sum_le_sum fun r hr => _).trans (sum_card_slice_div_choose_le_one hπ)
- rw [mem_range] at hr
- refine' div_le_div_of_le_left _ _ _ <;> norm_cast
+ rw [mem_range] at hr
+ refine' div_le_div_of_nonneg_left _ _ _ <;> norm_cast
Β· exact Nat.zero_le _
Β· exact choose_pos (lt_succ_iff.1 hr)
Β· exact choose_le_middle _ _
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -230,6 +230,14 @@ theorem sum_card_slice_div_choose_le_one [Fintype Ξ±]
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) :
β r in range (Fintype.card Ξ± + 1), ((π # r).card : π) / (Fintype.card Ξ±).choose r β€ 1 := by
classical
+ rw [β sum_flip]
+ refine' (le_card_falling_div_choose le_rfl hπ).trans _
+ rw [div_le_iff] <;> norm_cast
+ Β·
+ simpa only [Nat.sub_self, one_mul, Nat.choose_zero_right, falling] using
+ (sized_falling 0 π).card_le
+ Β· rw [tsub_self, choose_zero_right]
+ exact zero_lt_one
#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_one
-/
@@ -242,7 +250,22 @@ end Lym
maximal layer in `finset Ξ±`. This precisely means that `finset Ξ±` is a Sperner order. -/
theorem IsAntichain.sperner [Fintype Ξ±] {π : Finset (Finset Ξ±)}
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) :
- π.card β€ (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2) := by classical
+ π.card β€ (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2) := by
+ classical
+ suffices
+ β r in Iic (Fintype.card Ξ±), ((π # r).card : β) / (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2) β€
+ 1
+ by
+ rwa [β sum_div, β Nat.cast_sum, div_le_one, cast_le, sum_card_slice] at this
+ norm_cast
+ exact choose_pos (Nat.div_le_self _ _)
+ rw [Iic_eq_Icc, β Ico_succ_right, bot_eq_zero, Ico_zero_eq_range]
+ refine' (sum_le_sum fun r hr => _).trans (sum_card_slice_div_choose_le_one hπ)
+ rw [mem_range] at hr
+ refine' div_le_div_of_le_left _ _ _ <;> norm_cast
+ Β· exact Nat.zero_le _
+ Β· exact choose_pos (lt_succ_iff.1 hr)
+ Β· exact choose_le_middle _ _
#align is_antichain.sperner IsAntichain.sperner
end Finset
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -230,14 +230,6 @@ theorem sum_card_slice_div_choose_le_one [Fintype Ξ±]
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) :
β r in range (Fintype.card Ξ± + 1), ((π # r).card : π) / (Fintype.card Ξ±).choose r β€ 1 := by
classical
- rw [β sum_flip]
- refine' (le_card_falling_div_choose le_rfl hπ).trans _
- rw [div_le_iff] <;> norm_cast
- Β·
- simpa only [Nat.sub_self, one_mul, Nat.choose_zero_right, falling] using
- (sized_falling 0 π).card_le
- Β· rw [tsub_self, choose_zero_right]
- exact zero_lt_one
#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_one
-/
@@ -250,22 +242,7 @@ end Lym
maximal layer in `finset Ξ±`. This precisely means that `finset Ξ±` is a Sperner order. -/
theorem IsAntichain.sperner [Fintype Ξ±] {π : Finset (Finset Ξ±)}
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) :
- π.card β€ (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2) := by
- classical
- suffices
- β r in Iic (Fintype.card Ξ±), ((π # r).card : β) / (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2) β€
- 1
- by
- rwa [β sum_div, β Nat.cast_sum, div_le_one, cast_le, sum_card_slice] at this
- norm_cast
- exact choose_pos (Nat.div_le_self _ _)
- rw [Iic_eq_Icc, β Ico_succ_right, bot_eq_zero, Ico_zero_eq_range]
- refine' (sum_le_sum fun r hr => _).trans (sum_card_slice_div_choose_le_one hπ)
- rw [mem_range] at hr
- refine' div_le_div_of_le_left _ _ _ <;> norm_cast
- Β· exact Nat.zero_le _
- Β· exact choose_pos (lt_succ_iff.1 hr)
- Β· exact choose_le_middle _ _
+ π.card β€ (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2) := by classical
#align is_antichain.sperner IsAntichain.sperner
end Finset
mathlib commit https://github.com/leanprover-community/mathlib/commit/b1abe23ae96fef89ad30d9f4362c307f72a55010
@@ -129,7 +129,7 @@ variable [DecidableEq Ξ±] (k : β) (π : Finset (Finset Ξ±))
#print Finset.falling /-
/-- `falling k π` is all the finsets of cardinality `k` which are a subset of something in `π`. -/
def falling : Finset (Finset Ξ±) :=
- π.sup <| powersetLen k
+ π.sup <| powersetCard k
#align finset.falling Finset.falling
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2022 Bhavik Mehta, YaΓ«l Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bhavik Mehta, Alena Gusakov, YaΓ«l Dillies
-/
-import Mathbin.Algebra.BigOperators.Ring
-import Mathbin.Algebra.Order.Field.Basic
-import Mathbin.Combinatorics.DoubleCounting
-import Mathbin.Combinatorics.SetFamily.Shadow
-import Mathbin.Data.Rat.Order
+import Algebra.BigOperators.Ring
+import Algebra.Order.Field.Basic
+import Combinatorics.DoubleCounting
+import Combinatorics.SetFamily.Shadow
+import Data.Rat.Order
#align_import combinatorics.set_family.lym from "leanprover-community/mathlib"@"0ebfdb71919ac6ca5d7fbc61a082fa2519556818"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2022 Bhavik Mehta, YaΓ«l Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bhavik Mehta, Alena Gusakov, YaΓ«l Dillies
-
-! This file was ported from Lean 3 source module combinatorics.set_family.lym
-! leanprover-community/mathlib commit 0ebfdb71919ac6ca5d7fbc61a082fa2519556818
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.BigOperators.Ring
import Mathbin.Algebra.Order.Field.Basic
@@ -14,6 +9,8 @@ import Mathbin.Combinatorics.DoubleCounting
import Mathbin.Combinatorics.SetFamily.Shadow
import Mathbin.Data.Rat.Order
+#align_import combinatorics.set_family.lym from "leanprover-community/mathlib"@"0ebfdb71919ac6ca5d7fbc61a082fa2519556818"
+
/-!
# Lubell-Yamamoto-Meshalkin inequality and Sperner's theorem
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -92,6 +92,7 @@ theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
#align finset.card_mul_le_card_shadow_mul Finset.card_mul_le_card_shadow_mul
-/
+#print Finset.card_div_choose_le_card_shadow_div_choose /-
/-- The downward **local LYM inequality**. `π` takes up less of `Ξ±^(r)` (the finsets of card `r`)
than `βπ` takes up of `Ξ±^(r - 1)`. -/
theorem card_div_choose_le_card_shadow_div_choose (hr : r β 0) (hπ : (π : Set (Finset Ξ±)).Sized r) :
@@ -115,6 +116,7 @@ theorem card_div_choose_le_card_shadow_div_choose (hr : r β 0) (hπ : (π
Β· exact Nat.choose_pos hr'
Β· exact Nat.choose_pos (r.pred_le.trans hr')
#align finset.card_div_choose_le_card_shadow_div_choose Finset.card_div_choose_le_card_shadow_div_choose
+-/
end LocalLym
@@ -136,9 +138,11 @@ def falling : Finset (Finset Ξ±) :=
variable {π k} {s : Finset Ξ±}
+#print Finset.mem_falling /-
theorem mem_falling : s β falling k π β (β t β π, s β t) β§ s.card = k := by
simp_rw [falling, mem_sup, mem_powerset_len, exists_and_right]
#align finset.mem_falling Finset.mem_falling
+-/
variable (π k)
@@ -194,6 +198,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
exact not_mem_erase _ _ (hst ha)
#align is_antichain.disjoint_slice_shadow_falling IsAntichain.disjoint_slice_shadow_falling
+#print Finset.le_card_falling_div_choose /-
/-- A bound on any top part of the sum in LYM in terms of the size of `falling k π`. -/
theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) :
@@ -215,11 +220,13 @@ theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
sized_falling _ _)
_
#align finset.le_card_falling_div_choose Finset.le_card_falling_div_choose
+-/
end Falling
variable {π : Finset (Finset Ξ±)} {s : Finset Ξ±} {k : β}
+#print Finset.sum_card_slice_div_choose_le_one /-
/-- The **Lubell-Yamamoto-Meshalkin inequality**. If `π` is an antichain, then the sum of the
proportion of elements it takes from each layer is less than `1`. -/
theorem sum_card_slice_div_choose_le_one [Fintype Ξ±]
@@ -235,6 +242,7 @@ theorem sum_card_slice_div_choose_le_one [Fintype Ξ±]
Β· rw [tsub_self, choose_zero_right]
exact zero_lt_one
#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_one
+-/
end Lym
mathlib commit https://github.com/leanprover-community/mathlib/commit/a3e83f0fa4391c8740f7d773a7a9b74e311ae2a3
@@ -197,8 +197,8 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
/-- A bound on any top part of the sum in LYM in terms of the size of `falling k π`. -/
theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) :
- (β r in range (k + 1),
- ((π # (Fintype.card Ξ± - r)).card : π) / (Fintype.card Ξ±).choose (Fintype.card Ξ± - r)) β€
+ β r in range (k + 1),
+ ((π # (Fintype.card Ξ± - r)).card : π) / (Fintype.card Ξ±).choose (Fintype.card Ξ± - r) β€
(falling (Fintype.card Ξ± - k) π).card / (Fintype.card Ξ±).choose (Fintype.card Ξ± - k) :=
by
induction' k with k ih
@@ -224,7 +224,7 @@ variable {π : Finset (Finset Ξ±)} {s : Finset Ξ±} {k : β}
proportion of elements it takes from each layer is less than `1`. -/
theorem sum_card_slice_div_choose_le_one [Fintype Ξ±]
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) :
- (β r in range (Fintype.card Ξ± + 1), ((π # r).card : π) / (Fintype.card Ξ±).choose r) β€ 1 := by
+ β r in range (Fintype.card Ξ± + 1), ((π # r).card : π) / (Fintype.card Ξ±).choose r β€ 1 := by
classical
rw [β sum_flip]
refine' (le_card_falling_div_choose le_rfl hπ).trans _
@@ -248,8 +248,7 @@ theorem IsAntichain.sperner [Fintype Ξ±] {π : Finset (Finset Ξ±)}
π.card β€ (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2) := by
classical
suffices
- (β r in Iic (Fintype.card Ξ±),
- ((π # r).card : β) / (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2)) β€
+ β r in Iic (Fintype.card Ξ±), ((π # r).card : β) / (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2) β€
1
by
rwa [β sum_div, β Nat.cast_sum, div_le_one, cast_le, sum_card_slice] at this
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -226,14 +226,14 @@ theorem sum_card_slice_div_choose_le_one [Fintype Ξ±]
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) :
(β r in range (Fintype.card Ξ± + 1), ((π # r).card : π) / (Fintype.card Ξ±).choose r) β€ 1 := by
classical
- rw [β sum_flip]
- refine' (le_card_falling_div_choose le_rfl hπ).trans _
- rw [div_le_iff] <;> norm_cast
- Β·
- simpa only [Nat.sub_self, one_mul, Nat.choose_zero_right, falling] using
- (sized_falling 0 π).card_le
- Β· rw [tsub_self, choose_zero_right]
- exact zero_lt_one
+ rw [β sum_flip]
+ refine' (le_card_falling_div_choose le_rfl hπ).trans _
+ rw [div_le_iff] <;> norm_cast
+ Β·
+ simpa only [Nat.sub_self, one_mul, Nat.choose_zero_right, falling] using
+ (sized_falling 0 π).card_le
+ Β· rw [tsub_self, choose_zero_right]
+ exact zero_lt_one
#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_one
end Lym
@@ -247,21 +247,21 @@ theorem IsAntichain.sperner [Fintype Ξ±] {π : Finset (Finset Ξ±)}
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) :
π.card β€ (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2) := by
classical
- suffices
- (β r in Iic (Fintype.card Ξ±),
- ((π # r).card : β) / (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2)) β€
- 1
- by
- rwa [β sum_div, β Nat.cast_sum, div_le_one, cast_le, sum_card_slice] at this
- norm_cast
- exact choose_pos (Nat.div_le_self _ _)
- rw [Iic_eq_Icc, β Ico_succ_right, bot_eq_zero, Ico_zero_eq_range]
- refine' (sum_le_sum fun r hr => _).trans (sum_card_slice_div_choose_le_one hπ)
- rw [mem_range] at hr
- refine' div_le_div_of_le_left _ _ _ <;> norm_cast
- Β· exact Nat.zero_le _
- Β· exact choose_pos (lt_succ_iff.1 hr)
- Β· exact choose_le_middle _ _
+ suffices
+ (β r in Iic (Fintype.card Ξ±),
+ ((π # r).card : β) / (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2)) β€
+ 1
+ by
+ rwa [β sum_div, β Nat.cast_sum, div_le_one, cast_le, sum_card_slice] at this
+ norm_cast
+ exact choose_pos (Nat.div_le_self _ _)
+ rw [Iic_eq_Icc, β Ico_succ_right, bot_eq_zero, Ico_zero_eq_range]
+ refine' (sum_le_sum fun r hr => _).trans (sum_card_slice_div_choose_le_one hπ)
+ rw [mem_range] at hr
+ refine' div_le_div_of_le_left _ _ _ <;> norm_cast
+ Β· exact Nat.zero_le _
+ Β· exact choose_pos (lt_succ_iff.1 hr)
+ Β· exact choose_le_middle _ _
#align is_antichain.sperner IsAntichain.sperner
end Finset
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -81,11 +81,11 @@ theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
rw [β hπ.shadow hs, β card_compl, β card_image_of_inj_on (insert_inj_on' _)]
refine' card_le_of_subset fun t ht => _
infer_instance
- rw [mem_bipartite_above] at ht
+ rw [mem_bipartite_above] at ht
have : β
β π := by
rw [β mem_coe, hπ.empty_mem_iff, coe_eq_singleton]
rintro rfl
- rwa [shadow_singleton_empty] at hs
+ rwa [shadow_singleton_empty] at hs
obtain β¨a, ha, rflβ© :=
exists_eq_insert_iff.2 β¨ht.2, by rw [(sized_shadow_iff this).1 hπ.shadow ht.1, hπ.shadow hs]β©
exact mem_image_of_mem _ (mem_compl.2 ha)
@@ -105,7 +105,7 @@ theorem card_div_choose_le_card_shadow_div_choose (hr : r β 0) (hπ : (π
Β· cases r
Β· exact (hr rfl).elim
rw [Nat.succ_eq_add_one] at *
- rw [tsub_add_eq_add_tsub hr', add_tsub_add_eq_tsub_right] at hπ
+ rw [tsub_add_eq_add_tsub hr', add_tsub_add_eq_tsub_right] at hπ
apply le_of_mul_le_mul_right _ (pos_iff_ne_zero.2 hr)
convert Nat.mul_le_mul_right ((Fintype.card Ξ±).choose r) hπ using 1
Β· simp [mul_assoc, Nat.choose_succ_right_eq]
@@ -187,7 +187,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) : Disjoint (π # m) ((β ) (falling n π)) :=
disjoint_right.2 fun s hβ hβ =>
by
- simp_rw [mem_shadow_iff, exists_prop, mem_falling] at hβ
+ simp_rw [mem_shadow_iff, exists_prop, mem_falling] at hβ
obtain β¨s, β¨β¨t, ht, hstβ©, hsβ©, a, ha, rflβ© := hβ
refine' hπ (slice_subset hβ) ht _ ((erase_subset _ _).trans hst)
rintro rfl
@@ -252,12 +252,12 @@ theorem IsAntichain.sperner [Fintype Ξ±] {π : Finset (Finset Ξ±)}
((π # r).card : β) / (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2)) β€
1
by
- rwa [β sum_div, β Nat.cast_sum, div_le_one, cast_le, sum_card_slice] at this
+ rwa [β sum_div, β Nat.cast_sum, div_le_one, cast_le, sum_card_slice] at this
norm_cast
exact choose_pos (Nat.div_le_self _ _)
rw [Iic_eq_Icc, β Ico_succ_right, bot_eq_zero, Ico_zero_eq_range]
refine' (sum_le_sum fun r hr => _).trans (sum_card_slice_div_choose_le_one hπ)
- rw [mem_range] at hr
+ rw [mem_range] at hr
refine' div_le_div_of_le_left _ _ _ <;> norm_cast
Β· exact Nat.zero_le _
Β· exact choose_pos (lt_succ_iff.1 hr)
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -53,7 +53,7 @@ shadow, lym, slice, sperner, antichain
open Finset Nat
-open BigOperators FinsetFamily
+open scoped BigOperators FinsetFamily
variable {π Ξ± : Type _} [LinearOrderedField π]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -92,12 +92,6 @@ theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
#align finset.card_mul_le_card_shadow_mul Finset.card_mul_le_card_shadow_mul
-/
-/- warning: finset.card_div_choose_le_card_shadow_div_choose -> Finset.card_div_choose_le_card_shadow_div_choose is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] [_inst_3 : Fintype.{u2} Ξ±] {π : Finset.{u2} (Finset.{u2} Ξ±)} {r : Nat}, (Ne.{1} Nat r (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Set.Sized.{u2} Ξ± r ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toHasLe.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) π)) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) r))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.shadow.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) r (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}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] [_inst_3 : Fintype.{u2} Ξ±] {π : Finset.{u2} (Finset.{u2} Ξ±)} {r : Nat}, (Ne.{1} Nat r (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Set.Sized.{u2} Ξ± r (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) π)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) r))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.shadow.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) π))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) r (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))))))
-Case conversion may be inaccurate. Consider using '#align finset.card_div_choose_le_card_shadow_div_choose Finset.card_div_choose_le_card_shadow_div_chooseβ'. -/
/-- The downward **local LYM inequality**. `π` takes up less of `Ξ±^(r)` (the finsets of card `r`)
than `βπ` takes up of `Ξ±^(r - 1)`. -/
theorem card_div_choose_le_card_shadow_div_choose (hr : r β 0) (hπ : (π : Set (Finset Ξ±)).Sized r) :
@@ -142,12 +136,6 @@ def falling : Finset (Finset Ξ±) :=
variable {π k} {s : Finset Ξ±}
-/- warning: finset.mem_falling -> Finset.mem_falling is a dubious translation:
-lean 3 declaration is
- forall {Ξ± : Type.{u1}} [_inst_2 : DecidableEq.{succ u1} Ξ±] {k : Nat} {π : Finset.{u1} (Finset.{u1} Ξ±)} {s : Finset.{u1} Ξ±}, Iff (Membership.Mem.{u1, u1} (Finset.{u1} Ξ±) (Finset.{u1} (Finset.{u1} Ξ±)) (Finset.hasMem.{u1} (Finset.{u1} Ξ±)) s (Finset.falling.{u1} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) k π)) (And (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 π) (fun (H : Membership.Mem.{u1, u1} (Finset.{u1} Ξ±) (Finset.{u1} (Finset.{u1} Ξ±)) (Finset.hasMem.{u1} (Finset.{u1} Ξ±)) t π) => HasSubset.Subset.{u1} (Finset.{u1} Ξ±) (Finset.hasSubset.{u1} Ξ±) s t))) (Eq.{1} Nat (Finset.card.{u1} Ξ± s) k))
-but is expected to have type
- forall {Ξ± : Type.{u1}} [_inst_2 : DecidableEq.{succ u1} Ξ±] {k : Nat} {π : Finset.{u1} (Finset.{u1} Ξ±)} {s : Finset.{u1} Ξ±}, Iff (Membership.mem.{u1, u1} (Finset.{u1} Ξ±) (Finset.{u1} (Finset.{u1} Ξ±)) (Finset.instMembershipFinset.{u1} (Finset.{u1} Ξ±)) s (Finset.falling.{u1} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) k π)) (And (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 π) (HasSubset.Subset.{u1} (Finset.{u1} Ξ±) (Finset.instHasSubsetFinset.{u1} Ξ±) s t))) (Eq.{1} Nat (Finset.card.{u1} Ξ± s) k))
-Case conversion may be inaccurate. Consider using '#align finset.mem_falling Finset.mem_fallingβ'. -/
theorem mem_falling : s β falling k π β (β t β π, s β t) β§ s.card = k := by
simp_rw [falling, mem_sup, mem_powerset_len, exists_and_right]
#align finset.mem_falling Finset.mem_falling
@@ -206,12 +194,6 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
exact not_mem_erase _ _ (hst ha)
#align is_antichain.disjoint_slice_shadow_falling IsAntichain.disjoint_slice_shadow_falling
-/- warning: finset.le_card_falling_div_choose -> Finset.le_card_falling_div_choose is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat Nat.hasLe k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toHasLe.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r)))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k)))))
-but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1711 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1713 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1711 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1713) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
-Case conversion may be inaccurate. Consider using '#align finset.le_card_falling_div_choose Finset.le_card_falling_div_chooseβ'. -/
/-- A bound on any top part of the sum in LYM in terms of the size of `falling k π`. -/
theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) :
@@ -238,12 +220,6 @@ end Falling
variable {π : Finset (Finset Ξ±)} {s : Finset Ξ±} {k : β}
-/- warning: finset.sum_card_slice_div_choose_le_one -> Finset.sum_card_slice_div_choose_le_one is a dubious translation:
-lean 3 declaration is
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toHasLe.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (OfNat.mk.{u1} π 1 (One.one.{u1} π (AddMonoidWithOne.toOne.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))))
-but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2014 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2016 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2014 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2016) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (Semiring.toOne.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))))))
-Case conversion may be inaccurate. Consider using '#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_oneβ'. -/
/-- The **Lubell-Yamamoto-Meshalkin inequality**. If `π` is an antichain, then the sum of the
proportion of elements it takes from each layer is less than `1`. -/
theorem sum_card_slice_div_choose_le_one [Fintype Ξ±]
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -94,7 +94,7 @@ theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
/- warning: finset.card_div_choose_le_card_shadow_div_choose -> Finset.card_div_choose_le_card_shadow_div_choose is a dubious translation:
lean 3 declaration is
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] [_inst_3 : Fintype.{u2} Ξ±] {π : Finset.{u2} (Finset.{u2} Ξ±)} {r : Nat}, (Ne.{1} Nat r (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Set.Sized.{u2} Ξ± r ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) π)) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) r))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.shadow.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) r (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] [_inst_3 : Fintype.{u2} Ξ±] {π : Finset.{u2} (Finset.{u2} Ξ±)} {r : Nat}, (Ne.{1} Nat r (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Set.Sized.{u2} Ξ± r ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toHasLe.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) π)) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) r))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.shadow.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) r (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}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] [_inst_3 : Fintype.{u2} Ξ±] {π : Finset.{u2} (Finset.{u2} Ξ±)} {r : Nat}, (Ne.{1} Nat r (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Set.Sized.{u2} Ξ± r (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) π)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) r))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.shadow.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) π))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) r (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))))))
Case conversion may be inaccurate. Consider using '#align finset.card_div_choose_le_card_shadow_div_choose Finset.card_div_choose_le_card_shadow_div_chooseβ'. -/
@@ -208,7 +208,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
/- warning: finset.le_card_falling_div_choose -> Finset.le_card_falling_div_choose is a dubious translation:
lean 3 declaration is
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat Nat.hasLe k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r)))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k)))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat Nat.hasLe k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toHasLe.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r)))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k)))))
but is expected to have type
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1711 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1713 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1711 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1713) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
Case conversion may be inaccurate. Consider using '#align finset.le_card_falling_div_choose Finset.le_card_falling_div_chooseβ'. -/
@@ -240,7 +240,7 @@ variable {π : Finset (Finset Ξ±)} {s : Finset Ξ±} {k : β}
/- warning: finset.sum_card_slice_div_choose_le_one -> Finset.sum_card_slice_div_choose_le_one is a dubious translation:
lean 3 declaration is
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (OfNat.mk.{u1} π 1 (One.one.{u1} π (AddMonoidWithOne.toOne.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toHasLe.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (OfNat.mk.{u1} π 1 (One.one.{u1} π (AddMonoidWithOne.toOne.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))))
but is expected to have type
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2014 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2016 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2014 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2016) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (Semiring.toOne.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))))))
Case conversion may be inaccurate. Consider using '#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_oneβ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -96,7 +96,7 @@ theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] [_inst_3 : Fintype.{u2} Ξ±] {π : Finset.{u2} (Finset.{u2} Ξ±)} {r : Nat}, (Ne.{1} Nat r (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Set.Sized.{u2} Ξ± r ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) π)) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) r))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.shadow.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) r (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}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] [_inst_3 : Fintype.{u2} Ξ±] {π : Finset.{u2} (Finset.{u2} Ξ±)} {r : Nat}, (Ne.{1} Nat r (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Set.Sized.{u2} Ξ± r (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) π)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) r))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.shadow.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) r (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] [_inst_3 : Fintype.{u2} Ξ±] {π : Finset.{u2} (Finset.{u2} Ξ±)} {r : Nat}, (Ne.{1} Nat r (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Set.Sized.{u2} Ξ± r (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) π)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) r))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.shadow.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) π))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) r (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))))))
Case conversion may be inaccurate. Consider using '#align finset.card_div_choose_le_card_shadow_div_choose Finset.card_div_choose_le_card_shadow_div_chooseβ'. -/
/-- The downward **local LYM inequality**. `π` takes up less of `Ξ±^(r)` (the finsets of card `r`)
than `βπ` takes up of `Ξ±^(r - 1)`. -/
@@ -210,7 +210,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat Nat.hasLe k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r)))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k)))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1711 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1713 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1711 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1713) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1711 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1713 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1711 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1713) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
Case conversion may be inaccurate. Consider using '#align finset.le_card_falling_div_choose Finset.le_card_falling_div_chooseβ'. -/
/-- A bound on any top part of the sum in LYM in terms of the size of `falling k π`. -/
theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
@@ -242,7 +242,7 @@ variable {π : Finset (Finset Ξ±)} {s : Finset Ξ±} {k : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (OfNat.mk.{u1} π 1 (One.one.{u1} π (AddMonoidWithOne.toOne.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2014 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2016 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2014 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2016) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2014 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2016 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2014 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2016) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (Semiring.toNatCast.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (Semiring.toOne.{u1} π (DivisionSemiring.toSemiring.{u1} π (Semifield.toDivisionSemiring.{u1} π (LinearOrderedSemifield.toSemifield.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1))))))))
Case conversion may be inaccurate. Consider using '#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_oneβ'. -/
/-- The **Lubell-Yamamoto-Meshalkin inequality**. If `π` is an antichain, then the sum of the
proportion of elements it takes from each layer is less than `1`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -210,7 +210,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat Nat.hasLe k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r)))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k)))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1722 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1724 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1722 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1724) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1711 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1713 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1711 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1713) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
Case conversion may be inaccurate. Consider using '#align finset.le_card_falling_div_choose Finset.le_card_falling_div_chooseβ'. -/
/-- A bound on any top part of the sum in LYM in terms of the size of `falling k π`. -/
theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
@@ -242,7 +242,7 @@ variable {π : Finset (Finset Ξ±)} {s : Finset Ξ±} {k : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (OfNat.mk.{u1} π 1 (One.one.{u1} π (AddMonoidWithOne.toOne.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2025 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2027 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2025 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2027) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2014 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2016 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2014 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2016) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
Case conversion may be inaccurate. Consider using '#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_oneβ'. -/
/-- The **Lubell-Yamamoto-Meshalkin inequality**. If `π` is an antichain, then the sum of the
proportion of elements it takes from each layer is less than `1`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce86f4e05e9a9b8da5e316b22c76ce76440c56a1
@@ -94,7 +94,7 @@ theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
/- warning: finset.card_div_choose_le_card_shadow_div_choose -> Finset.card_div_choose_le_card_shadow_div_choose is a dubious translation:
lean 3 declaration is
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] [_inst_3 : Fintype.{u2} Ξ±] {π : Finset.{u2} (Finset.{u2} Ξ±)} {r : Nat}, (Ne.{1} Nat r (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Set.Sized.{u2} Ξ± r ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) π)) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) r))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.shadow.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) r (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] [_inst_3 : Fintype.{u2} Ξ±] {π : Finset.{u2} (Finset.{u2} Ξ±)} {r : Nat}, (Ne.{1} Nat r (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Set.Sized.{u2} Ξ± r ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) π)) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) r))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.shadow.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) r (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}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] [_inst_3 : Fintype.{u2} Ξ±] {π : Finset.{u2} (Finset.{u2} Ξ±)} {r : Nat}, (Ne.{1} Nat r (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Set.Sized.{u2} Ξ± r (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) π)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) r))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.shadow.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) r (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))))))
Case conversion may be inaccurate. Consider using '#align finset.card_div_choose_le_card_shadow_div_choose Finset.card_div_choose_le_card_shadow_div_chooseβ'. -/
@@ -208,7 +208,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
/- warning: finset.le_card_falling_div_choose -> Finset.le_card_falling_div_choose is a dubious translation:
lean 3 declaration is
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat Nat.hasLe k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r)))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k)))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat Nat.hasLe k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r)))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k)))))
but is expected to have type
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1722 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1724 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1722 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1724) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
Case conversion may be inaccurate. Consider using '#align finset.le_card_falling_div_choose Finset.le_card_falling_div_chooseβ'. -/
@@ -240,7 +240,7 @@ variable {π : Finset (Finset Ξ±)} {s : Finset Ξ±} {k : β}
/- warning: finset.sum_card_slice_div_choose_le_one -> Finset.sum_card_slice_div_choose_le_one is a dubious translation:
lean 3 declaration is
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (OfNat.mk.{u1} π 1 (One.one.{u1} π (AddMonoidWithOne.toOne.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (OfNat.mk.{u1} π 1 (One.one.{u1} π (AddMonoidWithOne.toOne.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (AddCommGroupWithOne.toAddGroupWithOne.{u1} π (Ring.toAddCommGroupWithOne.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))))
but is expected to have type
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2025 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2027 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2025 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2027) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
Case conversion may be inaccurate. Consider using '#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_oneβ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/02ba8949f486ebecf93fe7460f1ed0564b5e442c
@@ -210,7 +210,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat Nat.hasLe k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r)))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k)))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1723 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1725 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1723 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1725) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1722 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1724 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1722 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1724) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
Case conversion may be inaccurate. Consider using '#align finset.le_card_falling_div_choose Finset.le_card_falling_div_chooseβ'. -/
/-- A bound on any top part of the sum in LYM in terms of the size of `falling k π`. -/
theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
@@ -242,7 +242,7 @@ variable {π : Finset (Finset Ξ±)} {s : Finset Ξ±} {k : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (OfNat.mk.{u1} π 1 (One.one.{u1} π (AddMonoidWithOne.toOne.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2026 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2028 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2026 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2028) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2025 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2027 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2025 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2027) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
Case conversion may be inaccurate. Consider using '#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_oneβ'. -/
/-- The **Lubell-Yamamoto-Meshalkin inequality**. If `π` is an antichain, then the sum of the
proportion of elements it takes from each layer is less than `1`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -210,7 +210,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat Nat.hasLe k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r)))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k)))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1703 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1705 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1703 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1705) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1723 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1725 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1723 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1725) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
Case conversion may be inaccurate. Consider using '#align finset.le_card_falling_div_choose Finset.le_card_falling_div_chooseβ'. -/
/-- A bound on any top part of the sum in LYM in terms of the size of `falling k π`. -/
theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
@@ -242,7 +242,7 @@ variable {π : Finset (Finset Ξ±)} {s : Finset Ξ±} {k : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (OfNat.mk.{u1} π 1 (One.one.{u1} π (AddMonoidWithOne.toOne.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2006 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2008 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2006 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2008) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2026 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2028 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2026 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2028) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
Case conversion may be inaccurate. Consider using '#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_oneβ'. -/
/-- The **Lubell-Yamamoto-Meshalkin inequality**. If `π` is an antichain, then the sum of the
proportion of elements it takes from each layer is less than `1`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -210,7 +210,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat Nat.hasLe k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r)))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k)))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1705 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1707 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1705 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1707) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1703 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1705 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1703 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1705) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
Case conversion may be inaccurate. Consider using '#align finset.le_card_falling_div_choose Finset.le_card_falling_div_chooseβ'. -/
/-- A bound on any top part of the sum in LYM in terms of the size of `falling k π`. -/
theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
@@ -242,7 +242,7 @@ variable {π : Finset (Finset Ξ±)} {s : Finset Ξ±} {k : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (OfNat.mk.{u1} π 1 (One.one.{u1} π (AddMonoidWithOne.toOne.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2008 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2010 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2008 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2010) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2006 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2008 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2006 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2008) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
Case conversion may be inaccurate. Consider using '#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_oneβ'. -/
/-- The **Lubell-Yamamoto-Meshalkin inequality**. If `π` is an antichain, then the sum of the
proportion of elements it takes from each layer is less than `1`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/271bf175e6c51b8d31d6c0107b7bb4a967c7277e
@@ -210,7 +210,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat Nat.hasLe k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) k (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r)))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k) π))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat Nat.hasSub) (Fintype.card.{u2} Ξ± _inst_3) k)))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1705 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1707 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1705 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1707) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} π (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} π (NonAssocRing.toNonUnitalNonAssocRing.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] [_inst_2 : DecidableEq.{succ u2} Ξ±] {k : Nat} {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_3 : Fintype.{u2} Ξ±], (LE.le.{0} Nat instLENat k (Fintype.card.{u2} Ξ± _inst_3)) -> (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1705 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1707 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1705 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.1707) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) k (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r)))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) r))))) (HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.falling.{u2} Ξ± (fun (a : Ξ±) (b : Ξ±) => _inst_2 a b) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k) π))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_3) (HSub.hSub.{0, 0, 0} Nat Nat Nat (instHSub.{0} Nat instSubNat) (Fintype.card.{u2} Ξ± _inst_3) k)))))
Case conversion may be inaccurate. Consider using '#align finset.le_card_falling_div_choose Finset.le_card_falling_div_chooseβ'. -/
/-- A bound on any top part of the sum in LYM in terms of the size of `falling k π`. -/
theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
@@ -242,7 +242,7 @@ variable {π : Finset (Finset Ξ±)} {s : Finset Ξ±} {k : β}
lean 3 declaration is
forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.hasSubset.{u2} Ξ±)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (CoeTCβ.coe.{succ u2, succ u2} (Finset.{u2} (Finset.{u2} Ξ±)) (Set.{u2} (Finset.{u2} Ξ±)) (Finset.Set.hasCoeT.{u2} (Finset.{u2} Ξ±)))) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (OrderedAddCommGroup.toPartialOrder.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1))))))) (Finset.sum.{u1, 0} π Nat (AddCommGroup.toAddCommMonoid.{u1} π (OrderedAddCommGroup.toAddCommGroup.{u1} π (StrictOrderedRing.toOrderedAddCommGroup.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (DivInvMonoid.toHasDiv.{u1} π (DivisionRing.toDivInvMonoid.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) ((fun (a : Type) (b : Type.{u1}) [self : HasLiftT.{1, succ u1} a b] => self.0) Nat π (HasLiftT.mk.{1, succ u1} Nat π (CoeTCβ.coe.{1, succ u1} Nat π (Nat.castCoe.{u1} π (AddMonoidWithOne.toNatCast.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (OfNat.mk.{u1} π 1 (One.one.{u1} π (AddMonoidWithOne.toOne.{u1} π (AddGroupWithOne.toAddMonoidWithOne.{u1} π (NonAssocRing.toAddGroupWithOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1)))))))))))
but is expected to have type
- forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2008 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2010 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2008 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2010) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} π (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} π (NonAssocRing.toNonUnitalNonAssocRing.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
+ forall {π : Type.{u1}} {Ξ± : Type.{u2}} [_inst_1 : LinearOrderedField.{u1} π] {π : Finset.{u2} (Finset.{u2} Ξ±)} [_inst_2 : Fintype.{u2} Ξ±], (IsAntichain.{u2} (Finset.{u2} Ξ±) (fun (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2008 : Finset.{u2} Ξ±) (x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2010 : Finset.{u2} Ξ±) => HasSubset.Subset.{u2} (Finset.{u2} Ξ±) (Finset.instHasSubsetFinset.{u2} Ξ±) x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2008 x._@.Mathlib.Combinatorics.SetFamily.LYM._hyg.2010) (Finset.toSet.{u2} (Finset.{u2} Ξ±) π)) -> (LE.le.{u1} π (Preorder.toLE.{u1} π (PartialOrder.toPreorder.{u1} π (StrictOrderedRing.toPartialOrder.{u1} π (LinearOrderedRing.toStrictOrderedRing.{u1} π (LinearOrderedCommRing.toLinearOrderedRing.{u1} π (LinearOrderedField.toLinearOrderedCommRing.{u1} π _inst_1)))))) (Finset.sum.{u1, 0} π Nat (OrderedCancelAddCommMonoid.toAddCommMonoid.{u1} π (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{u1} π (LinearOrderedSemiring.toStrictOrderedSemiring.{u1} π (LinearOrderedCommSemiring.toLinearOrderedSemiring.{u1} π (LinearOrderedSemifield.toLinearOrderedCommSemiring.{u1} π (LinearOrderedField.toLinearOrderedSemifield.{u1} π _inst_1)))))) (Finset.range (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) (Fintype.card.{u2} Ξ± _inst_2) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)))) (fun (r : Nat) => HDiv.hDiv.{u1, u1, u1} π π π (instHDiv.{u1} π (LinearOrderedField.toDiv.{u1} π _inst_1)) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Finset.card.{u2} (Finset.{u2} Ξ±) (Finset.slice.{u2} Ξ± π r))) (Nat.cast.{u1} π (NonAssocRing.toNatCast.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))) (Nat.choose (Fintype.card.{u2} Ξ± _inst_2) r)))) (OfNat.ofNat.{u1} π 1 (One.toOfNat1.{u1} π (NonAssocRing.toOne.{u1} π (Ring.toNonAssocRing.{u1} π (DivisionRing.toRing.{u1} π (Field.toDivisionRing.{u1} π (LinearOrderedField.toField.{u1} π _inst_1))))))))
Case conversion may be inaccurate. Consider using '#align finset.sum_card_slice_div_choose_le_one Finset.sum_card_slice_div_choose_le_oneβ'. -/
/-- The **Lubell-Yamamoto-Meshalkin inequality**. If `π` is an antichain, then the sum of the
proportion of elements it takes from each layer is less than `1`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -234,8 +234,8 @@ theorem IsAntichain.sperner [Fintype Ξ±] {π : Finset (Finset Ξ±)}
suffices (β r in Iic (Fintype.card Ξ±),
((π # r).card : β) / (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2)) β€ 1 by
rw [β sum_div, β Nat.cast_sum, div_le_one] at this
- simp only [cast_le] at this
- rwa [sum_card_slice] at this
+ Β· simp only [cast_le] at this
+ rwa [sum_card_slice] at this
simp only [cast_pos]
exact choose_pos (Nat.div_le_self _ _)
rw [Iic_eq_Icc, β Ico_succ_right, bot_eq_zero, Ico_zero_eq_range]
Take the content of
Algebra.BigOperators.List.Basic
Algebra.BigOperators.List.Lemmas
Algebra.BigOperators.Multiset.Basic
Algebra.BigOperators.Multiset.Lemmas
Algebra.BigOperators.Multiset.Order
Algebra.BigOperators.Order
and sort it into six files:
Algebra.Order.BigOperators.Group.List
. I credit Yakov for https://github.com/leanprover-community/mathlib/pull/8543.Algebra.Order.BigOperators.Group.Multiset
. Copyright inherited from Algebra.BigOperators.Multiset.Order
.Algebra.Order.BigOperators.Group.Finset
. Copyright inherited from Algebra.BigOperators.Order
.Algebra.Order.BigOperators.Ring.List
. I credit Stuart for https://github.com/leanprover-community/mathlib/pull/10184.Algebra.Order.BigOperators.Ring.Multiset
. I credit Ruben for https://github.com/leanprover-community/mathlib/pull/8787.Algebra.Order.BigOperators.Ring.Finset
. I credit Floris for https://github.com/leanprover-community/mathlib/pull/1294.Here are the design decisions at play:
Data.Nat.Order.Basic
in a few List
files.Algebra.Order.BigOperators
instead of Algebra.BigOperators.Order
because algebraic order theory is more of a theory than big operators algebra. Another reason is that algebraic order theory is the only way to mix pure order and pure algebra, while there are more ways to mix pure finiteness and pure algebra than just big operators.Algebra.Order.BigOperators.Group
should be additivisable (except a few Nat
- or Int
-specific lemmas). In contrast, things under Algebra.Order.BigOperators.Ring
are more prone to having heavy imports.List
vs Multiset
vs Finset
. This is not strictly necessary, and can be relaxed in cases where there aren't that many lemmas to be had. As an example, I could split out the AbsoluteValue
lemmas from Algebra.Order.BigOperators.Ring.Finset
to a file Algebra.Order.BigOperators.Ring.AbsoluteValue
and it could stay this way until too many lemmas are in this file (or a split is needed for import reasons), in which case we would need files Algebra.Order.BigOperators.Ring.AbsoluteValue.Finset
, Algebra.Order.BigOperators.Ring.AbsoluteValue.Multiset
, etc...Finsupp
big operator and finprod
/finsum
order lemmas also belong in Algebra.Order.BigOperators
. I haven't done so in this PR because the diff is big enough like that.@@ -7,6 +7,7 @@ import Mathlib.Algebra.BigOperators.Ring
import Mathlib.Algebra.Order.Field.Basic
import Mathlib.Combinatorics.Enumerative.DoubleCounting
import Mathlib.Combinatorics.SetFamily.Shadow
+import Mathlib.Data.Rat.Field
import Mathlib.Data.Rat.Order
#align_import combinatorics.set_family.lym from "leanprover-community/mathlib"@"861a26926586cd46ff80264d121cdb6fa0e35cc1"
Move Catalan
, Composition
, DoubleCounting
, Partition
to a new folder Combinatorics.Enumerative
.
@@ -5,7 +5,7 @@ Authors: Bhavik Mehta, Alena Gusakov, YaΓ«l Dillies
-/
import Mathlib.Algebra.BigOperators.Ring
import Mathlib.Algebra.Order.Field.Basic
-import Mathlib.Combinatorics.DoubleCounting
+import Mathlib.Combinatorics.Enumerative.DoubleCounting
import Mathlib.Combinatorics.SetFamily.Shadow
import Mathlib.Data.Rat.Order
/
lemmas (#10634)
The new names and argument orders match the corresponding *
lemmas, which I already took care of in a previous PR.
From LeanAPAP
@@ -240,7 +240,7 @@ theorem IsAntichain.sperner [Fintype Ξ±] {π : Finset (Finset Ξ±)}
rw [Iic_eq_Icc, β Ico_succ_right, bot_eq_zero, Ico_zero_eq_range]
refine' (sum_le_sum fun r hr => _).trans (sum_card_slice_div_choose_le_one hπ)
rw [mem_range] at hr
- refine' div_le_div_of_le_left _ _ _ <;> norm_cast
+ refine' div_le_div_of_nonneg_left _ _ _ <;> norm_cast
Β· exact Nat.zero_le _
Β· exact choose_pos (Nat.lt_succ_iff.1 hr)
Β· exact choose_le_middle _ _
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -72,7 +72,7 @@ theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
refine' le_trans _ tsub_tsub_le_tsub_add
rw [β (Set.Sized.shadow hπ) hs, β card_compl, β card_image_of_injOn (insert_inj_on' _)]
refine' card_le_card fun t ht => _
- -- porting note: commented out the following line
+ -- Porting note: commented out the following line
-- infer_instance
rw [mem_bipartiteAbove] at ht
have : β
β π := by
(s β© t).card = s.card + t.card - (s βͺ t).card
(#10224)
once coerced to an AddGroupWithOne
. Also unify Finset.card_disjoint_union
and Finset.card_union_eq
From LeanAPAP
@@ -190,7 +190,7 @@ theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
exact card_le_card (slice_subset_falling _ _)
rw [succ_eq_add_one] at *
rw [sum_range_succ, β slice_union_shadow_falling_succ,
- card_disjoint_union (IsAntichain.disjoint_slice_shadow_falling hπ), cast_add, _root_.add_div,
+ card_union_of_disjoint (IsAntichain.disjoint_slice_shadow_falling hπ), cast_add, _root_.add_div,
add_comm]
rw [β tsub_tsub, tsub_add_cancel_of_le (le_tsub_of_add_le_left hk)]
exact
@@ -242,7 +242,7 @@ theorem IsAntichain.sperner [Fintype Ξ±] {π : Finset (Finset Ξ±)}
rw [mem_range] at hr
refine' div_le_div_of_le_left _ _ _ <;> norm_cast
Β· exact Nat.zero_le _
- Β· exact choose_pos (lt_succ_iff.1 hr)
+ Β· exact choose_pos (Nat.lt_succ_iff.1 hr)
Β· exact choose_le_middle _ _
#align finset.is_antichain.sperner Finset.IsAntichain.sperner
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
@@ -66,12 +66,12 @@ theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
let i : DecidableRel ((Β· β Β·) : Finset Ξ± β Finset Ξ± β Prop) := fun _ _ => Classical.dec _
refine' card_mul_le_card_mul' (Β· β Β·) (fun s hs => _) (fun s hs => _)
Β· rw [β hπ hs, β card_image_of_injOn s.erase_injOn]
- refine' card_le_of_subset _
+ refine' card_le_card _
simp_rw [image_subset_iff, mem_bipartiteBelow]
exact fun a ha => β¨erase_mem_shadow hs ha, erase_subset _ _β©
refine' le_trans _ tsub_tsub_le_tsub_add
rw [β (Set.Sized.shadow hπ) hs, β card_compl, β card_image_of_injOn (insert_inj_on' _)]
- refine' card_le_of_subset fun t ht => _
+ refine' card_le_card fun t ht => _
-- porting note: commented out the following line
-- infer_instance
rw [mem_bipartiteAbove] at ht
@@ -187,7 +187,7 @@ theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
Β· simp only [tsub_zero, cast_one, cast_le, sum_singleton, div_one, choose_self, range_one,
zero_eq, zero_add, range_one, ge_iff_le, sum_singleton, nonpos_iff_eq_zero, tsub_zero,
choose_self, cast_one, div_one, cast_le]
- exact card_le_of_subset (slice_subset_falling _ _)
+ exact card_le_card (slice_subset_falling _ _)
rw [succ_eq_add_one] at *
rw [sum_range_succ, β slice_union_shadow_falling_succ,
card_disjoint_union (IsAntichain.disjoint_slice_shadow_falling hπ), cast_add, _root_.add_div,
@@ -123,13 +123,13 @@ variable [DecidableEq Ξ±] (k : β) (π : Finset (Finset Ξ±))
/-- `falling k π` is all the finsets of cardinality `k` which are a subset of something in `π`. -/
def falling : Finset (Finset Ξ±) :=
- π.sup <| powersetLen k
+ π.sup <| powersetCard k
#align finset.falling Finset.falling
variable {π k} {s : Finset Ξ±}
theorem mem_falling : s β falling k π β (β t β π, s β t) β§ s.card = k := by
- simp_rw [falling, mem_sup, mem_powersetLen]
+ simp_rw [falling, mem_sup, mem_powersetCard]
aesop
#align finset.mem_falling Finset.mem_falling
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -49,7 +49,7 @@ open Finset Nat
open BigOperators FinsetFamily
-variable {π Ξ± : Type _} [LinearOrderedField π]
+variable {π Ξ± : Type*} [LinearOrderedField π]
namespace Finset
@@ -63,7 +63,7 @@ variable [DecidableEq Ξ±] [Fintype Ξ±]
(the finsets of card `r`) than `βπ` takes up of `Ξ±^(r - 1)`. -/
theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
π.card * r β€ (β π).card * (Fintype.card Ξ± - r + 1) := by
- let i : DecidableRel ((. β .) : Finset Ξ± β Finset Ξ± β Prop) := fun _ _ => Classical.dec _
+ let i : DecidableRel ((Β· β Β·) : Finset Ξ± β Finset Ξ± β Prop) := fun _ _ => Classical.dec _
refine' card_mul_le_card_mul' (Β· β Β·) (fun s hs => _) (fun s hs => _)
Β· rw [β hπ hs, β card_image_of_injOn s.erase_injOn]
refine' card_le_of_subset _
@@ -2,11 +2,6 @@
Copyright (c) 2022 Bhavik Mehta, YaΓ«l Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bhavik Mehta, Alena Gusakov, YaΓ«l Dillies
-
-! This file was ported from Lean 3 source module combinatorics.set_family.lym
-! leanprover-community/mathlib commit 861a26926586cd46ff80264d121cdb6fa0e35cc1
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.BigOperators.Ring
import Mathlib.Algebra.Order.Field.Basic
@@ -14,6 +9,8 @@ import Mathlib.Combinatorics.DoubleCounting
import Mathlib.Combinatorics.SetFamily.Shadow
import Mathlib.Data.Rat.Order
+#align_import combinatorics.set_family.lym from "leanprover-community/mathlib"@"861a26926586cd46ff80264d121cdb6fa0e35cc1"
+
/-!
# Lubell-Yamamoto-Meshalkin inequality and Sperner's theorem
@@ -65,7 +65,7 @@ variable [DecidableEq Ξ±] [Fintype Ξ±]
/-- The downward **local LYM inequality**, with cancelled denominators. `π` takes up less of `Ξ±^(r)`
(the finsets of card `r`) than `βπ` takes up of `Ξ±^(r - 1)`. -/
theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
- π.card * r β€ ((β ) π).card * (Fintype.card Ξ± - r + 1) := by
+ π.card * r β€ (β π).card * (Fintype.card Ξ± - r + 1) := by
let i : DecidableRel ((. β .) : Finset Ξ± β Finset Ξ± β Prop) := fun _ _ => Classical.dec _
refine' card_mul_le_card_mul' (Β· β Β·) (fun s hs => _) (fun s hs => _)
Β· rw [β hπ hs, β card_image_of_injOn s.erase_injOn]
@@ -93,7 +93,7 @@ theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
than `βπ` takes up of `Ξ±^(r - 1)`. -/
theorem card_div_choose_le_card_shadow_div_choose (hr : r β 0)
(hπ : (π : Set (Finset Ξ±)).Sized r) : (π.card : π) / (Fintype.card Ξ±).choose r
- β€ ((β ) π).card / (Fintype.card Ξ±).choose (r - 1) := by
+ β€ (β π).card / (Fintype.card Ξ±).choose (r - 1) := by
obtain hr' | hr' := lt_or_le (Fintype.card Ξ±) r
Β· rw [choose_eq_zero_of_lt hr', cast_zero, div_zero]
exact div_nonneg (cast_nonneg _) (cast_nonneg _)
@@ -149,7 +149,7 @@ theorem falling_zero_subset : falling 0 π β {β
} :=
subset_singleton_iff'.2 fun _ ht => card_eq_zero.1 <| sized_falling _ _ ht
#align finset.falling_zero_subset Finset.falling_zero_subset
-theorem slice_union_shadow_falling_succ : π # k βͺ (β ) (falling (k + 1) π) = falling k π := by
+theorem slice_union_shadow_falling_succ : π # k βͺ β (falling (k + 1) π) = falling k π := by
ext s
simp_rw [mem_union, mem_slice, mem_shadow_iff, mem_falling]
constructor
@@ -171,7 +171,7 @@ variable {π k}
/-- The shadow of `falling m π` is disjoint from the `n`-sized elements of `π`, thanks to the
antichain property. -/
theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
- (hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) : Disjoint (π # m) ((β ) (falling n π)) :=
+ (hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) : Disjoint (π # m) (β (falling n π)) :=
disjoint_right.2 fun s hβ hβ => by
simp_rw [mem_shadow_iff, mem_falling] at hβ
obtain β¨s, β¨β¨t, ht, hstβ©, _β©, a, ha, rflβ© := hβ
@@ -64,7 +64,7 @@ variable [DecidableEq Ξ±] [Fintype Ξ±]
{π : Finset (Finset Ξ±)} {r : β}
/-- The downward **local LYM inequality**, with cancelled denominators. `π` takes up less of `Ξ±^(r)`
(the finsets of card `r`) than `βπ` takes up of `Ξ±^(r - 1)`. -/
-theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r):
+theorem card_mul_le_card_shadow_mul (hπ : (π : Set (Finset Ξ±)).Sized r) :
π.card * r β€ ((β ) π).card * (Fintype.card Ξ± - r + 1) := by
let i : DecidableRel ((. β .) : Finset Ξ± β Finset Ξ± β Prop) := fun _ _ => Classical.dec _
refine' card_mul_le_card_mul' (Β· β Β·) (fun s hs => _) (fun s hs => _)
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -172,8 +172,7 @@ variable {π k}
antichain property. -/
theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) : Disjoint (π # m) ((β ) (falling n π)) :=
- disjoint_right.2 fun s hβ hβ =>
- by
+ disjoint_right.2 fun s hβ hβ => by
simp_rw [mem_shadow_iff, mem_falling] at hβ
obtain β¨s, β¨β¨t, ht, hstβ©, _β©, a, ha, rflβ© := hβ
refine' hπ (slice_subset hβ) ht _ ((erase_subset _ _).trans hst)
@@ -234,10 +233,8 @@ theorem IsAntichain.sperner [Fintype Ξ±] {π : Finset (Finset Ξ±)}
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) :
π.card β€ (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2) := by
classical
- suffices
- (β r in Iic (Fintype.card Ξ±),
- ((π # r).card : β) / (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2)) β€ 1
- by
+ suffices (β r in Iic (Fintype.card Ξ±),
+ ((π # r).card : β) / (Fintype.card Ξ±).choose (Fintype.card Ξ± / 2)) β€ 1 by
rw [β sum_div, β Nat.cast_sum, div_le_one] at this
simp only [cast_le] at this
rwa [sum_card_slice] at this
closes #3680, see https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Stepping.20through.20simp_rw/near/326712986
@@ -132,7 +132,7 @@ def falling : Finset (Finset Ξ±) :=
variable {π k} {s : Finset Ξ±}
theorem mem_falling : s β falling k π β (β t β π, s β t) β§ s.card = k := by
- simp_rw [falling, mem_sup, mem_powersetLen, exists_and_right]
+ simp_rw [falling, mem_sup, mem_powersetLen]
aesop
#align finset.mem_falling Finset.mem_falling
@@ -151,7 +151,7 @@ theorem falling_zero_subset : falling 0 π β {β
} :=
theorem slice_union_shadow_falling_succ : π # k βͺ (β ) (falling (k + 1) π) = falling k π := by
ext s
- simp_rw [mem_union, mem_slice, mem_shadow_iff, exists_prop, mem_falling]
+ simp_rw [mem_union, mem_slice, mem_shadow_iff, mem_falling]
constructor
Β· rintro (h | β¨s, β¨β¨t, ht, hstβ©, hsβ©, a, ha, rflβ©)
Β· exact β¨β¨s, h.1, Subset.refl _β©, h.2β©
@@ -174,7 +174,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
(hπ : IsAntichain (Β· β Β·) (π : Set (Finset Ξ±))) : Disjoint (π # m) ((β ) (falling n π)) :=
disjoint_right.2 fun s hβ hβ =>
by
- simp_rw [mem_shadow_iff, exists_prop, mem_falling] at hβ
+ simp_rw [mem_shadow_iff, mem_falling] at hβ
obtain β¨s, β¨β¨t, ht, hstβ©, _β©, a, ha, rflβ© := hβ
refine' hπ (slice_subset hβ) ht _ ((erase_subset _ _).trans hst)
rintro rfl
This PR fixes two things:
align
statements for definitions and theorems and instances that are separated by two newlines from the relevant declaration (s/\n\n#align/\n#align
). This is often seen in the mathport output after ending calc
blocks.#align
statements. (This was needed for a script I wrote for #3630.)@@ -111,8 +111,7 @@ theorem card_div_choose_le_card_shadow_div_choose (hr : r β 0)
exact Or.inl (mul_comm _ _)
Β· exact Nat.choose_pos hr'
Β· exact Nat.choose_pos (r.pred_le.trans hr')
-#align finset.card_div_choose_le_card_shadow_div_choose
- Finset.card_div_choose_le_card_shadow_div_choose
+#align finset.card_div_choose_le_card_shadow_div_choose Finset.card_div_choose_le_card_shadow_div_choose
end LocalLYM
@@ -202,8 +201,7 @@ theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
add_le_add_left
((ih <| le_of_succ_le hk).trans <|
card_div_choose_le_card_shadow_div_choose (tsub_pos_iff_lt.2 <| Nat.succ_le_iff.1 hk).ne' <|
- sized_falling _ _)
- _
+ sized_falling _ _) _
#align finset.le_card_falling_div_choose Finset.le_card_falling_div_choose
end Falling
Apparently we have CI scripts that assume those fall on a single line. The command line used to fix the aligns was:
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^#align ([^[:space:]]+)\n *([^[:space:]]+)$/#align \1 \2/' {} \;
Co-authored-by: Moritz Firsching <firsching@google.com>
@@ -180,8 +180,7 @@ theorem IsAntichain.disjoint_slice_shadow_falling {m n : β}
refine' hπ (slice_subset hβ) ht _ ((erase_subset _ _).trans hst)
rintro rfl
exact not_mem_erase _ _ (hst ha)
-#align finset.is_antichain.disjoint_slice_shadow_falling
- Finset.IsAntichain.disjoint_slice_shadow_falling
+#align finset.is_antichain.disjoint_slice_shadow_falling Finset.IsAntichain.disjoint_slice_shadow_falling
/-- A bound on any top part of the sum in LYM in terms of the size of `falling k π`. -/
theorem le_card_falling_div_choose [Fintype Ξ±] (hk : k β€ Fintype.card Ξ±)
Other changes:
Data/Dfinsupp/Lex
to use explicit (i : ΞΉ)
;Logic.Basic
.@@ -162,8 +162,7 @@ theorem slice_union_shadow_falling_succ : π # k βͺ (β ) (falling (k + 1)
Β· rintro β¨β¨t, ht, hstβ©, hsβ©
by_cases h : s β π
Β· exact Or.inl β¨h, hsβ©
- obtain β¨a, ha, hstβ© := ssubset_iff.1
- (ssubset_of_subset_of_ne hst (Membership.Mem.ne_of_not_mem ht h).symm)
+ obtain β¨a, ha, hstβ© := ssubset_iff.1 (ssubset_of_subset_of_ne hst (ht.ne_of_not_mem h).symm)
refine' Or.inr β¨insert a s, β¨β¨t, ht, hstβ©, _β©, a, mem_insert_self _ _, erase_insert haβ©
rw [card_insert_of_not_mem ha, hs]
#align finset.slice_union_shadow_falling_succ Finset.slice_union_shadow_falling_succ
@@ -160,7 +160,7 @@ theorem slice_union_shadow_falling_succ : π # k βͺ (β ) (falling (k + 1)
rw [card_erase_of_mem ha, hs]
rfl
Β· rintro β¨β¨t, ht, hstβ©, hsβ©
- by_cases s β π
+ by_cases h : s β π
Β· exact Or.inl β¨h, hsβ©
obtain β¨a, ha, hstβ© := ssubset_iff.1
(ssubset_of_subset_of_ne hst (Membership.Mem.ne_of_not_mem ht h).symm)
The unported dependencies are