data.finset.pointwise
⟷
Mathlib.Data.Finset.Pointwise
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)
@@ -1078,6 +1078,24 @@ coe_injective $ by { push_cast, exact set.smul_univ hs }
@[simp, to_additive] lemma card_smul_finset (a : α) (s : finset β) : (a • s).card = s.card :=
card_image_of_injective _ $ mul_action.injective _
+/-- If the left cosets of `t` by elements of `s` are disjoint (but not necessarily distinct!), then
+the size of `t` divides the size of `s * t`. -/
+@[to_additive "If the left cosets of `t` by elements of `s` are disjoint (but not necessarily
+distinct!), then the size of `t` divides the size of `s + t`."]
+lemma card_dvd_card_smul_right {s : finset α} :
+ ((• t) '' (s : set α)).pairwise_disjoint id → t.card ∣ (s • t).card :=
+card_dvd_card_image₂_right (λ _ _, mul_action.injective _)
+
+variables [decidable_eq α]
+
+/-- If the right cosets of `s` by elements of `t` are disjoint (but not necessarily distinct!), then
+the size of `s` divides the size of `s * t`. -/
+@[to_additive "If the right cosets of `s` by elements of `t` are disjoint (but not necessarily
+distinct!), then the size of `s` divides the size of `s + t`."]
+lemma card_dvd_card_mul_left {s t : finset α} :
+ ((λ b, s.image $ λ a, a * b) '' (t : set α)).pairwise_disjoint id → s.card ∣ (s * t).card :=
+card_dvd_card_image₂_left (λ _ _, mul_left_injective _)
+
end group
section group_with_zero
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
a • t ⊆ s • t
(#18697)
Eta expansion in the lemma statements is deliberate, to make the left and right lemmas more similar and allow further rewrites.
Also additivise finset.bUnion_smul_finset
, fix the name of finset.smul_finset_mem_smul_finset
to finset.smul_mem_smul_finset
, move image2_swap
/image₂_swap
further up the file to let them be used in earlier proofs.
@@ -54,7 +54,7 @@ finset multiplication, finset addition, pointwise addition, pointwise multiplica
pointwise subtraction
-/
-open function
+open function mul_opposite
open_locale big_operators pointwise
variables {F α β γ : Type*}
@@ -124,7 +124,9 @@ localized "attribute [instance] finset.has_inv finset.has_neg" in pointwise
@[simp, to_additive] lemma inv_empty : (∅ : finset α)⁻¹ = ∅ := image_empty _
@[simp, to_additive] lemma inv_nonempty_iff : s⁻¹.nonempty ↔ s.nonempty := nonempty.image_iff _
-alias inv_nonempty_iff ↔ nonempty.inv nonempty.of_inv
+alias inv_nonempty_iff ↔ nonempty.of_inv nonempty.inv
+
+attribute [to_additive] nonempty.inv nonempty.of_inv
@[to_additive, mono] lemma inv_subset_inv (h : s ⊆ t) : s⁻¹ ⊆ t⁻¹ := image_subset_image h
@@ -212,6 +214,10 @@ attribute [mono] add_subset_add
image₂_inter_subset_left
@[to_additive] lemma mul_inter_subset : s * (t₁ ∩ t₂) ⊆ s * t₁ ∩ (s * t₂) :=
image₂_inter_subset_right
+@[to_additive] lemma inter_mul_union_subset_union : s₁ ∩ s₂ * (t₁ ∪ t₂) ⊆ (s₁ * t₁) ∪ (s₂ * t₂) :=
+image₂_inter_union_subset_union
+@[to_additive] lemma union_mul_inter_subset_union : (s₁ ∪ s₂) * (t₁ ∩ t₂) ⊆ (s₁ * t₁) ∪ (s₂ * t₂) :=
+image₂_union_inter_subset_union
/-- If a finset `u` is contained in the product of two sets `s * t`, we can find two finsets `s'`,
`t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' * t'`. -/
@@ -294,6 +300,10 @@ attribute [mono] sub_subset_sub
image₂_inter_subset_left
@[to_additive] lemma div_inter_subset : s / (t₁ ∩ t₂) ⊆ s / t₁ ∩ (s / t₂) :=
image₂_inter_subset_right
+@[to_additive] lemma inter_div_union_subset_union : (s₁ ∩ s₂) / (t₁ ∪ t₂) ⊆ (s₁ / t₁) ∪ (s₂ / t₂) :=
+image₂_inter_union_subset_union
+@[to_additive] lemma union_div_inter_subset_union : (s₁ ∪ s₂) / (t₁ ∩ t₂) ⊆ (s₁ / t₁) ∪ (s₂ / t₂) :=
+image₂_union_inter_subset_union
/-- If a finset `u` is contained in the product of two sets `s / t`, we can find two finsets `s'`,
`t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' / t'`. -/
@@ -711,6 +721,12 @@ image₂_union_left
image₂_inter_subset_left
@[to_additive] lemma smul_inter_subset : s • (t₁ ∩ t₂) ⊆ s • t₁ ∩ s • t₂ :=
image₂_inter_subset_right
+@[to_additive] lemma inter_smul_union_subset_union [decidable_eq α] :
+ (s₁ ∩ s₂) • (t₁ ∪ t₂) ⊆ (s₁ • t₁) ∪ (s₂ • t₂) :=
+image₂_inter_union_subset_union
+@[to_additive] lemma union_smul_inter_subset_union [decidable_eq α] :
+ (s₁ ∪ s₂) • (t₁ ∩ t₂) ⊆ (s₁ • t₁) ∪ (s₂ • t₂) :=
+image₂_union_inter_subset_union
/-- If a finset `u` is contained in the scalar product of two sets `s • t`, we can find two finsets
`s'`, `t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' • t'`. -/
@@ -806,7 +822,7 @@ by simp only [finset.smul_finset_def, and.assoc, mem_image, exists_prop, prod.ex
@[simp, norm_cast, to_additive]
lemma coe_smul_finset (a : α) (s : finset β) : (↑(a • s) : set β) = a • s := coe_image
-@[to_additive] lemma smul_finset_mem_smul_finset : b ∈ s → a • b ∈ a • s := mem_image_of_mem _
+@[to_additive] lemma smul_mem_smul_finset : b ∈ s → a • b ∈ a • s := mem_image_of_mem _
@[to_additive] lemma smul_finset_card_le : (a • s).card ≤ s.card := card_image_le
@[simp, to_additive] lemma smul_finset_empty (a : α) : a • (∅ : finset β) = ∅ := image_empty _
@@ -829,7 +845,11 @@ lemma smul_finset_singleton (b : β) : a • ({b} : finset β) = {a • b} := im
@[to_additive] lemma smul_finset_inter_subset : a • (s₁ ∩ s₂) ⊆ a • s₁ ∩ (a • s₂) :=
image_inter_subset _ _ _
-@[simp] lemma bUnion_smul_finset (s : finset α) (t : finset β) : s.bUnion (• t) = s • t :=
+@[to_additive] lemma smul_finset_subset_smul {s : finset α} : a ∈ s → a • t ⊆ s • t :=
+image_subset_image₂_right
+
+@[simp, to_additive] lemma bUnion_smul_finset (s : finset α) (t : finset β) :
+ s.bUnion (• t) = s • t :=
bUnion_image_left
end has_smul
@@ -936,6 +956,42 @@ coe_injective.no_zero_smul_divisors _ coe_zero coe_smul_finset
end instances
+section has_smul
+variables [decidable_eq β] [decidable_eq γ] [has_smul αᵐᵒᵖ β] [has_smul β γ] [has_smul α γ]
+
+-- TODO: replace hypothesis and conclusion with a typeclass
+@[to_additive] lemma op_smul_finset_smul_eq_smul_smul_finset (a : α) (s : finset β) (t : finset γ)
+ (h : ∀ (a : α) (b : β) (c : γ), (op a • b) • c = b • a • c) :
+ (op a • s) • t = s • a • t :=
+by { ext, simp [mem_smul, mem_smul_finset, h] }
+
+end has_smul
+
+section has_mul
+variables [has_mul α] [decidable_eq α] {s t u : finset α} {a : α}
+
+@[to_additive] lemma op_smul_finset_subset_mul : a ∈ t → op a • s ⊆ s * t :=
+image_subset_image₂_left
+
+@[simp, to_additive] lemma bUnion_op_smul_finset (s t : finset α) :
+ t.bUnion (λ a, op a • s) = s * t :=
+bUnion_image_right
+
+@[to_additive] lemma mul_subset_iff_left : s * t ⊆ u ↔ ∀ a ∈ s, a • t ⊆ u := image₂_subset_iff_left
+@[to_additive] lemma mul_subset_iff_right : s * t ⊆ u ↔ ∀ b ∈ t, op b • s ⊆ u :=
+image₂_subset_iff_right
+
+end has_mul
+
+section semigroup
+variables [semigroup α] [decidable_eq α]
+
+@[to_additive] lemma op_smul_finset_mul_eq_mul_smul_finset (a : α) (s : finset α) (t : finset α) :
+ (op a • s) * t = s * a • t :=
+op_smul_finset_smul_eq_smul_smul_finset _ _ _ $ λ _ _ _, mul_assoc _ _ _
+
+end semigroup
+
section left_cancel_semigroup
variables [left_cancel_semigroup α] [decidable_eq α] (s t : finset α) (a : α)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
a • (s ∩ t) = a • s ∩ a • t
(#18682)
I added the corresponding set
lemmas a while back, but forgot about their finset
counterpart. Also additivise finset.is_central_scalar
/set.is_central_scalar
.
@@ -876,6 +876,7 @@ instance is_scalar_tower'' [has_smul α β] [has_smul α γ] [has_smul β γ] [i
is_scalar_tower (finset α) (finset β) (finset γ) :=
⟨λ a s t, coe_injective $ by simp only [coe_smul_finset, coe_smul, smul_assoc]⟩
+@[to_additive]
instance is_central_scalar [has_smul α β] [has_smul αᵐᵒᵖ β] [is_central_scalar α β] :
is_central_scalar α (finset β) :=
⟨λ a s, coe_injective $ by simp only [coe_smul_finset, coe_smul, op_smul_eq_smul]⟩
@@ -1002,6 +1003,22 @@ by { simp_rw ←coe_subset, push_cast, exact set.set_smul_subset_iff }
@[to_additive] lemma subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t :=
by { simp_rw ←coe_subset, push_cast, exact set.subset_set_smul_iff }
+@[to_additive] lemma smul_finset_inter : a • (s ∩ t) = a • s ∩ a • t :=
+image_inter _ _ $ mul_action.injective a
+
+@[to_additive] lemma smul_finset_sdiff : a • (s \ t) = a • s \ a • t :=
+image_sdiff _ _ $ mul_action.injective a
+
+@[to_additive] lemma smul_finset_symm_diff : a • (s ∆ t) = (a • s) ∆ (a • t) :=
+image_symm_diff _ _ $ mul_action.injective a
+
+@[simp, to_additive] lemma smul_finset_univ [fintype β] : a • (univ : finset β) = univ :=
+image_univ_of_surjective $ mul_action.surjective a
+
+@[simp, to_additive] lemma smul_univ [fintype β] {s : finset α} (hs : s.nonempty) :
+ s • (univ : finset β) = univ :=
+coe_injective $ by { push_cast, exact set.smul_univ hs }
+
@[simp, to_additive] lemma card_smul_finset (a : α) (s : finset β) : (a • s).card = s.card :=
card_image_of_injective _ $ mul_action.injective _
@@ -1028,6 +1045,15 @@ show units.mk0 a ha • _ ⊆ _ ↔ _, from smul_finset_subset_iff
lemma subset_smul_finset_iff₀ (ha : a ≠ 0) : s ⊆ a • t ↔ a⁻¹ • s ⊆ t :=
show _ ⊆ units.mk0 a ha • _ ↔ _, from subset_smul_finset_iff
+lemma smul_finset_inter₀ (ha : a ≠ 0) : a • (s ∩ t) = a • s ∩ a • t :=
+image_inter _ _ $ mul_action.injective₀ ha
+
+lemma smul_finset_sdiff₀ (ha : a ≠ 0) : a • (s \ t) = a • s \ a • t :=
+image_sdiff _ _ $ mul_action.injective₀ ha
+
+lemma smul_finset_symm_diff₀ (ha : a ≠ 0) : a • (s ∆ t) = (a • s) ∆ (a • t) :=
+image_symm_diff _ _ $ mul_action.injective₀ ha
+
lemma smul_univ₀ [fintype β] {s : finset α} (hs : ¬ s ⊆ 0) : s • (univ : finset β) = univ :=
coe_injective $ by { rw ←coe_subset at hs, push_cast at ⊢ hs, exact set.smul_univ₀ hs }
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
s ∩ t * s ∪ t ⊆ s * t
(#17961)
and distributivity of set.to_finset
/set.finite.to_finset
over algebraic operations.
@@ -5,6 +5,7 @@ Authors: Floris van Doorn, Yaël Dillies
-/
import data.finset.n_ary
import data.finset.preimage
+import data.set.pointwise.finite
import data.set.pointwise.smul
import data.set.pointwise.list_of_fn
@@ -83,6 +84,7 @@ image_singleton _ _
@[to_additive] lemma subset_one_iff_eq : s ⊆ 1 ↔ s = ∅ ∨ s = 1 := subset_singleton_iff
@[to_additive] lemma nonempty.subset_one_iff (h : s.nonempty) : s ⊆ 1 ↔ s = 1 :=
h.subset_singleton_iff
+@[simp, to_additive] lemma card_one : (1 : finset α).card = 1 := card_singleton _
/-- The singleton operation as a `one_hom`. -/
@[to_additive "The singleton operation as a `zero_hom`."]
@@ -336,10 +338,20 @@ localized "attribute [instance] finset.has_nsmul finset.has_npow finset.has_zsmu
protected def semigroup [semigroup α] : semigroup (finset α) :=
coe_injective.semigroup _ coe_mul
+section comm_semigroup
+variables [comm_semigroup α] {s t : finset α}
+
/-- `finset α` is a `comm_semigroup` under pointwise operations if `α` is. -/
@[to_additive "`finset α` is an `add_comm_semigroup` under pointwise operations if `α` is. "]
-protected def comm_semigroup [comm_semigroup α] : comm_semigroup (finset α) :=
-coe_injective.comm_semigroup _ coe_mul
+protected def comm_semigroup : comm_semigroup (finset α) := coe_injective.comm_semigroup _ coe_mul
+
+@[to_additive] lemma inter_mul_union_subset : s ∩ t * (s ∪ t) ⊆ s * t :=
+image₂_inter_union_subset mul_comm
+
+@[to_additive] lemma union_mul_inter_subset : (s ∪ t) * (s ∩ t) ⊆ s * t :=
+image₂_union_inter_subset mul_comm
+
+end comm_semigroup
section mul_one_class
variables [mul_one_class α]
@@ -959,6 +971,16 @@ end
open_locale pointwise
+@[to_additive] lemma image_smul_comm [decidable_eq β] [decidable_eq γ] [has_smul α β] [has_smul α γ]
+ (f : β → γ) (a : α) (s : finset β) :
+ (∀ b, f (a • b) = a • f b) → (a • s).image f = a • s.image f :=
+image_comm
+
+@[to_additive] lemma image_smul_distrib [decidable_eq α] [decidable_eq β] [monoid α] [monoid β]
+ [monoid_hom_class F α β] (f : F) (a : α) (s : finset α) :
+ (a • s).image f = f a • s.image f :=
+image_comm $ map_mul _ _
+
section group
variables [decidable_eq β] [group α] [mul_action α β] {s t : finset β} {a : α} {b : β}
@@ -980,6 +1002,9 @@ by { simp_rw ←coe_subset, push_cast, exact set.set_smul_subset_iff }
@[to_additive] lemma subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t :=
by { simp_rw ←coe_subset, push_cast, exact set.subset_set_smul_iff }
+@[simp, to_additive] lemma card_smul_finset (a : α) (s : finset β) : (a • s).card = s.card :=
+card_image_of_injective _ $ mul_action.injective _
+
end group
section group_with_zero
@@ -1073,3 +1098,74 @@ by { simp_rw ←image_neg, exact image₂_image_left_comm neg_smul }
end ring
end finset
+
+open_locale pointwise
+
+namespace set
+section has_one
+variables [has_one α]
+
+@[simp, to_additive] lemma to_finset_one : (1 : set α).to_finset = 1 := rfl
+
+@[simp, to_additive]
+lemma finite.to_finset_one (h : (1 : set α).finite := finite_one) : h.to_finset = 1 :=
+finite.to_finset_singleton _
+
+end has_one
+
+section has_mul
+variables [decidable_eq α] [has_mul α] {s t : set α}
+
+@[simp, to_additive] lemma to_finset_mul (s t : set α) [fintype s] [fintype t] [fintype ↥(s * t)] :
+ (s * t).to_finset = s.to_finset * t.to_finset :=
+to_finset_image2 _ _ _
+
+@[to_additive] lemma finite.to_finset_mul (hs : s.finite) (ht : t.finite) (hf := hs.mul ht) :
+ hf.to_finset = hs.to_finset * ht.to_finset :=
+finite.to_finset_image2 _ _ _
+
+end has_mul
+
+section has_smul
+variables [has_smul α β] [decidable_eq β] {a : α} {s : set α} {t : set β}
+
+@[simp, to_additive]
+lemma to_finset_smul (s : set α) (t : set β) [fintype s] [fintype t] [fintype ↥(s • t)] :
+ (s • t).to_finset = s.to_finset • t.to_finset :=
+to_finset_image2 _ _ _
+
+@[to_additive] lemma finite.to_finset_smul (hs : s.finite) (ht : t.finite) (hf := hs.smul ht) :
+ hf.to_finset = hs.to_finset • ht.to_finset :=
+finite.to_finset_image2 _ _ _
+
+end has_smul
+
+section has_smul
+variables [decidable_eq β] [has_smul α β] {a : α} {s : set β}
+
+@[simp, to_additive]
+lemma to_finset_smul_set (a : α) (s : set β) [fintype s] [fintype ↥(a • s)] :
+ (a • s).to_finset = a • s.to_finset :=
+to_finset_image _ _
+
+@[to_additive]
+lemma finite.to_finset_smul_set (hs : s.finite) (hf : (a • s).finite := hs.smul_set) :
+ hf.to_finset = a • hs.to_finset :=
+finite.to_finset_image _ _ _
+
+end has_smul
+
+section has_vsub
+variables [decidable_eq α] [has_vsub α β] {s t : set β}
+include α
+
+@[simp] lemma to_finset_vsub (s t : set β) [fintype s] [fintype t] [fintype ↥(s -ᵥ t)] :
+ (s -ᵥ t : set α).to_finset = s.to_finset -ᵥ t.to_finset :=
+to_finset_image2 _ _ _
+
+lemma finite.to_finset_vsub (hs : s.finite) (ht : t.finite) (hf := hs.vsub ht) :
+ hf.to_finset = hs.to_finset -ᵥ ht.to_finset :=
+finite.to_finset_image2 _ _ _
+
+end has_vsub
+end set
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -6,7 +6,7 @@ Authors: Floris van Doorn, Yaël Dillies
import Data.Finset.NAry
import Data.Finset.Preimage
import Data.Set.Pointwise.Finite
-import Data.Set.Pointwise.Smul
+import Data.Set.Pointwise.SMul
import Data.Set.Pointwise.ListOfFn
#align_import data.finset.pointwise from "leanprover-community/mathlib"@"eba7871095e834365616b5e43c8c7bb0b37058d0"
@@ -1091,7 +1091,7 @@ theorem coe_pow (s : Finset α) (n : ℕ) : ↑(s ^ n) = (s ^ n : Set α) :=
change ↑(npowRec n s) = _
induction' n with n ih
· rw [npowRec, pow_zero, coe_one]
- · rw [npowRec, pow_succ, coe_mul, ih]
+ · rw [npowRec, pow_succ', coe_mul, ih]
#align finset.coe_pow Finset.coe_pow
#align finset.coe_nsmul Finset.coe_nsmul
-/
@@ -1111,7 +1111,7 @@ scoped[Pointwise] attribute [instance] Finset.monoid Finset.addMonoid
@[to_additive]
theorem pow_mem_pow (ha : a ∈ s) : ∀ n : ℕ, a ^ n ∈ s ^ n
| 0 => by rw [pow_zero]; exact one_mem_one
- | n + 1 => by rw [pow_succ]; exact mul_mem_mul ha (pow_mem_pow _)
+ | n + 1 => by rw [pow_succ']; exact mul_mem_mul ha (pow_mem_pow _)
#align finset.pow_mem_pow Finset.pow_mem_pow
#align finset.nsmul_mem_nsmul Finset.nsmul_mem_nsmul
-/
@@ -1120,7 +1120,7 @@ theorem pow_mem_pow (ha : a ∈ s) : ∀ n : ℕ, a ^ n ∈ s ^ n
@[to_additive]
theorem pow_subset_pow (hst : s ⊆ t) : ∀ n : ℕ, s ^ n ⊆ t ^ n
| 0 => by rw [pow_zero]; exact subset.rfl
- | n + 1 => by rw [pow_succ]; exact mul_subset_mul hst (pow_subset_pow _)
+ | n + 1 => by rw [pow_succ']; exact mul_subset_mul hst (pow_subset_pow _)
#align finset.pow_subset_pow Finset.pow_subset_pow
#align finset.nsmul_subset_nsmul Finset.nsmul_subset_nsmul
-/
@@ -1131,7 +1131,7 @@ theorem pow_subset_pow_of_one_mem (hs : (1 : α) ∈ s) : m ≤ n → s ^ m ⊆
by
refine' Nat.le_induction _ (fun n h ih => _) _
· exact subset.rfl
- · rw [pow_succ]
+ · rw [pow_succ']
exact ih.trans (subset_mul_right _ hs)
#align finset.pow_subset_pow_of_one_mem Finset.pow_subset_pow_of_one_mem
#align finset.nsmul_subset_nsmul_of_zero_mem Finset.nsmul_subset_nsmul_of_zero_mem
@@ -1166,7 +1166,7 @@ theorem mem_pow {a : α} {n : ℕ} :
#print Finset.empty_pow /-
@[simp, to_additive]
theorem empty_pow (hn : n ≠ 0) : (∅ : Finset α) ^ n = ∅ := by
- rw [← tsub_add_cancel_of_le (Nat.succ_le_of_lt <| Nat.pos_of_ne_zero hn), pow_succ, empty_mul]
+ rw [← tsub_add_cancel_of_le (Nat.succ_le_of_lt <| Nat.pos_of_ne_zero hn), pow_succ', empty_mul]
#align finset.empty_pow Finset.empty_pow
#align finset.empty_nsmul Finset.empty_nsmul
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -2276,7 +2276,7 @@ instance [Zero α] [Zero β] [SMul α β] [NoZeroSMulDivisors α β] :
by_contra! H
have hst : (s • t).Nonempty := h.symm.subst zero_nonempty
simp_rw [← hst.of_smul_left.subset_zero_iff, ← hst.of_smul_right.subset_zero_iff, not_subset,
- mem_zero] at H
+ mem_zero] at H
obtain ⟨⟨a, hs, ha⟩, b, ht, hb⟩ := H
have := subset_of_eq h
exact
@@ -2641,7 +2641,7 @@ theorem smul_finset_symmDiff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (
#print Finset.smul_univ₀ /-
theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ : Finset β) = univ :=
- coe_injective <| by rw [← coe_subset] at hs ; push_cast at hs ⊢; exact Set.smul_univ₀ hs
+ coe_injective <| by rw [← coe_subset] at hs; push_cast at hs ⊢; exact Set.smul_univ₀ hs
#align finset.smul_univ₀ Finset.smul_univ₀
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1507,7 +1507,8 @@ variable [Group α] {s t : Finset α} {a b : α}
#print Finset.preimage_mul_left_singleton /-
@[simp, to_additive]
theorem preimage_mul_left_singleton :
- preimage {b} ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹ * b} := by classical
+ preimage {b} ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹ * b} := by
+ classical rw [← image_mul_left', image_singleton]
#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singleton
#align finset.preimage_add_left_singleton Finset.preimage_add_left_singleton
-/
@@ -1515,7 +1516,8 @@ theorem preimage_mul_left_singleton :
#print Finset.preimage_mul_right_singleton /-
@[simp, to_additive]
theorem preimage_mul_right_singleton :
- preimage {b} (· * a) ((mul_left_injective _).InjOn _) = {b * a⁻¹} := by classical
+ preimage {b} (· * a) ((mul_left_injective _).InjOn _) = {b * a⁻¹} := by
+ classical rw [← image_mul_right', image_singleton]
#align finset.preimage_mul_right_singleton Finset.preimage_mul_right_singleton
#align finset.preimage_add_right_singleton Finset.preimage_add_right_singleton
-/
@@ -1523,7 +1525,7 @@ theorem preimage_mul_right_singleton :
#print Finset.preimage_mul_left_one /-
@[simp, to_additive]
theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹} :=
- by classical
+ by classical rw [← image_mul_left', image_one, mul_one]
#align finset.preimage_mul_left_one Finset.preimage_mul_left_one
#align finset.preimage_add_left_zero Finset.preimage_add_left_zero
-/
@@ -1531,7 +1533,7 @@ theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _
#print Finset.preimage_mul_right_one /-
@[simp, to_additive]
theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).InjOn _) = {b⁻¹} := by
- classical
+ classical rw [← image_mul_right', image_one, one_mul]
#align finset.preimage_mul_right_one Finset.preimage_mul_right_one
#align finset.preimage_add_right_zero Finset.preimage_add_right_zero
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -1507,8 +1507,7 @@ variable [Group α] {s t : Finset α} {a b : α}
#print Finset.preimage_mul_left_singleton /-
@[simp, to_additive]
theorem preimage_mul_left_singleton :
- preimage {b} ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹ * b} := by
- classical rw [← image_mul_left', image_singleton]
+ preimage {b} ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹ * b} := by classical
#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singleton
#align finset.preimage_add_left_singleton Finset.preimage_add_left_singleton
-/
@@ -1516,8 +1515,7 @@ theorem preimage_mul_left_singleton :
#print Finset.preimage_mul_right_singleton /-
@[simp, to_additive]
theorem preimage_mul_right_singleton :
- preimage {b} (· * a) ((mul_left_injective _).InjOn _) = {b * a⁻¹} := by
- classical rw [← image_mul_right', image_singleton]
+ preimage {b} (· * a) ((mul_left_injective _).InjOn _) = {b * a⁻¹} := by classical
#align finset.preimage_mul_right_singleton Finset.preimage_mul_right_singleton
#align finset.preimage_add_right_singleton Finset.preimage_add_right_singleton
-/
@@ -1525,7 +1523,7 @@ theorem preimage_mul_right_singleton :
#print Finset.preimage_mul_left_one /-
@[simp, to_additive]
theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹} :=
- by classical rw [← image_mul_left', image_one, mul_one]
+ by classical
#align finset.preimage_mul_left_one Finset.preimage_mul_left_one
#align finset.preimage_add_left_zero Finset.preimage_add_left_zero
-/
@@ -1533,7 +1531,7 @@ theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _
#print Finset.preimage_mul_right_one /-
@[simp, to_additive]
theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).InjOn _) = {b⁻¹} := by
- classical rw [← image_mul_right', image_one, one_mul]
+ classical
#align finset.preimage_mul_right_one Finset.preimage_mul_right_one
#align finset.preimage_add_right_zero Finset.preimage_add_right_zero
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -279,7 +279,7 @@ theorem inv_empty : (∅ : Finset α)⁻¹ = ∅ :=
#print Finset.inv_nonempty_iff /-
@[simp, to_additive]
theorem inv_nonempty_iff : s⁻¹.Nonempty ↔ s.Nonempty :=
- Nonempty.image_iff _
+ Finset.image_nonempty _
#align finset.inv_nonempty_iff Finset.inv_nonempty_iff
#align finset.neg_nonempty_iff Finset.neg_nonempty_iff
-/
@@ -2065,7 +2065,7 @@ theorem smul_finset_eq_empty : a • s = ∅ ↔ s = ∅ :=
#print Finset.smul_finset_nonempty /-
@[simp, to_additive]
theorem smul_finset_nonempty : (a • s).Nonempty ↔ s.Nonempty :=
- Nonempty.image_iff _
+ Finset.image_nonempty _
#align finset.smul_finset_nonempty Finset.smul_finset_nonempty
#align finset.vadd_finset_nonempty Finset.vadd_finset_nonempty
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -681,12 +681,12 @@ theorem div_def : s / t = (s ×ˢ t).image fun p : α × α => p.1 / p.2 :=
-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print Finset.image_div_prod /-
+#print Finset.image_div_product /-
@[to_additive add_image_prod]
-theorem image_div_prod : ((s ×ˢ t).image fun x : α × α => x.fst / x.snd) = s / t :=
+theorem image_div_product : ((s ×ˢ t).image fun x : α × α => x.fst / x.snd) = s / t :=
rfl
-#align finset.image_div_prod Finset.image_div_prod
-#align finset.add_image_prod Finset.add_image_prod
+#align finset.image_div_prod Finset.image_div_product
+#align finset.add_image_prod Finset.image_sub_product
-/
#print Finset.mem_div /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -2273,7 +2273,7 @@ instance [DecidableEq α] [Zero α] [Mul α] [NoZeroDivisors α] : NoZeroDivisor
instance [Zero α] [Zero β] [SMul α β] [NoZeroSMulDivisors α β] :
NoZeroSMulDivisors (Finset α) (Finset β) :=
⟨fun s t h => by
- by_contra' H
+ by_contra! H
have hst : (s • t).Nonempty := h.symm.subst zero_nonempty
simp_rw [← hst.of_smul_left.subset_zero_iff, ← hst.of_smul_right.subset_zero_iff, not_subset,
mem_zero] at H
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -2488,7 +2488,7 @@ theorem smul_finset_subset_smul_finset_iff : a • s ⊆ a • t ↔ s ⊆ t :=
#print Finset.smul_finset_subset_iff /-
@[to_additive]
-theorem smul_finset_subset_iff : a • s ⊆ t ↔ s ⊆ a⁻¹ • t := by simp_rw [← coe_subset]; push_cast ;
+theorem smul_finset_subset_iff : a • s ⊆ t ↔ s ⊆ a⁻¹ • t := by simp_rw [← coe_subset]; push_cast;
exact Set.set_smul_subset_iff
#align finset.smul_finset_subset_iff Finset.smul_finset_subset_iff
#align finset.vadd_finset_subset_iff Finset.vadd_finset_subset_iff
@@ -2496,7 +2496,7 @@ theorem smul_finset_subset_iff : a • s ⊆ t ↔ s ⊆ a⁻¹ • t := by simp
#print Finset.subset_smul_finset_iff /-
@[to_additive]
-theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t := by simp_rw [← coe_subset]; push_cast ;
+theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t := by simp_rw [← coe_subset]; push_cast;
exact Set.subset_set_smul_iff
#align finset.subset_smul_finset_iff Finset.subset_smul_finset_iff
#align finset.subset_vadd_finset_iff Finset.subset_vadd_finset_iff
@@ -2537,7 +2537,7 @@ theorem smul_finset_univ [Fintype β] : a • (univ : Finset β) = univ :=
#print Finset.smul_univ /-
@[simp, to_additive]
theorem smul_univ [Fintype β] {s : Finset α} (hs : s.Nonempty) : s • (univ : Finset β) = univ :=
- coe_injective <| by push_cast ; exact Set.smul_univ hs
+ coe_injective <| by push_cast; exact Set.smul_univ hs
#align finset.smul_univ Finset.smul_univ
#align finset.vadd_univ Finset.vadd_univ
-/
@@ -2647,7 +2647,7 @@ theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ
#print Finset.smul_finset_univ₀ /-
theorem smul_finset_univ₀ [Fintype β] (ha : a ≠ 0) : a • (univ : Finset β) = univ :=
- coe_injective <| by push_cast ; exact Set.smul_set_univ₀ ha
+ coe_injective <| by push_cast; exact Set.smul_set_univ₀ ha
#align finset.smul_finset_univ₀ Finset.smul_finset_univ₀
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2020 Floris van Doorn. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn, Yaël Dillies
-/
-import Mathbin.Data.Finset.NAry
-import Mathbin.Data.Finset.Preimage
-import Mathbin.Data.Set.Pointwise.Finite
-import Mathbin.Data.Set.Pointwise.Smul
-import Mathbin.Data.Set.Pointwise.ListOfFn
+import Data.Finset.NAry
+import Data.Finset.Preimage
+import Data.Set.Pointwise.Finite
+import Data.Set.Pointwise.Smul
+import Data.Set.Pointwise.ListOfFn
#align_import data.finset.pointwise from "leanprover-community/mathlib"@"eba7871095e834365616b5e43c8c7bb0b37058d0"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -284,7 +284,7 @@ theorem inv_nonempty_iff : s⁻¹.Nonempty ↔ s.Nonempty :=
#align finset.neg_nonempty_iff Finset.neg_nonempty_iff
-/
-alias inv_nonempty_iff ↔ nonempty.of_inv nonempty.inv
+alias ⟨nonempty.of_inv, nonempty.inv⟩ := inv_nonempty_iff
#align finset.nonempty.of_inv Finset.Nonempty.of_inv
#align finset.nonempty.inv Finset.Nonempty.inv
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -2226,7 +2226,7 @@ instance isCentralScalar [SMul α β] [SMul αᵐᵒᵖ β] [IsCentralScalar α
"An additive action of an additive monoid `α` on a type `β` gives an additive action\nof `finset α` on `finset β`"]
protected def mulAction [DecidableEq α] [Monoid α] [MulAction α β] : MulAction (Finset α) (Finset β)
where
- mul_smul _ _ _ := image₂_assoc mul_smul
+ hMul_smul _ _ _ := image₂_assoc hMul_smul
one_smul s := image₂_singleton_left.trans <| by simp_rw [one_smul, image_id']
#align finset.mul_action Finset.mulAction
#align finset.add_action Finset.addAction
mathlib commit https://github.com/leanprover-community/mathlib/commit/63721b2c3eba6c325ecf8ae8cca27155a4f6306f
@@ -2633,10 +2633,10 @@ theorem smul_finset_sdiff₀ (ha : a ≠ 0) : a • (s \ t) = a • s \ a • t
#align finset.smul_finset_sdiff₀ Finset.smul_finset_sdiff₀
-/
-#print Finset.smul_finset_symm_diff₀ /-
-theorem smul_finset_symm_diff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (a • t) :=
+#print Finset.smul_finset_symmDiff₀ /-
+theorem smul_finset_symmDiff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (a • t) :=
image_symmDiff _ _ <| MulAction.injective₀ ha
-#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symm_diff₀
+#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symmDiff₀
-/
#print Finset.smul_univ₀ /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2020 Floris van Doorn. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn, Yaël Dillies
-
-! This file was ported from Lean 3 source module data.finset.pointwise
-! leanprover-community/mathlib commit eba7871095e834365616b5e43c8c7bb0b37058d0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Data.Finset.NAry
import Mathbin.Data.Finset.Preimage
@@ -14,6 +9,8 @@ import Mathbin.Data.Set.Pointwise.Finite
import Mathbin.Data.Set.Pointwise.Smul
import Mathbin.Data.Set.Pointwise.ListOfFn
+#align_import data.finset.pointwise from "leanprover-community/mathlib"@"eba7871095e834365616b5e43c8c7bb0b37058d0"
+
/-!
# Pointwise operations of finsets
mathlib commit https://github.com/leanprover-community/mathlib/commit/6285167a053ad0990fc88e56c48ccd9fae6550eb
@@ -2553,6 +2553,7 @@ theorem card_smul_finset (a : α) (s : Finset β) : (a • s).card = s.card :=
#align finset.card_vadd_finset Finset.card_vadd_finset
-/
+#print Finset.card_dvd_card_smul_right /-
/-- If the left cosets of `t` by elements of `s` are disjoint (but not necessarily distinct!), then
the size of `t` divides the size of `s * t`. -/
@[to_additive
@@ -2562,9 +2563,11 @@ theorem card_dvd_card_smul_right {s : Finset α} :
card_dvd_card_image₂_right fun _ _ => MulAction.injective _
#align finset.card_dvd_card_smul_right Finset.card_dvd_card_smul_right
#align finset.card_dvd_card_vadd_right Finset.card_dvd_card_vadd_right
+-/
variable [DecidableEq α]
+#print Finset.card_dvd_card_mul_left /-
/-- If the right cosets of `s` by elements of `t` are disjoint (but not necessarily distinct!), then
the size of `s` divides the size of `s * t`. -/
@[to_additive
@@ -2575,6 +2578,7 @@ theorem card_dvd_card_mul_left {s t : Finset α} :
card_dvd_card_image₂_left fun _ _ => mul_left_injective _
#align finset.card_dvd_card_mul_left Finset.card_dvd_card_mul_left
#align finset.card_dvd_card_add_left Finset.card_dvd_card_add_left
+-/
end Group
mathlib commit https://github.com/leanprover-community/mathlib/commit/6285167a053ad0990fc88e56c48ccd9fae6550eb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn, Yaël Dillies
! This file was ported from Lean 3 source module data.finset.pointwise
-! leanprover-community/mathlib commit 5e526d18cea33550268dcbbddcb822d5cde40654
+! leanprover-community/mathlib commit eba7871095e834365616b5e43c8c7bb0b37058d0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -2553,6 +2553,29 @@ theorem card_smul_finset (a : α) (s : Finset β) : (a • s).card = s.card :=
#align finset.card_vadd_finset Finset.card_vadd_finset
-/
+/-- If the left cosets of `t` by elements of `s` are disjoint (but not necessarily distinct!), then
+the size of `t` divides the size of `s * t`. -/
+@[to_additive
+ "If the left cosets of `t` by elements of `s` are disjoint (but not necessarily\ndistinct!), then the size of `t` divides the size of `s + t`."]
+theorem card_dvd_card_smul_right {s : Finset α} :
+ ((· • t) '' (s : Set α)).PairwiseDisjoint id → t.card ∣ (s • t).card :=
+ card_dvd_card_image₂_right fun _ _ => MulAction.injective _
+#align finset.card_dvd_card_smul_right Finset.card_dvd_card_smul_right
+#align finset.card_dvd_card_vadd_right Finset.card_dvd_card_vadd_right
+
+variable [DecidableEq α]
+
+/-- If the right cosets of `s` by elements of `t` are disjoint (but not necessarily distinct!), then
+the size of `s` divides the size of `s * t`. -/
+@[to_additive
+ "If the right cosets of `s` by elements of `t` are disjoint (but not necessarily\ndistinct!), then the size of `s` divides the size of `s + t`."]
+theorem card_dvd_card_mul_left {s t : Finset α} :
+ ((fun b => s.image fun a => a * b) '' (t : Set α)).PairwiseDisjoint id →
+ s.card ∣ (s * t).card :=
+ card_dvd_card_image₂_left fun _ _ => mul_left_injective _
+#align finset.card_dvd_card_mul_left Finset.card_dvd_card_mul_left
+#align finset.card_dvd_card_add_left Finset.card_dvd_card_add_left
+
end Group
section GroupWithZero
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -134,11 +134,13 @@ theorem one_nonempty : (1 : Finset α).Nonempty :=
#align finset.zero_nonempty Finset.zero_nonempty
-/
+#print Finset.map_one /-
@[simp, to_additive]
protected theorem map_one {f : α ↪ β} : map f 1 = {f 1} :=
map_singleton f 1
#align finset.map_one Finset.map_one
#align finset.map_zero Finset.map_zero
+-/
#print Finset.image_one /-
@[simp, to_additive]
@@ -245,11 +247,13 @@ theorem image_inv : (s.image fun x => x⁻¹) = s⁻¹ :=
#align finset.image_neg Finset.image_neg
-/
+#print Finset.mem_inv /-
@[to_additive]
theorem mem_inv {x : α} : x ∈ s⁻¹ ↔ ∃ y ∈ s, y⁻¹ = x :=
mem_image
#align finset.mem_inv Finset.mem_inv
#align finset.mem_neg Finset.mem_neg
+-/
#print Finset.inv_mem_inv /-
@[to_additive]
@@ -323,23 +327,29 @@ section InvolutiveInv
variable [DecidableEq α] [InvolutiveInv α] (s : Finset α)
+#print Finset.coe_inv /-
@[simp, norm_cast, to_additive]
theorem coe_inv : ↑s⁻¹ = (s : Set α)⁻¹ :=
coe_image.trans Set.image_inv
#align finset.coe_inv Finset.coe_inv
#align finset.coe_neg Finset.coe_neg
+-/
+#print Finset.card_inv /-
@[simp, to_additive]
theorem card_inv : s⁻¹.card = s.card :=
card_image_of_injective _ inv_injective
#align finset.card_inv Finset.card_inv
#align finset.card_neg Finset.card_neg
+-/
+#print Finset.preimage_inv /-
@[simp, to_additive]
theorem preimage_inv : s.Preimage Inv.inv (inv_injective.InjOn _) = s⁻¹ :=
coe_injective <| by rw [coe_preimage, Set.inv_preimage, coe_inv]
#align finset.preimage_inv Finset.preimage_inv
#align finset.preimage_neg Finset.preimage_neg
+-/
end InvolutiveInv
@@ -959,17 +969,21 @@ protected def commSemigroup : CommSemigroup (Finset α) :=
#align finset.add_comm_semigroup Finset.addCommSemigroup
-/
+#print Finset.inter_mul_union_subset /-
@[to_additive]
theorem inter_mul_union_subset : s ∩ t * (s ∪ t) ⊆ s * t :=
image₂_inter_union_subset mul_comm
#align finset.inter_mul_union_subset Finset.inter_mul_union_subset
#align finset.inter_add_union_subset Finset.inter_add_union_subset
+-/
+#print Finset.union_mul_inter_subset /-
@[to_additive]
theorem union_mul_inter_subset : (s ∪ t) * (s ∩ t) ⊆ s * t :=
image₂_union_inter_subset mul_comm
#align finset.union_mul_inter_subset Finset.union_mul_inter_subset
#align finset.union_add_inter_subset Finset.union_add_inter_subset
+-/
end CommSemigroup
@@ -990,17 +1004,21 @@ scoped[Pointwise]
attribute [instance] Finset.semigroup Finset.addSemigroup Finset.commSemigroup
Finset.addCommSemigroup Finset.mulOneClass Finset.addZeroClass
+#print Finset.subset_mul_left /-
@[to_additive]
theorem subset_mul_left (s : Finset α) {t : Finset α} (ht : (1 : α) ∈ t) : s ⊆ s * t := fun a ha =>
mem_mul.2 ⟨a, 1, ha, ht, mul_one _⟩
#align finset.subset_mul_left Finset.subset_mul_left
#align finset.subset_add_left Finset.subset_add_left
+-/
+#print Finset.subset_mul_right /-
@[to_additive]
theorem subset_mul_right {s : Finset α} (t : Finset α) (hs : (1 : α) ∈ s) : t ⊆ s * t := fun a ha =>
mem_mul.2 ⟨1, a, hs, ha, one_mul _⟩
#align finset.subset_mul_right Finset.subset_mul_right
#align finset.subset_add_right Finset.subset_add_right
+-/
#print Finset.singletonMonoidHom /-
/-- The singleton operation as a `monoid_hom`. -/
@@ -1011,17 +1029,21 @@ def singletonMonoidHom : α →* Finset α :=
#align finset.singleton_add_monoid_hom Finset.singletonAddMonoidHom
-/
+#print Finset.coe_singletonMonoidHom /-
@[simp, to_additive]
theorem coe_singletonMonoidHom : (singletonMonoidHom : α → Finset α) = singleton :=
rfl
#align finset.coe_singleton_monoid_hom Finset.coe_singletonMonoidHom
#align finset.coe_singleton_add_monoid_hom Finset.coe_singletonAddMonoidHom
+-/
+#print Finset.singletonMonoidHom_apply /-
@[simp, to_additive]
theorem singletonMonoidHom_apply (a : α) : singletonMonoidHom a = {a} :=
rfl
#align finset.singleton_monoid_hom_apply Finset.singletonMonoidHom_apply
#align finset.singleton_add_monoid_hom_apply Finset.singletonAddMonoidHom_apply
+-/
#print Finset.coeMonoidHom /-
/-- The coercion from `finset` to `set` as a `monoid_hom`. -/
@@ -1034,17 +1056,21 @@ def coeMonoidHom : Finset α →* Set α where
#align finset.coe_add_monoid_hom Finset.coeAddMonoidHom
-/
+#print Finset.coe_coeMonoidHom /-
@[simp, to_additive]
theorem coe_coeMonoidHom : (coeMonoidHom : Finset α → Set α) = coe :=
rfl
#align finset.coe_coe_monoid_hom Finset.coe_coeMonoidHom
#align finset.coe_coe_add_monoid_hom Finset.coe_coeAddMonoidHom
+-/
+#print Finset.coeMonoidHom_apply /-
@[simp, to_additive]
theorem coeMonoidHom_apply (s : Finset α) : coeMonoidHom s = s :=
rfl
#align finset.coe_monoid_hom_apply Finset.coeMonoidHom_apply
#align finset.coe_add_monoid_hom_apply Finset.coeAddMonoidHom_apply
+-/
#print Finset.imageMonoidHom /-
/-- Lift a `monoid_hom` to `finset` via `image`. -/
@@ -1061,6 +1087,7 @@ section Monoid
variable [Monoid α] {s t : Finset α} {a : α} {m n : ℕ}
+#print Finset.coe_pow /-
@[simp, norm_cast, to_additive]
theorem coe_pow (s : Finset α) (n : ℕ) : ↑(s ^ n) = (s ^ n : Set α) :=
by
@@ -1070,6 +1097,7 @@ theorem coe_pow (s : Finset α) (n : ℕ) : ↑(s ^ n) = (s ^ n : Set α) :=
· rw [npowRec, pow_succ, coe_mul, ih]
#align finset.coe_pow Finset.coe_pow
#align finset.coe_nsmul Finset.coe_nsmul
+-/
#print Finset.monoid /-
/-- `finset α` is a `monoid` under pointwise operations if `α` is. -/
@@ -1082,20 +1110,25 @@ protected def monoid : Monoid (Finset α) :=
scoped[Pointwise] attribute [instance] Finset.monoid Finset.addMonoid
+#print Finset.pow_mem_pow /-
@[to_additive]
theorem pow_mem_pow (ha : a ∈ s) : ∀ n : ℕ, a ^ n ∈ s ^ n
| 0 => by rw [pow_zero]; exact one_mem_one
| n + 1 => by rw [pow_succ]; exact mul_mem_mul ha (pow_mem_pow _)
#align finset.pow_mem_pow Finset.pow_mem_pow
#align finset.nsmul_mem_nsmul Finset.nsmul_mem_nsmul
+-/
+#print Finset.pow_subset_pow /-
@[to_additive]
theorem pow_subset_pow (hst : s ⊆ t) : ∀ n : ℕ, s ^ n ⊆ t ^ n
| 0 => by rw [pow_zero]; exact subset.rfl
| n + 1 => by rw [pow_succ]; exact mul_subset_mul hst (pow_subset_pow _)
#align finset.pow_subset_pow Finset.pow_subset_pow
#align finset.nsmul_subset_nsmul Finset.nsmul_subset_nsmul
+-/
+#print Finset.pow_subset_pow_of_one_mem /-
@[to_additive]
theorem pow_subset_pow_of_one_mem (hs : (1 : α) ∈ s) : m ≤ n → s ^ m ⊆ s ^ n :=
by
@@ -1105,56 +1138,73 @@ theorem pow_subset_pow_of_one_mem (hs : (1 : α) ∈ s) : m ≤ n → s ^ m ⊆
exact ih.trans (subset_mul_right _ hs)
#align finset.pow_subset_pow_of_one_mem Finset.pow_subset_pow_of_one_mem
#align finset.nsmul_subset_nsmul_of_zero_mem Finset.nsmul_subset_nsmul_of_zero_mem
+-/
+#print Finset.coe_list_prod /-
@[simp, norm_cast, to_additive]
theorem coe_list_prod (s : List (Finset α)) : (↑s.Prod : Set α) = (s.map coe).Prod :=
map_list_prod (coeMonoidHom : Finset α →* Set α) _
#align finset.coe_list_prod Finset.coe_list_prod
#align finset.coe_list_sum Finset.coe_list_sum
+-/
+#print Finset.mem_prod_list_ofFn /-
@[to_additive]
theorem mem_prod_list_ofFn {a : α} {s : Fin n → Finset α} :
a ∈ (List.ofFn s).Prod ↔ ∃ f : ∀ i : Fin n, s i, (List.ofFn fun i => (f i : α)).Prod = a := by
rw [← mem_coe, coe_list_prod, List.map_ofFn, Set.mem_prod_list_ofFn]; rfl
#align finset.mem_prod_list_of_fn Finset.mem_prod_list_ofFn
#align finset.mem_sum_list_of_fn Finset.mem_sum_list_ofFn
+-/
+#print Finset.mem_pow /-
@[to_additive]
theorem mem_pow {a : α} {n : ℕ} :
a ∈ s ^ n ↔ ∃ f : Fin n → s, (List.ofFn fun i => ↑(f i)).Prod = a := by
simp_rw [← mem_coe, coe_pow, Set.mem_pow]; rfl
#align finset.mem_pow Finset.mem_pow
#align finset.mem_nsmul Finset.mem_nsmul
+-/
+#print Finset.empty_pow /-
@[simp, to_additive]
theorem empty_pow (hn : n ≠ 0) : (∅ : Finset α) ^ n = ∅ := by
rw [← tsub_add_cancel_of_le (Nat.succ_le_of_lt <| Nat.pos_of_ne_zero hn), pow_succ, empty_mul]
#align finset.empty_pow Finset.empty_pow
#align finset.empty_nsmul Finset.empty_nsmul
+-/
+#print Finset.mul_univ_of_one_mem /-
@[to_additive]
theorem mul_univ_of_one_mem [Fintype α] (hs : (1 : α) ∈ s) : s * univ = univ :=
eq_univ_iff_forall.2 fun a => mem_mul.2 ⟨_, _, hs, mem_univ _, one_mul _⟩
#align finset.mul_univ_of_one_mem Finset.mul_univ_of_one_mem
#align finset.add_univ_of_zero_mem Finset.add_univ_of_zero_mem
+-/
+#print Finset.univ_mul_of_one_mem /-
@[to_additive]
theorem univ_mul_of_one_mem [Fintype α] (ht : (1 : α) ∈ t) : univ * t = univ :=
eq_univ_iff_forall.2 fun a => mem_mul.2 ⟨_, _, mem_univ _, ht, mul_one _⟩
#align finset.univ_mul_of_one_mem Finset.univ_mul_of_one_mem
#align finset.univ_add_of_zero_mem Finset.univ_add_of_zero_mem
+-/
+#print Finset.univ_mul_univ /-
@[simp, to_additive]
theorem univ_mul_univ [Fintype α] : (univ : Finset α) * univ = univ :=
mul_univ_of_one_mem <| mem_univ _
#align finset.univ_mul_univ Finset.univ_mul_univ
#align finset.univ_add_univ Finset.univ_add_univ
+-/
+#print Finset.univ_pow /-
@[simp, to_additive nsmul_univ]
theorem univ_pow [Fintype α] (hn : n ≠ 0) : (univ : Finset α) ^ n = univ :=
coe_injective <| by rw [coe_pow, coe_univ, Set.univ_pow hn]
#align finset.univ_pow Finset.univ_pow
#align finset.nsmul_univ Finset.nsmul_univ
+-/
#print IsUnit.finset /-
@[to_additive]
@@ -1198,18 +1248,22 @@ section DivisionMonoid
variable [DivisionMonoid α] {s t : Finset α}
+#print Finset.coe_zpow /-
@[simp, to_additive]
theorem coe_zpow (s : Finset α) : ∀ n : ℤ, ↑(s ^ n) = (s ^ n : Set α)
| Int.ofNat n => coe_pow _ _
| Int.negSucc n => by refine' (coe_inv _).trans _; convert congr_arg Inv.inv (coe_pow _ _)
#align finset.coe_zpow Finset.coe_zpow
#align finset.coe_zsmul Finset.coe_zsmul
+-/
+#print Finset.mul_eq_one_iff /-
@[to_additive]
protected theorem mul_eq_one_iff : s * t = 1 ↔ ∃ a b, s = {a} ∧ t = {b} ∧ a * b = 1 := by
simp_rw [← coe_inj, coe_mul, coe_one, Set.mul_eq_one_iff, coe_singleton]
#align finset.mul_eq_one_iff Finset.mul_eq_one_iff
#align finset.add_eq_zero_iff Finset.add_eq_zero_iff
+-/
#print Finset.divisionMonoid /-
/-- `finset α` is a division monoid under pointwise operations if `α` is. -/
@@ -1285,13 +1339,17 @@ lacks.
-/
+#print Finset.mul_add_subset /-
theorem mul_add_subset : s * (t + u) ⊆ s * t + s * u :=
image₂_distrib_subset_left mul_add
#align finset.mul_add_subset Finset.mul_add_subset
+-/
+#print Finset.add_mul_subset /-
theorem add_mul_subset : (s + t) * u ⊆ s * u + t * u :=
image₂_distrib_subset_right add_mul
#align finset.add_mul_subset Finset.add_mul_subset
+-/
end Distrib
@@ -1302,19 +1360,27 @@ variable [MulZeroClass α] {s t : Finset α}
/-! Note that `finset` is not a `mul_zero_class` because `0 * ∅ ≠ 0`. -/
+#print Finset.mul_zero_subset /-
theorem mul_zero_subset (s : Finset α) : s * 0 ⊆ 0 := by simp [subset_iff, mem_mul]
#align finset.mul_zero_subset Finset.mul_zero_subset
+-/
+#print Finset.zero_mul_subset /-
theorem zero_mul_subset (s : Finset α) : 0 * s ⊆ 0 := by simp [subset_iff, mem_mul]
#align finset.zero_mul_subset Finset.zero_mul_subset
+-/
+#print Finset.Nonempty.mul_zero /-
theorem Nonempty.mul_zero (hs : s.Nonempty) : s * 0 = 0 :=
s.mul_zero_subset.antisymm <| by simpa [mem_mul] using hs
#align finset.nonempty.mul_zero Finset.Nonempty.mul_zero
+-/
+#print Finset.Nonempty.zero_mul /-
theorem Nonempty.zero_mul (hs : s.Nonempty) : 0 * s = 0 :=
s.zero_mul_subset.antisymm <| by simpa [mem_mul] using hs
#align finset.nonempty.zero_mul Finset.Nonempty.zero_mul
+-/
end MulZeroClass
@@ -1325,24 +1391,30 @@ variable [Group α] [DivisionMonoid β] [MonoidHomClass F α β] (f : F) {s t :
/-! Note that `finset` is not a `group` because `s / s ≠ 1` in general. -/
+#print Finset.one_mem_div_iff /-
@[simp, to_additive]
theorem one_mem_div_iff : (1 : α) ∈ s / t ↔ ¬Disjoint s t := by
rw [← mem_coe, ← disjoint_coe, coe_div, Set.one_mem_div_iff]
#align finset.one_mem_div_iff Finset.one_mem_div_iff
#align finset.zero_mem_sub_iff Finset.zero_mem_sub_iff
+-/
+#print Finset.not_one_mem_div_iff /-
@[to_additive]
theorem not_one_mem_div_iff : (1 : α) ∉ s / t ↔ Disjoint s t :=
one_mem_div_iff.not_left
#align finset.not_one_mem_div_iff Finset.not_one_mem_div_iff
#align finset.not_zero_mem_sub_iff Finset.not_zero_mem_sub_iff
+-/
+#print Finset.Nonempty.one_mem_div /-
@[to_additive]
theorem Nonempty.one_mem_div (h : s.Nonempty) : (1 : α) ∈ s / s :=
let ⟨a, ha⟩ := h
mem_div.2 ⟨a, a, ha, ha, div_self' _⟩
#align finset.nonempty.one_mem_div Finset.Nonempty.one_mem_div
#align finset.nonempty.zero_mem_sub Finset.Nonempty.zero_mem_sub
+-/
#print Finset.isUnit_singleton /-
@[to_additive]
@@ -1359,35 +1431,45 @@ theorem isUnit_iff_singleton : IsUnit s ↔ ∃ a, s = {a} := by
#align finset.is_unit_iff_singleton Finset.isUnit_iff_singleton
-/
+#print Finset.image_mul_left /-
@[simp, to_additive]
theorem image_mul_left :
image (fun b => a * b) t = preimage t (fun b => a⁻¹ * b) ((mul_right_injective _).InjOn _) :=
coe_injective <| by simp
#align finset.image_mul_left Finset.image_mul_left
#align finset.image_add_left Finset.image_add_left
+-/
+#print Finset.image_mul_right /-
@[simp, to_additive]
theorem image_mul_right : image (· * b) t = preimage t (· * b⁻¹) ((mul_left_injective _).InjOn _) :=
coe_injective <| by simp
#align finset.image_mul_right Finset.image_mul_right
#align finset.image_add_right Finset.image_add_right
+-/
+#print Finset.image_mul_left' /-
@[to_additive]
theorem image_mul_left' :
image (fun b => a⁻¹ * b) t = preimage t (fun b => a * b) ((mul_right_injective _).InjOn _) := by
simp
#align finset.image_mul_left' Finset.image_mul_left'
#align finset.image_add_left' Finset.image_add_left'
+-/
+#print Finset.image_mul_right' /-
@[to_additive]
theorem image_mul_right' :
image (· * b⁻¹) t = preimage t (· * b) ((mul_left_injective _).InjOn _) := by simp
#align finset.image_mul_right' Finset.image_mul_right'
#align finset.image_add_right' Finset.image_add_right'
+-/
+#print Finset.image_div /-
theorem image_div : (s / t).image (f : α → β) = s.image f / t.image f :=
image_image₂_distrib <| map_div f
#align finset.image_div Finset.image_div
+-/
end Group
@@ -1395,19 +1477,27 @@ section GroupWithZero
variable [GroupWithZero α] {s t : Finset α}
+#print Finset.div_zero_subset /-
theorem div_zero_subset (s : Finset α) : s / 0 ⊆ 0 := by simp [subset_iff, mem_div]
#align finset.div_zero_subset Finset.div_zero_subset
+-/
+#print Finset.zero_div_subset /-
theorem zero_div_subset (s : Finset α) : 0 / s ⊆ 0 := by simp [subset_iff, mem_div]
#align finset.zero_div_subset Finset.zero_div_subset
+-/
+#print Finset.Nonempty.div_zero /-
theorem Nonempty.div_zero (hs : s.Nonempty) : s / 0 = 0 :=
s.div_zero_subset.antisymm <| by simpa [mem_div] using hs
#align finset.nonempty.div_zero Finset.Nonempty.div_zero
+-/
+#print Finset.Nonempty.zero_div /-
theorem Nonempty.zero_div (hs : s.Nonempty) : 0 / s = 0 :=
s.zero_div_subset.antisymm <| by simpa [mem_div] using hs
#align finset.nonempty.zero_div Finset.Nonempty.zero_div
+-/
end GroupWithZero
@@ -1417,43 +1507,55 @@ section Group
variable [Group α] {s t : Finset α} {a b : α}
+#print Finset.preimage_mul_left_singleton /-
@[simp, to_additive]
theorem preimage_mul_left_singleton :
preimage {b} ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹ * b} := by
classical rw [← image_mul_left', image_singleton]
#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singleton
#align finset.preimage_add_left_singleton Finset.preimage_add_left_singleton
+-/
+#print Finset.preimage_mul_right_singleton /-
@[simp, to_additive]
theorem preimage_mul_right_singleton :
preimage {b} (· * a) ((mul_left_injective _).InjOn _) = {b * a⁻¹} := by
classical rw [← image_mul_right', image_singleton]
#align finset.preimage_mul_right_singleton Finset.preimage_mul_right_singleton
#align finset.preimage_add_right_singleton Finset.preimage_add_right_singleton
+-/
+#print Finset.preimage_mul_left_one /-
@[simp, to_additive]
theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹} :=
by classical rw [← image_mul_left', image_one, mul_one]
#align finset.preimage_mul_left_one Finset.preimage_mul_left_one
#align finset.preimage_add_left_zero Finset.preimage_add_left_zero
+-/
+#print Finset.preimage_mul_right_one /-
@[simp, to_additive]
theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).InjOn _) = {b⁻¹} := by
classical rw [← image_mul_right', image_one, one_mul]
#align finset.preimage_mul_right_one Finset.preimage_mul_right_one
#align finset.preimage_add_right_zero Finset.preimage_add_right_zero
+-/
+#print Finset.preimage_mul_left_one' /-
@[to_additive]
theorem preimage_mul_left_one' : preimage 1 ((· * ·) a⁻¹) ((mul_right_injective _).InjOn _) = {a} :=
by rw [preimage_mul_left_one, inv_inv]
#align finset.preimage_mul_left_one' Finset.preimage_mul_left_one'
#align finset.preimage_add_left_zero' Finset.preimage_add_left_zero'
+-/
+#print Finset.preimage_mul_right_one' /-
@[to_additive]
theorem preimage_mul_right_one' : preimage 1 (· * b⁻¹) ((mul_left_injective _).InjOn _) = {b} := by
rw [preimage_mul_right_one, inv_inv]
#align finset.preimage_mul_right_one' Finset.preimage_mul_right_one'
#align finset.preimage_add_right_zero' Finset.preimage_add_right_zero'
+-/
end Group
@@ -1501,17 +1603,21 @@ theorem mem_smul {x : β} : x ∈ s • t ↔ ∃ y z, y ∈ s ∧ z ∈ t ∧ y
#align finset.mem_vadd Finset.mem_vadd
-/
+#print Finset.coe_smul /-
@[simp, norm_cast, to_additive]
theorem coe_smul (s : Finset α) (t : Finset β) : (↑(s • t) : Set β) = (s : Set α) • t :=
coe_image₂ _ _ _
#align finset.coe_smul Finset.coe_smul
#align finset.coe_vadd Finset.coe_vadd
+-/
+#print Finset.smul_mem_smul /-
@[to_additive]
theorem smul_mem_smul : a ∈ s → b ∈ t → a • b ∈ s • t :=
mem_image₂_of_mem
#align finset.smul_mem_smul Finset.smul_mem_smul
#align finset.vadd_mem_vadd Finset.vadd_mem_vadd
+-/
#print Finset.smul_card_le /-
@[to_additive]
@@ -1529,11 +1635,13 @@ theorem empty_smul (t : Finset β) : (∅ : Finset α) • t = ∅ :=
#align finset.empty_vadd Finset.empty_vadd
-/
+#print Finset.smul_empty /-
@[simp, to_additive]
theorem smul_empty (s : Finset α) : s • (∅ : Finset β) = ∅ :=
image₂_empty_right
#align finset.smul_empty Finset.smul_empty
#align finset.vadd_empty Finset.vadd_empty
+-/
#print Finset.smul_eq_empty /-
@[simp, to_additive]
@@ -1551,11 +1659,13 @@ theorem smul_nonempty_iff : (s • t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
#align finset.vadd_nonempty_iff Finset.vadd_nonempty_iff
-/
+#print Finset.Nonempty.smul /-
@[to_additive]
theorem Nonempty.smul : s.Nonempty → t.Nonempty → (s • t).Nonempty :=
Nonempty.image₂
#align finset.nonempty.smul Finset.Nonempty.smul
#align finset.nonempty.vadd Finset.Nonempty.vadd
+-/
#print Finset.Nonempty.of_smul_left /-
@[to_additive]
@@ -1589,11 +1699,13 @@ theorem singleton_smul_singleton (a : α) (b : β) : ({a} : Finset α) • ({b}
#align finset.singleton_vadd_singleton Finset.singleton_vadd_singleton
-/
+#print Finset.smul_subset_smul /-
@[to_additive, mono]
theorem smul_subset_smul : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ • t₁ ⊆ s₂ • t₂ :=
image₂_subset
#align finset.smul_subset_smul Finset.smul_subset_smul
#align finset.vadd_subset_vadd Finset.vadd_subset_vadd
+-/
#print Finset.smul_subset_smul_left /-
@[to_additive]
@@ -1603,11 +1715,13 @@ theorem smul_subset_smul_left : t₁ ⊆ t₂ → s • t₁ ⊆ s • t₂ :=
#align finset.vadd_subset_vadd_left Finset.vadd_subset_vadd_left
-/
+#print Finset.smul_subset_smul_right /-
@[to_additive]
theorem smul_subset_smul_right : s₁ ⊆ s₂ → s₁ • t ⊆ s₂ • t :=
image₂_subset_right
#align finset.smul_subset_smul_right Finset.smul_subset_smul_right
#align finset.vadd_subset_vadd_right Finset.vadd_subset_vadd_right
+-/
#print Finset.smul_subset_iff /-
@[to_additive]
@@ -1619,11 +1733,13 @@ theorem smul_subset_iff : s • t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a • b
attribute [mono] vadd_subset_vadd
+#print Finset.union_smul /-
@[to_additive]
theorem union_smul [DecidableEq α] : (s₁ ∪ s₂) • t = s₁ • t ∪ s₂ • t :=
image₂_union_left
#align finset.union_smul Finset.union_smul
#align finset.union_vadd Finset.union_vadd
+-/
#print Finset.smul_union /-
@[to_additive]
@@ -1633,11 +1749,13 @@ theorem smul_union : s • (t₁ ∪ t₂) = s • t₁ ∪ s • t₂ :=
#align finset.vadd_union Finset.vadd_union
-/
+#print Finset.inter_smul_subset /-
@[to_additive]
theorem inter_smul_subset [DecidableEq α] : (s₁ ∩ s₂) • t ⊆ s₁ • t ∩ s₂ • t :=
image₂_inter_subset_left
#align finset.inter_smul_subset Finset.inter_smul_subset
#align finset.inter_vadd_subset Finset.inter_vadd_subset
+-/
#print Finset.smul_inter_subset /-
@[to_additive]
@@ -1647,18 +1765,23 @@ theorem smul_inter_subset : s • (t₁ ∩ t₂) ⊆ s • t₁ ∩ s • t₂
#align finset.vadd_inter_subset Finset.vadd_inter_subset
-/
+#print Finset.inter_smul_union_subset_union /-
@[to_additive]
theorem inter_smul_union_subset_union [DecidableEq α] : (s₁ ∩ s₂) • (t₁ ∪ t₂) ⊆ s₁ • t₁ ∪ s₂ • t₂ :=
image₂_inter_union_subset_union
#align finset.inter_smul_union_subset_union Finset.inter_smul_union_subset_union
#align finset.inter_vadd_union_subset_union Finset.inter_vadd_union_subset_union
+-/
+#print Finset.union_smul_inter_subset_union /-
@[to_additive]
theorem union_smul_inter_subset_union [DecidableEq α] : (s₁ ∪ s₂) • (t₁ ∩ t₂) ⊆ s₁ • t₁ ∪ s₂ • t₂ :=
image₂_union_inter_subset_union
#align finset.union_smul_inter_subset_union Finset.union_smul_inter_subset_union
#align finset.union_vadd_inter_subset_union Finset.union_vadd_inter_subset_union
+-/
+#print Finset.subset_smul /-
/-- If a finset `u` is contained in the scalar product of two sets `s • t`, we can find two finsets
`s'`, `t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' • t'`. -/
@[to_additive
@@ -1668,6 +1791,7 @@ theorem subset_smul {s : Set α} {t : Set β} :
subset_image₂
#align finset.subset_smul Finset.subset_smul
#align finset.subset_vadd Finset.subset_vadd
+-/
end SMul
@@ -1678,132 +1802,182 @@ section VSub
variable [DecidableEq α] [VSub α β] {s s₁ s₂ t t₁ t₂ : Finset β} {u : Finset α} {a : α} {b c : β}
-include α
-
+#print Finset.vsub /-
/-- The pointwise product of two finsets `s` and `t`: `s -ᵥ t = {x -ᵥ y | x ∈ s, y ∈ t}`. -/
protected def vsub : VSub (Finset α) (Finset β) :=
⟨image₂ (· -ᵥ ·)⟩
#align finset.has_vsub Finset.vsub
+-/
scoped[Pointwise] attribute [instance] Finset.vsub
+#print Finset.vsub_def /-
theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
rfl
#align finset.vsub_def Finset.vsub_def
+-/
+#print Finset.image_vsub_product /-
@[simp]
theorem image_vsub_product : image₂ (· -ᵥ ·) s t = s -ᵥ t :=
rfl
#align finset.image_vsub_product Finset.image_vsub_product
+-/
+#print Finset.mem_vsub /-
theorem mem_vsub : a ∈ s -ᵥ t ↔ ∃ b c, b ∈ s ∧ c ∈ t ∧ b -ᵥ c = a :=
mem_image₂
#align finset.mem_vsub Finset.mem_vsub
+-/
+#print Finset.coe_vsub /-
@[simp, norm_cast]
theorem coe_vsub (s t : Finset β) : (↑(s -ᵥ t) : Set α) = (s : Set β) -ᵥ t :=
coe_image₂ _ _ _
#align finset.coe_vsub Finset.coe_vsub
+-/
+#print Finset.vsub_mem_vsub /-
theorem vsub_mem_vsub : b ∈ s → c ∈ t → b -ᵥ c ∈ s -ᵥ t :=
mem_image₂_of_mem
#align finset.vsub_mem_vsub Finset.vsub_mem_vsub
+-/
+#print Finset.vsub_card_le /-
theorem vsub_card_le : (s -ᵥ t : Finset α).card ≤ s.card * t.card :=
card_image₂_le _ _ _
#align finset.vsub_card_le Finset.vsub_card_le
+-/
+#print Finset.empty_vsub /-
@[simp]
theorem empty_vsub (t : Finset β) : (∅ : Finset β) -ᵥ t = ∅ :=
image₂_empty_left
#align finset.empty_vsub Finset.empty_vsub
+-/
+#print Finset.vsub_empty /-
@[simp]
theorem vsub_empty (s : Finset β) : s -ᵥ (∅ : Finset β) = ∅ :=
image₂_empty_right
#align finset.vsub_empty Finset.vsub_empty
+-/
+#print Finset.vsub_eq_empty /-
@[simp]
theorem vsub_eq_empty : s -ᵥ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
image₂_eq_empty_iff
#align finset.vsub_eq_empty Finset.vsub_eq_empty
+-/
+#print Finset.vsub_nonempty /-
@[simp]
theorem vsub_nonempty : (s -ᵥ t : Finset α).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.vsub_nonempty Finset.vsub_nonempty
+-/
+#print Finset.Nonempty.vsub /-
theorem Nonempty.vsub : s.Nonempty → t.Nonempty → (s -ᵥ t : Finset α).Nonempty :=
Nonempty.image₂
#align finset.nonempty.vsub Finset.Nonempty.vsub
+-/
+#print Finset.Nonempty.of_vsub_left /-
theorem Nonempty.of_vsub_left : (s -ᵥ t : Finset α).Nonempty → s.Nonempty :=
Nonempty.of_image₂_left
#align finset.nonempty.of_vsub_left Finset.Nonempty.of_vsub_left
+-/
+#print Finset.Nonempty.of_vsub_right /-
theorem Nonempty.of_vsub_right : (s -ᵥ t : Finset α).Nonempty → t.Nonempty :=
Nonempty.of_image₂_right
#align finset.nonempty.of_vsub_right Finset.Nonempty.of_vsub_right
+-/
+#print Finset.vsub_singleton /-
@[simp]
theorem vsub_singleton (b : β) : s -ᵥ ({b} : Finset β) = s.image (· -ᵥ b) :=
image₂_singleton_right
#align finset.vsub_singleton Finset.vsub_singleton
+-/
+#print Finset.singleton_vsub /-
theorem singleton_vsub (a : β) : ({a} : Finset β) -ᵥ t = t.image ((· -ᵥ ·) a) :=
image₂_singleton_left
#align finset.singleton_vsub Finset.singleton_vsub
+-/
+#print Finset.singleton_vsub_singleton /-
@[simp]
theorem singleton_vsub_singleton (a b : β) : ({a} : Finset β) -ᵥ {b} = {a -ᵥ b} :=
image₂_singleton
#align finset.singleton_vsub_singleton Finset.singleton_vsub_singleton
+-/
+#print Finset.vsub_subset_vsub /-
@[mono]
theorem vsub_subset_vsub : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ -ᵥ t₁ ⊆ s₂ -ᵥ t₂ :=
image₂_subset
#align finset.vsub_subset_vsub Finset.vsub_subset_vsub
+-/
+#print Finset.vsub_subset_vsub_left /-
theorem vsub_subset_vsub_left : t₁ ⊆ t₂ → s -ᵥ t₁ ⊆ s -ᵥ t₂ :=
image₂_subset_left
#align finset.vsub_subset_vsub_left Finset.vsub_subset_vsub_left
+-/
+#print Finset.vsub_subset_vsub_right /-
theorem vsub_subset_vsub_right : s₁ ⊆ s₂ → s₁ -ᵥ t ⊆ s₂ -ᵥ t :=
image₂_subset_right
#align finset.vsub_subset_vsub_right Finset.vsub_subset_vsub_right
+-/
+#print Finset.vsub_subset_iff /-
theorem vsub_subset_iff : s -ᵥ t ⊆ u ↔ ∀ x ∈ s, ∀ y ∈ t, x -ᵥ y ∈ u :=
image₂_subset_iff
#align finset.vsub_subset_iff Finset.vsub_subset_iff
+-/
section
variable [DecidableEq β]
+#print Finset.union_vsub /-
theorem union_vsub : s₁ ∪ s₂ -ᵥ t = s₁ -ᵥ t ∪ (s₂ -ᵥ t) :=
image₂_union_left
#align finset.union_vsub Finset.union_vsub
+-/
+#print Finset.vsub_union /-
theorem vsub_union : s -ᵥ (t₁ ∪ t₂) = s -ᵥ t₁ ∪ (s -ᵥ t₂) :=
image₂_union_right
#align finset.vsub_union Finset.vsub_union
+-/
+#print Finset.inter_vsub_subset /-
theorem inter_vsub_subset : s₁ ∩ s₂ -ᵥ t ⊆ (s₁ -ᵥ t) ∩ (s₂ -ᵥ t) :=
image₂_inter_subset_left
#align finset.inter_vsub_subset Finset.inter_vsub_subset
+-/
+#print Finset.vsub_inter_subset /-
theorem vsub_inter_subset : s -ᵥ t₁ ∩ t₂ ⊆ (s -ᵥ t₁) ∩ (s -ᵥ t₂) :=
image₂_inter_subset_right
#align finset.vsub_inter_subset Finset.vsub_inter_subset
+-/
end
+#print Finset.subset_vsub /-
/-- If a finset `u` is contained in the pointwise subtraction of two sets `s -ᵥ t`, we can find two
finsets `s'`, `t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' -ᵥ t'`. -/
theorem subset_vsub {s t : Set β} :
↑u ⊆ s -ᵥ t → ∃ s' t' : Finset β, ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' -ᵥ t' :=
subset_image₂
#align finset.subset_vsub Finset.subset_vsub
+-/
end VSub
@@ -1949,17 +2123,21 @@ theorem smul_finset_inter_subset : a • (s₁ ∩ s₂) ⊆ a • s₁ ∩ a
#align finset.vadd_finset_inter_subset Finset.vadd_finset_inter_subset
-/
+#print Finset.smul_finset_subset_smul /-
@[to_additive]
theorem smul_finset_subset_smul {s : Finset α} : a ∈ s → a • t ⊆ s • t :=
image_subset_image₂_right
#align finset.smul_finset_subset_smul Finset.smul_finset_subset_smul
#align finset.vadd_finset_subset_vadd Finset.vadd_finset_subset_vadd
+-/
+#print Finset.biUnion_smul_finset /-
@[simp, to_additive]
theorem biUnion_smul_finset (s : Finset α) (t : Finset β) : s.biUnion (· • t) = s • t :=
biUnion_image_left
#align finset.bUnion_smul_finset Finset.biUnion_smul_finset
#align finset.bUnion_vadd_finset Finset.biUnion_vadd_finset
+-/
end SMul
@@ -2120,6 +2298,7 @@ section SMul
variable [DecidableEq β] [DecidableEq γ] [SMul αᵐᵒᵖ β] [SMul β γ] [SMul α γ]
+#print Finset.op_smul_finset_smul_eq_smul_smul_finset /-
-- TODO: replace hypothesis and conclusion with a typeclass
@[to_additive]
theorem op_smul_finset_smul_eq_smul_smul_finset (a : α) (s : Finset β) (t : Finset γ)
@@ -2127,6 +2306,7 @@ theorem op_smul_finset_smul_eq_smul_smul_finset (a : α) (s : Finset β) (t : Fi
ext; simp [mem_smul, mem_smul_finset, h]
#align finset.op_smul_finset_smul_eq_smul_smul_finset Finset.op_smul_finset_smul_eq_smul_smul_finset
#align finset.op_vadd_finset_vadd_eq_vadd_vadd_finset Finset.op_vadd_finset_vadd_eq_vadd_vadd_finset
+-/
end SMul
@@ -2172,12 +2352,14 @@ section Semigroup
variable [Semigroup α] [DecidableEq α]
+#print Finset.op_smul_finset_mul_eq_mul_smul_finset /-
@[to_additive]
theorem op_smul_finset_mul_eq_mul_smul_finset (a : α) (s : Finset α) (t : Finset α) :
op a • s * t = s * a • t :=
op_smul_finset_smul_eq_smul_smul_finset _ _ _ fun _ _ _ => mul_assoc _ _ _
#align finset.op_smul_finset_mul_eq_mul_smul_finset Finset.op_smul_finset_mul_eq_mul_smul_finset
#align finset.op_vadd_finset_add_eq_add_vadd_finset Finset.op_vadd_finset_add_eq_add_vadd_finset
+-/
end Semigroup
@@ -2186,30 +2368,38 @@ section LeftCancelSemigroup
variable [LeftCancelSemigroup α] [DecidableEq α] (s t : Finset α) (a : α)
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Finset.pairwiseDisjoint_smul_iff /-
@[to_additive]
theorem pairwiseDisjoint_smul_iff {s : Set α} {t : Finset α} :
s.PairwiseDisjoint (· • t) ↔ (s ×ˢ t : Set (α × α)).InjOn fun p => p.1 * p.2 := by
simp_rw [← pairwise_disjoint_coe, coe_smul_finset, Set.pairwiseDisjoint_smul_iff]
#align finset.pairwise_disjoint_smul_iff Finset.pairwiseDisjoint_smul_iff
#align finset.pairwise_disjoint_vadd_iff Finset.pairwiseDisjoint_vadd_iff
+-/
+#print Finset.card_singleton_mul /-
@[simp, to_additive]
theorem card_singleton_mul : ({a} * t).card = t.card :=
card_image₂_singleton_left _ <| mul_right_injective _
#align finset.card_singleton_mul Finset.card_singleton_mul
#align finset.card_singleton_add Finset.card_singleton_add
+-/
+#print Finset.singleton_mul_inter /-
@[to_additive]
theorem singleton_mul_inter : {a} * (s ∩ t) = {a} * s ∩ ({a} * t) :=
image₂_singleton_inter _ _ <| mul_right_injective _
#align finset.singleton_mul_inter Finset.singleton_mul_inter
#align finset.singleton_add_inter Finset.singleton_add_inter
+-/
+#print Finset.card_le_card_mul_left /-
@[to_additive]
theorem card_le_card_mul_left {s : Finset α} (hs : s.Nonempty) : t.card ≤ (s * t).card :=
card_le_card_image₂_left _ hs mul_right_injective
#align finset.card_le_card_mul_left Finset.card_le_card_mul_left
#align finset.card_le_card_add_left Finset.card_le_card_add_left
+-/
end LeftCancelSemigroup
@@ -2217,41 +2407,51 @@ section
variable [RightCancelSemigroup α] [DecidableEq α] (s t : Finset α) (a : α)
+#print Finset.card_mul_singleton /-
@[simp, to_additive]
theorem card_mul_singleton : (s * {a}).card = s.card :=
card_image₂_singleton_right _ <| mul_left_injective _
#align finset.card_mul_singleton Finset.card_mul_singleton
#align finset.card_add_singleton Finset.card_add_singleton
+-/
+#print Finset.inter_mul_singleton /-
@[to_additive]
theorem inter_mul_singleton : s ∩ t * {a} = s * {a} ∩ (t * {a}) :=
image₂_inter_singleton _ _ <| mul_left_injective _
#align finset.inter_mul_singleton Finset.inter_mul_singleton
#align finset.inter_add_singleton Finset.inter_add_singleton
+-/
+#print Finset.card_le_card_mul_right /-
@[to_additive]
theorem card_le_card_mul_right {t : Finset α} (ht : t.Nonempty) : s.card ≤ (s * t).card :=
card_le_card_image₂_right _ ht mul_left_injective
#align finset.card_le_card_mul_right Finset.card_le_card_mul_right
#align finset.card_le_card_add_right Finset.card_le_card_add_right
+-/
end
open scoped Pointwise
+#print Finset.image_smul_comm /-
@[to_additive]
theorem image_smul_comm [DecidableEq β] [DecidableEq γ] [SMul α β] [SMul α γ] (f : β → γ) (a : α)
(s : Finset β) : (∀ b, f (a • b) = a • f b) → (a • s).image f = a • s.image f :=
image_comm
#align finset.image_smul_comm Finset.image_smul_comm
#align finset.image_vadd_comm Finset.image_vadd_comm
+-/
+#print Finset.image_smul_distrib /-
@[to_additive]
theorem image_smul_distrib [DecidableEq α] [DecidableEq β] [Monoid α] [Monoid β]
[MonoidHomClass F α β] (f : F) (a : α) (s : Finset α) : (a • s).image f = f a • s.image f :=
image_comm <| map_mul _ _
#align finset.image_smul_distrib Finset.image_smul_distrib
#align finset.image_vadd_distrib Finset.image_vadd_distrib
+-/
section Group
@@ -2265,17 +2465,21 @@ theorem smul_mem_smul_finset_iff (a : α) : a • b ∈ a • s ↔ b ∈ s :=
#align finset.vadd_mem_vadd_finset_iff Finset.vadd_mem_vadd_finset_iff
-/
+#print Finset.inv_smul_mem_iff /-
@[to_additive]
theorem inv_smul_mem_iff : a⁻¹ • b ∈ s ↔ b ∈ a • s := by
rw [← smul_mem_smul_finset_iff a, smul_inv_smul]
#align finset.inv_smul_mem_iff Finset.inv_smul_mem_iff
#align finset.neg_vadd_mem_iff Finset.neg_vadd_mem_iff
+-/
+#print Finset.mem_inv_smul_finset_iff /-
@[to_additive]
theorem mem_inv_smul_finset_iff : b ∈ a⁻¹ • s ↔ a • b ∈ s := by
rw [← smul_mem_smul_finset_iff a, smul_inv_smul]
#align finset.mem_inv_smul_finset_iff Finset.mem_inv_smul_finset_iff
#align finset.mem_neg_vadd_finset_iff Finset.mem_neg_vadd_finset_iff
+-/
#print Finset.smul_finset_subset_smul_finset_iff /-
@[simp, to_additive]
@@ -2285,17 +2489,21 @@ theorem smul_finset_subset_smul_finset_iff : a • s ⊆ a • t ↔ s ⊆ t :=
#align finset.vadd_finset_subset_vadd_finset_iff Finset.vadd_finset_subset_vadd_finset_iff
-/
+#print Finset.smul_finset_subset_iff /-
@[to_additive]
theorem smul_finset_subset_iff : a • s ⊆ t ↔ s ⊆ a⁻¹ • t := by simp_rw [← coe_subset]; push_cast ;
exact Set.set_smul_subset_iff
#align finset.smul_finset_subset_iff Finset.smul_finset_subset_iff
#align finset.vadd_finset_subset_iff Finset.vadd_finset_subset_iff
+-/
+#print Finset.subset_smul_finset_iff /-
@[to_additive]
theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t := by simp_rw [← coe_subset]; push_cast ;
exact Set.subset_set_smul_iff
#align finset.subset_smul_finset_iff Finset.subset_smul_finset_iff
#align finset.subset_vadd_finset_iff Finset.subset_vadd_finset_iff
+-/
#print Finset.smul_finset_inter /-
@[to_additive]
@@ -2313,11 +2521,13 @@ theorem smul_finset_sdiff : a • (s \ t) = a • s \ a • t :=
#align finset.vadd_finset_sdiff Finset.vadd_finset_sdiff
-/
+#print Finset.smul_finset_symmDiff /-
@[to_additive]
theorem smul_finset_symmDiff : a • s ∆ t = (a • s) ∆ (a • t) :=
image_symmDiff _ _ <| MulAction.injective a
#align finset.smul_finset_symm_diff Finset.smul_finset_symmDiff
#align finset.vadd_finset_symm_diff Finset.vadd_finset_symmDiff
+-/
#print Finset.smul_finset_univ /-
@[simp, to_additive]
@@ -2349,51 +2559,73 @@ section GroupWithZero
variable [DecidableEq β] [GroupWithZero α] [MulAction α β] {s t : Finset β} {a : α} {b : β}
+#print Finset.smul_mem_smul_finset_iff₀ /-
@[simp]
theorem smul_mem_smul_finset_iff₀ (ha : a ≠ 0) : a • b ∈ a • s ↔ b ∈ s :=
smul_mem_smul_finset_iff (Units.mk0 a ha)
#align finset.smul_mem_smul_finset_iff₀ Finset.smul_mem_smul_finset_iff₀
+-/
+#print Finset.inv_smul_mem_iff₀ /-
theorem inv_smul_mem_iff₀ (ha : a ≠ 0) : a⁻¹ • b ∈ s ↔ b ∈ a • s :=
show _ ↔ _ ∈ Units.mk0 a ha • _ from inv_smul_mem_iff
#align finset.inv_smul_mem_iff₀ Finset.inv_smul_mem_iff₀
+-/
+#print Finset.mem_inv_smul_finset_iff₀ /-
theorem mem_inv_smul_finset_iff₀ (ha : a ≠ 0) : b ∈ a⁻¹ • s ↔ a • b ∈ s :=
show _ ∈ (Units.mk0 a ha)⁻¹ • _ ↔ _ from mem_inv_smul_finset_iff
#align finset.mem_inv_smul_finset_iff₀ Finset.mem_inv_smul_finset_iff₀
+-/
+#print Finset.smul_finset_subset_smul_finset_iff₀ /-
@[simp]
theorem smul_finset_subset_smul_finset_iff₀ (ha : a ≠ 0) : a • s ⊆ a • t ↔ s ⊆ t :=
show Units.mk0 a ha • _ ⊆ _ ↔ _ from smul_finset_subset_smul_finset_iff
#align finset.smul_finset_subset_smul_finset_iff₀ Finset.smul_finset_subset_smul_finset_iff₀
+-/
+#print Finset.smul_finset_subset_iff₀ /-
theorem smul_finset_subset_iff₀ (ha : a ≠ 0) : a • s ⊆ t ↔ s ⊆ a⁻¹ • t :=
show Units.mk0 a ha • _ ⊆ _ ↔ _ from smul_finset_subset_iff
#align finset.smul_finset_subset_iff₀ Finset.smul_finset_subset_iff₀
+-/
+#print Finset.subset_smul_finset_iff₀ /-
theorem subset_smul_finset_iff₀ (ha : a ≠ 0) : s ⊆ a • t ↔ a⁻¹ • s ⊆ t :=
show _ ⊆ Units.mk0 a ha • _ ↔ _ from subset_smul_finset_iff
#align finset.subset_smul_finset_iff₀ Finset.subset_smul_finset_iff₀
+-/
+#print Finset.smul_finset_inter₀ /-
theorem smul_finset_inter₀ (ha : a ≠ 0) : a • (s ∩ t) = a • s ∩ a • t :=
image_inter _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_inter₀ Finset.smul_finset_inter₀
+-/
+#print Finset.smul_finset_sdiff₀ /-
theorem smul_finset_sdiff₀ (ha : a ≠ 0) : a • (s \ t) = a • s \ a • t :=
image_sdiff _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_sdiff₀ Finset.smul_finset_sdiff₀
+-/
+#print Finset.smul_finset_symm_diff₀ /-
theorem smul_finset_symm_diff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (a • t) :=
image_symmDiff _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symm_diff₀
+-/
+#print Finset.smul_univ₀ /-
theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ : Finset β) = univ :=
coe_injective <| by rw [← coe_subset] at hs ; push_cast at hs ⊢; exact Set.smul_univ₀ hs
#align finset.smul_univ₀ Finset.smul_univ₀
+-/
+#print Finset.smul_finset_univ₀ /-
theorem smul_finset_univ₀ [Fintype β] (ha : a ≠ 0) : a • (univ : Finset β) = univ :=
coe_injective <| by push_cast ; exact Set.smul_set_univ₀ ha
#align finset.smul_finset_univ₀ Finset.smul_finset_univ₀
+-/
end GroupWithZero
@@ -2407,17 +2639,21 @@ because `0 * ∅ ≠ 0`.
-/
+#print Finset.smul_zero_subset /-
theorem smul_zero_subset (s : Finset α) : s • (0 : Finset β) ⊆ 0 := by simp [subset_iff, mem_smul]
#align finset.smul_zero_subset Finset.smul_zero_subset
+-/
#print Finset.zero_smul_subset /-
theorem zero_smul_subset (t : Finset β) : (0 : Finset α) • t ⊆ 0 := by simp [subset_iff, mem_smul]
#align finset.zero_smul_subset Finset.zero_smul_subset
-/
+#print Finset.Nonempty.smul_zero /-
theorem Nonempty.smul_zero (hs : s.Nonempty) : s • (0 : Finset β) = 0 :=
s.smul_zero_subset.antisymm <| by simpa [mem_smul] using hs
#align finset.nonempty.smul_zero Finset.Nonempty.smul_zero
+-/
#print Finset.Nonempty.zero_smul /-
theorem Nonempty.zero_smul (ht : t.Nonempty) : (0 : Finset α) • t = 0 :=
@@ -2452,9 +2688,11 @@ theorem zero_mem_smul_iff : (0 : β) ∈ s • t ↔ (0 : α) ∈ s ∧ t.Nonemp
#align finset.zero_mem_smul_iff Finset.zero_mem_smul_iff
-/
+#print Finset.zero_mem_smul_finset_iff /-
theorem zero_mem_smul_finset_iff (ha : a ≠ 0) : (0 : β) ∈ a • t ↔ (0 : β) ∈ t := by
rw [← mem_coe, coe_smul_finset, Set.zero_mem_smul_set_iff ha, mem_coe]; infer_instance
#align finset.zero_mem_smul_finset_iff Finset.zero_mem_smul_finset_iff
+-/
end SMulWithZero
@@ -2463,15 +2701,19 @@ section Monoid
variable [Monoid α] [AddGroup β] [DistribMulAction α β] [DecidableEq β] (a : α) (s : Finset α)
(t : Finset β)
+#print Finset.smul_finset_neg /-
@[simp]
theorem smul_finset_neg : a • -t = -(a • t) := by
simp only [← image_smul, ← image_neg, Function.comp, image_image, smul_neg]
#align finset.smul_finset_neg Finset.smul_finset_neg
+-/
+#print Finset.smul_neg /-
@[simp]
protected theorem smul_neg : s • -t = -(s • t) := by simp_rw [← image_neg];
exact image_image₂_right_comm smul_neg
#align finset.smul_neg Finset.smul_neg
+-/
end Monoid
@@ -2480,15 +2722,19 @@ section Ring
variable [Ring α] [AddCommGroup β] [Module α β] [DecidableEq β] {s : Finset α} {t : Finset β}
{a : α}
+#print Finset.neg_smul_finset /-
@[simp]
theorem neg_smul_finset : -a • t = -(a • t) := by
simp only [← image_smul, ← image_neg, image_image, neg_smul]
#align finset.neg_smul_finset Finset.neg_smul_finset
+-/
+#print Finset.neg_smul /-
@[simp]
protected theorem neg_smul [DecidableEq α] : -s • t = -(s • t) := by simp_rw [← image_neg];
exact image₂_image_left_comm neg_smul
#align finset.neg_smul Finset.neg_smul
+-/
end Ring
@@ -2548,19 +2794,23 @@ section SMul
variable [SMul α β] [DecidableEq β] {a : α} {s : Set α} {t : Set β}
+#print Set.toFinset_smul /-
@[simp, to_additive]
theorem toFinset_smul (s : Set α) (t : Set β) [Fintype s] [Fintype t] [Fintype ↥(s • t)] :
(s • t).toFinset = s.toFinset • t.toFinset :=
toFinset_image2 _ _ _
#align set.to_finset_smul Set.toFinset_smul
#align set.to_finset_vadd Set.toFinset_vadd
+-/
+#print Set.Finite.toFinset_smul /-
@[to_additive]
theorem Finite.toFinset_smul (hs : s.Finite) (ht : t.Finite) (hf := hs.smul ht) :
hf.toFinset = hs.toFinset • ht.toFinset :=
Finite.toFinset_image2 _ _ _
#align set.finite.to_finset_smul Set.Finite.toFinset_smul
#align set.finite.to_finset_vadd Set.Finite.toFinset_vadd
+-/
end SMul
@@ -2592,8 +2842,6 @@ section VSub
variable [DecidableEq α] [VSub α β] {s t : Set β}
-include α
-
#print Set.toFinset_vsub /-
@[simp]
theorem toFinset_vsub (s t : Set β) [Fintype s] [Fintype t] [Fintype ↥(s -ᵥ t)] :
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -987,8 +987,8 @@ protected def mulOneClass : MulOneClass (Finset α) :=
-/
scoped[Pointwise]
- attribute [instance]
- Finset.semigroup Finset.addSemigroup Finset.commSemigroup Finset.addCommSemigroup Finset.mulOneClass Finset.addZeroClass
+ attribute [instance] Finset.semigroup Finset.addSemigroup Finset.commSemigroup
+ Finset.addCommSemigroup Finset.mulOneClass Finset.addZeroClass
@[to_additive]
theorem subset_mul_left (s : Finset α) {t : Finset α} (ht : (1 : α) ∈ t) : s ⊆ s * t := fun a ha =>
@@ -1264,8 +1264,8 @@ protected def distribNeg [Mul α] [HasDistribNeg α] : HasDistribNeg (Finset α)
-/
scoped[Pointwise]
- attribute [instance]
- Finset.divisionMonoid Finset.subtractionMonoid Finset.divisionCommMonoid Finset.subtractionCommMonoid Finset.distribNeg
+ attribute [instance] Finset.divisionMonoid Finset.subtractionMonoid Finset.divisionCommMonoid
+ Finset.subtractionCommMonoid Finset.distribNeg
section Distrib
@@ -1664,7 +1664,7 @@ theorem union_smul_inter_subset_union [DecidableEq α] : (s₁ ∪ s₂) • (t
@[to_additive
"If a finset `u` is contained in the scalar sum of two sets `s +ᵥ t`, we can find two\nfinsets `s'`, `t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' +ᵥ t'`."]
theorem subset_smul {s : Set α} {t : Set β} :
- ↑u ⊆ s • t → ∃ (s' : Finset α)(t' : Finset β), ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' • t' :=
+ ↑u ⊆ s • t → ∃ (s' : Finset α) (t' : Finset β), ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' • t' :=
subset_image₂
#align finset.subset_smul Finset.subset_smul
#align finset.subset_vadd Finset.subset_vadd
@@ -2069,8 +2069,8 @@ protected def mulActionFinset [Monoid α] [MulAction α β] : MulAction α (Fins
-/
scoped[Pointwise]
- attribute [instance]
- Finset.mulActionFinset Finset.addActionFinset Finset.mulAction Finset.addAction
+ attribute [instance] Finset.mulActionFinset Finset.addActionFinset Finset.mulAction
+ Finset.addAction
#print Finset.distribMulActionFinset /-
/-- A distributive multiplicative action of a monoid on an additive monoid `β` gives a distributive
@@ -2101,7 +2101,7 @@ instance [Zero α] [Zero β] [SMul α β] [NoZeroSMulDivisors α β] :
by_contra' H
have hst : (s • t).Nonempty := h.symm.subst zero_nonempty
simp_rw [← hst.of_smul_left.subset_zero_iff, ← hst.of_smul_right.subset_zero_iff, not_subset,
- mem_zero] at H
+ mem_zero] at H
obtain ⟨⟨a, hs, ha⟩, b, ht, hb⟩ := H
have := subset_of_eq h
exact
@@ -2388,7 +2388,7 @@ theorem smul_finset_symm_diff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆
#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symm_diff₀
theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ : Finset β) = univ :=
- coe_injective <| by rw [← coe_subset] at hs; push_cast at hs⊢; exact Set.smul_univ₀ hs
+ coe_injective <| by rw [← coe_subset] at hs ; push_cast at hs ⊢; exact Set.smul_univ₀ hs
#align finset.smul_univ₀ Finset.smul_univ₀
theorem smul_finset_univ₀ [Fintype β] (ha : a ≠ 0) : a • (univ : Finset β) = univ :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -62,7 +62,7 @@ pointwise subtraction
open Function MulOpposite
-open BigOperators Pointwise
+open scoped BigOperators Pointwise
variable {F α β γ : Type _}
@@ -317,7 +317,7 @@ theorem inv_insert (a : α) (s : Finset α) : (insert a s)⁻¹ = insert a⁻¹
end Inv
-open Pointwise
+open scoped Pointwise
section InvolutiveInv
@@ -893,7 +893,7 @@ end Div
/-! ### Instances -/
-open Pointwise
+open scoped Pointwise
section Instances
@@ -1192,7 +1192,7 @@ theorem coe_prod {ι : Type _} (s : Finset ι) (f : ι → Finset α) :
end CommMonoid
-open Pointwise
+open scoped Pointwise
section DivisionMonoid
@@ -1807,7 +1807,7 @@ theorem subset_vsub {s t : Set β} :
end VSub
-open Pointwise
+open scoped Pointwise
/-! ### Translation/scaling of finsets -/
@@ -1963,7 +1963,7 @@ theorem biUnion_smul_finset (s : Finset α) (t : Finset β) : s.biUnion (· •
end SMul
-open Pointwise
+open scoped Pointwise
section Instances
@@ -2237,7 +2237,7 @@ theorem card_le_card_mul_right {t : Finset α} (ht : t.Nonempty) : s.card ≤ (s
end
-open Pointwise
+open scoped Pointwise
@[to_additive]
theorem image_smul_comm [DecidableEq β] [DecidableEq γ] [SMul α β] [SMul α γ] (f : β → γ) (a : α)
@@ -2494,7 +2494,7 @@ end Ring
end Finset
-open Pointwise
+open scoped Pointwise
namespace Set
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -134,12 +134,6 @@ theorem one_nonempty : (1 : Finset α).Nonempty :=
#align finset.zero_nonempty Finset.zero_nonempty
-/
-/- warning: finset.map_one -> Finset.map_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : One.{u1} α] {f : Function.Embedding.{succ u1, succ u2} α β}, Eq.{succ u2} (Finset.{u2} β) (Finset.map.{u1, u2} α β f (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α _inst_1))))) (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Function.Embedding.{succ u1, succ u2} α β) (fun (_x : Function.Embedding.{succ u1, succ u2} α β) => α -> β) (Function.Embedding.hasCoeToFun.{succ u1, succ u2} α β) f (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α _inst_1)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : One.{u2} α] {f : Function.Embedding.{succ u2, succ u1} α β}, Eq.{succ u1} (Finset.{u1} β) (Finset.map.{u2, u1} α β f (OfNat.ofNat.{u2} (Finset.{u2} α) 1 (One.toOfNat1.{u2} (Finset.{u2} α) (Finset.one.{u2} α _inst_1)))) (Singleton.singleton.{u1, u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : α) => β) (OfNat.ofNat.{u2} α 1 (One.toOfNat1.{u2} α _inst_1))) (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Function.Embedding.{succ u2, succ u1} α β) α (fun (_x : α) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : α) => β) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (Function.Embedding.{succ u2, succ u1} α β) α β (Function.instEmbeddingLikeEmbedding.{succ u2, succ u1} α β)) f (OfNat.ofNat.{u2} α 1 (One.toOfNat1.{u2} α _inst_1))))
-Case conversion may be inaccurate. Consider using '#align finset.map_one Finset.map_oneₓ'. -/
@[simp, to_additive]
protected theorem map_one {f : α ↪ β} : map f 1 = {f 1} :=
map_singleton f 1
@@ -251,12 +245,6 @@ theorem image_inv : (s.image fun x => x⁻¹) = s⁻¹ :=
#align finset.image_neg Finset.image_neg
-/
-/- warning: finset.mem_inv -> Finset.mem_inv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Inv.{u1} α] {s : Finset.{u1} α} {x : α}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s)) (Exists.{succ u1} α (fun (y : α) => Exists.{0} (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) (fun (H : Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) y s) => Eq.{succ u1} α (Inv.inv.{u1} α _inst_2 y) x)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Inv.{u1} α] {s : Finset.{u1} α} {x : α}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s)) (Exists.{succ u1} α (fun (y : α) => And (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) y s) (Eq.{succ u1} α (Inv.inv.{u1} α _inst_2 y) x)))
-Case conversion may be inaccurate. Consider using '#align finset.mem_inv Finset.mem_invₓ'. -/
@[to_additive]
theorem mem_inv {x : α} : x ∈ s⁻¹ ↔ ∃ y ∈ s, y⁻¹ = x :=
mem_image
@@ -335,36 +323,18 @@ section InvolutiveInv
variable [DecidableEq α] [InvolutiveInv α] (s : Finset α)
-/- warning: finset.coe_inv -> Finset.coe_inv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : InvolutiveInv.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} (Set.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (InvolutiveInv.toHasInv.{u1} α _inst_2)) s)) (Inv.inv.{u1} (Set.{u1} α) (Set.inv.{u1} α (InvolutiveInv.toHasInv.{u1} α _inst_2)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : InvolutiveInv.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} (Set.{u1} α) (Finset.toSet.{u1} α (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (InvolutiveInv.toInv.{u1} α _inst_2)) s)) (Inv.inv.{u1} (Set.{u1} α) (Set.inv.{u1} α (InvolutiveInv.toInv.{u1} α _inst_2)) (Finset.toSet.{u1} α s))
-Case conversion may be inaccurate. Consider using '#align finset.coe_inv Finset.coe_invₓ'. -/
@[simp, norm_cast, to_additive]
theorem coe_inv : ↑s⁻¹ = (s : Set α)⁻¹ :=
coe_image.trans Set.image_inv
#align finset.coe_inv Finset.coe_inv
#align finset.coe_neg Finset.coe_neg
-/- warning: finset.card_inv -> Finset.card_inv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : InvolutiveInv.{u1} α] (s : Finset.{u1} α), Eq.{1} Nat (Finset.card.{u1} α (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (InvolutiveInv.toHasInv.{u1} α _inst_2)) s)) (Finset.card.{u1} α s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : InvolutiveInv.{u1} α] (s : Finset.{u1} α), Eq.{1} Nat (Finset.card.{u1} α (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (InvolutiveInv.toInv.{u1} α _inst_2)) s)) (Finset.card.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align finset.card_inv Finset.card_invₓ'. -/
@[simp, to_additive]
theorem card_inv : s⁻¹.card = s.card :=
card_image_of_injective _ inv_injective
#align finset.card_inv Finset.card_inv
#align finset.card_neg Finset.card_neg
-/- warning: finset.preimage_inv -> Finset.preimage_inv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : InvolutiveInv.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α s (Inv.inv.{u1} α (InvolutiveInv.toHasInv.{u1} α _inst_2)) (Function.Injective.injOn.{u1, u1} α α (Inv.inv.{u1} α (InvolutiveInv.toHasInv.{u1} α _inst_2)) (inv_injective.{u1} α _inst_2) (Set.preimage.{u1, u1} α α (Inv.inv.{u1} α (InvolutiveInv.toHasInv.{u1} α _inst_2)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)))) (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (InvolutiveInv.toHasInv.{u1} α _inst_2)) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : InvolutiveInv.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α s (Inv.inv.{u1} α (InvolutiveInv.toInv.{u1} α _inst_2)) (Function.Injective.injOn.{u1, u1} α α (Inv.inv.{u1} α (InvolutiveInv.toInv.{u1} α _inst_2)) (inv_injective.{u1} α _inst_2) (Set.preimage.{u1, u1} α α (Inv.inv.{u1} α (InvolutiveInv.toInv.{u1} α _inst_2)) (Finset.toSet.{u1} α s)))) (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (InvolutiveInv.toInv.{u1} α _inst_2)) s)
-Case conversion may be inaccurate. Consider using '#align finset.preimage_inv Finset.preimage_invₓ'. -/
@[simp, to_additive]
theorem preimage_inv : s.Preimage Inv.inv (inv_injective.InjOn _) = s⁻¹ :=
coe_injective <| by rw [coe_preimage, Set.inv_preimage, coe_inv]
@@ -989,24 +959,12 @@ protected def commSemigroup : CommSemigroup (Finset α) :=
#align finset.add_comm_semigroup Finset.addCommSemigroup
-/
-/- warning: finset.inter_mul_union_subset -> Finset.inter_mul_union_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : CommSemigroup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toHasMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toHasMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : CommSemigroup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) s t)
-Case conversion may be inaccurate. Consider using '#align finset.inter_mul_union_subset Finset.inter_mul_union_subsetₓ'. -/
@[to_additive]
theorem inter_mul_union_subset : s ∩ t * (s ∪ t) ⊆ s * t :=
image₂_inter_union_subset mul_comm
#align finset.inter_mul_union_subset Finset.inter_mul_union_subset
#align finset.inter_add_union_subset Finset.inter_add_union_subset
-/- warning: finset.union_mul_inter_subset -> Finset.union_mul_inter_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : CommSemigroup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toHasMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toHasMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : CommSemigroup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) s t)
-Case conversion may be inaccurate. Consider using '#align finset.union_mul_inter_subset Finset.union_mul_inter_subsetₓ'. -/
@[to_additive]
theorem union_mul_inter_subset : (s ∪ t) * (s ∩ t) ⊆ s * t :=
image₂_union_inter_subset mul_comm
@@ -1032,24 +990,12 @@ scoped[Pointwise]
attribute [instance]
Finset.semigroup Finset.addSemigroup Finset.commSemigroup Finset.addCommSemigroup Finset.mulOneClass Finset.addZeroClass
-/- warning: finset.subset_mul_left -> Finset.subset_mul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α) {t : Finset.{u1} α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α _inst_3)))) t) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasMul.{u1} α _inst_3))) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α) {t : Finset.{u1} α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (MulOneClass.toOne.{u1} α _inst_3))) t) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toMul.{u1} α _inst_3))) s t))
-Case conversion may be inaccurate. Consider using '#align finset.subset_mul_left Finset.subset_mul_leftₓ'. -/
@[to_additive]
theorem subset_mul_left (s : Finset α) {t : Finset α} (ht : (1 : α) ∈ t) : s ⊆ s * t := fun a ha =>
mem_mul.2 ⟨a, 1, ha, ht, mul_one _⟩
#align finset.subset_mul_left Finset.subset_mul_left
#align finset.subset_add_left Finset.subset_add_left
-/- warning: finset.subset_mul_right -> Finset.subset_mul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] {s : Finset.{u1} α} (t : Finset.{u1} α), (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α _inst_3)))) s) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) t (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasMul.{u1} α _inst_3))) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] {s : Finset.{u1} α} (t : Finset.{u1} α), (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (MulOneClass.toOne.{u1} α _inst_3))) s) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) t (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toMul.{u1} α _inst_3))) s t))
-Case conversion may be inaccurate. Consider using '#align finset.subset_mul_right Finset.subset_mul_rightₓ'. -/
@[to_additive]
theorem subset_mul_right {s : Finset α} (t : Finset α) (hs : (1 : α) ∈ s) : t ⊆ s * t := fun a ha =>
mem_mul.2 ⟨1, a, hs, ha, one_mul _⟩
@@ -1065,24 +1011,12 @@ def singletonMonoidHom : α →* Finset α :=
#align finset.singleton_add_monoid_hom Finset.singletonAddMonoidHom
-/
-/- warning: finset.coe_singleton_monoid_hom -> Finset.coe_singletonMonoidHom is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α))
-Case conversion may be inaccurate. Consider using '#align finset.coe_singleton_monoid_hom Finset.coe_singletonMonoidHomₓ'. -/
@[simp, to_additive]
theorem coe_singletonMonoidHom : (singletonMonoidHom : α → Finset α) = singleton :=
rfl
#align finset.coe_singleton_monoid_hom Finset.coe_singletonMonoidHom
#align finset.coe_singleton_add_monoid_hom Finset.coe_singletonAddMonoidHom
-/- warning: finset.singleton_monoid_hom_apply -> Finset.singletonMonoidHom_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (a : α), Eq.{succ u1} (Finset.{u1} α) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) a) (Singleton.singleton.{u1, u1} α ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => Finset.{u1} α) a) (Finset.instSingletonFinset.{u1} α) a)
-Case conversion may be inaccurate. Consider using '#align finset.singleton_monoid_hom_apply Finset.singletonMonoidHom_applyₓ'. -/
@[simp, to_additive]
theorem singletonMonoidHom_apply (a : α) : singletonMonoidHom a = {a} :=
rfl
@@ -1100,24 +1034,12 @@ def coeMonoidHom : Finset α →* Set α where
#align finset.coe_add_monoid_hom Finset.coeAddMonoidHom
-/
-/- warning: finset.coe_coe_monoid_hom -> Finset.coe_coeMonoidHom is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : Finset.{u1} α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Finset.{u1} α) => Set.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (CoeTC.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.instCoeTCFinsetSet.{u1} α))
-Case conversion may be inaccurate. Consider using '#align finset.coe_coe_monoid_hom Finset.coe_coeMonoidHomₓ'. -/
@[simp, to_additive]
theorem coe_coeMonoidHom : (coeMonoidHom : Finset α → Set α) = coe :=
rfl
#align finset.coe_coe_monoid_hom Finset.coe_coeMonoidHom
#align finset.coe_coe_add_monoid_hom Finset.coe_coeAddMonoidHom
-/- warning: finset.coe_monoid_hom_apply -> Finset.coeMonoidHom_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} (Set.{u1} α) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Finset.{u1} α) => Set.{u1} α) s) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) s) (Finset.toSet.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align finset.coe_monoid_hom_apply Finset.coeMonoidHom_applyₓ'. -/
@[simp, to_additive]
theorem coeMonoidHom_apply (s : Finset α) : coeMonoidHom s = s :=
rfl
@@ -1139,12 +1061,6 @@ section Monoid
variable [Monoid α] {s t : Finset α} {a : α} {m n : ℕ}
-/- warning: finset.coe_pow -> Finset.coe_pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] (s : Finset.{u1} α) (n : Nat), Eq.{succ u1} (Set.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s n)) (HPow.hPow.{u1, 0, u1} (Set.{u1} α) Nat (Set.{u1} α) (instHPow.{u1, 0} (Set.{u1} α) Nat (Set.NPow.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s) n)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] (s : Finset.{u1} α) (n : Nat), Eq.{succ u1} (Set.{u1} α) (Finset.toSet.{u1} α (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Monoid.toOne.{u1} α _inst_3) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s n)) (HPow.hPow.{u1, 0, u1} (Set.{u1} α) Nat (Set.{u1} α) (instHPow.{u1, 0} (Set.{u1} α) Nat (Set.NPow.{u1} α (Monoid.toOne.{u1} α _inst_3) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) (Finset.toSet.{u1} α s) n)
-Case conversion may be inaccurate. Consider using '#align finset.coe_pow Finset.coe_powₓ'. -/
@[simp, norm_cast, to_additive]
theorem coe_pow (s : Finset α) (n : ℕ) : ↑(s ^ n) = (s ^ n : Set α) :=
by
@@ -1166,12 +1082,6 @@ protected def monoid : Monoid (Finset α) :=
scoped[Pointwise] attribute [instance] Finset.monoid Finset.addMonoid
-/- warning: finset.pow_mem_pow -> Finset.pow_mem_pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {s : Finset.{u1} α} {a : α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (forall (n : Nat), Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_3)) a n) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s n))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {s : Finset.{u1} α} {a : α}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a s) -> (forall (n : Nat), Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (HPow.hPow.{u1, 0, u1} α Nat α (instHPow.{u1, 0} α Nat (Monoid.Pow.{u1} α _inst_3)) a n) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Monoid.toOne.{u1} α _inst_3) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s n))
-Case conversion may be inaccurate. Consider using '#align finset.pow_mem_pow Finset.pow_mem_powₓ'. -/
@[to_additive]
theorem pow_mem_pow (ha : a ∈ s) : ∀ n : ℕ, a ^ n ∈ s ^ n
| 0 => by rw [pow_zero]; exact one_mem_one
@@ -1179,12 +1089,6 @@ theorem pow_mem_pow (ha : a ∈ s) : ∀ n : ℕ, a ^ n ∈ s ^ n
#align finset.pow_mem_pow Finset.pow_mem_pow
#align finset.nsmul_mem_nsmul Finset.nsmul_mem_nsmul
-/- warning: finset.pow_subset_pow -> Finset.pow_subset_pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s t) -> (forall (n : Nat), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s n) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) t n))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s t) -> (forall (n : Nat), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Monoid.toOne.{u1} α _inst_3) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s n) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Monoid.toOne.{u1} α _inst_3) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) t n))
-Case conversion may be inaccurate. Consider using '#align finset.pow_subset_pow Finset.pow_subset_powₓ'. -/
@[to_additive]
theorem pow_subset_pow (hst : s ⊆ t) : ∀ n : ℕ, s ^ n ⊆ t ^ n
| 0 => by rw [pow_zero]; exact subset.rfl
@@ -1192,12 +1096,6 @@ theorem pow_subset_pow (hst : s ⊆ t) : ∀ n : ℕ, s ^ n ⊆ t ^ n
#align finset.pow_subset_pow Finset.pow_subset_pow
#align finset.nsmul_subset_nsmul Finset.nsmul_subset_nsmul
-/- warning: finset.pow_subset_pow_of_one_mem -> Finset.pow_subset_pow_of_one_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {s : Finset.{u1} α} {m : Nat} {n : Nat}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))))) s) -> (LE.le.{0} Nat Nat.hasLe m n) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s m) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s n))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {s : Finset.{u1} α} {m : Nat} {n : Nat}, (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_3))) s) -> (LE.le.{0} Nat instLENat m n) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Monoid.toOne.{u1} α _inst_3) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s m) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Monoid.toOne.{u1} α _inst_3) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s n))
-Case conversion may be inaccurate. Consider using '#align finset.pow_subset_pow_of_one_mem Finset.pow_subset_pow_of_one_memₓ'. -/
@[to_additive]
theorem pow_subset_pow_of_one_mem (hs : (1 : α) ∈ s) : m ≤ n → s ^ m ⊆ s ^ n :=
by
@@ -1208,24 +1106,12 @@ theorem pow_subset_pow_of_one_mem (hs : (1 : α) ∈ s) : m ≤ n → s ^ m ⊆
#align finset.pow_subset_pow_of_one_mem Finset.pow_subset_pow_of_one_mem
#align finset.nsmul_subset_nsmul_of_zero_mem Finset.nsmul_subset_nsmul_of_zero_mem
-/- warning: finset.coe_list_prod -> Finset.coe_list_prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] (s : List.{u1} (Finset.{u1} α)), Eq.{succ u1} (Set.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (List.prod.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))) s)) (List.prod.{u1} (Set.{u1} α) (Set.mul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))) (Set.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))) (List.map.{u1, u1} (Finset.{u1} α) (Set.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α)))) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] (s : List.{u1} (Finset.{u1} α)), Eq.{succ u1} (Set.{u1} α) (Finset.toSet.{u1} α (List.prod.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))) (Finset.one.{u1} α (Monoid.toOne.{u1} α _inst_3)) s)) (List.prod.{u1} (Set.{u1} α) (Set.mul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))) (Set.one.{u1} α (Monoid.toOne.{u1} α _inst_3)) (List.map.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.toSet.{u1} α) s))
-Case conversion may be inaccurate. Consider using '#align finset.coe_list_prod Finset.coe_list_prodₓ'. -/
@[simp, norm_cast, to_additive]
theorem coe_list_prod (s : List (Finset α)) : (↑s.Prod : Set α) = (s.map coe).Prod :=
map_list_prod (coeMonoidHom : Finset α →* Set α) _
#align finset.coe_list_prod Finset.coe_list_prod
#align finset.coe_list_sum Finset.coe_list_sum
-/- warning: finset.mem_prod_list_of_fn -> Finset.mem_prod_list_ofFn is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {n : Nat} {a : α} {s : (Fin n) -> (Finset.{u1} α)}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a (List.prod.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))) (List.ofFn.{u1} (Finset.{u1} α) n s))) (Exists.{succ u1} (forall (i : Fin n), coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) (s i)) (fun (f : forall (i : Fin n), coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) (s i)) => Eq.{succ u1} α (List.prod.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (List.ofFn.{u1} α n (fun (i : Fin n) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) (s i)) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) (s i)) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) (s i)) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) (s i)) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x (s i)))))) (f i)))) a))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {n : Nat} {a : α} {s : (Fin n) -> (Finset.{u1} α)}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a (List.prod.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))) (Finset.one.{u1} α (Monoid.toOne.{u1} α _inst_3)) (List.ofFn.{u1} (Finset.{u1} α) n s))) (Exists.{succ u1} (forall (i : Fin n), Subtype.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (s i))) (fun (f : forall (i : Fin n), Subtype.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (s i))) => Eq.{succ u1} α (List.prod.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (Monoid.toOne.{u1} α _inst_3) (List.ofFn.{u1} α n (fun (i : Fin n) => Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x (s i)) (f i)))) a))
-Case conversion may be inaccurate. Consider using '#align finset.mem_prod_list_of_fn Finset.mem_prod_list_ofFnₓ'. -/
@[to_additive]
theorem mem_prod_list_ofFn {a : α} {s : Fin n → Finset α} :
a ∈ (List.ofFn s).Prod ↔ ∃ f : ∀ i : Fin n, s i, (List.ofFn fun i => (f i : α)).Prod = a := by
@@ -1233,12 +1119,6 @@ theorem mem_prod_list_ofFn {a : α} {s : Fin n → Finset α} :
#align finset.mem_prod_list_of_fn Finset.mem_prod_list_ofFn
#align finset.mem_sum_list_of_fn Finset.mem_sum_list_ofFn
-/- warning: finset.mem_pow -> Finset.mem_pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {s : Finset.{u1} α} {a : α} {n : Nat}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s n)) (Exists.{succ u1} ((Fin n) -> (coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) s)) (fun (f : (Fin n) -> (coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) s)) => Eq.{succ u1} α (List.prod.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (List.ofFn.{u1} α n (fun (i : Fin n) => (fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) s) α (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) s) α (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) s) α (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Finset.{u1} α) Type.{u1} (Finset.hasCoeToSort.{u1} α) s) α (coeSubtype.{succ u1} α (fun (x : α) => Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) x s))))) (f i)))) a))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {s : Finset.{u1} α} {a : α} {n : Nat}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) a (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Monoid.toOne.{u1} α _inst_3) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s n)) (Exists.{succ u1} ((Fin n) -> (Subtype.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s))) (fun (f : (Fin n) -> (Subtype.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s))) => Eq.{succ u1} α (List.prod.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (Monoid.toOne.{u1} α _inst_3) (List.ofFn.{u1} α n (fun (i : Fin n) => Subtype.val.{succ u1} α (fun (x : α) => Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) x s) (f i)))) a))
-Case conversion may be inaccurate. Consider using '#align finset.mem_pow Finset.mem_powₓ'. -/
@[to_additive]
theorem mem_pow {a : α} {n : ℕ} :
a ∈ s ^ n ↔ ∃ f : Fin n → s, (List.ofFn fun i => ↑(f i)).Prod = a := by
@@ -1246,60 +1126,30 @@ theorem mem_pow {a : α} {n : ℕ} :
#align finset.mem_pow Finset.mem_pow
#align finset.mem_nsmul Finset.mem_nsmul
-/- warning: finset.empty_pow -> Finset.empty_pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Eq.{succ u1} (Finset.{u1} α) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α)) n) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Eq.{succ u1} (Finset.{u1} α) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Monoid.toOne.{u1} α _inst_3) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α)) n) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α)))
-Case conversion may be inaccurate. Consider using '#align finset.empty_pow Finset.empty_powₓ'. -/
@[simp, to_additive]
theorem empty_pow (hn : n ≠ 0) : (∅ : Finset α) ^ n = ∅ := by
rw [← tsub_add_cancel_of_le (Nat.succ_le_of_lt <| Nat.pos_of_ne_zero hn), pow_succ, empty_mul]
#align finset.empty_pow Finset.empty_pow
#align finset.empty_nsmul Finset.empty_nsmul
-/- warning: finset.mul_univ_of_one_mem -> Finset.mul_univ_of_one_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {s : Finset.{u1} α} [_inst_4 : Fintype.{u1} α], (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))))) s) -> (Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s (Finset.univ.{u1} α _inst_4)) (Finset.univ.{u1} α _inst_4))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {s : Finset.{u1} α} [_inst_4 : Fintype.{u1} α], (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_3))) s) -> (Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) s (Finset.univ.{u1} α _inst_4)) (Finset.univ.{u1} α _inst_4))
-Case conversion may be inaccurate. Consider using '#align finset.mul_univ_of_one_mem Finset.mul_univ_of_one_memₓ'. -/
@[to_additive]
theorem mul_univ_of_one_mem [Fintype α] (hs : (1 : α) ∈ s) : s * univ = univ :=
eq_univ_iff_forall.2 fun a => mem_mul.2 ⟨_, _, hs, mem_univ _, one_mul _⟩
#align finset.mul_univ_of_one_mem Finset.mul_univ_of_one_mem
#align finset.add_univ_of_zero_mem Finset.add_univ_of_zero_mem
-/- warning: finset.univ_mul_of_one_mem -> Finset.univ_mul_of_one_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {t : Finset.{u1} α} [_inst_4 : Fintype.{u1} α], (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3))))) t) -> (Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) (Finset.univ.{u1} α _inst_4) t) (Finset.univ.{u1} α _inst_4))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {t : Finset.{u1} α} [_inst_4 : Fintype.{u1} α], (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (Monoid.toOne.{u1} α _inst_3))) t) -> (Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) (Finset.univ.{u1} α _inst_4) t) (Finset.univ.{u1} α _inst_4))
-Case conversion may be inaccurate. Consider using '#align finset.univ_mul_of_one_mem Finset.univ_mul_of_one_memₓ'. -/
@[to_additive]
theorem univ_mul_of_one_mem [Fintype α] (ht : (1 : α) ∈ t) : univ * t = univ :=
eq_univ_iff_forall.2 fun a => mem_mul.2 ⟨_, _, mem_univ _, ht, mul_one _⟩
#align finset.univ_mul_of_one_mem Finset.univ_mul_of_one_mem
#align finset.univ_add_of_zero_mem Finset.univ_add_of_zero_mem
-/- warning: finset.univ_mul_univ -> Finset.univ_mul_univ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] [_inst_4 : Fintype.{u1} α], Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) (Finset.univ.{u1} α _inst_4) (Finset.univ.{u1} α _inst_4)) (Finset.univ.{u1} α _inst_4)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] [_inst_4 : Fintype.{u1} α], Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) (Finset.univ.{u1} α _inst_4) (Finset.univ.{u1} α _inst_4)) (Finset.univ.{u1} α _inst_4)
-Case conversion may be inaccurate. Consider using '#align finset.univ_mul_univ Finset.univ_mul_univₓ'. -/
@[simp, to_additive]
theorem univ_mul_univ [Fintype α] : (univ : Finset α) * univ = univ :=
mul_univ_of_one_mem <| mem_univ _
#align finset.univ_mul_univ Finset.univ_mul_univ
#align finset.univ_add_univ Finset.univ_add_univ
-/- warning: finset.univ_pow -> Finset.univ_pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {n : Nat} [_inst_4 : Fintype.{u1} α], (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Eq.{succ u1} (Finset.{u1} α) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) (Finset.univ.{u1} α _inst_4) n) (Finset.univ.{u1} α _inst_4))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Monoid.{u1} α] {n : Nat} [_inst_4 : Fintype.{u1} α], (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Eq.{succ u1} (Finset.{u1} α) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Nat (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Nat (Finset.npow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Monoid.toOne.{u1} α _inst_3) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α _inst_3)))) (Finset.univ.{u1} α _inst_4) n) (Finset.univ.{u1} α _inst_4))
-Case conversion may be inaccurate. Consider using '#align finset.univ_pow Finset.univ_powₓ'. -/
@[simp, to_additive nsmul_univ]
theorem univ_pow [Fintype α] (hn : n ≠ 0) : (univ : Finset α) ^ n = univ :=
coe_injective <| by rw [coe_pow, coe_univ, Set.univ_pow hn]
@@ -1348,12 +1198,6 @@ section DivisionMonoid
variable [DivisionMonoid α] {s t : Finset α}
-/- warning: finset.coe_zpow -> Finset.coe_zpow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : DivisionMonoid.{u1} α] (s : Finset.{u1} α) (n : Int), Eq.{succ u1} (Set.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Int (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Int (Finset.zpow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3)))) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3)))) (DivInvMonoid.toHasInv.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3)))) s n)) (HPow.hPow.{u1, 0, u1} (Set.{u1} α) Int (Set.{u1} α) (instHPow.{u1, 0} (Set.{u1} α) Int (Set.ZPow.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3)))) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3)))) (DivInvMonoid.toHasInv.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3)))) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s) n)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : DivisionMonoid.{u1} α] (s : Finset.{u1} α) (n : Int), Eq.{succ u1} (Set.{u1} α) (Finset.toSet.{u1} α (HPow.hPow.{u1, 0, u1} (Finset.{u1} α) Int (Finset.{u1} α) (instHPow.{u1, 0} (Finset.{u1} α) Int (Finset.zpow.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α _inst_3))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3)))) (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α _inst_3))))) s n)) (HPow.hPow.{u1, 0, u1} (Set.{u1} α) Int (Set.{u1} α) (instHPow.{u1, 0} (Set.{u1} α) Int (Set.ZPow.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α _inst_3))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3)))) (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α _inst_3))))) (Finset.toSet.{u1} α s) n)
-Case conversion may be inaccurate. Consider using '#align finset.coe_zpow Finset.coe_zpowₓ'. -/
@[simp, to_additive]
theorem coe_zpow (s : Finset α) : ∀ n : ℤ, ↑(s ^ n) = (s ^ n : Set α)
| Int.ofNat n => coe_pow _ _
@@ -1361,12 +1205,6 @@ theorem coe_zpow (s : Finset α) : ∀ n : ℤ, ↑(s ^ n) = (s ^ n : Set α)
#align finset.coe_zpow Finset.coe_zpow
#align finset.coe_zsmul Finset.coe_zsmul
-/- warning: finset.mul_eq_one_iff -> Finset.mul_eq_one_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : DivisionMonoid.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3)))))) s t) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3))))))))) (Exists.{succ u1} α (fun (a : α) => Exists.{succ u1} α (fun (b : α) => And (Eq.{succ u1} (Finset.{u1} α) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) (And (Eq.{succ u1} (Finset.{u1} α) t (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)) (Eq.{succ u1} α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3))))) a b) (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3))))))))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : DivisionMonoid.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3)))))) s t) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α _inst_3))))))) (Exists.{succ u1} α (fun (a : α) => Exists.{succ u1} α (fun (b : α) => And (Eq.{succ u1} (Finset.{u1} α) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) (And (Eq.{succ u1} (Finset.{u1} α) t (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)) (Eq.{succ u1} α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α _inst_3))))) a b) (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α _inst_3))))))))))
-Case conversion may be inaccurate. Consider using '#align finset.mul_eq_one_iff Finset.mul_eq_one_iffₓ'. -/
@[to_additive]
protected theorem mul_eq_one_iff : s * t = 1 ↔ ∃ a b, s = {a} ∧ t = {b} ∧ a * b = 1 := by
simp_rw [← coe_inj, coe_mul, coe_one, Set.mul_eq_one_iff, coe_singleton]
@@ -1447,22 +1285,10 @@ lacks.
-/
-/- warning: finset.mul_add_subset -> Finset.mul_add_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Distrib.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toHasMul.{u1} α _inst_3))) s (HAdd.hAdd.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHAdd.{u1} (Finset.{u1} α) (Finset.add.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toHasAdd.{u1} α _inst_3))) t u)) (HAdd.hAdd.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHAdd.{u1} (Finset.{u1} α) (Finset.add.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toHasAdd.{u1} α _inst_3))) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toHasMul.{u1} α _inst_3))) s t) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toHasMul.{u1} α _inst_3))) s u))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Distrib.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toMul.{u1} α _inst_3))) s (HAdd.hAdd.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHAdd.{u1} (Finset.{u1} α) (Finset.add.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toAdd.{u1} α _inst_3))) t u)) (HAdd.hAdd.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHAdd.{u1} (Finset.{u1} α) (Finset.add.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toAdd.{u1} α _inst_3))) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toMul.{u1} α _inst_3))) s t) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toMul.{u1} α _inst_3))) s u))
-Case conversion may be inaccurate. Consider using '#align finset.mul_add_subset Finset.mul_add_subsetₓ'. -/
theorem mul_add_subset : s * (t + u) ⊆ s * t + s * u :=
image₂_distrib_subset_left mul_add
#align finset.mul_add_subset Finset.mul_add_subset
-/- warning: finset.add_mul_subset -> Finset.add_mul_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Distrib.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toHasMul.{u1} α _inst_3))) (HAdd.hAdd.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHAdd.{u1} (Finset.{u1} α) (Finset.add.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toHasAdd.{u1} α _inst_3))) s t) u) (HAdd.hAdd.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHAdd.{u1} (Finset.{u1} α) (Finset.add.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toHasAdd.{u1} α _inst_3))) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toHasMul.{u1} α _inst_3))) s u) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toHasMul.{u1} α _inst_3))) t u))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Distrib.{u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (u : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toMul.{u1} α _inst_3))) (HAdd.hAdd.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHAdd.{u1} (Finset.{u1} α) (Finset.add.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toAdd.{u1} α _inst_3))) s t) u) (HAdd.hAdd.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHAdd.{u1} (Finset.{u1} α) (Finset.add.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toAdd.{u1} α _inst_3))) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toMul.{u1} α _inst_3))) s u) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Distrib.toMul.{u1} α _inst_3))) t u))
-Case conversion may be inaccurate. Consider using '#align finset.add_mul_subset Finset.add_mul_subsetₓ'. -/
theorem add_mul_subset : (s + t) * u ⊆ s * u + t * u :=
image₂_distrib_subset_right add_mul
#align finset.add_mul_subset Finset.add_mul_subset
@@ -1476,40 +1302,16 @@ variable [MulZeroClass α] {s t : Finset α}
/-! Note that `finset` is not a `mul_zero_class` because `0 * ∅ ≠ 0`. -/
-/- warning: finset.mul_zero_subset -> Finset.mul_zero_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulZeroClass.{u1} α] (s : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulZeroClass.toHasMul.{u1} α _inst_3))) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α _inst_3)))))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α _inst_3)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulZeroClass.{u1} α] (s : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulZeroClass.toMul.{u1} α _inst_3))) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toZero.{u1} α _inst_3))))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toZero.{u1} α _inst_3))))
-Case conversion may be inaccurate. Consider using '#align finset.mul_zero_subset Finset.mul_zero_subsetₓ'. -/
theorem mul_zero_subset (s : Finset α) : s * 0 ⊆ 0 := by simp [subset_iff, mem_mul]
#align finset.mul_zero_subset Finset.mul_zero_subset
-/- warning: finset.zero_mul_subset -> Finset.zero_mul_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulZeroClass.{u1} α] (s : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulZeroClass.toHasMul.{u1} α _inst_3))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α _inst_3))))) s) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α _inst_3)))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulZeroClass.{u1} α] (s : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulZeroClass.toMul.{u1} α _inst_3))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toZero.{u1} α _inst_3)))) s) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toZero.{u1} α _inst_3))))
-Case conversion may be inaccurate. Consider using '#align finset.zero_mul_subset Finset.zero_mul_subsetₓ'. -/
theorem zero_mul_subset (s : Finset α) : 0 * s ⊆ 0 := by simp [subset_iff, mem_mul]
#align finset.zero_mul_subset Finset.zero_mul_subset
-/- warning: finset.nonempty.mul_zero -> Finset.Nonempty.mul_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulZeroClass.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulZeroClass.toHasMul.{u1} α _inst_3))) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α _inst_3)))))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α _inst_3))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulZeroClass.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulZeroClass.toMul.{u1} α _inst_3))) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toZero.{u1} α _inst_3))))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toZero.{u1} α _inst_3)))))
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.mul_zero Finset.Nonempty.mul_zeroₓ'. -/
theorem Nonempty.mul_zero (hs : s.Nonempty) : s * 0 = 0 :=
s.mul_zero_subset.antisymm <| by simpa [mem_mul] using hs
#align finset.nonempty.mul_zero Finset.Nonempty.mul_zero
-/- warning: finset.nonempty.zero_mul -> Finset.Nonempty.zero_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulZeroClass.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulZeroClass.toHasMul.{u1} α _inst_3))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α _inst_3))))) s) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α _inst_3))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulZeroClass.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (MulZeroClass.toMul.{u1} α _inst_3))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toZero.{u1} α _inst_3)))) s) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toZero.{u1} α _inst_3)))))
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.zero_mul Finset.Nonempty.zero_mulₓ'. -/
theorem Nonempty.zero_mul (hs : s.Nonempty) : 0 * s = 0 :=
s.zero_mul_subset.antisymm <| by simpa [mem_mul] using hs
#align finset.nonempty.zero_mul Finset.Nonempty.zero_mul
@@ -1523,36 +1325,18 @@ variable [Group α] [DivisionMonoid β] [MonoidHomClass F α β] (f : F) {s t :
/-! Note that `finset` is not a `group` because `s / s ≠ 1` in general. -/
-/- warning: finset.one_mem_div_iff -> Finset.one_mem_div_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))))) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toHasDiv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) s t)) (Not (Disjoint.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α) (Finset.orderBot.{u1} α) s t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))))) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toDiv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) s t)) (Not (Disjoint.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s t))
-Case conversion may be inaccurate. Consider using '#align finset.one_mem_div_iff Finset.one_mem_div_iffₓ'. -/
@[simp, to_additive]
theorem one_mem_div_iff : (1 : α) ∈ s / t ↔ ¬Disjoint s t := by
rw [← mem_coe, ← disjoint_coe, coe_div, Set.one_mem_div_iff]
#align finset.one_mem_div_iff Finset.one_mem_div_iff
#align finset.zero_mem_sub_iff Finset.zero_mem_sub_iff
-/- warning: finset.not_one_mem_div_iff -> Finset.not_one_mem_div_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Not (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))))) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toHasDiv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) s t))) (Disjoint.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α) (Finset.orderBot.{u1} α) s t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, Iff (Not (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))))) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toDiv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) s t))) (Disjoint.{u1} (Finset.{u1} α) (Finset.partialOrder.{u1} α) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s t)
-Case conversion may be inaccurate. Consider using '#align finset.not_one_mem_div_iff Finset.not_one_mem_div_iffₓ'. -/
@[to_additive]
theorem not_one_mem_div_iff : (1 : α) ∉ s / t ↔ Disjoint s t :=
one_mem_div_iff.not_left
#align finset.not_one_mem_div_iff Finset.not_one_mem_div_iff
#align finset.not_zero_mem_sub_iff Finset.not_zero_mem_sub_iff
-/- warning: finset.nonempty.one_mem_div -> Finset.Nonempty.one_mem_div is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (OfNat.ofNat.{u1} α 1 (OfNat.mk.{u1} α 1 (One.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))))) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toHasDiv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) s s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (OfNat.ofNat.{u1} α 1 (One.toOfNat1.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))))) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toDiv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) s s))
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.one_mem_div Finset.Nonempty.one_mem_divₓ'. -/
@[to_additive]
theorem Nonempty.one_mem_div (h : s.Nonempty) : (1 : α) ∈ s / s :=
let ⟨a, ha⟩ := h
@@ -1575,12 +1359,6 @@ theorem isUnit_iff_singleton : IsUnit s ↔ ∃ a, s = {a} := by
#align finset.is_unit_iff_singleton Finset.isUnit_iff_singleton
-/
-/- warning: finset.image_mul_left -> Finset.image_mul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a) b) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a)) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_3)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a)) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a) b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2631 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2633 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2631 x._@.Mathlib.Algebra.Group.Defs._hyg.2633) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a)) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) (Finset.toSet.{u1} α t))))
-Case conversion may be inaccurate. Consider using '#align finset.image_mul_left Finset.image_mul_leftₓ'. -/
@[simp, to_additive]
theorem image_mul_left :
image (fun b => a * b) t = preimage t (fun b => a⁻¹ * b) ((mul_right_injective _).InjOn _) :=
@@ -1588,24 +1366,12 @@ theorem image_mul_left :
#align finset.image_mul_left Finset.image_mul_left
#align finset.image_add_left Finset.image_add_left
-/- warning: finset.image_mul_right -> Finset.image_mul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x b) t) (Finset.preimage.{u1, u1} α α t (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) b)) (Function.Injective.injOn.{u1, u1} α α (fun (x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) b)) (mul_left_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (RightCancelSemigroup.toIsRightCancelMul.{u1} α (RightCancelMonoid.toRightCancelSemigroup.{u1} α (CancelMonoid.toRightCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_3)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) b)) (Set.preimage.{u1, u1} α α (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) b)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x b) t) (Finset.preimage.{u1, u1} α α t (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) b)) (Function.Injective.injOn.{u1, u1} α α (fun (x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) b)) (mul_left_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsRightCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) b)) (Set.preimage.{u1, u1} α α (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) b)) (Finset.toSet.{u1} α t))))
-Case conversion may be inaccurate. Consider using '#align finset.image_mul_right Finset.image_mul_rightₓ'. -/
@[simp, to_additive]
theorem image_mul_right : image (· * b) t = preimage t (· * b⁻¹) ((mul_left_injective _).InjOn _) :=
coe_injective <| by simp
#align finset.image_mul_right Finset.image_mul_right
#align finset.image_add_right Finset.image_add_right
-/- warning: finset.image_mul_left' -> Finset.image_mul_left' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a) b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_3)))) a) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2631 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2633 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2631 x._@.Mathlib.Algebra.Group.Defs._hyg.2633) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) a) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Finset.toSet.{u1} α t))))
-Case conversion may be inaccurate. Consider using '#align finset.image_mul_left' Finset.image_mul_left'ₓ'. -/
@[to_additive]
theorem image_mul_left' :
image (fun b => a⁻¹ * b) t = preimage t (fun b => a * b) ((mul_right_injective _).InjOn _) := by
@@ -1613,24 +1379,12 @@ theorem image_mul_left' :
#align finset.image_mul_left' Finset.image_mul_left'
#align finset.image_add_left' Finset.image_add_left'
-/- warning: finset.image_mul_right' -> Finset.image_mul_right' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) b)) t) (Finset.preimage.{u1, u1} α α t (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x b) (Function.Injective.injOn.{u1, u1} α α (fun (x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x b) (mul_left_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (RightCancelSemigroup.toIsRightCancelMul.{u1} α (RightCancelMonoid.toRightCancelSemigroup.{u1} α (CancelMonoid.toRightCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_3)))) b) (Set.preimage.{u1, u1} α α (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) b)) t) (Finset.preimage.{u1, u1} α α t (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x b) (Function.Injective.injOn.{u1, u1} α α (fun (x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x b) (mul_left_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsRightCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) b) (Set.preimage.{u1, u1} α α (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) _x b) (Finset.toSet.{u1} α t))))
-Case conversion may be inaccurate. Consider using '#align finset.image_mul_right' Finset.image_mul_right'ₓ'. -/
@[to_additive]
theorem image_mul_right' :
image (· * b⁻¹) t = preimage t (· * b) ((mul_left_injective _).InjOn _) := by simp
#align finset.image_mul_right' Finset.image_mul_right'
#align finset.image_add_right' Finset.image_add_right'
-/- warning: finset.image_div -> Finset.image_div is a dubious translation:
-lean 3 declaration is
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))] (f : F) {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) (HDiv.hDiv.{u2, u2, u2} (Finset.{u2} α) (Finset.{u2} α) (Finset.{u2} α) (instHDiv.{u2} (Finset.{u2} α) (Finset.div.{u2} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toHasDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) s t)) (HDiv.hDiv.{u3, u3, u3} (Finset.{u3} β) (Finset.{u3} β) (Finset.{u3} β) (instHDiv.{u3} (Finset.{u3} β) (Finset.div.{u3} β (fun (a : β) (b : β) => _inst_2 a b) (DivInvMonoid.toHasDiv.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) s) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) t))
-but is expected to have type
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))] (f : F) {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) (HDiv.hDiv.{u2, u2, u2} (Finset.{u2} α) (Finset.{u2} α) (Finset.{u2} α) (instHDiv.{u2} (Finset.{u2} α) (Finset.div.{u2} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) s t)) (HDiv.hDiv.{u3, u3, u3} (Finset.{u3} β) (Finset.{u3} β) (Finset.{u3} β) (instHDiv.{u3} (Finset.{u3} β) (Finset.div.{u3} β (fun (a : β) (b : β) => _inst_2 a b) (DivInvMonoid.toDiv.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) s) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) t))
-Case conversion may be inaccurate. Consider using '#align finset.image_div Finset.image_divₓ'. -/
theorem image_div : (s / t).image (f : α → β) = s.image f / t.image f :=
image_image₂_distrib <| map_div f
#align finset.image_div Finset.image_div
@@ -1641,40 +1395,16 @@ section GroupWithZero
variable [GroupWithZero α] {s t : Finset α}
-/- warning: finset.div_zero_subset -> Finset.div_zero_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : GroupWithZero.{u1} α] (s : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toHasDiv.{u1} α (GroupWithZero.toDivInvMonoid.{u1} α _inst_3)))) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3))))))))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3))))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : GroupWithZero.{u1} α] (s : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (GroupWithZero.toDiv.{u1} α _inst_3))) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3)))))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3)))))
-Case conversion may be inaccurate. Consider using '#align finset.div_zero_subset Finset.div_zero_subsetₓ'. -/
theorem div_zero_subset (s : Finset α) : s / 0 ⊆ 0 := by simp [subset_iff, mem_div]
#align finset.div_zero_subset Finset.div_zero_subset
-/- warning: finset.zero_div_subset -> Finset.zero_div_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : GroupWithZero.{u1} α] (s : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toHasDiv.{u1} α (GroupWithZero.toDivInvMonoid.{u1} α _inst_3)))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3)))))))) s) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3))))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : GroupWithZero.{u1} α] (s : Finset.{u1} α), HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (GroupWithZero.toDiv.{u1} α _inst_3))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3))))) s) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3)))))
-Case conversion may be inaccurate. Consider using '#align finset.zero_div_subset Finset.zero_div_subsetₓ'. -/
theorem zero_div_subset (s : Finset α) : 0 / s ⊆ 0 := by simp [subset_iff, mem_div]
#align finset.zero_div_subset Finset.zero_div_subset
-/- warning: finset.nonempty.div_zero -> Finset.Nonempty.div_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : GroupWithZero.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Eq.{succ u1} (Finset.{u1} α) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toHasDiv.{u1} α (GroupWithZero.toDivInvMonoid.{u1} α _inst_3)))) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3))))))))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3)))))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : GroupWithZero.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Eq.{succ u1} (Finset.{u1} α) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (GroupWithZero.toDiv.{u1} α _inst_3))) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3)))))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.div_zero Finset.Nonempty.div_zeroₓ'. -/
theorem Nonempty.div_zero (hs : s.Nonempty) : s / 0 = 0 :=
s.div_zero_subset.antisymm <| by simpa [mem_div] using hs
#align finset.nonempty.div_zero Finset.Nonempty.div_zero
-/- warning: finset.nonempty.zero_div -> Finset.Nonempty.zero_div is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : GroupWithZero.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Eq.{succ u1} (Finset.{u1} α) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toHasDiv.{u1} α (GroupWithZero.toDivInvMonoid.{u1} α _inst_3)))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3)))))))) s) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3)))))))))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : GroupWithZero.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Eq.{succ u1} (Finset.{u1} α) (HDiv.hDiv.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHDiv.{u1} (Finset.{u1} α) (Finset.div.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (GroupWithZero.toDiv.{u1} α _inst_3))) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3))))) s) (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_3))))))
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.zero_div Finset.Nonempty.zero_divₓ'. -/
theorem Nonempty.zero_div (hs : s.Nonempty) : 0 / s = 0 :=
s.zero_div_subset.antisymm <| by simpa [mem_div] using hs
#align finset.nonempty.zero_div Finset.Nonempty.zero_div
@@ -1687,12 +1417,6 @@ section Group
variable [Group α] {s t : Finset α} {a b : α}
-/- warning: finset.preimage_mul_left_singleton -> Finset.preimage_mul_left_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a) b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9750 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 x._@.Mathlib.Data.Finset.Pointwise._hyg.9750) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2631 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2633 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2631 x._@.Mathlib.Algebra.Group.Defs._hyg.2633) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9750 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 x._@.Mathlib.Data.Finset.Pointwise._hyg.9750) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
-Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singletonₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_singleton :
preimage {b} ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹ * b} := by
@@ -1700,12 +1424,6 @@ theorem preimage_mul_left_singleton :
#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singleton
#align finset.preimage_add_left_singleton Finset.preimage_add_left_singleton
-/- warning: finset.preimage_mul_right_singleton -> Finset.preimage_mul_right_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b) (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x a) (Function.Injective.injOn.{u1, u1} α α (fun (x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x a) (mul_left_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (RightCancelSemigroup.toIsRightCancelMul.{u1} α (RightCancelMonoid.toRightCancelSemigroup.{u1} α (CancelMonoid.toRightCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) b (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x a) (Function.Injective.injOn.{u1, u1} α α (fun (x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x a) (mul_left_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsRightCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) b (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)))
-Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_right_singleton Finset.preimage_mul_right_singletonₓ'. -/
@[simp, to_additive]
theorem preimage_mul_right_singleton :
preimage {b} (· * a) ((mul_left_injective _).InjOn _) = {b * a⁻¹} := by
@@ -1713,48 +1431,24 @@ theorem preimage_mul_right_singleton :
#align finset.preimage_mul_right_singleton Finset.preimage_mul_right_singleton
#align finset.preimage_add_right_singleton Finset.preimage_add_right_singleton
-/- warning: finset.preimage_mul_left_one -> Finset.preimage_mul_left_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9934 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 x._@.Mathlib.Data.Finset.Pointwise._hyg.9934) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2631 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2633 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2631 x._@.Mathlib.Algebra.Group.Defs._hyg.2633) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9934 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 x._@.Mathlib.Data.Finset.Pointwise._hyg.9934) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
-Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one Finset.preimage_mul_left_oneₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹} :=
by classical rw [← image_mul_left', image_one, mul_one]
#align finset.preimage_mul_left_one Finset.preimage_mul_left_one
#align finset.preimage_add_left_zero Finset.preimage_add_left_zero
-/- warning: finset.preimage_mul_right_one -> Finset.preimage_mul_right_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x b) (Function.Injective.injOn.{u1, u1} α α (fun (x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x b) (mul_left_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (RightCancelSemigroup.toIsRightCancelMul.{u1} α (RightCancelMonoid.toRightCancelSemigroup.{u1} α (CancelMonoid.toRightCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) b) (Set.preimage.{u1, u1} α α (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) b))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x b) (Function.Injective.injOn.{u1, u1} α α (fun (x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x b) (mul_left_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsRightCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) b) (Set.preimage.{u1, u1} α α (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x b) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) b))
-Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_right_one Finset.preimage_mul_right_oneₓ'. -/
@[simp, to_additive]
theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).InjOn _) = {b⁻¹} := by
classical rw [← image_mul_right', image_one, one_mul]
#align finset.preimage_mul_right_one Finset.preimage_mul_right_one
#align finset.preimage_add_right_zero Finset.preimage_add_right_zero
-/- warning: finset.preimage_mul_left_one' -> Finset.preimage_mul_left_one' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10103 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 x._@.Mathlib.Data.Finset.Pointwise._hyg.10103) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2631 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2633 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2631 x._@.Mathlib.Algebra.Group.Defs._hyg.2633) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10103 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 x._@.Mathlib.Data.Finset.Pointwise._hyg.10103) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
-Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one' Finset.preimage_mul_left_one'ₓ'. -/
@[to_additive]
theorem preimage_mul_left_one' : preimage 1 ((· * ·) a⁻¹) ((mul_right_injective _).InjOn _) = {a} :=
by rw [preimage_mul_left_one, inv_inv]
#align finset.preimage_mul_left_one' Finset.preimage_mul_left_one'
#align finset.preimage_add_left_zero' Finset.preimage_add_left_zero'
-/- warning: finset.preimage_mul_right_one' -> Finset.preimage_mul_right_one' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) b)) (Function.Injective.injOn.{u1, u1} α α (fun (x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) b)) (mul_left_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (RightCancelSemigroup.toIsRightCancelMul.{u1} α (RightCancelMonoid.toRightCancelSemigroup.{u1} α (CancelMonoid.toRightCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) b)) (Set.preimage.{u1, u1} α α (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) b)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) b)) (Function.Injective.injOn.{u1, u1} α α (fun (x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) b)) (mul_left_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsRightCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) b)) (Set.preimage.{u1, u1} α α (fun (_x : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) _x (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) b)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b)
-Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_right_one' Finset.preimage_mul_right_one'ₓ'. -/
@[to_additive]
theorem preimage_mul_right_one' : preimage 1 (· * b⁻¹) ((mul_left_injective _).InjOn _) = {b} := by
rw [preimage_mul_right_one, inv_inv]
@@ -1807,24 +1501,12 @@ theorem mem_smul {x : β} : x ∈ s • t ↔ ∃ y z, y ∈ s ∧ z ∈ t ∧ y
#align finset.mem_vadd Finset.mem_vadd
-/
-/- warning: finset.coe_smul -> Finset.coe_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] (s : Finset.{u1} α) (t : Finset.{u2} β), Eq.{succ u2} (Set.{u2} β) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} β) (Set.{u2} β) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (CoeTCₓ.coe.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (Finset.Set.hasCoeT.{u2} β))) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s t)) (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_2) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} β) (Set.{u2} β) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (CoeTCₓ.coe.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (Finset.Set.hasCoeT.{u2} β))) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] (s : Finset.{u2} α) (t : Finset.{u1} β), Eq.{succ u1} (Set.{u1} β) (Finset.toSet.{u1} β (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s t)) (HSMul.hSMul.{u2, u1, u1} (Set.{u2} α) (Set.{u1} β) (Set.{u1} β) (instHSMul.{u2, u1} (Set.{u2} α) (Set.{u1} β) (Set.smul.{u2, u1} α β _inst_2)) (Finset.toSet.{u2} α s) (Finset.toSet.{u1} β t))
-Case conversion may be inaccurate. Consider using '#align finset.coe_smul Finset.coe_smulₓ'. -/
@[simp, norm_cast, to_additive]
theorem coe_smul (s : Finset α) (t : Finset β) : (↑(s • t) : Set β) = (s : Set α) • t :=
coe_image₂ _ _ _
#align finset.coe_smul Finset.coe_smul
#align finset.coe_vadd Finset.coe_vadd
-/- warning: finset.smul_mem_smul -> Finset.smul_mem_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {s : Finset.{u1} α} {t : Finset.{u2} β} {a : α} {b : β}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b t) -> (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) (SMul.smul.{u1, u2} α β _inst_2 a b) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {s : Finset.{u2} α} {t : Finset.{u1} β} {a : α} {b : β}, (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) a s) -> (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b t) -> (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α β β (instHSMul.{u2, u1} α β _inst_2) a b) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s t))
-Case conversion may be inaccurate. Consider using '#align finset.smul_mem_smul Finset.smul_mem_smulₓ'. -/
@[to_additive]
theorem smul_mem_smul : a ∈ s → b ∈ t → a • b ∈ s • t :=
mem_image₂_of_mem
@@ -1847,12 +1529,6 @@ theorem empty_smul (t : Finset β) : (∅ : Finset α) • t = ∅ :=
#align finset.empty_vadd Finset.empty_vadd
-/
-/- warning: finset.smul_empty -> Finset.smul_empty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] (s : Finset.{u1} α), Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β))) (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] (s : Finset.{u2} α), Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s (EmptyCollection.emptyCollection.{u1} (Finset.{u1} β) (Finset.instEmptyCollectionFinset.{u1} β))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} β) (Finset.instEmptyCollectionFinset.{u1} β))
-Case conversion may be inaccurate. Consider using '#align finset.smul_empty Finset.smul_emptyₓ'. -/
@[simp, to_additive]
theorem smul_empty (s : Finset α) : s • (∅ : Finset β) = ∅ :=
image₂_empty_right
@@ -1875,12 +1551,6 @@ theorem smul_nonempty_iff : (s • t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
#align finset.vadd_nonempty_iff Finset.vadd_nonempty_iff
-/
-/- warning: finset.nonempty.smul -> Finset.Nonempty.smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {s : Finset.{u1} α} {t : Finset.{u2} β}, (Finset.Nonempty.{u1} α s) -> (Finset.Nonempty.{u2} β t) -> (Finset.Nonempty.{u2} β (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {s : Finset.{u2} α} {t : Finset.{u1} β}, (Finset.Nonempty.{u2} α s) -> (Finset.Nonempty.{u1} β t) -> (Finset.Nonempty.{u1} β (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s t))
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.smul Finset.Nonempty.smulₓ'. -/
@[to_additive]
theorem Nonempty.smul : s.Nonempty → t.Nonempty → (s • t).Nonempty :=
Nonempty.image₂
@@ -1919,12 +1589,6 @@ theorem singleton_smul_singleton (a : α) (b : β) : ({a} : Finset α) • ({b}
#align finset.singleton_vadd_singleton Finset.singleton_vadd_singleton
-/
-/- warning: finset.smul_subset_smul -> Finset.smul_subset_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t₁ : Finset.{u2} β} {t₂ : Finset.{u2} β}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s₁ s₂) -> (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) t₁ t₂) -> (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₁ t₁) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₂ t₂))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {s₁ : Finset.{u2} α} {s₂ : Finset.{u2} α} {t₁ : Finset.{u1} β} {t₂ : Finset.{u1} β}, (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₁ t₁) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₂ t₂))
-Case conversion may be inaccurate. Consider using '#align finset.smul_subset_smul Finset.smul_subset_smulₓ'. -/
@[to_additive, mono]
theorem smul_subset_smul : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ • t₁ ⊆ s₂ • t₂ :=
image₂_subset
@@ -1939,12 +1603,6 @@ theorem smul_subset_smul_left : t₁ ⊆ t₂ → s • t₁ ⊆ s • t₂ :=
#align finset.vadd_subset_vadd_left Finset.vadd_subset_vadd_left
-/
-/- warning: finset.smul_subset_smul_right -> Finset.smul_subset_smul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u2} β}, (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s₁ s₂) -> (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₁ t) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₂ t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {s₁ : Finset.{u2} α} {s₂ : Finset.{u2} α} {t : Finset.{u1} β}, (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₁ t) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₂ t))
-Case conversion may be inaccurate. Consider using '#align finset.smul_subset_smul_right Finset.smul_subset_smul_rightₓ'. -/
@[to_additive]
theorem smul_subset_smul_right : s₁ ⊆ s₂ → s₁ • t ⊆ s₂ • t :=
image₂_subset_right
@@ -1961,12 +1619,6 @@ theorem smul_subset_iff : s • t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a • b
attribute [mono] vadd_subset_vadd
-/- warning: finset.union_smul -> Finset.union_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u2} β} [_inst_3 : DecidableEq.{succ u1} α], Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) t) (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₁ t) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₂ t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {s₁ : Finset.{u2} α} {s₂ : Finset.{u2} α} {t : Finset.{u1} β} [_inst_3 : DecidableEq.{succ u2} α], Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) t) (Union.union.{u1} (Finset.{u1} β) (Finset.instUnionFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₁ t) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₂ t))
-Case conversion may be inaccurate. Consider using '#align finset.union_smul Finset.union_smulₓ'. -/
@[to_additive]
theorem union_smul [DecidableEq α] : (s₁ ∪ s₂) • t = s₁ • t ∪ s₂ • t :=
image₂_union_left
@@ -1981,12 +1633,6 @@ theorem smul_union : s • (t₁ ∪ t₂) = s • t₁ ∪ s • t₂ :=
#align finset.vadd_union Finset.vadd_union
-/
-/- warning: finset.inter_smul_subset -> Finset.inter_smul_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t : Finset.{u2} β} [_inst_3 : DecidableEq.{succ u1} α], HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) t) (Inter.inter.{u2} (Finset.{u2} β) (Finset.hasInter.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₁ t) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₂ t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {s₁ : Finset.{u2} α} {s₂ : Finset.{u2} α} {t : Finset.{u1} β} [_inst_3 : DecidableEq.{succ u2} α], HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) (Inter.inter.{u2} (Finset.{u2} α) (Finset.instInterFinset.{u2} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) t) (Inter.inter.{u1} (Finset.{u1} β) (Finset.instInterFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₁ t) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₂ t))
-Case conversion may be inaccurate. Consider using '#align finset.inter_smul_subset Finset.inter_smul_subsetₓ'. -/
@[to_additive]
theorem inter_smul_subset [DecidableEq α] : (s₁ ∩ s₂) • t ⊆ s₁ • t ∩ s₂ • t :=
image₂_inter_subset_left
@@ -2001,36 +1647,18 @@ theorem smul_inter_subset : s • (t₁ ∩ t₂) ⊆ s • t₁ ∩ s • t₂
#align finset.vadd_inter_subset Finset.vadd_inter_subset
-/
-/- warning: finset.inter_smul_union_subset_union -> Finset.inter_smul_union_subset_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t₁ : Finset.{u2} β} {t₂ : Finset.{u2} β} [_inst_3 : DecidableEq.{succ u1} α], HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) t₁ t₂)) (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₁ t₁) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₂ t₂))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {s₁ : Finset.{u2} α} {s₂ : Finset.{u2} α} {t₁ : Finset.{u1} β} {t₂ : Finset.{u1} β} [_inst_3 : DecidableEq.{succ u2} α], HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) (Inter.inter.{u2} (Finset.{u2} α) (Finset.instInterFinset.{u2} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) (Union.union.{u1} (Finset.{u1} β) (Finset.instUnionFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) t₁ t₂)) (Union.union.{u1} (Finset.{u1} β) (Finset.instUnionFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₁ t₁) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₂ t₂))
-Case conversion may be inaccurate. Consider using '#align finset.inter_smul_union_subset_union Finset.inter_smul_union_subset_unionₓ'. -/
@[to_additive]
theorem inter_smul_union_subset_union [DecidableEq α] : (s₁ ∩ s₂) • (t₁ ∪ t₂) ⊆ s₁ • t₁ ∪ s₂ • t₂ :=
image₂_inter_union_subset_union
#align finset.inter_smul_union_subset_union Finset.inter_smul_union_subset_union
#align finset.inter_vadd_union_subset_union Finset.inter_vadd_union_subset_union
-/- warning: finset.union_smul_inter_subset_union -> Finset.union_smul_inter_subset_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t₁ : Finset.{u2} β} {t₂ : Finset.{u2} β} [_inst_3 : DecidableEq.{succ u1} α], HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) (Inter.inter.{u2} (Finset.{u2} β) (Finset.hasInter.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) t₁ t₂)) (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₁ t₁) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₂ t₂))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {s₁ : Finset.{u2} α} {s₂ : Finset.{u2} α} {t₁ : Finset.{u1} β} {t₂ : Finset.{u1} β} [_inst_3 : DecidableEq.{succ u2} α], HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) (Inter.inter.{u1} (Finset.{u1} β) (Finset.instInterFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) t₁ t₂)) (Union.union.{u1} (Finset.{u1} β) (Finset.instUnionFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₁ t₁) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₂ t₂))
-Case conversion may be inaccurate. Consider using '#align finset.union_smul_inter_subset_union Finset.union_smul_inter_subset_unionₓ'. -/
@[to_additive]
theorem union_smul_inter_subset_union [DecidableEq α] : (s₁ ∪ s₂) • (t₁ ∩ t₂) ⊆ s₁ • t₁ ∪ s₂ • t₂ :=
image₂_union_inter_subset_union
#align finset.union_smul_inter_subset_union Finset.union_smul_inter_subset_union
#align finset.union_vadd_inter_subset_union Finset.union_vadd_inter_subset_union
-/- warning: finset.subset_smul -> Finset.subset_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {u : Finset.{u2} β} {s : Set.{u1} α} {t : Set.{u2} β}, (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} β) (Set.{u2} β) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (CoeTCₓ.coe.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (Finset.Set.hasCoeT.{u2} β))) u) (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_2) s t)) -> (Exists.{succ u1} (Finset.{u1} α) (fun (s' : Finset.{u1} α) => Exists.{succ u2} (Finset.{u2} β) (fun (t' : Finset.{u2} β) => And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s') s) (And (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} β) (Set.{u2} β) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (CoeTCₓ.coe.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (Finset.Set.hasCoeT.{u2} β))) t') t) (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) u (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s' t'))))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {u : Finset.{u1} β} {s : Set.{u2} α} {t : Set.{u1} β}, (HasSubset.Subset.{u1} (Set.{u1} β) (Set.instHasSubsetSet.{u1} β) (Finset.toSet.{u1} β u) (HSMul.hSMul.{u2, u1, u1} (Set.{u2} α) (Set.{u1} β) (Set.{u1} β) (instHSMul.{u2, u1} (Set.{u2} α) (Set.{u1} β) (Set.smul.{u2, u1} α β _inst_2)) s t)) -> (Exists.{succ u2} (Finset.{u2} α) (fun (s' : Finset.{u2} α) => Exists.{succ u1} (Finset.{u1} β) (fun (t' : Finset.{u1} β) => And (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (Finset.toSet.{u2} α s') s) (And (HasSubset.Subset.{u1} (Set.{u1} β) (Set.instHasSubsetSet.{u1} β) (Finset.toSet.{u1} β t') t) (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) u (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s' t'))))))
-Case conversion may be inaccurate. Consider using '#align finset.subset_smul Finset.subset_smulₓ'. -/
/-- If a finset `u` is contained in the scalar product of two sets `s • t`, we can find two finsets
`s'`, `t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' • t'`. -/
@[to_additive
@@ -2052,12 +1680,6 @@ variable [DecidableEq α] [VSub α β] {s s₁ s₂ t t₁ t₂ : Finset β} {u
include α
-/- warning: finset.has_vsub -> Finset.vsub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β], VSub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VSub.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u1} α], VSub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β)
-Case conversion may be inaccurate. Consider using '#align finset.has_vsub Finset.vsubₓ'. -/
/-- The pointwise product of two finsets `s` and `t`: `s -ᵥ t = {x -ᵥ y | x ∈ s, y ∈ t}`. -/
protected def vsub : VSub (Finset α) (Finset β) :=
⟨image₂ (· -ᵥ ·)⟩
@@ -2065,211 +1687,91 @@ protected def vsub : VSub (Finset α) (Finset β) :=
scoped[Pointwise] attribute [instance] Finset.vsub
-/- warning: finset.vsub_def -> Finset.vsub_def is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12093 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12095 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12093 x._@.Mathlib.Data.Finset.Pointwise._hyg.12095) s t)
-Case conversion may be inaccurate. Consider using '#align finset.vsub_def Finset.vsub_defₓ'. -/
theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
rfl
#align finset.vsub_def Finset.vsub_def
-/- warning: finset.image_vsub_product -> Finset.image_vsub_product is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12145 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12147 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12145 x._@.Mathlib.Data.Finset.Pointwise._hyg.12147) s t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)
-Case conversion may be inaccurate. Consider using '#align finset.image_vsub_product Finset.image_vsub_productₓ'. -/
@[simp]
theorem image_vsub_product : image₂ (· -ᵥ ·) s t = s -ᵥ t :=
rfl
#align finset.image_vsub_product Finset.image_vsub_product
-/- warning: finset.mem_vsub -> Finset.mem_vsub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, Iff (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (Exists.{succ u2} β (fun (b : β) => Exists.{succ u2} β (fun (c : β) => And (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) (And (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) c t) (Eq.{succ u1} α (VSub.vsub.{u1, u2} α β _inst_2 b c) a)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β} {a : α}, Iff (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) a (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)) (Exists.{succ u1} β (fun (b : β) => Exists.{succ u1} β (fun (c : β) => And (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s) (And (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) c t) (Eq.{succ u2} α (VSub.vsub.{u2, u1} α β _inst_1 b c) a)))))
-Case conversion may be inaccurate. Consider using '#align finset.mem_vsub Finset.mem_vsubₓ'. -/
theorem mem_vsub : a ∈ s -ᵥ t ↔ ∃ b c, b ∈ s ∧ c ∈ t ∧ b -ᵥ c = a :=
mem_image₂
#align finset.mem_vsub Finset.mem_vsub
-/- warning: finset.coe_vsub -> Finset.coe_vsub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] (s : Finset.{u2} β) (t : Finset.{u2} β), Eq.{succ u1} (Set.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (VSub.vsub.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.vsub.{u1, u2} α β _inst_2) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} β) (Set.{u2} β) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (CoeTCₓ.coe.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (Finset.Set.hasCoeT.{u2} β))) s) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} β) (Set.{u2} β) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (CoeTCₓ.coe.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (Finset.Set.hasCoeT.{u2} β))) t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VSub.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u2} β) (t : Finset.{u2} β), Eq.{succ u1} (Set.{u1} α) (Finset.toSet.{u1} α (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)) (VSub.vsub.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.vsub.{u1, u2} α β _inst_1) (Finset.toSet.{u2} β s) (Finset.toSet.{u2} β t))
-Case conversion may be inaccurate. Consider using '#align finset.coe_vsub Finset.coe_vsubₓ'. -/
@[simp, norm_cast]
theorem coe_vsub (s t : Finset β) : (↑(s -ᵥ t) : Set α) = (s : Set β) -ᵥ t :=
coe_image₂ _ _ _
#align finset.coe_vsub Finset.coe_vsub
-/- warning: finset.vsub_mem_vsub -> Finset.vsub_mem_vsub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β} {b : β} {c : β}, (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s) -> (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) c t) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (VSub.vsub.{u1, u2} α β _inst_2 b c) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VSub.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u1} α] {s : Finset.{u2} β} {t : Finset.{u2} β} {b : β} {c : β}, (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b s) -> (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) c t) -> (Membership.mem.{u1, u1} α (Finset.{u1} α) (Finset.instMembershipFinset.{u1} α) (VSub.vsub.{u1, u2} α β _inst_1 b c) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t))
-Case conversion may be inaccurate. Consider using '#align finset.vsub_mem_vsub Finset.vsub_mem_vsubₓ'. -/
theorem vsub_mem_vsub : b ∈ s → c ∈ t → b -ᵥ c ∈ s -ᵥ t :=
mem_image₂_of_mem
#align finset.vsub_mem_vsub Finset.vsub_mem_vsub
-/- warning: finset.vsub_card_le -> Finset.vsub_card_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat Nat.hasMul) (Finset.card.{u2} β s) (Finset.card.{u2} β t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, LE.le.{0} Nat instLENat (Finset.card.{u2} α (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)) (HMul.hMul.{0, 0, 0} Nat Nat Nat (instHMul.{0} Nat instMulNat) (Finset.card.{u1} β s) (Finset.card.{u1} β t))
-Case conversion may be inaccurate. Consider using '#align finset.vsub_card_le Finset.vsub_card_leₓ'. -/
theorem vsub_card_le : (s -ᵥ t : Finset α).card ≤ s.card * t.card :=
card_image₂_le _ _ _
#align finset.vsub_card_le Finset.vsub_card_le
-/- warning: finset.empty_vsub -> Finset.empty_vsub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] (t : Finset.{u2} β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β)) t) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VSub.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u1} α] (t : Finset.{u2} β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.instEmptyCollectionFinset.{u2} β)) t) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))
-Case conversion may be inaccurate. Consider using '#align finset.empty_vsub Finset.empty_vsubₓ'. -/
@[simp]
theorem empty_vsub (t : Finset β) : (∅ : Finset β) -ᵥ t = ∅ :=
image₂_empty_left
#align finset.empty_vsub Finset.empty_vsub
-/- warning: finset.vsub_empty -> Finset.vsub_empty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] (s : Finset.{u2} β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VSub.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u2} β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.instEmptyCollectionFinset.{u2} β))) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.instEmptyCollectionFinset.{u1} α))
-Case conversion may be inaccurate. Consider using '#align finset.vsub_empty Finset.vsub_emptyₓ'. -/
@[simp]
theorem vsub_empty (s : Finset β) : s -ᵥ (∅ : Finset β) = ∅ :=
image₂_empty_right
#align finset.vsub_empty Finset.vsub_empty
-/- warning: finset.vsub_eq_empty -> Finset.vsub_eq_empty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Iff (Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) (EmptyCollection.emptyCollection.{u1} (Finset.{u1} α) (Finset.hasEmptyc.{u1} α))) (Or (Eq.{succ u2} (Finset.{u2} β) s (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β))) (Eq.{succ u2} (Finset.{u2} β) t (EmptyCollection.emptyCollection.{u2} (Finset.{u2} β) (Finset.hasEmptyc.{u2} β))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Iff (Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (EmptyCollection.emptyCollection.{u2} (Finset.{u2} α) (Finset.instEmptyCollectionFinset.{u2} α))) (Or (Eq.{succ u1} (Finset.{u1} β) s (EmptyCollection.emptyCollection.{u1} (Finset.{u1} β) (Finset.instEmptyCollectionFinset.{u1} β))) (Eq.{succ u1} (Finset.{u1} β) t (EmptyCollection.emptyCollection.{u1} (Finset.{u1} β) (Finset.instEmptyCollectionFinset.{u1} β))))
-Case conversion may be inaccurate. Consider using '#align finset.vsub_eq_empty Finset.vsub_eq_emptyₓ'. -/
@[simp]
theorem vsub_eq_empty : s -ᵥ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
image₂_eq_empty_iff
#align finset.vsub_eq_empty Finset.vsub_eq_empty
-/- warning: finset.vsub_nonempty -> Finset.vsub_nonempty is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Iff (Finset.Nonempty.{u1} α (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) (And (Finset.Nonempty.{u2} β s) (Finset.Nonempty.{u2} β t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Iff (Finset.Nonempty.{u2} α (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)) (And (Finset.Nonempty.{u1} β s) (Finset.Nonempty.{u1} β t))
-Case conversion may be inaccurate. Consider using '#align finset.vsub_nonempty Finset.vsub_nonemptyₓ'. -/
@[simp]
theorem vsub_nonempty : (s -ᵥ t : Finset α).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.vsub_nonempty Finset.vsub_nonempty
-/- warning: finset.nonempty.vsub -> Finset.Nonempty.vsub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (Finset.Nonempty.{u2} β t) -> (Finset.Nonempty.{u1} α (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VSub.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u1} α] {s : Finset.{u2} β} {t : Finset.{u2} β}, (Finset.Nonempty.{u2} β s) -> (Finset.Nonempty.{u2} β t) -> (Finset.Nonempty.{u1} α (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t))
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.vsub Finset.Nonempty.vsubₓ'. -/
theorem Nonempty.vsub : s.Nonempty → t.Nonempty → (s -ᵥ t : Finset α).Nonempty :=
Nonempty.image₂
#align finset.nonempty.vsub Finset.Nonempty.vsub
-/- warning: finset.nonempty.of_vsub_left -> Finset.Nonempty.of_vsub_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, (Finset.Nonempty.{u1} α (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) -> (Finset.Nonempty.{u2} β s)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, (Finset.Nonempty.{u2} α (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)) -> (Finset.Nonempty.{u1} β s)
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.of_vsub_left Finset.Nonempty.of_vsub_leftₓ'. -/
theorem Nonempty.of_vsub_left : (s -ᵥ t : Finset α).Nonempty → s.Nonempty :=
Nonempty.of_image₂_left
#align finset.nonempty.of_vsub_left Finset.Nonempty.of_vsub_left
-/- warning: finset.nonempty.of_vsub_right -> Finset.Nonempty.of_vsub_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, (Finset.Nonempty.{u1} α (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)) -> (Finset.Nonempty.{u2} β t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, (Finset.Nonempty.{u2} α (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)) -> (Finset.Nonempty.{u1} β t)
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.of_vsub_right Finset.Nonempty.of_vsub_rightₓ'. -/
theorem Nonempty.of_vsub_right : (s -ᵥ t : Finset α).Nonempty → t.Nonempty :=
Nonempty.of_image₂_right
#align finset.nonempty.of_vsub_right Finset.Nonempty.of_vsub_right
-/- warning: finset.vsub_singleton -> Finset.vsub_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} (b : β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) b)) (Finset.image.{u2, u1} β α (fun (a : α) (b : α) => _inst_1 a b) (fun (_x : β) => VSub.vsub.{u1, u2} α β _inst_2 _x b) s)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} (b : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) b)) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) (fun (_x : β) => VSub.vsub.{u2, u1} α β _inst_1 _x b) s)
-Case conversion may be inaccurate. Consider using '#align finset.vsub_singleton Finset.vsub_singletonₓ'. -/
@[simp]
theorem vsub_singleton (b : β) : s -ᵥ ({b} : Finset β) = s.image (· -ᵥ b) :=
image₂_singleton_right
#align finset.vsub_singleton Finset.vsub_singleton
-/- warning: finset.singleton_vsub -> Finset.singleton_vsub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {t : Finset.{u2} β} (a : β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) a) t) (Finset.image.{u2, u1} β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2 a) t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {t : Finset.{u1} β} (a : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) t) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12882 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12884 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12882 x._@.Mathlib.Data.Finset.Pointwise._hyg.12884) a) t)
-Case conversion may be inaccurate. Consider using '#align finset.singleton_vsub Finset.singleton_vsubₓ'. -/
theorem singleton_vsub (a : β) : ({a} : Finset β) -ᵥ t = t.image ((· -ᵥ ·) a) :=
image₂_singleton_left
#align finset.singleton_vsub Finset.singleton_vsub
-/- warning: finset.singleton_vsub_singleton -> Finset.singleton_vsub_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] (a : β) (b : β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) a) (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) b)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (VSub.vsub.{u1, u2} α β _inst_2 a b))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] (a : β) (b : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) b)) (Singleton.singleton.{u2, u2} α (Finset.{u2} α) (Finset.instSingletonFinset.{u2} α) (VSub.vsub.{u2, u1} α β _inst_1 a b))
-Case conversion may be inaccurate. Consider using '#align finset.singleton_vsub_singleton Finset.singleton_vsub_singletonₓ'. -/
@[simp]
theorem singleton_vsub_singleton (a b : β) : ({a} : Finset β) -ᵥ {b} = {a -ᵥ b} :=
image₂_singleton
#align finset.singleton_vsub_singleton Finset.singleton_vsub_singleton
-/- warning: finset.vsub_subset_vsub -> Finset.vsub_subset_vsub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {t₁ : Finset.{u2} β} {t₂ : Finset.{u2} β}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) s₁ s₂) -> (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s₁ t₁) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s₂ t₂))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VSub.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u1} α] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {t₁ : Finset.{u2} β} {t₂ : Finset.{u2} β}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) s₁ s₂) -> (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s₁ t₁) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s₂ t₂))
-Case conversion may be inaccurate. Consider using '#align finset.vsub_subset_vsub Finset.vsub_subset_vsubₓ'. -/
@[mono]
theorem vsub_subset_vsub : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ -ᵥ t₁ ⊆ s₂ -ᵥ t₂ :=
image₂_subset
#align finset.vsub_subset_vsub Finset.vsub_subset_vsub
-/- warning: finset.vsub_subset_vsub_left -> Finset.vsub_subset_vsub_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t₁ : Finset.{u2} β} {t₂ : Finset.{u2} β}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t₁) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t₂))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VSub.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u1} α] {s : Finset.{u2} β} {t₁ : Finset.{u2} β} {t₂ : Finset.{u2} β}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) t₁ t₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t₁) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t₂))
-Case conversion may be inaccurate. Consider using '#align finset.vsub_subset_vsub_left Finset.vsub_subset_vsub_leftₓ'. -/
theorem vsub_subset_vsub_left : t₁ ⊆ t₂ → s -ᵥ t₁ ⊆ s -ᵥ t₂ :=
image₂_subset_left
#align finset.vsub_subset_vsub_left Finset.vsub_subset_vsub_left
-/- warning: finset.vsub_subset_vsub_right -> Finset.vsub_subset_vsub_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {t : Finset.{u2} β}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s₁ t) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s₂ t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VSub.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u1} α] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {t : Finset.{u2} β}, (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) s₁ s₂) -> (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s₁ t) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s₂ t))
-Case conversion may be inaccurate. Consider using '#align finset.vsub_subset_vsub_right Finset.vsub_subset_vsub_rightₓ'. -/
theorem vsub_subset_vsub_right : s₁ ⊆ s₂ → s₁ -ᵥ t ⊆ s₂ -ᵥ t :=
image₂_subset_right
#align finset.vsub_subset_vsub_right Finset.vsub_subset_vsub_right
-/- warning: finset.vsub_subset_iff -> Finset.vsub_subset_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β} {u : Finset.{u1} α}, Iff (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) u) (forall (x : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) x s) -> (forall (y : β), (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) y t) -> (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) (VSub.vsub.{u1, u2} α β _inst_2 x y) u)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β} {u : Finset.{u2} α}, Iff (HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) u) (forall (x : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) x s) -> (forall (y : β), (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) y t) -> (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) (VSub.vsub.{u2, u1} α β _inst_1 x y) u)))
-Case conversion may be inaccurate. Consider using '#align finset.vsub_subset_iff Finset.vsub_subset_iffₓ'. -/
theorem vsub_subset_iff : s -ᵥ t ⊆ u ↔ ∀ x ∈ s, ∀ y ∈ t, x -ᵥ y ∈ u :=
image₂_subset_iff
#align finset.vsub_subset_iff Finset.vsub_subset_iff
@@ -2278,54 +1780,24 @@ section
variable [DecidableEq β]
-/- warning: finset.union_vsub -> Finset.union_vsub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {t : Finset.{u2} β} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) t) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s₁ t) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s₂ t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s₁ : Finset.{u1} β} {s₂ : Finset.{u1} β} {t : Finset.{u1} β} [_inst_3 : DecidableEq.{succ u1} β], Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Union.union.{u1} (Finset.{u1} β) (Finset.instUnionFinset.{u1} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) t) (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s₁ t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s₂ t))
-Case conversion may be inaccurate. Consider using '#align finset.union_vsub Finset.union_vsubₓ'. -/
theorem union_vsub : s₁ ∪ s₂ -ᵥ t = s₁ -ᵥ t ∪ (s₂ -ᵥ t) :=
image₂_union_left
#align finset.union_vsub Finset.union_vsub
-/- warning: finset.vsub_union -> Finset.vsub_union is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t₁ : Finset.{u2} β} {t₂ : Finset.{u2} β} [_inst_3 : DecidableEq.{succ u2} β], Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) t₁ t₂)) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t₁) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t₂))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t₁ : Finset.{u1} β} {t₂ : Finset.{u1} β} [_inst_3 : DecidableEq.{succ u1} β], Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s (Union.union.{u1} (Finset.{u1} β) (Finset.instUnionFinset.{u1} β (fun (a : β) (b : β) => _inst_3 a b)) t₁ t₂)) (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t₁) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t₂))
-Case conversion may be inaccurate. Consider using '#align finset.vsub_union Finset.vsub_unionₓ'. -/
theorem vsub_union : s -ᵥ (t₁ ∪ t₂) = s -ᵥ t₁ ∪ (s -ᵥ t₂) :=
image₂_union_right
#align finset.vsub_union Finset.vsub_union
-/- warning: finset.inter_vsub_subset -> Finset.inter_vsub_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s₁ : Finset.{u2} β} {s₂ : Finset.{u2} β} {t : Finset.{u2} β} [_inst_3 : DecidableEq.{succ u2} β], HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Inter.inter.{u2} (Finset.{u2} β) (Finset.hasInter.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) t) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s₁ t) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s₂ t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s₁ : Finset.{u1} β} {s₂ : Finset.{u1} β} {t : Finset.{u1} β} [_inst_3 : DecidableEq.{succ u1} β], HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Inter.inter.{u1} (Finset.{u1} β) (Finset.instInterFinset.{u1} β (fun (a : β) (b : β) => _inst_3 a b)) s₁ s₂) t) (Inter.inter.{u2} (Finset.{u2} α) (Finset.instInterFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s₁ t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s₂ t))
-Case conversion may be inaccurate. Consider using '#align finset.inter_vsub_subset Finset.inter_vsub_subsetₓ'. -/
theorem inter_vsub_subset : s₁ ∩ s₂ -ᵥ t ⊆ (s₁ -ᵥ t) ∩ (s₂ -ᵥ t) :=
image₂_inter_subset_left
#align finset.inter_vsub_subset Finset.inter_vsub_subset
-/- warning: finset.vsub_inter_subset -> Finset.vsub_inter_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t₁ : Finset.{u2} β} {t₂ : Finset.{u2} β} [_inst_3 : DecidableEq.{succ u2} β], HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s (Inter.inter.{u2} (Finset.{u2} β) (Finset.hasInter.{u2} β (fun (a : β) (b : β) => _inst_3 a b)) t₁ t₂)) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t₁) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t₂))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t₁ : Finset.{u1} β} {t₂ : Finset.{u1} β} [_inst_3 : DecidableEq.{succ u1} β], HasSubset.Subset.{u2} (Finset.{u2} α) (Finset.instHasSubsetFinset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s (Inter.inter.{u1} (Finset.{u1} β) (Finset.instInterFinset.{u1} β (fun (a : β) (b : β) => _inst_3 a b)) t₁ t₂)) (Inter.inter.{u2} (Finset.{u2} α) (Finset.instInterFinset.{u2} α (fun (a : α) (b : α) => _inst_2 a b)) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t₁) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t₂))
-Case conversion may be inaccurate. Consider using '#align finset.vsub_inter_subset Finset.vsub_inter_subsetₓ'. -/
theorem vsub_inter_subset : s -ᵥ t₁ ∩ t₂ ⊆ (s -ᵥ t₁) ∩ (s -ᵥ t₂) :=
image₂_inter_subset_right
#align finset.vsub_inter_subset Finset.vsub_inter_subset
end
-/- warning: finset.subset_vsub -> Finset.subset_vsub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {u : Finset.{u1} α} {s : Set.{u2} β} {t : Set.{u2} β}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) u) (VSub.vsub.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.vsub.{u1, u2} α β _inst_2) s t)) -> (Exists.{succ u2} (Finset.{u2} β) (fun (s' : Finset.{u2} β) => Exists.{succ u2} (Finset.{u2} β) (fun (t' : Finset.{u2} β) => And (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} β) (Set.{u2} β) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (CoeTCₓ.coe.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (Finset.Set.hasCoeT.{u2} β))) s') s) (And (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} β) (Set.{u2} β) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (CoeTCₓ.coe.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (Finset.Set.hasCoeT.{u2} β))) t') t) (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) u (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s' t'))))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : VSub.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u1} α] {u : Finset.{u1} α} {s : Set.{u2} β} {t : Set.{u2} β}, (HasSubset.Subset.{u1} (Set.{u1} α) (Set.instHasSubsetSet.{u1} α) (Finset.toSet.{u1} α u) (VSub.vsub.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.vsub.{u1, u2} α β _inst_1) s t)) -> (Exists.{succ u2} (Finset.{u2} β) (fun (s' : Finset.{u2} β) => Exists.{succ u2} (Finset.{u2} β) (fun (t' : Finset.{u2} β) => And (HasSubset.Subset.{u2} (Set.{u2} β) (Set.instHasSubsetSet.{u2} β) (Finset.toSet.{u2} β s') s) (And (HasSubset.Subset.{u2} (Set.{u2} β) (Set.instHasSubsetSet.{u2} β) (Finset.toSet.{u2} β t') t) (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) u (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s' t'))))))
-Case conversion may be inaccurate. Consider using '#align finset.subset_vsub Finset.subset_vsubₓ'. -/
/-- If a finset `u` is contained in the pointwise subtraction of two sets `s -ᵥ t`, we can find two
finsets `s'`, `t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' -ᵥ t'`. -/
theorem subset_vsub {s t : Set β} :
@@ -2477,24 +1949,12 @@ theorem smul_finset_inter_subset : a • (s₁ ∩ s₂) ⊆ a • s₁ ∩ a
#align finset.vadd_finset_inter_subset Finset.vadd_finset_inter_subset
-/
-/- warning: finset.smul_finset_subset_smul -> Finset.smul_finset_subset_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {t : Finset.{u2} β} {a : α} {s : Finset.{u1} α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) a t) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {t : Finset.{u1} β} {a : α} {s : Finset.{u2} α}, (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) a s) -> (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) a t) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s t))
-Case conversion may be inaccurate. Consider using '#align finset.smul_finset_subset_smul Finset.smul_finset_subset_smulₓ'. -/
@[to_additive]
theorem smul_finset_subset_smul {s : Finset α} : a ∈ s → a • t ⊆ s • t :=
image_subset_image₂_right
#align finset.smul_finset_subset_smul Finset.smul_finset_subset_smul
#align finset.vadd_finset_subset_vadd Finset.vadd_finset_subset_vadd
-/- warning: finset.bUnion_smul_finset -> Finset.biUnion_smul_finset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] (s : Finset.{u1} α) (t : Finset.{u2} β), Eq.{succ u2} (Finset.{u2} β) (Finset.biUnion.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) s (fun (_x : α) => SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) _x t)) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s t)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] (s : Finset.{u2} α) (t : Finset.{u1} β), Eq.{succ u1} (Finset.{u1} β) (Finset.biUnion.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) s (fun (_x : α) => HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) _x t)) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s t)
-Case conversion may be inaccurate. Consider using '#align finset.bUnion_smul_finset Finset.biUnion_smul_finsetₓ'. -/
@[simp, to_additive]
theorem biUnion_smul_finset (s : Finset α) (t : Finset β) : s.biUnion (· • t) = s • t :=
biUnion_image_left
@@ -2660,12 +2120,6 @@ section SMul
variable [DecidableEq β] [DecidableEq γ] [SMul αᵐᵒᵖ β] [SMul β γ] [SMul α γ]
-/- warning: finset.op_smul_finset_smul_eq_smul_smul_finset -> Finset.op_smul_finset_smul_eq_smul_smul_finset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : DecidableEq.{succ u3} γ] [_inst_3 : SMul.{u1, u2} (MulOpposite.{u1} α) β] [_inst_4 : SMul.{u2, u3} β γ] [_inst_5 : SMul.{u1, u3} α γ] (a : α) (s : Finset.{u2} β) (t : Finset.{u3} γ), (forall (a : α) (b : β) (c : γ), Eq.{succ u3} γ (SMul.smul.{u2, u3} β γ _inst_4 (SMul.smul.{u1, u2} (MulOpposite.{u1} α) β _inst_3 (MulOpposite.op.{u1} α a) b) c) (SMul.smul.{u2, u3} β γ _inst_4 b (SMul.smul.{u1, u3} α γ _inst_5 a c))) -> (Eq.{succ u3} (Finset.{u3} γ) (SMul.smul.{u2, u3} (Finset.{u2} β) (Finset.{u3} γ) (Finset.smul.{u2, u3} β γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4) (SMul.smul.{u1, u2} (MulOpposite.{u1} α) (Finset.{u2} β) (Finset.smulFinset.{u1, u2} (MulOpposite.{u1} α) β (fun (a : β) (b : β) => _inst_1 a b) _inst_3) (MulOpposite.op.{u1} α a) s) t) (SMul.smul.{u2, u3} (Finset.{u2} β) (Finset.{u3} γ) (Finset.smul.{u2, u3} β γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4) s (SMul.smul.{u1, u3} α (Finset.{u3} γ) (Finset.smulFinset.{u1, u3} α γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_5) a t)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : DecidableEq.{succ u3} β] [_inst_2 : DecidableEq.{succ u2} γ] [_inst_3 : SMul.{u1, u3} (MulOpposite.{u1} α) β] [_inst_4 : SMul.{u3, u2} β γ] [_inst_5 : SMul.{u1, u2} α γ] (a : α) (s : Finset.{u3} β) (t : Finset.{u2} γ), (forall (a : α) (b : β) (c : γ), Eq.{succ u2} γ (HSMul.hSMul.{u3, u2, u2} β γ γ (instHSMul.{u3, u2} β γ _inst_4) (HSMul.hSMul.{u1, u3, u3} (MulOpposite.{u1} α) β β (instHSMul.{u1, u3} (MulOpposite.{u1} α) β _inst_3) (MulOpposite.op.{u1} α a) b) c) (HSMul.hSMul.{u3, u2, u2} β γ γ (instHSMul.{u3, u2} β γ _inst_4) b (HSMul.hSMul.{u1, u2, u2} α γ γ (instHSMul.{u1, u2} α γ _inst_5) a c))) -> (Eq.{succ u2} (Finset.{u2} γ) (HSMul.hSMul.{u3, u2, u2} (Finset.{u3} β) (Finset.{u2} γ) (Finset.{u2} γ) (instHSMul.{u3, u2} (Finset.{u3} β) (Finset.{u2} γ) (Finset.smul.{u3, u2} β γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4)) (HSMul.hSMul.{u1, u3, u3} (MulOpposite.{u1} α) (Finset.{u3} β) (Finset.{u3} β) (instHSMul.{u1, u3} (MulOpposite.{u1} α) (Finset.{u3} β) (Finset.smulFinset.{u1, u3} (MulOpposite.{u1} α) β (fun (a : β) (b : β) => _inst_1 a b) _inst_3)) (MulOpposite.op.{u1} α a) s) t) (HSMul.hSMul.{u3, u2, u2} (Finset.{u3} β) (Finset.{u2} γ) (Finset.{u2} γ) (instHSMul.{u3, u2} (Finset.{u3} β) (Finset.{u2} γ) (Finset.smul.{u3, u2} β γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4)) s (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} γ) (Finset.{u2} γ) (instHSMul.{u1, u2} α (Finset.{u2} γ) (Finset.smulFinset.{u1, u2} α γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_5)) a t)))
-Case conversion may be inaccurate. Consider using '#align finset.op_smul_finset_smul_eq_smul_smul_finset Finset.op_smul_finset_smul_eq_smul_smul_finsetₓ'. -/
-- TODO: replace hypothesis and conclusion with a typeclass
@[to_additive]
theorem op_smul_finset_smul_eq_smul_smul_finset (a : α) (s : Finset β) (t : Finset γ)
@@ -2718,12 +2172,6 @@ section Semigroup
variable [Semigroup α] [DecidableEq α]
-/- warning: finset.op_smul_finset_mul_eq_mul_smul_finset -> Finset.op_smul_finset_mul_eq_mul_smul_finset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : Semigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α _inst_1))) (SMul.smul.{u1, u1} (MulOpposite.{u1} α) (Finset.{u1} α) (Finset.smulFinset.{u1, u1} (MulOpposite.{u1} α) α (fun (a : α) (b : α) => _inst_2 a b) (Mul.toHasOppositeSMul.{u1} α (Semigroup.toHasMul.{u1} α _inst_1))) (MulOpposite.op.{u1} α a) s) t) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α _inst_1))) s (SMul.smul.{u1, u1} α (Finset.{u1} α) (Finset.smulFinset.{u1, u1} α α (fun (a : α) (b : α) => _inst_2 a b) (Mul.toSMul.{u1} α (Semigroup.toHasMul.{u1} α _inst_1))) a t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Semigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α _inst_1))) (HSMul.hSMul.{u1, u1, u1} (MulOpposite.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHSMul.{u1, u1} (MulOpposite.{u1} α) (Finset.{u1} α) (Finset.smulFinset.{u1, u1} (MulOpposite.{u1} α) α (fun (a : α) (b : α) => _inst_2 a b) (Mul.toHasOppositeSMul.{u1} α (Semigroup.toMul.{u1} α _inst_1)))) (MulOpposite.op.{u1} α a) s) t) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α _inst_1))) s (HSMul.hSMul.{u1, u1, u1} α (Finset.{u1} α) (Finset.{u1} α) (instHSMul.{u1, u1} α (Finset.{u1} α) (Finset.smulFinset.{u1, u1} α α (fun (a : α) (b : α) => _inst_2 a b) (Mul.toSMul.{u1} α (Semigroup.toMul.{u1} α _inst_1)))) a t))
-Case conversion may be inaccurate. Consider using '#align finset.op_smul_finset_mul_eq_mul_smul_finset Finset.op_smul_finset_mul_eq_mul_smul_finsetₓ'. -/
@[to_additive]
theorem op_smul_finset_mul_eq_mul_smul_finset (a : α) (s : Finset α) (t : Finset α) :
op a • s * t = s * a • t :=
@@ -2737,12 +2185,6 @@ section LeftCancelSemigroup
variable [LeftCancelSemigroup α] [DecidableEq α] (s t : Finset α) (a : α)
-/- warning: finset.pairwise_disjoint_smul_iff -> Finset.pairwiseDisjoint_smul_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LeftCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {s : Set.{u1} α} {t : Finset.{u1} α}, Iff (Set.PairwiseDisjoint.{u1, u1} (Finset.{u1} α) α (Finset.partialOrder.{u1} α) (Finset.orderBot.{u1} α) s (fun (_x : α) => SMul.smul.{u1, u1} α (Finset.{u1} α) (Finset.smulFinset.{u1, u1} α α (fun (a : α) (b : α) => _inst_2 a b) (Mul.toSMul.{u1} α (Semigroup.toHasMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1)))) _x t)) (Set.InjOn.{u1, u1} (Prod.{u1, u1} α α) α (fun (p : Prod.{u1, u1} α α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Semigroup.toHasMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1))) (Prod.fst.{u1, u1} α α p) (Prod.snd.{u1, u1} α α p)) (Set.prod.{u1, u1} α α s ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LeftCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] {s : Set.{u1} α} {t : Finset.{u1} α}, Iff (Set.PairwiseDisjoint.{u1, u1} (Finset.{u1} α) α (Finset.partialOrder.{u1} α) (Finset.instOrderBotFinsetToLEToPreorderPartialOrder.{u1} α) s (fun (_x : α) => HSMul.hSMul.{u1, u1, u1} α (Finset.{u1} α) (Finset.{u1} α) (instHSMul.{u1, u1} α (Finset.{u1} α) (Finset.smulFinset.{u1, u1} α α (fun (a : α) (b : α) => _inst_2 a b) (Mul.toSMul.{u1} α (Semigroup.toMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1))))) _x t)) (Set.InjOn.{u1, u1} (Prod.{u1, u1} α α) α (fun (p : Prod.{u1, u1} α α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (Semigroup.toMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1))) (Prod.fst.{u1, u1} α α p) (Prod.snd.{u1, u1} α α p)) (Set.prod.{u1, u1} α α s (Finset.toSet.{u1} α t)))
-Case conversion may be inaccurate. Consider using '#align finset.pairwise_disjoint_smul_iff Finset.pairwiseDisjoint_smul_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[to_additive]
theorem pairwiseDisjoint_smul_iff {s : Set α} {t : Finset α} :
@@ -2751,36 +2193,18 @@ theorem pairwiseDisjoint_smul_iff {s : Set α} {t : Finset α} :
#align finset.pairwise_disjoint_smul_iff Finset.pairwiseDisjoint_smul_iff
#align finset.pairwise_disjoint_vadd_iff Finset.pairwiseDisjoint_vadd_iff
-/- warning: finset.card_singleton_mul -> Finset.card_singleton_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LeftCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (t : Finset.{u1} α) (a : α), Eq.{1} Nat (Finset.card.{u1} α (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) t)) (Finset.card.{u1} α t)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LeftCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (t : Finset.{u1} α) (a : α), Eq.{1} Nat (Finset.card.{u1} α (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) t)) (Finset.card.{u1} α t)
-Case conversion may be inaccurate. Consider using '#align finset.card_singleton_mul Finset.card_singleton_mulₓ'. -/
@[simp, to_additive]
theorem card_singleton_mul : ({a} * t).card = t.card :=
card_image₂_singleton_left _ <| mul_right_injective _
#align finset.card_singleton_mul Finset.card_singleton_mul
#align finset.card_singleton_add Finset.card_singleton_add
-/- warning: finset.singleton_mul_inter -> Finset.singleton_mul_inter is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LeftCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (a : α), Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) s) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a) t))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LeftCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (a : α), Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t)) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) s) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1)))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a) t))
-Case conversion may be inaccurate. Consider using '#align finset.singleton_mul_inter Finset.singleton_mul_interₓ'. -/
@[to_additive]
theorem singleton_mul_inter : {a} * (s ∩ t) = {a} * s ∩ ({a} * t) :=
image₂_singleton_inter _ _ <| mul_right_injective _
#align finset.singleton_mul_inter Finset.singleton_mul_inter
#align finset.singleton_add_inter Finset.singleton_add_inter
-/- warning: finset.card_le_card_mul_left -> Finset.card_le_card_mul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : LeftCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (t : Finset.{u1} α) {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α t) (Finset.card.{u1} α (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1)))) s t)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : LeftCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (t : Finset.{u1} α) {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (LE.le.{0} Nat instLENat (Finset.card.{u1} α t) (Finset.card.{u1} α (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α (LeftCancelSemigroup.toSemigroup.{u1} α _inst_1)))) s t)))
-Case conversion may be inaccurate. Consider using '#align finset.card_le_card_mul_left Finset.card_le_card_mul_leftₓ'. -/
@[to_additive]
theorem card_le_card_mul_left {s : Finset α} (hs : s.Nonempty) : t.card ≤ (s * t).card :=
card_le_card_image₂_left _ hs mul_right_injective
@@ -2793,36 +2217,18 @@ section
variable [RightCancelSemigroup α] [DecidableEq α] (s t : Finset α) (a : α)
-/- warning: finset.card_mul_singleton -> Finset.card_mul_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : RightCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (a : α), Eq.{1} Nat (Finset.card.{u1} α (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α (RightCancelSemigroup.toSemigroup.{u1} α _inst_1)))) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a))) (Finset.card.{u1} α s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : RightCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (a : α), Eq.{1} Nat (Finset.card.{u1} α (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α (RightCancelSemigroup.toSemigroup.{u1} α _inst_1)))) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a))) (Finset.card.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align finset.card_mul_singleton Finset.card_mul_singletonₓ'. -/
@[simp, to_additive]
theorem card_mul_singleton : (s * {a}).card = s.card :=
card_image₂_singleton_right _ <| mul_left_injective _
#align finset.card_mul_singleton Finset.card_mul_singleton
#align finset.card_add_singleton Finset.card_add_singleton
-/- warning: finset.inter_mul_singleton -> Finset.inter_mul_singleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : RightCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (a : α), Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α (RightCancelSemigroup.toSemigroup.{u1} α _inst_1)))) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α (RightCancelSemigroup.toSemigroup.{u1} α _inst_1)))) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α (RightCancelSemigroup.toSemigroup.{u1} α _inst_1)))) t (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : RightCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) (t : Finset.{u1} α) (a : α), Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α (RightCancelSemigroup.toSemigroup.{u1} α _inst_1)))) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) s t) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α (RightCancelSemigroup.toSemigroup.{u1} α _inst_1)))) s (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α (RightCancelSemigroup.toSemigroup.{u1} α _inst_1)))) t (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)))
-Case conversion may be inaccurate. Consider using '#align finset.inter_mul_singleton Finset.inter_mul_singletonₓ'. -/
@[to_additive]
theorem inter_mul_singleton : s ∩ t * {a} = s * {a} ∩ (t * {a}) :=
image₂_inter_singleton _ _ <| mul_left_injective _
#align finset.inter_mul_singleton Finset.inter_mul_singleton
#align finset.inter_add_singleton Finset.inter_add_singleton
-/- warning: finset.card_le_card_mul_right -> Finset.card_le_card_mul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : RightCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α t) -> (LE.le.{0} Nat Nat.hasLe (Finset.card.{u1} α s) (Finset.card.{u1} α (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α (RightCancelSemigroup.toSemigroup.{u1} α _inst_1)))) s t)))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : RightCancelSemigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (s : Finset.{u1} α) {t : Finset.{u1} α}, (Finset.Nonempty.{u1} α t) -> (LE.le.{0} Nat instLENat (Finset.card.{u1} α s) (Finset.card.{u1} α (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α (RightCancelSemigroup.toSemigroup.{u1} α _inst_1)))) s t)))
-Case conversion may be inaccurate. Consider using '#align finset.card_le_card_mul_right Finset.card_le_card_mul_rightₓ'. -/
@[to_additive]
theorem card_le_card_mul_right {t : Finset α} (ht : t.Nonempty) : s.card ≤ (s * t).card :=
card_le_card_image₂_right _ ht mul_left_injective
@@ -2833,12 +2239,6 @@ end
open Pointwise
-/- warning: finset.image_smul_comm -> Finset.image_smul_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : DecidableEq.{succ u3} γ] [_inst_3 : SMul.{u1, u2} α β] [_inst_4 : SMul.{u1, u3} α γ] (f : β -> γ) (a : α) (s : Finset.{u2} β), (forall (b : β), Eq.{succ u3} γ (f (SMul.smul.{u1, u2} α β _inst_3 a b)) (SMul.smul.{u1, u3} α γ _inst_4 a (f b))) -> (Eq.{succ u3} (Finset.{u3} γ) (Finset.image.{u2, u3} β γ (fun (a : γ) (b : γ) => _inst_2 a b) f (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_3) a s)) (SMul.smul.{u1, u3} α (Finset.{u3} γ) (Finset.smulFinset.{u1, u3} α γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4) a (Finset.image.{u2, u3} β γ (fun (a : γ) (b : γ) => _inst_2 a b) f s)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : DecidableEq.{succ u3} β] [_inst_2 : DecidableEq.{succ u2} γ] [_inst_3 : SMul.{u1, u3} α β] [_inst_4 : SMul.{u1, u2} α γ] (f : β -> γ) (a : α) (s : Finset.{u3} β), (forall (b : β), Eq.{succ u2} γ (f (HSMul.hSMul.{u1, u3, u3} α β β (instHSMul.{u1, u3} α β _inst_3) a b)) (HSMul.hSMul.{u1, u2, u2} α γ γ (instHSMul.{u1, u2} α γ _inst_4) a (f b))) -> (Eq.{succ u2} (Finset.{u2} γ) (Finset.image.{u3, u2} β γ (fun (a : γ) (b : γ) => _inst_2 a b) f (HSMul.hSMul.{u1, u3, u3} α (Finset.{u3} β) (Finset.{u3} β) (instHSMul.{u1, u3} α (Finset.{u3} β) (Finset.smulFinset.{u1, u3} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_3)) a s)) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} γ) (Finset.{u2} γ) (instHSMul.{u1, u2} α (Finset.{u2} γ) (Finset.smulFinset.{u1, u2} α γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4)) a (Finset.image.{u3, u2} β γ (fun (a : γ) (b : γ) => _inst_2 a b) f s)))
-Case conversion may be inaccurate. Consider using '#align finset.image_smul_comm Finset.image_smul_commₓ'. -/
@[to_additive]
theorem image_smul_comm [DecidableEq β] [DecidableEq γ] [SMul α β] [SMul α γ] (f : β → γ) (a : α)
(s : Finset β) : (∀ b, f (a • b) = a • f b) → (a • s).image f = a • s.image f :=
@@ -2846,12 +2246,6 @@ theorem image_smul_comm [DecidableEq β] [DecidableEq γ] [SMul α β] [SMul α
#align finset.image_smul_comm Finset.image_smul_comm
#align finset.image_vadd_comm Finset.image_vadd_comm
-/- warning: finset.image_smul_distrib -> Finset.image_smul_distrib is a dubious translation:
-lean 3 declaration is
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Monoid.{u2} α] [_inst_4 : Monoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4)] (f : F) (a : α) (s : Finset.{u2} α), Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4) _inst_5))) f) (SMul.smul.{u2, u2} α (Finset.{u2} α) (Finset.smulFinset.{u2, u2} α α (fun (a : α) (b : α) => _inst_1 a b) (Mul.toSMul.{u2} α (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)))) a s)) (SMul.smul.{u3, u3} β (Finset.{u3} β) (Finset.smulFinset.{u3, u3} β β (fun (a : β) (b : β) => _inst_2 a b) (Mul.toSMul.{u3} β (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)))) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4) _inst_5))) f a) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4) _inst_5))) f) s))
-but is expected to have type
- forall {F : Type.{u1}} {α : Type.{u3}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u3} α] [_inst_2 : DecidableEq.{succ u2} β] [_inst_3 : Monoid.{u3} α] [_inst_4 : Monoid.{u2} β] [_inst_5 : MonoidHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4)] (f : F) (a : α) (s : Finset.{u3} α), Eq.{succ u2} (Finset.{u2} β) (Finset.image.{u3, u2} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f) (HSMul.hSMul.{u3, u3, u3} α (Finset.{u3} α) (Finset.{u3} α) (instHSMul.{u3, u3} α (Finset.{u3} α) (Finset.smulFinset.{u3, u3} α α (fun (a : α) (b : α) => _inst_1 a b) (MulAction.toSMul.{u3, u3} α α _inst_3 (Monoid.toMulAction.{u3} α _inst_3)))) a s)) (HSMul.hSMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) (Finset.{u2} β) (Finset.smulFinset.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) β (fun (a : β) (b : β) => _inst_2 a b) (MulAction.toSMul.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) β _inst_4 (Monoid.toMulAction.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) _inst_4)))) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f a) (Finset.image.{u3, u2} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f) s))
-Case conversion may be inaccurate. Consider using '#align finset.image_smul_distrib Finset.image_smul_distribₓ'. -/
@[to_additive]
theorem image_smul_distrib [DecidableEq α] [DecidableEq β] [Monoid α] [Monoid β]
[MonoidHomClass F α β] (f : F) (a : α) (s : Finset α) : (a • s).image f = f a • s.image f :=
@@ -2871,24 +2265,12 @@ theorem smul_mem_smul_finset_iff (a : α) : a • b ∈ a • s ↔ b ∈ s :=
#align finset.vadd_mem_vadd_finset_iff Finset.vadd_mem_vadd_finset_iff
-/
-/- warning: finset.inv_smul_mem_iff -> Finset.inv_smul_mem_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {a : α} {b : β}, Iff (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) (SMul.smul.{u1, u2} α β (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) a) b) s) (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) a s))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {a : α} {b : β}, Iff (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α β β (instHSMul.{u1, u2} α β (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_2)))) a) b) s) (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) a s))
-Case conversion may be inaccurate. Consider using '#align finset.inv_smul_mem_iff Finset.inv_smul_mem_iffₓ'. -/
@[to_additive]
theorem inv_smul_mem_iff : a⁻¹ • b ∈ s ↔ b ∈ a • s := by
rw [← smul_mem_smul_finset_iff a, smul_inv_smul]
#align finset.inv_smul_mem_iff Finset.inv_smul_mem_iff
#align finset.neg_vadd_mem_iff Finset.neg_vadd_mem_iff
-/- warning: finset.mem_inv_smul_finset_iff -> Finset.mem_inv_smul_finset_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {a : α} {b : β}, Iff (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) a) s)) (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) (SMul.smul.{u1, u2} α β (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3) a b) s)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {a : α} {b : β}, Iff (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) b (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_2)))) a) s)) (Membership.mem.{u2, u2} β (Finset.{u2} β) (Finset.instMembershipFinset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α β β (instHSMul.{u1, u2} α β (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) a b) s)
-Case conversion may be inaccurate. Consider using '#align finset.mem_inv_smul_finset_iff Finset.mem_inv_smul_finset_iffₓ'. -/
@[to_additive]
theorem mem_inv_smul_finset_iff : b ∈ a⁻¹ • s ↔ a • b ∈ s := by
rw [← smul_mem_smul_finset_iff a, smul_inv_smul]
@@ -2903,24 +2285,12 @@ theorem smul_finset_subset_smul_finset_iff : a • s ⊆ a • t ↔ s ⊆ t :=
#align finset.vadd_finset_subset_vadd_finset_iff Finset.vadd_finset_subset_vadd_finset_iff
-/
-/- warning: finset.smul_finset_subset_iff -> Finset.smul_finset_subset_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, Iff (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) a s) t) (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) s (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) a) t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, Iff (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) a s) t) (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) s (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_2)))) a) t))
-Case conversion may be inaccurate. Consider using '#align finset.smul_finset_subset_iff Finset.smul_finset_subset_iffₓ'. -/
@[to_additive]
theorem smul_finset_subset_iff : a • s ⊆ t ↔ s ⊆ a⁻¹ • t := by simp_rw [← coe_subset]; push_cast ;
exact Set.set_smul_subset_iff
#align finset.smul_finset_subset_iff Finset.smul_finset_subset_iff
#align finset.vadd_finset_subset_iff Finset.vadd_finset_subset_iff
-/- warning: finset.subset_smul_finset_iff -> Finset.subset_smul_finset_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, Iff (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) s (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) a t)) (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) a) s) t)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, Iff (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) s (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) a t)) (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_2)))) a) s) t)
-Case conversion may be inaccurate. Consider using '#align finset.subset_smul_finset_iff Finset.subset_smul_finset_iffₓ'. -/
@[to_additive]
theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t := by simp_rw [← coe_subset]; push_cast ;
exact Set.subset_set_smul_iff
@@ -2943,12 +2313,6 @@ theorem smul_finset_sdiff : a • (s \ t) = a • s \ a • t :=
#align finset.vadd_finset_sdiff Finset.vadd_finset_sdiff
-/
-/- warning: finset.smul_finset_symm_diff -> Finset.smul_finset_symmDiff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) a (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toHasSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toHasSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) a s) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) a t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) a (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.instLatticeFinset.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.instSDiffFinset.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.instLatticeFinset.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.instSDiffFinset.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) a s) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) a t))
-Case conversion may be inaccurate. Consider using '#align finset.smul_finset_symm_diff Finset.smul_finset_symmDiffₓ'. -/
@[to_additive]
theorem smul_finset_symmDiff : a • s ∆ t = (a • s) ∆ (a • t) :=
image_symmDiff _ _ <| MulAction.injective a
@@ -2985,114 +2349,48 @@ section GroupWithZero
variable [DecidableEq β] [GroupWithZero α] [MulAction α β] {s t : Finset β} {a : α} {b : β}
-/- warning: finset.smul_mem_smul_finset_iff₀ -> Finset.smul_mem_smul_finset_iff₀ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {a : α} {b : β}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Iff (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) (SMul.smul.{u1, u2} α β (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3) a b) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a s)) (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {a : α} {b : β}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Iff (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α β β (instHSMul.{u2, u1} α β (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3)) a b) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a s)) (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b s))
-Case conversion may be inaccurate. Consider using '#align finset.smul_mem_smul_finset_iff₀ Finset.smul_mem_smul_finset_iff₀ₓ'. -/
@[simp]
theorem smul_mem_smul_finset_iff₀ (ha : a ≠ 0) : a • b ∈ a • s ↔ b ∈ s :=
smul_mem_smul_finset_iff (Units.mk0 a ha)
#align finset.smul_mem_smul_finset_iff₀ Finset.smul_mem_smul_finset_iff₀
-/- warning: finset.inv_smul_mem_iff₀ -> Finset.inv_smul_mem_iff₀ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {a : α} {b : β}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Iff (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) (SMul.smul.{u1, u2} α β (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (GroupWithZero.toDivInvMonoid.{u1} α _inst_2)) a) b) s) (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a s)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {a : α} {b : β}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Iff (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α β β (instHSMul.{u2, u1} α β (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3)) (Inv.inv.{u2} α (GroupWithZero.toInv.{u2} α _inst_2) a) b) s) (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a s)))
-Case conversion may be inaccurate. Consider using '#align finset.inv_smul_mem_iff₀ Finset.inv_smul_mem_iff₀ₓ'. -/
theorem inv_smul_mem_iff₀ (ha : a ≠ 0) : a⁻¹ • b ∈ s ↔ b ∈ a • s :=
show _ ↔ _ ∈ Units.mk0 a ha • _ from inv_smul_mem_iff
#align finset.inv_smul_mem_iff₀ Finset.inv_smul_mem_iff₀
-/- warning: finset.mem_inv_smul_finset_iff₀ -> Finset.mem_inv_smul_finset_iff₀ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {a : α} {b : β}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Iff (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) b (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (GroupWithZero.toDivInvMonoid.{u1} α _inst_2)) a) s)) (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) (SMul.smul.{u1, u2} α β (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3) a b) s))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {a : α} {b : β}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Iff (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) b (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) (Inv.inv.{u2} α (GroupWithZero.toInv.{u2} α _inst_2) a) s)) (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α β β (instHSMul.{u2, u1} α β (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3)) a b) s))
-Case conversion may be inaccurate. Consider using '#align finset.mem_inv_smul_finset_iff₀ Finset.mem_inv_smul_finset_iff₀ₓ'. -/
theorem mem_inv_smul_finset_iff₀ (ha : a ≠ 0) : b ∈ a⁻¹ • s ↔ a • b ∈ s :=
show _ ∈ (Units.mk0 a ha)⁻¹ • _ ↔ _ from mem_inv_smul_finset_iff
#align finset.mem_inv_smul_finset_iff₀ Finset.mem_inv_smul_finset_iff₀
-/- warning: finset.smul_finset_subset_smul_finset_iff₀ -> Finset.smul_finset_subset_smul_finset_iff₀ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Iff (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a s) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a t)) (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) s t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {t : Finset.{u1} β} {a : α}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Iff (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a s) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a t)) (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) s t))
-Case conversion may be inaccurate. Consider using '#align finset.smul_finset_subset_smul_finset_iff₀ Finset.smul_finset_subset_smul_finset_iff₀ₓ'. -/
@[simp]
theorem smul_finset_subset_smul_finset_iff₀ (ha : a ≠ 0) : a • s ⊆ a • t ↔ s ⊆ t :=
show Units.mk0 a ha • _ ⊆ _ ↔ _ from smul_finset_subset_smul_finset_iff
#align finset.smul_finset_subset_smul_finset_iff₀ Finset.smul_finset_subset_smul_finset_iff₀
-/- warning: finset.smul_finset_subset_iff₀ -> Finset.smul_finset_subset_iff₀ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Iff (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a s) t) (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) s (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (GroupWithZero.toDivInvMonoid.{u1} α _inst_2)) a) t)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {t : Finset.{u1} β} {a : α}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Iff (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a s) t) (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) s (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) (Inv.inv.{u2} α (GroupWithZero.toInv.{u2} α _inst_2) a) t)))
-Case conversion may be inaccurate. Consider using '#align finset.smul_finset_subset_iff₀ Finset.smul_finset_subset_iff₀ₓ'. -/
theorem smul_finset_subset_iff₀ (ha : a ≠ 0) : a • s ⊆ t ↔ s ⊆ a⁻¹ • t :=
show Units.mk0 a ha • _ ⊆ _ ↔ _ from smul_finset_subset_iff
#align finset.smul_finset_subset_iff₀ Finset.smul_finset_subset_iff₀
-/- warning: finset.subset_smul_finset_iff₀ -> Finset.subset_smul_finset_iff₀ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Iff (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) s (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a t)) (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (GroupWithZero.toDivInvMonoid.{u1} α _inst_2)) a) s) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {t : Finset.{u1} β} {a : α}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Iff (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) s (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a t)) (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) (Inv.inv.{u2} α (GroupWithZero.toInv.{u2} α _inst_2) a) s) t))
-Case conversion may be inaccurate. Consider using '#align finset.subset_smul_finset_iff₀ Finset.subset_smul_finset_iff₀ₓ'. -/
theorem subset_smul_finset_iff₀ (ha : a ≠ 0) : s ⊆ a • t ↔ a⁻¹ • s ⊆ t :=
show _ ⊆ Units.mk0 a ha • _ ↔ _ from subset_smul_finset_iff
#align finset.subset_smul_finset_iff₀ Finset.subset_smul_finset_iff₀
-/- warning: finset.smul_finset_inter₀ -> Finset.smul_finset_inter₀ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a (Inter.inter.{u2} (Finset.{u2} β) (Finset.hasInter.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (Inter.inter.{u2} (Finset.{u2} β) (Finset.hasInter.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a s) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a t)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {t : Finset.{u1} β} {a : α}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a (Inter.inter.{u1} (Finset.{u1} β) (Finset.instInterFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (Inter.inter.{u1} (Finset.{u1} β) (Finset.instInterFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a s) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a t)))
-Case conversion may be inaccurate. Consider using '#align finset.smul_finset_inter₀ Finset.smul_finset_inter₀ₓ'. -/
theorem smul_finset_inter₀ (ha : a ≠ 0) : a • (s ∩ t) = a • s ∩ a • t :=
image_inter _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_inter₀ Finset.smul_finset_inter₀
-/- warning: finset.smul_finset_sdiff₀ -> Finset.smul_finset_sdiff₀ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a (SDiff.sdiff.{u2} (Finset.{u2} β) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (SDiff.sdiff.{u2} (Finset.{u2} β) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a s) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a t)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {t : Finset.{u1} β} {a : α}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a (SDiff.sdiff.{u1} (Finset.{u1} β) (Finset.instSDiffFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (SDiff.sdiff.{u1} (Finset.{u1} β) (Finset.instSDiffFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a s) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a t)))
-Case conversion may be inaccurate. Consider using '#align finset.smul_finset_sdiff₀ Finset.smul_finset_sdiff₀ₓ'. -/
theorem smul_finset_sdiff₀ (ha : a ≠ 0) : a • (s \ t) = a • s \ a • t :=
image_sdiff _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_sdiff₀ Finset.smul_finset_sdiff₀
-/- warning: finset.smul_finset_symm_diff₀ -> Finset.smul_finset_symm_diff₀ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toHasSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toHasSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a s) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a t)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {t : Finset.{u1} β} {a : α}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a (symmDiff.{u1} (Finset.{u1} β) (SemilatticeSup.toSup.{u1} (Finset.{u1} β) (Lattice.toSemilatticeSup.{u1} (Finset.{u1} β) (Finset.instLatticeFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.instSDiffFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (symmDiff.{u1} (Finset.{u1} β) (SemilatticeSup.toSup.{u1} (Finset.{u1} β) (Lattice.toSemilatticeSup.{u1} (Finset.{u1} β) (Finset.instLatticeFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.instSDiffFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a s) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a t)))
-Case conversion may be inaccurate. Consider using '#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symm_diff₀ₓ'. -/
theorem smul_finset_symm_diff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (a • t) :=
image_symmDiff _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symm_diff₀
-/- warning: finset.smul_univ₀ -> Finset.smul_univ₀ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] [_inst_4 : Fintype.{u2} β] {s : Finset.{u1} α}, (Not (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))))) -> (Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) s (Finset.univ.{u2} β _inst_4)) (Finset.univ.{u2} β _inst_4))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] [_inst_4 : Fintype.{u2} β] {s : Finset.{u1} α}, (Not (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))))))) -> (Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3))) s (Finset.univ.{u2} β _inst_4)) (Finset.univ.{u2} β _inst_4))
-Case conversion may be inaccurate. Consider using '#align finset.smul_univ₀ Finset.smul_univ₀ₓ'. -/
theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ : Finset β) = univ :=
coe_injective <| by rw [← coe_subset] at hs; push_cast at hs⊢; exact Set.smul_univ₀ hs
#align finset.smul_univ₀ Finset.smul_univ₀
-/- warning: finset.smul_finset_univ₀ -> Finset.smul_finset_univ₀ is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {a : α} [_inst_4 : Fintype.{u2} β], (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a (Finset.univ.{u2} β _inst_4)) (Finset.univ.{u2} β _inst_4))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {a : α} [_inst_4 : Fintype.{u2} β], (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))))) -> (Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3))) a (Finset.univ.{u2} β _inst_4)) (Finset.univ.{u2} β _inst_4))
-Case conversion may be inaccurate. Consider using '#align finset.smul_finset_univ₀ Finset.smul_finset_univ₀ₓ'. -/
theorem smul_finset_univ₀ [Fintype β] (ha : a ≠ 0) : a • (univ : Finset β) = univ :=
coe_injective <| by push_cast ; exact Set.smul_set_univ₀ ha
#align finset.smul_finset_univ₀ Finset.smul_finset_univ₀
@@ -3109,12 +2407,6 @@ because `0 * ∅ ≠ 0`.
-/
-/- warning: finset.smul_zero_subset -> Finset.smul_zero_subset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Zero.{u1} α] [_inst_2 : Zero.{u2} β] [_inst_3 : SMulWithZero.{u1, u2} α β _inst_1 _inst_2] [_inst_4 : DecidableEq.{succ u2} β] (s : Finset.{u1} α), HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β _inst_2 (SMulWithZero.toSmulZeroClass.{u1, u2} α β _inst_1 _inst_2 _inst_3))) s (OfNat.ofNat.{u2} (Finset.{u2} β) 0 (OfNat.mk.{u2} (Finset.{u2} β) 0 (Zero.zero.{u2} (Finset.{u2} β) (Finset.zero.{u2} β _inst_2))))) (OfNat.ofNat.{u2} (Finset.{u2} β) 0 (OfNat.mk.{u2} (Finset.{u2} β) 0 (Zero.zero.{u2} (Finset.{u2} β) (Finset.zero.{u2} β _inst_2))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : Zero.{u2} α] [_inst_2 : Zero.{u1} β] [_inst_3 : SMulWithZero.{u2, u1} α β _inst_1 _inst_2] [_inst_4 : DecidableEq.{succ u1} β] (s : Finset.{u2} α), HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β _inst_2 (SMulWithZero.toSMulZeroClass.{u2, u1} α β _inst_1 _inst_2 _inst_3)))) s (OfNat.ofNat.{u1} (Finset.{u1} β) 0 (Zero.toOfNat0.{u1} (Finset.{u1} β) (Finset.zero.{u1} β _inst_2)))) (OfNat.ofNat.{u1} (Finset.{u1} β) 0 (Zero.toOfNat0.{u1} (Finset.{u1} β) (Finset.zero.{u1} β _inst_2)))
-Case conversion may be inaccurate. Consider using '#align finset.smul_zero_subset Finset.smul_zero_subsetₓ'. -/
theorem smul_zero_subset (s : Finset α) : s • (0 : Finset β) ⊆ 0 := by simp [subset_iff, mem_smul]
#align finset.smul_zero_subset Finset.smul_zero_subset
@@ -3123,12 +2415,6 @@ theorem zero_smul_subset (t : Finset β) : (0 : Finset α) • t ⊆ 0 := by sim
#align finset.zero_smul_subset Finset.zero_smul_subset
-/
-/- warning: finset.nonempty.smul_zero -> Finset.Nonempty.smul_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Zero.{u1} α] [_inst_2 : Zero.{u2} β] [_inst_3 : SMulWithZero.{u1, u2} α β _inst_1 _inst_2] [_inst_4 : DecidableEq.{succ u2} β] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β _inst_2 (SMulWithZero.toSmulZeroClass.{u1, u2} α β _inst_1 _inst_2 _inst_3))) s (OfNat.ofNat.{u2} (Finset.{u2} β) 0 (OfNat.mk.{u2} (Finset.{u2} β) 0 (Zero.zero.{u2} (Finset.{u2} β) (Finset.zero.{u2} β _inst_2))))) (OfNat.ofNat.{u2} (Finset.{u2} β) 0 (OfNat.mk.{u2} (Finset.{u2} β) 0 (Zero.zero.{u2} (Finset.{u2} β) (Finset.zero.{u2} β _inst_2)))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : Zero.{u2} α] [_inst_2 : Zero.{u1} β] [_inst_3 : SMulWithZero.{u2, u1} α β _inst_1 _inst_2] [_inst_4 : DecidableEq.{succ u1} β] {s : Finset.{u2} α}, (Finset.Nonempty.{u2} α s) -> (Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β _inst_2 (SMulWithZero.toSMulZeroClass.{u2, u1} α β _inst_1 _inst_2 _inst_3)))) s (OfNat.ofNat.{u1} (Finset.{u1} β) 0 (Zero.toOfNat0.{u1} (Finset.{u1} β) (Finset.zero.{u1} β _inst_2)))) (OfNat.ofNat.{u1} (Finset.{u1} β) 0 (Zero.toOfNat0.{u1} (Finset.{u1} β) (Finset.zero.{u1} β _inst_2))))
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.smul_zero Finset.Nonempty.smul_zeroₓ'. -/
theorem Nonempty.smul_zero (hs : s.Nonempty) : s • (0 : Finset β) = 0 :=
s.smul_zero_subset.antisymm <| by simpa [mem_smul] using hs
#align finset.nonempty.smul_zero Finset.Nonempty.smul_zero
@@ -3166,12 +2452,6 @@ theorem zero_mem_smul_iff : (0 : β) ∈ s • t ↔ (0 : α) ∈ s ∧ t.Nonemp
#align finset.zero_mem_smul_iff Finset.zero_mem_smul_iff
-/
-/- warning: finset.zero_mem_smul_finset_iff -> Finset.zero_mem_smul_finset_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Zero.{u1} α] [_inst_2 : Zero.{u2} β] [_inst_3 : SMulWithZero.{u1, u2} α β _inst_1 _inst_2] [_inst_4 : DecidableEq.{succ u2} β] {t : Finset.{u2} β} [_inst_5 : NoZeroSMulDivisors.{u1, u2} α β _inst_1 _inst_2 (SMulZeroClass.toHasSmul.{u1, u2} α β _inst_2 (SMulWithZero.toSmulZeroClass.{u1, u2} α β _inst_1 _inst_2 _inst_3))] {a : α}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α _inst_1)))) -> (Iff (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) (OfNat.ofNat.{u2} β 0 (OfNat.mk.{u2} β 0 (Zero.zero.{u2} β _inst_2))) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β _inst_2 (SMulWithZero.toSmulZeroClass.{u1, u2} α β _inst_1 _inst_2 _inst_3))) a t)) (Membership.Mem.{u2, u2} β (Finset.{u2} β) (Finset.hasMem.{u2} β) (OfNat.ofNat.{u2} β 0 (OfNat.mk.{u2} β 0 (Zero.zero.{u2} β _inst_2))) t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : Zero.{u2} α] [_inst_2 : Zero.{u1} β] [_inst_3 : SMulWithZero.{u2, u1} α β _inst_1 _inst_2] [_inst_4 : DecidableEq.{succ u1} β] {t : Finset.{u1} β} [_inst_5 : NoZeroSMulDivisors.{u2, u1} α β _inst_1 _inst_2 (SMulZeroClass.toSMul.{u2, u1} α β _inst_2 (SMulWithZero.toSMulZeroClass.{u2, u1} α β _inst_1 _inst_2 _inst_3))] {a : α}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α _inst_1))) -> (Iff (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) (OfNat.ofNat.{u1} β 0 (Zero.toOfNat0.{u1} β _inst_2)) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β _inst_2 (SMulWithZero.toSMulZeroClass.{u2, u1} α β _inst_1 _inst_2 _inst_3)))) a t)) (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) (OfNat.ofNat.{u1} β 0 (Zero.toOfNat0.{u1} β _inst_2)) t))
-Case conversion may be inaccurate. Consider using '#align finset.zero_mem_smul_finset_iff Finset.zero_mem_smul_finset_iffₓ'. -/
theorem zero_mem_smul_finset_iff (ha : a ≠ 0) : (0 : β) ∈ a • t ↔ (0 : β) ∈ t := by
rw [← mem_coe, coe_smul_finset, Set.zero_mem_smul_set_iff ha, mem_coe]; infer_instance
#align finset.zero_mem_smul_finset_iff Finset.zero_mem_smul_finset_iff
@@ -3183,23 +2463,11 @@ section Monoid
variable [Monoid α] [AddGroup β] [DistribMulAction α β] [DecidableEq β] (a : α) (s : Finset α)
(t : Finset β)
-/- warning: finset.smul_finset_neg -> Finset.smul_finset_neg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Monoid.{u1} α] [_inst_2 : AddGroup.{u2} β] [_inst_3 : DistribMulAction.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))] [_inst_4 : DecidableEq.{succ u2} β] (a : α) (t : Finset.{u2} β), Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3)))) a (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) t)) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3)))) a t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Monoid.{u1} α] [_inst_2 : AddGroup.{u2} β] [_inst_3 : DistribMulAction.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))] [_inst_4 : DecidableEq.{succ u2} β] (a : α) (t : Finset.{u2} β), Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3))))) a (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2))))) t)) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2))))) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3))))) a t))
-Case conversion may be inaccurate. Consider using '#align finset.smul_finset_neg Finset.smul_finset_negₓ'. -/
@[simp]
theorem smul_finset_neg : a • -t = -(a • t) := by
simp only [← image_smul, ← image_neg, Function.comp, image_image, smul_neg]
#align finset.smul_finset_neg Finset.smul_finset_neg
-/- warning: finset.smul_neg -> Finset.smul_neg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Monoid.{u1} α] [_inst_2 : AddGroup.{u2} β] [_inst_3 : DistribMulAction.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))] [_inst_4 : DecidableEq.{succ u2} β] (s : Finset.{u1} α) (t : Finset.{u2} β), Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3)))) s (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) t)) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3)))) s t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Monoid.{u1} α] [_inst_2 : AddGroup.{u2} β] [_inst_3 : DistribMulAction.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))] [_inst_4 : DecidableEq.{succ u2} β] (s : Finset.{u1} α) (t : Finset.{u2} β), Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3))))) s (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2))))) t)) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2))))) (HSMul.hSMul.{u1, u2, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3))))) s t))
-Case conversion may be inaccurate. Consider using '#align finset.smul_neg Finset.smul_negₓ'. -/
@[simp]
protected theorem smul_neg : s • -t = -(s • t) := by simp_rw [← image_neg];
exact image_image₂_right_comm smul_neg
@@ -3212,23 +2480,11 @@ section Ring
variable [Ring α] [AddCommGroup β] [Module α β] [DecidableEq β] {s : Finset α} {t : Finset β}
{a : α}
-/- warning: finset.neg_smul_finset -> Finset.neg_smul_finset is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Ring.{u1} α] [_inst_2 : AddCommGroup.{u2} β] [_inst_3 : Module.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)] [_inst_4 : DecidableEq.{succ u2} β] {t : Finset.{u2} β} {a : α}, Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) (Neg.neg.{u1} α (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1))))) a) t) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β (AddCommGroup.toAddGroup.{u2} β _inst_2)))) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) a t))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Ring.{u1} α] [_inst_2 : AddCommGroup.{u2} β] [_inst_3 : Module.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)] [_inst_4 : DecidableEq.{succ u2} β] {t : Finset.{u2} β} {a : α}, Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} α β (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3)))))) (Neg.neg.{u1} α (Ring.toNeg.{u1} α _inst_1) a) t) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2)))))) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} α β (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3)))))) a t))
-Case conversion may be inaccurate. Consider using '#align finset.neg_smul_finset Finset.neg_smul_finsetₓ'. -/
@[simp]
theorem neg_smul_finset : -a • t = -(a • t) := by
simp only [← image_smul, ← image_neg, image_image, neg_smul]
#align finset.neg_smul_finset Finset.neg_smul_finset
-/- warning: finset.neg_smul -> Finset.neg_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Ring.{u1} α] [_inst_2 : AddCommGroup.{u2} β] [_inst_3 : Module.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)] [_inst_4 : DecidableEq.{succ u2} β] {s : Finset.{u1} α} {t : Finset.{u2} β} [_inst_5 : DecidableEq.{succ u1} α], Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) (Neg.neg.{u1} (Finset.{u1} α) (Finset.neg.{u1} α (fun (a : α) (b : α) => _inst_5 a b) (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1)))))) s) t) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β (AddCommGroup.toAddGroup.{u2} β _inst_2)))) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) s t))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : Ring.{u2} α] [_inst_2 : AddCommGroup.{u1} β] [_inst_3 : Module.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2)] [_inst_4 : DecidableEq.{succ u1} β] {s : Finset.{u2} α} {t : Finset.{u1} β} [_inst_5 : DecidableEq.{succ u2} α], Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} α β (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1))) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} α β (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1)) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (Module.toMulActionWithZero.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2) _inst_3)))))) (Neg.neg.{u2} (Finset.{u2} α) (Finset.neg.{u2} α (fun (a : α) (b : α) => _inst_5 a b) (Ring.toNeg.{u2} α _inst_1)) s) t) (Neg.neg.{u1} (Finset.{u1} β) (Finset.neg.{u1} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2)))))) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} α β (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1))) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} α β (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1)) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (Module.toMulActionWithZero.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2) _inst_3)))))) s t))
-Case conversion may be inaccurate. Consider using '#align finset.neg_smul Finset.neg_smulₓ'. -/
@[simp]
protected theorem neg_smul [DecidableEq α] : -s • t = -(s • t) := by simp_rw [← image_neg];
exact image₂_image_left_comm neg_smul
@@ -3292,12 +2548,6 @@ section SMul
variable [SMul α β] [DecidableEq β] {a : α} {s : Set α} {t : Set β}
-/- warning: set.to_finset_smul -> Set.toFinset_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SMul.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u2} β] (s : Set.{u1} α) (t : Set.{u2} β) [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)] [_inst_4 : Fintype.{u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} β) Type.{u2} (Set.hasCoeToSort.{u2} β) t)] [_inst_5 : Fintype.{u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} β) Type.{u2} (Set.hasCoeToSort.{u2} β) (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_1) s t))], Eq.{succ u2} (Finset.{u2} β) (Set.toFinset.{u2} β (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_1) s t) _inst_5) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_2 a b) _inst_1) (Set.toFinset.{u1} α s _inst_3) (Set.toFinset.{u2} β t _inst_4))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u1} β] (s : Set.{u2} α) (t : Set.{u1} β) [_inst_3 : Fintype.{u2} (Set.Elem.{u2} α s)] [_inst_4 : Fintype.{u1} (Set.Elem.{u1} β t)] [_inst_5 : Fintype.{u1} (Set.Elem.{u1} β (HSMul.hSMul.{u2, u1, u1} (Set.{u2} α) (Set.{u1} β) (Set.{u1} β) (instHSMul.{u2, u1} (Set.{u2} α) (Set.{u1} β) (Set.smul.{u2, u1} α β _inst_1)) s t))], Eq.{succ u1} (Finset.{u1} β) (Set.toFinset.{u1} β (HSMul.hSMul.{u2, u1, u1} (Set.{u2} α) (Set.{u1} β) (Set.{u1} β) (instHSMul.{u2, u1} (Set.{u2} α) (Set.{u1} β) (Set.smul.{u2, u1} α β _inst_1)) s t) _inst_5) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_2 a b) _inst_1)) (Set.toFinset.{u2} α s _inst_3) (Set.toFinset.{u1} β t _inst_4))
-Case conversion may be inaccurate. Consider using '#align set.to_finset_smul Set.toFinset_smulₓ'. -/
@[simp, to_additive]
theorem toFinset_smul (s : Set α) (t : Set β) [Fintype s] [Fintype t] [Fintype ↥(s • t)] :
(s • t).toFinset = s.toFinset • t.toFinset :=
@@ -3305,12 +2555,6 @@ theorem toFinset_smul (s : Set α) (t : Set β) [Fintype s] [Fintype t] [Fintype
#align set.to_finset_smul Set.toFinset_smul
#align set.to_finset_vadd Set.toFinset_vadd
-/- warning: set.finite.to_finset_smul -> Set.Finite.toFinset_smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SMul.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u2} β] {s : Set.{u1} α} {t : Set.{u2} β} (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u2} β t) (hf : optParam.{0} (Set.Finite.{u2} β (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_1) s t)) (Set.Finite.smul.{u1, u2} α β _inst_1 s t hs ht)), Eq.{succ u2} (Finset.{u2} β) (Set.Finite.toFinset.{u2} β (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_1) s t) hf) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_2 a b) _inst_1) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u2} β t ht))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u1} β] {s : Set.{u2} α} {t : Set.{u1} β} (hs : Set.Finite.{u2} α s) (ht : Set.Finite.{u1} β t) (hf : optParam.{0} (Set.Finite.{u1} β (HSMul.hSMul.{u2, u1, u1} (Set.{u2} α) (Set.{u1} β) (Set.{u1} β) (instHSMul.{u2, u1} (Set.{u2} α) (Set.{u1} β) (Set.smul.{u2, u1} α β _inst_1)) s t)) (Set.Finite.smul.{u1, u2} α β _inst_1 s t hs ht)), Eq.{succ u1} (Finset.{u1} β) (Set.Finite.toFinset.{u1} β (HSMul.hSMul.{u2, u1, u1} (Set.{u2} α) (Set.{u1} β) (Set.{u1} β) (instHSMul.{u2, u1} (Set.{u2} α) (Set.{u1} β) (Set.smul.{u2, u1} α β _inst_1)) s t) hf) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_2 a b) _inst_1)) (Set.Finite.toFinset.{u2} α s hs) (Set.Finite.toFinset.{u1} β t ht))
-Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_smul Set.Finite.toFinset_smulₓ'. -/
@[to_additive]
theorem Finite.toFinset_smul (hs : s.Finite) (ht : t.Finite) (hf := hs.smul ht) :
hf.toFinset = hs.toFinset • ht.toFinset :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -1174,12 +1174,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align finset.pow_mem_pow Finset.pow_mem_powₓ'. -/
@[to_additive]
theorem pow_mem_pow (ha : a ∈ s) : ∀ n : ℕ, a ^ n ∈ s ^ n
- | 0 => by
- rw [pow_zero]
- exact one_mem_one
- | n + 1 => by
- rw [pow_succ]
- exact mul_mem_mul ha (pow_mem_pow _)
+ | 0 => by rw [pow_zero]; exact one_mem_one
+ | n + 1 => by rw [pow_succ]; exact mul_mem_mul ha (pow_mem_pow _)
#align finset.pow_mem_pow Finset.pow_mem_pow
#align finset.nsmul_mem_nsmul Finset.nsmul_mem_nsmul
@@ -1191,12 +1187,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align finset.pow_subset_pow Finset.pow_subset_powₓ'. -/
@[to_additive]
theorem pow_subset_pow (hst : s ⊆ t) : ∀ n : ℕ, s ^ n ⊆ t ^ n
- | 0 => by
- rw [pow_zero]
- exact subset.rfl
- | n + 1 => by
- rw [pow_succ]
- exact mul_subset_mul hst (pow_subset_pow _)
+ | 0 => by rw [pow_zero]; exact subset.rfl
+ | n + 1 => by rw [pow_succ]; exact mul_subset_mul hst (pow_subset_pow _)
#align finset.pow_subset_pow Finset.pow_subset_pow
#align finset.nsmul_subset_nsmul Finset.nsmul_subset_nsmul
@@ -1236,10 +1228,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align finset.mem_prod_list_of_fn Finset.mem_prod_list_ofFnₓ'. -/
@[to_additive]
theorem mem_prod_list_ofFn {a : α} {s : Fin n → Finset α} :
- a ∈ (List.ofFn s).Prod ↔ ∃ f : ∀ i : Fin n, s i, (List.ofFn fun i => (f i : α)).Prod = a :=
- by
- rw [← mem_coe, coe_list_prod, List.map_ofFn, Set.mem_prod_list_ofFn]
- rfl
+ a ∈ (List.ofFn s).Prod ↔ ∃ f : ∀ i : Fin n, s i, (List.ofFn fun i => (f i : α)).Prod = a := by
+ rw [← mem_coe, coe_list_prod, List.map_ofFn, Set.mem_prod_list_ofFn]; rfl
#align finset.mem_prod_list_of_fn Finset.mem_prod_list_ofFn
#align finset.mem_sum_list_of_fn Finset.mem_sum_list_ofFn
@@ -1251,10 +1241,8 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align finset.mem_pow Finset.mem_powₓ'. -/
@[to_additive]
theorem mem_pow {a : α} {n : ℕ} :
- a ∈ s ^ n ↔ ∃ f : Fin n → s, (List.ofFn fun i => ↑(f i)).Prod = a :=
- by
- simp_rw [← mem_coe, coe_pow, Set.mem_pow]
- rfl
+ a ∈ s ^ n ↔ ∃ f : Fin n → s, (List.ofFn fun i => ↑(f i)).Prod = a := by
+ simp_rw [← mem_coe, coe_pow, Set.mem_pow]; rfl
#align finset.mem_pow Finset.mem_pow
#align finset.mem_nsmul Finset.mem_nsmul
@@ -1369,9 +1357,7 @@ Case conversion may be inaccurate. Consider using '#align finset.coe_zpow Finset
@[simp, to_additive]
theorem coe_zpow (s : Finset α) : ∀ n : ℤ, ↑(s ^ n) = (s ^ n : Set α)
| Int.ofNat n => coe_pow _ _
- | Int.negSucc n => by
- refine' (coe_inv _).trans _
- convert congr_arg Inv.inv (coe_pow _ _)
+ | Int.negSucc n => by refine' (coe_inv _).trans _; convert congr_arg Inv.inv (coe_pow _ _)
#align finset.coe_zpow Finset.coe_zpow
#align finset.coe_zsmul Finset.coe_zsmul
@@ -2683,10 +2669,8 @@ Case conversion may be inaccurate. Consider using '#align finset.op_smul_finset_
-- TODO: replace hypothesis and conclusion with a typeclass
@[to_additive]
theorem op_smul_finset_smul_eq_smul_smul_finset (a : α) (s : Finset β) (t : Finset γ)
- (h : ∀ (a : α) (b : β) (c : γ), (op a • b) • c = b • a • c) : (op a • s) • t = s • a • t :=
- by
- ext
- simp [mem_smul, mem_smul_finset, h]
+ (h : ∀ (a : α) (b : β) (c : γ), (op a • b) • c = b • a • c) : (op a • s) • t = s • a • t := by
+ ext; simp [mem_smul, mem_smul_finset, h]
#align finset.op_smul_finset_smul_eq_smul_smul_finset Finset.op_smul_finset_smul_eq_smul_smul_finset
#align finset.op_vadd_finset_vadd_eq_vadd_vadd_finset Finset.op_vadd_finset_vadd_eq_vadd_vadd_finset
@@ -2926,10 +2910,7 @@ but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, Iff (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) a s) t) (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) s (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_2)))) a) t))
Case conversion may be inaccurate. Consider using '#align finset.smul_finset_subset_iff Finset.smul_finset_subset_iffₓ'. -/
@[to_additive]
-theorem smul_finset_subset_iff : a • s ⊆ t ↔ s ⊆ a⁻¹ • t :=
- by
- simp_rw [← coe_subset]
- push_cast
+theorem smul_finset_subset_iff : a • s ⊆ t ↔ s ⊆ a⁻¹ • t := by simp_rw [← coe_subset]; push_cast ;
exact Set.set_smul_subset_iff
#align finset.smul_finset_subset_iff Finset.smul_finset_subset_iff
#align finset.vadd_finset_subset_iff Finset.vadd_finset_subset_iff
@@ -2941,10 +2922,7 @@ but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, Iff (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) s (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) a t)) (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.instHasSubsetFinset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_2)))) a) s) t)
Case conversion may be inaccurate. Consider using '#align finset.subset_smul_finset_iff Finset.subset_smul_finset_iffₓ'. -/
@[to_additive]
-theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t :=
- by
- simp_rw [← coe_subset]
- push_cast
+theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t := by simp_rw [← coe_subset]; push_cast ;
exact Set.subset_set_smul_iff
#align finset.subset_smul_finset_iff Finset.subset_smul_finset_iff
#align finset.subset_vadd_finset_iff Finset.subset_vadd_finset_iff
@@ -2988,9 +2966,7 @@ theorem smul_finset_univ [Fintype β] : a • (univ : Finset β) = univ :=
#print Finset.smul_univ /-
@[simp, to_additive]
theorem smul_univ [Fintype β] {s : Finset α} (hs : s.Nonempty) : s • (univ : Finset β) = univ :=
- coe_injective <| by
- push_cast
- exact Set.smul_univ hs
+ coe_injective <| by push_cast ; exact Set.smul_univ hs
#align finset.smul_univ Finset.smul_univ
#align finset.vadd_univ Finset.vadd_univ
-/
@@ -3108,10 +3084,7 @@ but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] [_inst_4 : Fintype.{u2} β] {s : Finset.{u1} α}, (Not (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (Zero.toOfNat0.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))))))) -> (Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3))) s (Finset.univ.{u2} β _inst_4)) (Finset.univ.{u2} β _inst_4))
Case conversion may be inaccurate. Consider using '#align finset.smul_univ₀ Finset.smul_univ₀ₓ'. -/
theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ : Finset β) = univ :=
- coe_injective <| by
- rw [← coe_subset] at hs
- push_cast at hs⊢
- exact Set.smul_univ₀ hs
+ coe_injective <| by rw [← coe_subset] at hs; push_cast at hs⊢; exact Set.smul_univ₀ hs
#align finset.smul_univ₀ Finset.smul_univ₀
/- warning: finset.smul_finset_univ₀ -> Finset.smul_finset_univ₀ is a dubious translation:
@@ -3121,9 +3094,7 @@ but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {a : α} [_inst_4 : Fintype.{u2} β], (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (Zero.toOfNat0.{u1} α (MonoidWithZero.toZero.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))))) -> (Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3))) a (Finset.univ.{u2} β _inst_4)) (Finset.univ.{u2} β _inst_4))
Case conversion may be inaccurate. Consider using '#align finset.smul_finset_univ₀ Finset.smul_finset_univ₀ₓ'. -/
theorem smul_finset_univ₀ [Fintype β] (ha : a ≠ 0) : a • (univ : Finset β) = univ :=
- coe_injective <| by
- push_cast
- exact Set.smul_set_univ₀ ha
+ coe_injective <| by push_cast ; exact Set.smul_set_univ₀ ha
#align finset.smul_finset_univ₀ Finset.smul_finset_univ₀
end GroupWithZero
@@ -3191,9 +3162,7 @@ variable [NoZeroSMulDivisors α β] {a : α}
#print Finset.zero_mem_smul_iff /-
theorem zero_mem_smul_iff : (0 : β) ∈ s • t ↔ (0 : α) ∈ s ∧ t.Nonempty ∨ (0 : β) ∈ t ∧ s.Nonempty :=
- by
- rw [← mem_coe, coe_smul, Set.zero_mem_smul_iff]
- rfl
+ by rw [← mem_coe, coe_smul, Set.zero_mem_smul_iff]; rfl
#align finset.zero_mem_smul_iff Finset.zero_mem_smul_iff
-/
@@ -3203,10 +3172,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : Zero.{u2} α] [_inst_2 : Zero.{u1} β] [_inst_3 : SMulWithZero.{u2, u1} α β _inst_1 _inst_2] [_inst_4 : DecidableEq.{succ u1} β] {t : Finset.{u1} β} [_inst_5 : NoZeroSMulDivisors.{u2, u1} α β _inst_1 _inst_2 (SMulZeroClass.toSMul.{u2, u1} α β _inst_2 (SMulWithZero.toSMulZeroClass.{u2, u1} α β _inst_1 _inst_2 _inst_3))] {a : α}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α _inst_1))) -> (Iff (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) (OfNat.ofNat.{u1} β 0 (Zero.toOfNat0.{u1} β _inst_2)) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β _inst_2 (SMulWithZero.toSMulZeroClass.{u2, u1} α β _inst_1 _inst_2 _inst_3)))) a t)) (Membership.mem.{u1, u1} β (Finset.{u1} β) (Finset.instMembershipFinset.{u1} β) (OfNat.ofNat.{u1} β 0 (Zero.toOfNat0.{u1} β _inst_2)) t))
Case conversion may be inaccurate. Consider using '#align finset.zero_mem_smul_finset_iff Finset.zero_mem_smul_finset_iffₓ'. -/
-theorem zero_mem_smul_finset_iff (ha : a ≠ 0) : (0 : β) ∈ a • t ↔ (0 : β) ∈ t :=
- by
- rw [← mem_coe, coe_smul_finset, Set.zero_mem_smul_set_iff ha, mem_coe]
- infer_instance
+theorem zero_mem_smul_finset_iff (ha : a ≠ 0) : (0 : β) ∈ a • t ↔ (0 : β) ∈ t := by
+ rw [← mem_coe, coe_smul_finset, Set.zero_mem_smul_set_iff ha, mem_coe]; infer_instance
#align finset.zero_mem_smul_finset_iff Finset.zero_mem_smul_finset_iff
end SMulWithZero
@@ -3234,9 +3201,7 @@ but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Monoid.{u1} α] [_inst_2 : AddGroup.{u2} β] [_inst_3 : DistribMulAction.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))] [_inst_4 : DecidableEq.{succ u2} β] (s : Finset.{u1} α) (t : Finset.{u2} β), Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3))))) s (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2))))) t)) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2))))) (HSMul.hSMul.{u1, u2, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3))))) s t))
Case conversion may be inaccurate. Consider using '#align finset.smul_neg Finset.smul_negₓ'. -/
@[simp]
-protected theorem smul_neg : s • -t = -(s • t) :=
- by
- simp_rw [← image_neg]
+protected theorem smul_neg : s • -t = -(s • t) := by simp_rw [← image_neg];
exact image_image₂_right_comm smul_neg
#align finset.smul_neg Finset.smul_neg
@@ -3265,9 +3230,7 @@ but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : Ring.{u2} α] [_inst_2 : AddCommGroup.{u1} β] [_inst_3 : Module.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2)] [_inst_4 : DecidableEq.{succ u1} β] {s : Finset.{u2} α} {t : Finset.{u1} β} [_inst_5 : DecidableEq.{succ u2} α], Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} α β (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1))) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} α β (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1)) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (Module.toMulActionWithZero.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2) _inst_3)))))) (Neg.neg.{u2} (Finset.{u2} α) (Finset.neg.{u2} α (fun (a : α) (b : α) => _inst_5 a b) (Ring.toNeg.{u2} α _inst_1)) s) t) (Neg.neg.{u1} (Finset.{u1} β) (Finset.neg.{u1} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2)))))) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} α β (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1))) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} α β (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1)) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (Module.toMulActionWithZero.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2) _inst_3)))))) s t))
Case conversion may be inaccurate. Consider using '#align finset.neg_smul Finset.neg_smulₓ'. -/
@[simp]
-protected theorem neg_smul [DecidableEq α] : -s • t = -(s • t) :=
- by
- simp_rw [← image_neg]
+protected theorem neg_smul [DecidableEq α] : -s • t = -(s • t) := by simp_rw [← image_neg];
exact image₂_image_left_comm neg_smul
#align finset.neg_smul Finset.neg_smul
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -1069,7 +1069,7 @@ def singletonMonoidHom : α →* Finset α :=
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α))
Case conversion may be inaccurate. Consider using '#align finset.coe_singleton_monoid_hom Finset.coe_singletonMonoidHomₓ'. -/
@[simp, to_additive]
theorem coe_singletonMonoidHom : (singletonMonoidHom : α → Finset α) = singleton :=
@@ -1081,7 +1081,7 @@ theorem coe_singletonMonoidHom : (singletonMonoidHom : α → Finset α) = singl
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (a : α), Eq.{succ u1} (Finset.{u1} α) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) a) (Singleton.singleton.{u1, u1} α ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => Finset.{u1} α) a) (Finset.instSingletonFinset.{u1} α) a)
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) a) (Singleton.singleton.{u1, u1} α ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => Finset.{u1} α) a) (Finset.instSingletonFinset.{u1} α) a)
Case conversion may be inaccurate. Consider using '#align finset.singleton_monoid_hom_apply Finset.singletonMonoidHom_applyₓ'. -/
@[simp, to_additive]
theorem singletonMonoidHom_apply (a : α) : singletonMonoidHom a = {a} :=
@@ -1104,7 +1104,7 @@ def coeMonoidHom : Finset α →* Set α where
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : Finset.{u1} α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Finset.{u1} α) => Set.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (CoeTC.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.instCoeTCFinsetSet.{u1} α))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : Finset.{u1} α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Finset.{u1} α) => Set.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (CoeTC.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.instCoeTCFinsetSet.{u1} α))
Case conversion may be inaccurate. Consider using '#align finset.coe_coe_monoid_hom Finset.coe_coeMonoidHomₓ'. -/
@[simp, to_additive]
theorem coe_coeMonoidHom : (coeMonoidHom : Finset α → Set α) = coe :=
@@ -1116,7 +1116,7 @@ theorem coe_coeMonoidHom : (coeMonoidHom : Finset α → Set α) = coe :=
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} (Set.{u1} α) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Finset.{u1} α) => Set.{u1} α) s) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) s) (Finset.toSet.{u1} α s)
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Finset.{u1} α) => Set.{u1} α) s) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) s) (Finset.toSet.{u1} α s)
Case conversion may be inaccurate. Consider using '#align finset.coe_monoid_hom_apply Finset.coeMonoidHom_applyₓ'. -/
@[simp, to_additive]
theorem coeMonoidHom_apply (s : Finset α) : coeMonoidHom s = s :=
@@ -1593,7 +1593,7 @@ theorem isUnit_iff_singleton : IsUnit s ↔ ∃ a, s = {a} := by
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a) b) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a)) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_3)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a)) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a) b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a)) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) (Finset.toSet.{u1} α t))))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2631 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2633 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2631 x._@.Mathlib.Algebra.Group.Defs._hyg.2633) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a)) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) (Finset.toSet.{u1} α t))))
Case conversion may be inaccurate. Consider using '#align finset.image_mul_left Finset.image_mul_leftₓ'. -/
@[simp, to_additive]
theorem image_mul_left :
@@ -1618,7 +1618,7 @@ theorem image_mul_right : image (· * b) t = preimage t (· * b⁻¹) ((mul_left
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a) b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_3)))) a) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) a) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Finset.toSet.{u1} α t))))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2631 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2633 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2631 x._@.Mathlib.Algebra.Group.Defs._hyg.2633) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) a) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Finset.toSet.{u1} α t))))
Case conversion may be inaccurate. Consider using '#align finset.image_mul_left' Finset.image_mul_left'ₓ'. -/
@[to_additive]
theorem image_mul_left' :
@@ -1643,7 +1643,7 @@ theorem image_mul_right' :
lean 3 declaration is
forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))] (f : F) {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) (HDiv.hDiv.{u2, u2, u2} (Finset.{u2} α) (Finset.{u2} α) (Finset.{u2} α) (instHDiv.{u2} (Finset.{u2} α) (Finset.div.{u2} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toHasDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) s t)) (HDiv.hDiv.{u3, u3, u3} (Finset.{u3} β) (Finset.{u3} β) (Finset.{u3} β) (instHDiv.{u3} (Finset.{u3} β) (Finset.div.{u3} β (fun (a : β) (b : β) => _inst_2 a b) (DivInvMonoid.toHasDiv.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) s) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) t))
but is expected to have type
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))] (f : F) {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) (HDiv.hDiv.{u2, u2, u2} (Finset.{u2} α) (Finset.{u2} α) (Finset.{u2} α) (instHDiv.{u2} (Finset.{u2} α) (Finset.div.{u2} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) s t)) (HDiv.hDiv.{u3, u3, u3} (Finset.{u3} β) (Finset.{u3} β) (Finset.{u3} β) (instHDiv.{u3} (Finset.{u3} β) (Finset.div.{u3} β (fun (a : β) (b : β) => _inst_2 a b) (DivInvMonoid.toDiv.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) s) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) t))
+ forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))] (f : F) {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) (HDiv.hDiv.{u2, u2, u2} (Finset.{u2} α) (Finset.{u2} α) (Finset.{u2} α) (instHDiv.{u2} (Finset.{u2} α) (Finset.div.{u2} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) s t)) (HDiv.hDiv.{u3, u3, u3} (Finset.{u3} β) (Finset.{u3} β) (Finset.{u3} β) (instHDiv.{u3} (Finset.{u3} β) (Finset.div.{u3} β (fun (a : β) (b : β) => _inst_2 a b) (DivInvMonoid.toDiv.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) s) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) t))
Case conversion may be inaccurate. Consider using '#align finset.image_div Finset.image_divₓ'. -/
theorem image_div : (s / t).image (f : α → β) = s.image f / t.image f :=
image_image₂_distrib <| map_div f
@@ -1705,7 +1705,7 @@ variable [Group α] {s t : Finset α} {a b : α}
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a) b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9750 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 x._@.Mathlib.Data.Finset.Pointwise._hyg.9750) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9750 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 x._@.Mathlib.Data.Finset.Pointwise._hyg.9750) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9750 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 x._@.Mathlib.Data.Finset.Pointwise._hyg.9750) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2631 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2633 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2631 x._@.Mathlib.Algebra.Group.Defs._hyg.2633) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9750 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 x._@.Mathlib.Data.Finset.Pointwise._hyg.9750) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singletonₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_singleton :
@@ -1731,7 +1731,7 @@ theorem preimage_mul_right_singleton :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9934 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 x._@.Mathlib.Data.Finset.Pointwise._hyg.9934) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9934 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 x._@.Mathlib.Data.Finset.Pointwise._hyg.9934) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9934 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 x._@.Mathlib.Data.Finset.Pointwise._hyg.9934) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2631 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2633 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2631 x._@.Mathlib.Algebra.Group.Defs._hyg.2633) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9934 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 x._@.Mathlib.Data.Finset.Pointwise._hyg.9934) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one Finset.preimage_mul_left_oneₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹} :=
@@ -1755,7 +1755,7 @@ theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).Inj
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10103 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 x._@.Mathlib.Data.Finset.Pointwise._hyg.10103) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10103 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 x._@.Mathlib.Data.Finset.Pointwise._hyg.10103) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10103 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 x._@.Mathlib.Data.Finset.Pointwise._hyg.10103) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2631 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2633 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2631 x._@.Mathlib.Algebra.Group.Defs._hyg.2633) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10103 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 x._@.Mathlib.Data.Finset.Pointwise._hyg.10103) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one' Finset.preimage_mul_left_one'ₓ'. -/
@[to_additive]
theorem preimage_mul_left_one' : preimage 1 ((· * ·) a⁻¹) ((mul_right_injective _).InjOn _) = {a} :=
@@ -2866,7 +2866,7 @@ theorem image_smul_comm [DecidableEq β] [DecidableEq γ] [SMul α β] [SMul α
lean 3 declaration is
forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Monoid.{u2} α] [_inst_4 : Monoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4)] (f : F) (a : α) (s : Finset.{u2} α), Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4) _inst_5))) f) (SMul.smul.{u2, u2} α (Finset.{u2} α) (Finset.smulFinset.{u2, u2} α α (fun (a : α) (b : α) => _inst_1 a b) (Mul.toSMul.{u2} α (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)))) a s)) (SMul.smul.{u3, u3} β (Finset.{u3} β) (Finset.smulFinset.{u3, u3} β β (fun (a : β) (b : β) => _inst_2 a b) (Mul.toSMul.{u3} β (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)))) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4) _inst_5))) f a) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4) _inst_5))) f) s))
but is expected to have type
- forall {F : Type.{u1}} {α : Type.{u3}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u3} α] [_inst_2 : DecidableEq.{succ u2} β] [_inst_3 : Monoid.{u3} α] [_inst_4 : Monoid.{u2} β] [_inst_5 : MonoidHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4)] (f : F) (a : α) (s : Finset.{u3} α), Eq.{succ u2} (Finset.{u2} β) (Finset.image.{u3, u2} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f) (HSMul.hSMul.{u3, u3, u3} α (Finset.{u3} α) (Finset.{u3} α) (instHSMul.{u3, u3} α (Finset.{u3} α) (Finset.smulFinset.{u3, u3} α α (fun (a : α) (b : α) => _inst_1 a b) (MulAction.toSMul.{u3, u3} α α _inst_3 (Monoid.toMulAction.{u3} α _inst_3)))) a s)) (HSMul.hSMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) (Finset.{u2} β) (Finset.smulFinset.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) β (fun (a : β) (b : β) => _inst_2 a b) (MulAction.toSMul.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) β _inst_4 (Monoid.toMulAction.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) _inst_4)))) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f a) (Finset.image.{u3, u2} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f) s))
+ forall {F : Type.{u1}} {α : Type.{u3}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u3} α] [_inst_2 : DecidableEq.{succ u2} β] [_inst_3 : Monoid.{u3} α] [_inst_4 : Monoid.{u2} β] [_inst_5 : MonoidHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4)] (f : F) (a : α) (s : Finset.{u3} α), Eq.{succ u2} (Finset.{u2} β) (Finset.image.{u3, u2} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f) (HSMul.hSMul.{u3, u3, u3} α (Finset.{u3} α) (Finset.{u3} α) (instHSMul.{u3, u3} α (Finset.{u3} α) (Finset.smulFinset.{u3, u3} α α (fun (a : α) (b : α) => _inst_1 a b) (MulAction.toSMul.{u3, u3} α α _inst_3 (Monoid.toMulAction.{u3} α _inst_3)))) a s)) (HSMul.hSMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) (Finset.{u2} β) (Finset.smulFinset.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) β (fun (a : β) (b : β) => _inst_2 a b) (MulAction.toSMul.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) β _inst_4 (Monoid.toMulAction.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) _inst_4)))) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f a) (Finset.image.{u3, u2} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f) s))
Case conversion may be inaccurate. Consider using '#align finset.image_smul_distrib Finset.image_smul_distribₓ'. -/
@[to_additive]
theorem image_smul_distrib [DecidableEq α] [DecidableEq β] [Monoid α] [Monoid β]
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -2503,17 +2503,17 @@ theorem smul_finset_subset_smul {s : Finset α} : a ∈ s → a • t ⊆ s •
#align finset.smul_finset_subset_smul Finset.smul_finset_subset_smul
#align finset.vadd_finset_subset_vadd Finset.vadd_finset_subset_vadd
-/- warning: finset.bUnion_smul_finset -> Finset.bunionᵢ_smul_finset is a dubious translation:
+/- warning: finset.bUnion_smul_finset -> Finset.biUnion_smul_finset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] (s : Finset.{u1} α) (t : Finset.{u2} β), Eq.{succ u2} (Finset.{u2} β) (Finset.bunionᵢ.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) s (fun (_x : α) => SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) _x t)) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s t)
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] (s : Finset.{u1} α) (t : Finset.{u2} β), Eq.{succ u2} (Finset.{u2} β) (Finset.biUnion.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) s (fun (_x : α) => SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) _x t)) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] (s : Finset.{u2} α) (t : Finset.{u1} β), Eq.{succ u1} (Finset.{u1} β) (Finset.bunionᵢ.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) s (fun (_x : α) => HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) _x t)) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s t)
-Case conversion may be inaccurate. Consider using '#align finset.bUnion_smul_finset Finset.bunionᵢ_smul_finsetₓ'. -/
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] (s : Finset.{u2} α) (t : Finset.{u1} β), Eq.{succ u1} (Finset.{u1} β) (Finset.biUnion.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) s (fun (_x : α) => HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) _x t)) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s t)
+Case conversion may be inaccurate. Consider using '#align finset.bUnion_smul_finset Finset.biUnion_smul_finsetₓ'. -/
@[simp, to_additive]
-theorem bunionᵢ_smul_finset (s : Finset α) (t : Finset β) : s.bunionᵢ (· • t) = s • t :=
- bunionᵢ_image_left
-#align finset.bUnion_smul_finset Finset.bunionᵢ_smul_finset
-#align finset.bUnion_vadd_finset Finset.bunionᵢ_vadd_finset
+theorem biUnion_smul_finset (s : Finset α) (t : Finset β) : s.biUnion (· • t) = s • t :=
+ biUnion_image_left
+#align finset.bUnion_smul_finset Finset.biUnion_smul_finset
+#align finset.bUnion_vadd_finset Finset.biUnion_vadd_finset
end SMul
@@ -2704,12 +2704,12 @@ theorem op_smul_finset_subset_mul : a ∈ t → op a • s ⊆ s * t :=
#align finset.op_vadd_finset_subset_add Finset.op_vadd_finset_subset_add
-/
-#print Finset.bunionᵢ_op_smul_finset /-
+#print Finset.biUnion_op_smul_finset /-
@[simp, to_additive]
-theorem bunionᵢ_op_smul_finset (s t : Finset α) : (t.bunionᵢ fun a => op a • s) = s * t :=
- bunionᵢ_image_right
-#align finset.bUnion_op_smul_finset Finset.bunionᵢ_op_smul_finset
-#align finset.bUnion_op_vadd_finset Finset.bunionᵢ_op_vadd_finset
+theorem biUnion_op_smul_finset (s t : Finset α) : (t.biUnion fun a => op a • s) = s * t :=
+ biUnion_image_right
+#align finset.bUnion_op_smul_finset Finset.biUnion_op_smul_finset
+#align finset.bUnion_op_vadd_finset Finset.biUnion_op_vadd_finset
-/
#print Finset.mul_subset_iff_left /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -1705,7 +1705,7 @@ variable [Group α] {s t : Finset α} {a b : α}
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a) b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9752 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9754 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9752 x._@.Mathlib.Data.Finset.Pointwise._hyg.9754) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9752 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9754 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9752 x._@.Mathlib.Data.Finset.Pointwise._hyg.9754) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9750 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 x._@.Mathlib.Data.Finset.Pointwise._hyg.9750) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9750 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9748 x._@.Mathlib.Data.Finset.Pointwise._hyg.9750) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singletonₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_singleton :
@@ -1731,7 +1731,7 @@ theorem preimage_mul_right_singleton :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9936 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9938 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9936 x._@.Mathlib.Data.Finset.Pointwise._hyg.9938) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9936 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9938 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9936 x._@.Mathlib.Data.Finset.Pointwise._hyg.9938) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9934 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 x._@.Mathlib.Data.Finset.Pointwise._hyg.9934) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9934 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9932 x._@.Mathlib.Data.Finset.Pointwise._hyg.9934) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one Finset.preimage_mul_left_oneₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹} :=
@@ -1755,7 +1755,7 @@ theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).Inj
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10105 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10107 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10105 x._@.Mathlib.Data.Finset.Pointwise._hyg.10107) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10105 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10107 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10105 x._@.Mathlib.Data.Finset.Pointwise._hyg.10107) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10103 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 x._@.Mathlib.Data.Finset.Pointwise._hyg.10103) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10103 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10101 x._@.Mathlib.Data.Finset.Pointwise._hyg.10103) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one' Finset.preimage_mul_left_one'ₓ'. -/
@[to_additive]
theorem preimage_mul_left_one' : preimage 1 ((· * ·) a⁻¹) ((mul_right_injective _).InjOn _) = {a} :=
@@ -2083,7 +2083,7 @@ scoped[Pointwise] attribute [instance] Finset.vsub
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12097 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12099 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12097 x._@.Mathlib.Data.Finset.Pointwise._hyg.12099) s t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12093 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12095 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12093 x._@.Mathlib.Data.Finset.Pointwise._hyg.12095) s t)
Case conversion may be inaccurate. Consider using '#align finset.vsub_def Finset.vsub_defₓ'. -/
theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
rfl
@@ -2093,7 +2093,7 @@ theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12149 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12151 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12149 x._@.Mathlib.Data.Finset.Pointwise._hyg.12151) s t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12145 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12147 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12145 x._@.Mathlib.Data.Finset.Pointwise._hyg.12147) s t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)
Case conversion may be inaccurate. Consider using '#align finset.image_vsub_product Finset.image_vsub_productₓ'. -/
@[simp]
theorem image_vsub_product : image₂ (· -ᵥ ·) s t = s -ᵥ t :=
@@ -2230,7 +2230,7 @@ theorem vsub_singleton (b : β) : s -ᵥ ({b} : Finset β) = s.image (· -ᵥ b)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {t : Finset.{u2} β} (a : β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) a) t) (Finset.image.{u2, u1} β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2 a) t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {t : Finset.{u1} β} (a : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) t) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12886 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12888 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12886 x._@.Mathlib.Data.Finset.Pointwise._hyg.12888) a) t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {t : Finset.{u1} β} (a : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) t) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12882 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12884 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12882 x._@.Mathlib.Data.Finset.Pointwise._hyg.12884) a) t)
Case conversion may be inaccurate. Consider using '#align finset.singleton_vsub Finset.singleton_vsubₓ'. -/
theorem singleton_vsub (a : β) : ({a} : Finset β) -ᵥ t = t.image ((· -ᵥ ·) a) :=
image₂_singleton_left
mathlib commit https://github.com/leanprover-community/mathlib/commit/88fcb83fe7996142dfcfe7368d31304a9adc874a
@@ -295,21 +295,9 @@ theorem inv_nonempty_iff : s⁻¹.Nonempty ↔ s.Nonempty :=
#align finset.neg_nonempty_iff Finset.neg_nonempty_iff
-/
-/- warning: finset.nonempty.of_inv -> Finset.nonempty.of_inv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Inv.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s)) -> (Finset.Nonempty.{u1} α s)
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Inv.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Finset.Nonempty.{u1} α (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s))
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.of_inv Finset.nonempty.of_invₓ'. -/
-/- warning: finset.nonempty.inv -> Finset.nonempty.inv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Inv.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Finset.Nonempty.{u1} α (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s))
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Inv.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s)) -> (Finset.Nonempty.{u1} α s)
-Case conversion may be inaccurate. Consider using '#align finset.nonempty.inv Finset.nonempty.invₓ'. -/
alias inv_nonempty_iff ↔ nonempty.of_inv nonempty.inv
-#align finset.nonempty.of_inv Finset.nonempty.of_inv
-#align finset.nonempty.inv Finset.nonempty.inv
+#align finset.nonempty.of_inv Finset.Nonempty.of_inv
+#align finset.nonempty.inv Finset.Nonempty.inv
attribute [to_additive] nonempty.inv nonempty.of_inv
@@ -612,17 +600,21 @@ theorem mul_inter_subset : s * (t₁ ∩ t₂) ⊆ s * t₁ ∩ (s * t₂) :=
#align finset.add_inter_subset Finset.add_inter_subset
-/
+#print Finset.inter_mul_union_subset_union /-
@[to_additive]
theorem inter_mul_union_subset_union : s₁ ∩ s₂ * (t₁ ∪ t₂) ⊆ s₁ * t₁ ∪ s₂ * t₂ :=
image₂_inter_union_subset_union
#align finset.inter_mul_union_subset_union Finset.inter_mul_union_subset_union
#align finset.inter_add_union_subset_union Finset.inter_add_union_subset_union
+-/
+#print Finset.union_mul_inter_subset_union /-
@[to_additive]
theorem union_mul_inter_subset_union : (s₁ ∪ s₂) * (t₁ ∩ t₂) ⊆ s₁ * t₁ ∪ s₂ * t₂ :=
image₂_union_inter_subset_union
#align finset.union_mul_inter_subset_union Finset.union_mul_inter_subset_union
#align finset.union_add_inter_subset_union Finset.union_add_inter_subset_union
+-/
#print Finset.subset_mul /-
/-- If a finset `u` is contained in the product of two sets `s * t`, we can find two finsets `s'`,
@@ -898,17 +890,21 @@ theorem div_inter_subset : s / (t₁ ∩ t₂) ⊆ s / t₁ ∩ (s / t₂) :=
#align finset.sub_inter_subset Finset.sub_inter_subset
-/
+#print Finset.inter_div_union_subset_union /-
@[to_additive]
theorem inter_div_union_subset_union : s₁ ∩ s₂ / (t₁ ∪ t₂) ⊆ s₁ / t₁ ∪ s₂ / t₂ :=
image₂_inter_union_subset_union
#align finset.inter_div_union_subset_union Finset.inter_div_union_subset_union
#align finset.inter_sub_union_subset_union Finset.inter_sub_union_subset_union
+-/
+#print Finset.union_div_inter_subset_union /-
@[to_additive]
theorem union_div_inter_subset_union : (s₁ ∪ s₂) / (t₁ ∩ t₂) ⊆ s₁ / t₁ ∪ s₂ / t₂ :=
image₂_union_inter_subset_union
#align finset.union_div_inter_subset_union Finset.union_div_inter_subset_union
#align finset.union_sub_inter_subset_union Finset.union_sub_inter_subset_union
+-/
#print Finset.subset_div /-
/-- If a finset `u` is contained in the product of two sets `s / t`, we can find two finsets `s'`,
@@ -1709,7 +1705,7 @@ variable [Group α] {s t : Finset α} {a b : α}
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a) b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9499 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9501 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9499 x._@.Mathlib.Data.Finset.Pointwise._hyg.9501) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9499 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9501 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9499 x._@.Mathlib.Data.Finset.Pointwise._hyg.9501) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9752 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9754 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9752 x._@.Mathlib.Data.Finset.Pointwise._hyg.9754) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9752 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9754 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9752 x._@.Mathlib.Data.Finset.Pointwise._hyg.9754) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singletonₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_singleton :
@@ -1735,7 +1731,7 @@ theorem preimage_mul_right_singleton :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9683 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9685 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9683 x._@.Mathlib.Data.Finset.Pointwise._hyg.9685) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9683 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9685 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9683 x._@.Mathlib.Data.Finset.Pointwise._hyg.9685) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9936 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9938 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9936 x._@.Mathlib.Data.Finset.Pointwise._hyg.9938) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9936 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9938 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9936 x._@.Mathlib.Data.Finset.Pointwise._hyg.9938) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one Finset.preimage_mul_left_oneₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹} :=
@@ -1759,7 +1755,7 @@ theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).Inj
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9852 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9854 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9852 x._@.Mathlib.Data.Finset.Pointwise._hyg.9854) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9852 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9854 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9852 x._@.Mathlib.Data.Finset.Pointwise._hyg.9854) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10105 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10107 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10105 x._@.Mathlib.Data.Finset.Pointwise._hyg.10107) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.10105 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.10107 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.10105 x._@.Mathlib.Data.Finset.Pointwise._hyg.10107) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one' Finset.preimage_mul_left_one'ₓ'. -/
@[to_additive]
theorem preimage_mul_left_one' : preimage 1 ((· * ·) a⁻¹) ((mul_right_injective _).InjOn _) = {a} :=
@@ -2019,12 +2015,24 @@ theorem smul_inter_subset : s • (t₁ ∩ t₂) ⊆ s • t₁ ∩ s • t₂
#align finset.vadd_inter_subset Finset.vadd_inter_subset
-/
+/- warning: finset.inter_smul_union_subset_union -> Finset.inter_smul_union_subset_union is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t₁ : Finset.{u2} β} {t₂ : Finset.{u2} β} [_inst_3 : DecidableEq.{succ u1} α], HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) t₁ t₂)) (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₁ t₁) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₂ t₂))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {s₁ : Finset.{u2} α} {s₂ : Finset.{u2} α} {t₁ : Finset.{u1} β} {t₂ : Finset.{u1} β} [_inst_3 : DecidableEq.{succ u2} α], HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) (Inter.inter.{u2} (Finset.{u2} α) (Finset.instInterFinset.{u2} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) (Union.union.{u1} (Finset.{u1} β) (Finset.instUnionFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) t₁ t₂)) (Union.union.{u1} (Finset.{u1} β) (Finset.instUnionFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₁ t₁) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₂ t₂))
+Case conversion may be inaccurate. Consider using '#align finset.inter_smul_union_subset_union Finset.inter_smul_union_subset_unionₓ'. -/
@[to_additive]
theorem inter_smul_union_subset_union [DecidableEq α] : (s₁ ∩ s₂) • (t₁ ∪ t₂) ⊆ s₁ • t₁ ∪ s₂ • t₂ :=
image₂_inter_union_subset_union
#align finset.inter_smul_union_subset_union Finset.inter_smul_union_subset_union
#align finset.inter_vadd_union_subset_union Finset.inter_vadd_union_subset_union
+/- warning: finset.union_smul_inter_subset_union -> Finset.union_smul_inter_subset_union is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {s₁ : Finset.{u1} α} {s₂ : Finset.{u1} α} {t₁ : Finset.{u2} β} {t₂ : Finset.{u2} β} [_inst_3 : DecidableEq.{succ u1} α], HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) (Inter.inter.{u2} (Finset.{u2} β) (Finset.hasInter.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) t₁ t₂)) (Union.union.{u2} (Finset.{u2} β) (Finset.hasUnion.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₁ t₁) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s₂ t₂))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {s₁ : Finset.{u2} α} {s₂ : Finset.{u2} α} {t₁ : Finset.{u1} β} {t₂ : Finset.{u1} β} [_inst_3 : DecidableEq.{succ u2} α], HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) (Union.union.{u2} (Finset.{u2} α) (Finset.instUnionFinset.{u2} α (fun (a : α) (b : α) => _inst_3 a b)) s₁ s₂) (Inter.inter.{u1} (Finset.{u1} β) (Finset.instInterFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) t₁ t₂)) (Union.union.{u1} (Finset.{u1} β) (Finset.instUnionFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₁ t₁) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s₂ t₂))
+Case conversion may be inaccurate. Consider using '#align finset.union_smul_inter_subset_union Finset.union_smul_inter_subset_unionₓ'. -/
@[to_additive]
theorem union_smul_inter_subset_union [DecidableEq α] : (s₁ ∪ s₂) • (t₁ ∩ t₂) ⊆ s₁ • t₁ ∪ s₂ • t₂ :=
image₂_union_inter_subset_union
@@ -2075,7 +2083,7 @@ scoped[Pointwise] attribute [instance] Finset.vsub
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11710 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11712 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11710 x._@.Mathlib.Data.Finset.Pointwise._hyg.11712) s t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12097 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12099 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12097 x._@.Mathlib.Data.Finset.Pointwise._hyg.12099) s t)
Case conversion may be inaccurate. Consider using '#align finset.vsub_def Finset.vsub_defₓ'. -/
theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
rfl
@@ -2085,7 +2093,7 @@ theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11762 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11764 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11762 x._@.Mathlib.Data.Finset.Pointwise._hyg.11764) s t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12149 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12151 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12149 x._@.Mathlib.Data.Finset.Pointwise._hyg.12151) s t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)
Case conversion may be inaccurate. Consider using '#align finset.image_vsub_product Finset.image_vsub_productₓ'. -/
@[simp]
theorem image_vsub_product : image₂ (· -ᵥ ·) s t = s -ᵥ t :=
@@ -2222,7 +2230,7 @@ theorem vsub_singleton (b : β) : s -ᵥ ({b} : Finset β) = s.image (· -ᵥ b)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {t : Finset.{u2} β} (a : β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) a) t) (Finset.image.{u2, u1} β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2 a) t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {t : Finset.{u1} β} (a : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) t) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12499 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12501 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12499 x._@.Mathlib.Data.Finset.Pointwise._hyg.12501) a) t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {t : Finset.{u1} β} (a : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) t) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12886 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12888 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12886 x._@.Mathlib.Data.Finset.Pointwise._hyg.12888) a) t)
Case conversion may be inaccurate. Consider using '#align finset.singleton_vsub Finset.singleton_vsubₓ'. -/
theorem singleton_vsub (a : β) : ({a} : Finset β) -ᵥ t = t.image ((· -ᵥ ·) a) :=
image₂_singleton_left
@@ -2393,11 +2401,13 @@ theorem coe_smul_finset (a : α) (s : Finset β) : (↑(a • s) : Set β) = a
#align finset.coe_vadd_finset Finset.coe_vadd_finset
-/
+#print Finset.smul_mem_smul_finset /-
@[to_additive]
theorem smul_mem_smul_finset : b ∈ s → a • b ∈ a • s :=
mem_image_of_mem _
#align finset.smul_mem_smul_finset Finset.smul_mem_smul_finset
#align finset.vadd_mem_vadd_finset Finset.vadd_mem_vadd_finset
+-/
#print Finset.smul_finset_card_le /-
@[to_additive]
@@ -2481,6 +2491,12 @@ theorem smul_finset_inter_subset : a • (s₁ ∩ s₂) ⊆ a • s₁ ∩ a
#align finset.vadd_finset_inter_subset Finset.vadd_finset_inter_subset
-/
+/- warning: finset.smul_finset_subset_smul -> Finset.smul_finset_subset_smul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {t : Finset.{u2} β} {a : α} {s : Finset.{u1} α}, (Membership.Mem.{u1, u1} α (Finset.{u1} α) (Finset.hasMem.{u1} α) a s) -> (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) a t) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s t))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] {t : Finset.{u1} β} {a : α} {s : Finset.{u2} α}, (Membership.mem.{u2, u2} α (Finset.{u2} α) (Finset.instMembershipFinset.{u2} α) a s) -> (HasSubset.Subset.{u1} (Finset.{u1} β) (Finset.instHasSubsetFinset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) a t) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s t))
+Case conversion may be inaccurate. Consider using '#align finset.smul_finset_subset_smul Finset.smul_finset_subset_smulₓ'. -/
@[to_additive]
theorem smul_finset_subset_smul {s : Finset α} : a ∈ s → a • t ⊆ s • t :=
image_subset_image₂_right
@@ -2658,6 +2674,12 @@ section SMul
variable [DecidableEq β] [DecidableEq γ] [SMul αᵐᵒᵖ β] [SMul β γ] [SMul α γ]
+/- warning: finset.op_smul_finset_smul_eq_smul_smul_finset -> Finset.op_smul_finset_smul_eq_smul_smul_finset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : DecidableEq.{succ u3} γ] [_inst_3 : SMul.{u1, u2} (MulOpposite.{u1} α) β] [_inst_4 : SMul.{u2, u3} β γ] [_inst_5 : SMul.{u1, u3} α γ] (a : α) (s : Finset.{u2} β) (t : Finset.{u3} γ), (forall (a : α) (b : β) (c : γ), Eq.{succ u3} γ (SMul.smul.{u2, u3} β γ _inst_4 (SMul.smul.{u1, u2} (MulOpposite.{u1} α) β _inst_3 (MulOpposite.op.{u1} α a) b) c) (SMul.smul.{u2, u3} β γ _inst_4 b (SMul.smul.{u1, u3} α γ _inst_5 a c))) -> (Eq.{succ u3} (Finset.{u3} γ) (SMul.smul.{u2, u3} (Finset.{u2} β) (Finset.{u3} γ) (Finset.smul.{u2, u3} β γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4) (SMul.smul.{u1, u2} (MulOpposite.{u1} α) (Finset.{u2} β) (Finset.smulFinset.{u1, u2} (MulOpposite.{u1} α) β (fun (a : β) (b : β) => _inst_1 a b) _inst_3) (MulOpposite.op.{u1} α a) s) t) (SMul.smul.{u2, u3} (Finset.{u2} β) (Finset.{u3} γ) (Finset.smul.{u2, u3} β γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4) s (SMul.smul.{u1, u3} α (Finset.{u3} γ) (Finset.smulFinset.{u1, u3} α γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_5) a t)))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : DecidableEq.{succ u3} β] [_inst_2 : DecidableEq.{succ u2} γ] [_inst_3 : SMul.{u1, u3} (MulOpposite.{u1} α) β] [_inst_4 : SMul.{u3, u2} β γ] [_inst_5 : SMul.{u1, u2} α γ] (a : α) (s : Finset.{u3} β) (t : Finset.{u2} γ), (forall (a : α) (b : β) (c : γ), Eq.{succ u2} γ (HSMul.hSMul.{u3, u2, u2} β γ γ (instHSMul.{u3, u2} β γ _inst_4) (HSMul.hSMul.{u1, u3, u3} (MulOpposite.{u1} α) β β (instHSMul.{u1, u3} (MulOpposite.{u1} α) β _inst_3) (MulOpposite.op.{u1} α a) b) c) (HSMul.hSMul.{u3, u2, u2} β γ γ (instHSMul.{u3, u2} β γ _inst_4) b (HSMul.hSMul.{u1, u2, u2} α γ γ (instHSMul.{u1, u2} α γ _inst_5) a c))) -> (Eq.{succ u2} (Finset.{u2} γ) (HSMul.hSMul.{u3, u2, u2} (Finset.{u3} β) (Finset.{u2} γ) (Finset.{u2} γ) (instHSMul.{u3, u2} (Finset.{u3} β) (Finset.{u2} γ) (Finset.smul.{u3, u2} β γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4)) (HSMul.hSMul.{u1, u3, u3} (MulOpposite.{u1} α) (Finset.{u3} β) (Finset.{u3} β) (instHSMul.{u1, u3} (MulOpposite.{u1} α) (Finset.{u3} β) (Finset.smulFinset.{u1, u3} (MulOpposite.{u1} α) β (fun (a : β) (b : β) => _inst_1 a b) _inst_3)) (MulOpposite.op.{u1} α a) s) t) (HSMul.hSMul.{u3, u2, u2} (Finset.{u3} β) (Finset.{u2} γ) (Finset.{u2} γ) (instHSMul.{u3, u2} (Finset.{u3} β) (Finset.{u2} γ) (Finset.smul.{u3, u2} β γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4)) s (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} γ) (Finset.{u2} γ) (instHSMul.{u1, u2} α (Finset.{u2} γ) (Finset.smulFinset.{u1, u2} α γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_5)) a t)))
+Case conversion may be inaccurate. Consider using '#align finset.op_smul_finset_smul_eq_smul_smul_finset Finset.op_smul_finset_smul_eq_smul_smul_finsetₓ'. -/
-- TODO: replace hypothesis and conclusion with a typeclass
@[to_additive]
theorem op_smul_finset_smul_eq_smul_smul_finset (a : α) (s : Finset β) (t : Finset γ)
@@ -2674,29 +2696,37 @@ section Mul
variable [Mul α] [DecidableEq α] {s t u : Finset α} {a : α}
+#print Finset.op_smul_finset_subset_mul /-
@[to_additive]
theorem op_smul_finset_subset_mul : a ∈ t → op a • s ⊆ s * t :=
image_subset_image₂_left
#align finset.op_smul_finset_subset_mul Finset.op_smul_finset_subset_mul
#align finset.op_vadd_finset_subset_add Finset.op_vadd_finset_subset_add
+-/
+#print Finset.bunionᵢ_op_smul_finset /-
@[simp, to_additive]
theorem bunionᵢ_op_smul_finset (s t : Finset α) : (t.bunionᵢ fun a => op a • s) = s * t :=
bunionᵢ_image_right
#align finset.bUnion_op_smul_finset Finset.bunionᵢ_op_smul_finset
#align finset.bUnion_op_vadd_finset Finset.bunionᵢ_op_vadd_finset
+-/
+#print Finset.mul_subset_iff_left /-
@[to_additive]
theorem mul_subset_iff_left : s * t ⊆ u ↔ ∀ a ∈ s, a • t ⊆ u :=
image₂_subset_iff_left
#align finset.mul_subset_iff_left Finset.mul_subset_iff_left
#align finset.add_subset_iff_left Finset.add_subset_iff_left
+-/
+#print Finset.mul_subset_iff_right /-
@[to_additive]
theorem mul_subset_iff_right : s * t ⊆ u ↔ ∀ b ∈ t, op b • s ⊆ u :=
image₂_subset_iff_right
#align finset.mul_subset_iff_right Finset.mul_subset_iff_right
#align finset.add_subset_iff_right Finset.add_subset_iff_right
+-/
end Mul
@@ -2704,6 +2734,12 @@ section Semigroup
variable [Semigroup α] [DecidableEq α]
+/- warning: finset.op_smul_finset_mul_eq_mul_smul_finset -> Finset.op_smul_finset_mul_eq_mul_smul_finset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : Semigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α _inst_1))) (SMul.smul.{u1, u1} (MulOpposite.{u1} α) (Finset.{u1} α) (Finset.smulFinset.{u1, u1} (MulOpposite.{u1} α) α (fun (a : α) (b : α) => _inst_2 a b) (Mul.toHasOppositeSMul.{u1} α (Semigroup.toHasMul.{u1} α _inst_1))) (MulOpposite.op.{u1} α a) s) t) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toHasMul.{u1} α _inst_1))) s (SMul.smul.{u1, u1} α (Finset.{u1} α) (Finset.smulFinset.{u1, u1} α α (fun (a : α) (b : α) => _inst_2 a b) (Mul.toSMul.{u1} α (Semigroup.toHasMul.{u1} α _inst_1))) a t))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : Semigroup.{u1} α] [_inst_2 : DecidableEq.{succ u1} α] (a : α) (s : Finset.{u1} α) (t : Finset.{u1} α), Eq.{succ u1} (Finset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α _inst_1))) (HSMul.hSMul.{u1, u1, u1} (MulOpposite.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHSMul.{u1, u1} (MulOpposite.{u1} α) (Finset.{u1} α) (Finset.smulFinset.{u1, u1} (MulOpposite.{u1} α) α (fun (a : α) (b : α) => _inst_2 a b) (Mul.toHasOppositeSMul.{u1} α (Semigroup.toMul.{u1} α _inst_1)))) (MulOpposite.op.{u1} α a) s) t) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_2 a b) (Semigroup.toMul.{u1} α _inst_1))) s (HSMul.hSMul.{u1, u1, u1} α (Finset.{u1} α) (Finset.{u1} α) (instHSMul.{u1, u1} α (Finset.{u1} α) (Finset.smulFinset.{u1, u1} α α (fun (a : α) (b : α) => _inst_2 a b) (Mul.toSMul.{u1} α (Semigroup.toMul.{u1} α _inst_1)))) a t))
+Case conversion may be inaccurate. Consider using '#align finset.op_smul_finset_mul_eq_mul_smul_finset Finset.op_smul_finset_mul_eq_mul_smul_finsetₓ'. -/
@[to_additive]
theorem op_smul_finset_mul_eq_mul_smul_finset (a : α) (s : Finset α) (t : Finset α) :
op a • s * t = s * a • t :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/88fcb83fe7996142dfcfe7368d31304a9adc874a
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn, Yaël Dillies
! This file was ported from Lean 3 source module data.finset.pointwise
-! leanprover-community/mathlib commit b685f506164f8d17a6404048bc4d696739c5d976
+! leanprover-community/mathlib commit 5e526d18cea33550268dcbbddcb822d5cde40654
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -60,7 +60,7 @@ pointwise subtraction
-/
-open Function
+open Function MulOpposite
open BigOperators Pointwise
@@ -295,9 +295,23 @@ theorem inv_nonempty_iff : s⁻¹.Nonempty ↔ s.Nonempty :=
#align finset.neg_nonempty_iff Finset.neg_nonempty_iff
-/
-alias inv_nonempty_iff ↔ nonempty.inv nonempty.of_inv
-#align finset.nonempty.inv Finset.nonempty.inv
+/- warning: finset.nonempty.of_inv -> Finset.nonempty.of_inv is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Inv.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s)) -> (Finset.Nonempty.{u1} α s)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Inv.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Finset.Nonempty.{u1} α (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s))
+Case conversion may be inaccurate. Consider using '#align finset.nonempty.of_inv Finset.nonempty.of_invₓ'. -/
+/- warning: finset.nonempty.inv -> Finset.nonempty.inv is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Inv.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α s) -> (Finset.Nonempty.{u1} α (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s))
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : Inv.{u1} α] {s : Finset.{u1} α}, (Finset.Nonempty.{u1} α (Inv.inv.{u1} (Finset.{u1} α) (Finset.inv.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s)) -> (Finset.Nonempty.{u1} α s)
+Case conversion may be inaccurate. Consider using '#align finset.nonempty.inv Finset.nonempty.invₓ'. -/
+alias inv_nonempty_iff ↔ nonempty.of_inv nonempty.inv
#align finset.nonempty.of_inv Finset.nonempty.of_inv
+#align finset.nonempty.inv Finset.nonempty.inv
+
+attribute [to_additive] nonempty.inv nonempty.of_inv
#print Finset.inv_subset_inv /-
@[to_additive, mono]
@@ -598,6 +612,18 @@ theorem mul_inter_subset : s * (t₁ ∩ t₂) ⊆ s * t₁ ∩ (s * t₂) :=
#align finset.add_inter_subset Finset.add_inter_subset
-/
+@[to_additive]
+theorem inter_mul_union_subset_union : s₁ ∩ s₂ * (t₁ ∪ t₂) ⊆ s₁ * t₁ ∪ s₂ * t₂ :=
+ image₂_inter_union_subset_union
+#align finset.inter_mul_union_subset_union Finset.inter_mul_union_subset_union
+#align finset.inter_add_union_subset_union Finset.inter_add_union_subset_union
+
+@[to_additive]
+theorem union_mul_inter_subset_union : (s₁ ∪ s₂) * (t₁ ∩ t₂) ⊆ s₁ * t₁ ∪ s₂ * t₂ :=
+ image₂_union_inter_subset_union
+#align finset.union_mul_inter_subset_union Finset.union_mul_inter_subset_union
+#align finset.union_add_inter_subset_union Finset.union_add_inter_subset_union
+
#print Finset.subset_mul /-
/-- If a finset `u` is contained in the product of two sets `s * t`, we can find two finsets `s'`,
`t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' * t'`. -/
@@ -872,6 +898,18 @@ theorem div_inter_subset : s / (t₁ ∩ t₂) ⊆ s / t₁ ∩ (s / t₂) :=
#align finset.sub_inter_subset Finset.sub_inter_subset
-/
+@[to_additive]
+theorem inter_div_union_subset_union : s₁ ∩ s₂ / (t₁ ∪ t₂) ⊆ s₁ / t₁ ∪ s₂ / t₂ :=
+ image₂_inter_union_subset_union
+#align finset.inter_div_union_subset_union Finset.inter_div_union_subset_union
+#align finset.inter_sub_union_subset_union Finset.inter_sub_union_subset_union
+
+@[to_additive]
+theorem union_div_inter_subset_union : (s₁ ∪ s₂) / (t₁ ∩ t₂) ⊆ s₁ / t₁ ∪ s₂ / t₂ :=
+ image₂_union_inter_subset_union
+#align finset.union_div_inter_subset_union Finset.union_div_inter_subset_union
+#align finset.union_sub_inter_subset_union Finset.union_sub_inter_subset_union
+
#print Finset.subset_div /-
/-- If a finset `u` is contained in the product of two sets `s / t`, we can find two finsets `s'`,
`t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' / t'`. -/
@@ -1981,6 +2019,18 @@ theorem smul_inter_subset : s • (t₁ ∩ t₂) ⊆ s • t₁ ∩ s • t₂
#align finset.vadd_inter_subset Finset.vadd_inter_subset
-/
+@[to_additive]
+theorem inter_smul_union_subset_union [DecidableEq α] : (s₁ ∩ s₂) • (t₁ ∪ t₂) ⊆ s₁ • t₁ ∪ s₂ • t₂ :=
+ image₂_inter_union_subset_union
+#align finset.inter_smul_union_subset_union Finset.inter_smul_union_subset_union
+#align finset.inter_vadd_union_subset_union Finset.inter_vadd_union_subset_union
+
+@[to_additive]
+theorem union_smul_inter_subset_union [DecidableEq α] : (s₁ ∪ s₂) • (t₁ ∩ t₂) ⊆ s₁ • t₁ ∪ s₂ • t₂ :=
+ image₂_union_inter_subset_union
+#align finset.union_smul_inter_subset_union Finset.union_smul_inter_subset_union
+#align finset.union_vadd_inter_subset_union Finset.union_vadd_inter_subset_union
+
/- warning: finset.subset_smul -> Finset.subset_smul is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] {u : Finset.{u2} β} {s : Set.{u1} α} {t : Set.{u2} β}, (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} β) (Set.{u2} β) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (CoeTCₓ.coe.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (Finset.Set.hasCoeT.{u2} β))) u) (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_2) s t)) -> (Exists.{succ u1} (Finset.{u1} α) (fun (s' : Finset.{u1} α) => Exists.{succ u2} (Finset.{u2} β) (fun (t' : Finset.{u2} β) => And (HasSubset.Subset.{u1} (Set.{u1} α) (Set.hasSubset.{u1} α) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s') s) (And (HasSubset.Subset.{u2} (Set.{u2} β) (Set.hasSubset.{u2} β) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Finset.{u2} β) (Set.{u2} β) (HasLiftT.mk.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (CoeTCₓ.coe.{succ u2, succ u2} (Finset.{u2} β) (Set.{u2} β) (Finset.Set.hasCoeT.{u2} β))) t') t) (HasSubset.Subset.{u2} (Finset.{u2} β) (Finset.hasSubset.{u2} β) u (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s' t'))))))
@@ -2343,13 +2393,11 @@ theorem coe_smul_finset (a : α) (s : Finset β) : (↑(a • s) : Set β) = a
#align finset.coe_vadd_finset Finset.coe_vadd_finset
-/
-#print Finset.smul_finset_mem_smul_finset /-
@[to_additive]
-theorem smul_finset_mem_smul_finset : b ∈ s → a • b ∈ a • s :=
+theorem smul_mem_smul_finset : b ∈ s → a • b ∈ a • s :=
mem_image_of_mem _
-#align finset.smul_finset_mem_smul_finset Finset.smul_finset_mem_smul_finset
-#align finset.vadd_finset_mem_vadd_finset Finset.vadd_finset_mem_vadd_finset
--/
+#align finset.smul_mem_smul_finset Finset.smul_mem_smul_finset
+#align finset.vadd_mem_vadd_finset Finset.vadd_mem_vadd_finset
#print Finset.smul_finset_card_le /-
@[to_additive]
@@ -2433,16 +2481,23 @@ theorem smul_finset_inter_subset : a • (s₁ ∩ s₂) ⊆ a • s₁ ∩ a
#align finset.vadd_finset_inter_subset Finset.vadd_finset_inter_subset
-/
+@[to_additive]
+theorem smul_finset_subset_smul {s : Finset α} : a ∈ s → a • t ⊆ s • t :=
+ image_subset_image₂_right
+#align finset.smul_finset_subset_smul Finset.smul_finset_subset_smul
+#align finset.vadd_finset_subset_vadd Finset.vadd_finset_subset_vadd
+
/- warning: finset.bUnion_smul_finset -> Finset.bunionᵢ_smul_finset is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : SMul.{u1, u2} α β] (s : Finset.{u1} α) (t : Finset.{u2} β), Eq.{succ u2} (Finset.{u2} β) (Finset.bunionᵢ.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) s (fun (_x : α) => SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) _x t)) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2) s t)
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : SMul.{u2, u1} α β] (s : Finset.{u2} α) (t : Finset.{u1} β), Eq.{succ u1} (Finset.{u1} β) (Finset.bunionᵢ.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) s (fun (_x : α) => HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) _x t)) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_2)) s t)
Case conversion may be inaccurate. Consider using '#align finset.bUnion_smul_finset Finset.bunionᵢ_smul_finsetₓ'. -/
-@[simp]
+@[simp, to_additive]
theorem bunionᵢ_smul_finset (s : Finset α) (t : Finset β) : s.bunionᵢ (· • t) = s • t :=
bunionᵢ_image_left
#align finset.bUnion_smul_finset Finset.bunionᵢ_smul_finset
+#align finset.bUnion_vadd_finset Finset.bunionᵢ_vadd_finset
end SMul
@@ -2599,6 +2654,65 @@ instance noZeroSMulDivisors_finset [Zero α] [Zero β] [SMul α β] [NoZeroSMulD
end Instances
+section SMul
+
+variable [DecidableEq β] [DecidableEq γ] [SMul αᵐᵒᵖ β] [SMul β γ] [SMul α γ]
+
+-- TODO: replace hypothesis and conclusion with a typeclass
+@[to_additive]
+theorem op_smul_finset_smul_eq_smul_smul_finset (a : α) (s : Finset β) (t : Finset γ)
+ (h : ∀ (a : α) (b : β) (c : γ), (op a • b) • c = b • a • c) : (op a • s) • t = s • a • t :=
+ by
+ ext
+ simp [mem_smul, mem_smul_finset, h]
+#align finset.op_smul_finset_smul_eq_smul_smul_finset Finset.op_smul_finset_smul_eq_smul_smul_finset
+#align finset.op_vadd_finset_vadd_eq_vadd_vadd_finset Finset.op_vadd_finset_vadd_eq_vadd_vadd_finset
+
+end SMul
+
+section Mul
+
+variable [Mul α] [DecidableEq α] {s t u : Finset α} {a : α}
+
+@[to_additive]
+theorem op_smul_finset_subset_mul : a ∈ t → op a • s ⊆ s * t :=
+ image_subset_image₂_left
+#align finset.op_smul_finset_subset_mul Finset.op_smul_finset_subset_mul
+#align finset.op_vadd_finset_subset_add Finset.op_vadd_finset_subset_add
+
+@[simp, to_additive]
+theorem bunionᵢ_op_smul_finset (s t : Finset α) : (t.bunionᵢ fun a => op a • s) = s * t :=
+ bunionᵢ_image_right
+#align finset.bUnion_op_smul_finset Finset.bunionᵢ_op_smul_finset
+#align finset.bUnion_op_vadd_finset Finset.bunionᵢ_op_vadd_finset
+
+@[to_additive]
+theorem mul_subset_iff_left : s * t ⊆ u ↔ ∀ a ∈ s, a • t ⊆ u :=
+ image₂_subset_iff_left
+#align finset.mul_subset_iff_left Finset.mul_subset_iff_left
+#align finset.add_subset_iff_left Finset.add_subset_iff_left
+
+@[to_additive]
+theorem mul_subset_iff_right : s * t ⊆ u ↔ ∀ b ∈ t, op b • s ⊆ u :=
+ image₂_subset_iff_right
+#align finset.mul_subset_iff_right Finset.mul_subset_iff_right
+#align finset.add_subset_iff_right Finset.add_subset_iff_right
+
+end Mul
+
+section Semigroup
+
+variable [Semigroup α] [DecidableEq α]
+
+@[to_additive]
+theorem op_smul_finset_mul_eq_mul_smul_finset (a : α) (s : Finset α) (t : Finset α) :
+ op a • s * t = s * a • t :=
+ op_smul_finset_smul_eq_smul_smul_finset _ _ _ fun _ _ _ => mul_assoc _ _ _
+#align finset.op_smul_finset_mul_eq_mul_smul_finset Finset.op_smul_finset_mul_eq_mul_smul_finset
+#align finset.op_vadd_finset_add_eq_add_vadd_finset Finset.op_vadd_finset_add_eq_add_vadd_finset
+
+end Semigroup
+
section LeftCancelSemigroup
variable [LeftCancelSemigroup α] [DecidableEq α] (s t : Finset α) (a : α)
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce11c3c2a285bbe6937e26d9792fda4e51f3fe1a
@@ -2524,7 +2524,7 @@ instance isCentralScalar [SMul α β] [SMul αᵐᵒᵖ β] [IsCentralScalar α
IsCentralScalar α (Finset β) :=
⟨fun a s => coe_injective <| by simp only [coe_smul_finset, coe_smul, op_smul_eq_smul]⟩
#align finset.is_central_scalar Finset.isCentralScalar
-#align finset.is_central_vadd Finset.is_central_vadd
+#align finset.is_central_vadd Finset.isCentralVAdd
-/
#print Finset.mulAction /-
@@ -2799,30 +2799,43 @@ theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t :=
#align finset.subset_smul_finset_iff Finset.subset_smul_finset_iff
#align finset.subset_vadd_finset_iff Finset.subset_vadd_finset_iff
+#print Finset.smul_finset_inter /-
@[to_additive]
theorem smul_finset_inter : a • (s ∩ t) = a • s ∩ a • t :=
image_inter _ _ <| MulAction.injective a
#align finset.smul_finset_inter Finset.smul_finset_inter
#align finset.vadd_finset_inter Finset.vadd_finset_inter
+-/
+#print Finset.smul_finset_sdiff /-
@[to_additive]
theorem smul_finset_sdiff : a • (s \ t) = a • s \ a • t :=
image_sdiff _ _ <| MulAction.injective a
#align finset.smul_finset_sdiff Finset.smul_finset_sdiff
#align finset.vadd_finset_sdiff Finset.vadd_finset_sdiff
+-/
+/- warning: finset.smul_finset_symm_diff -> Finset.smul_finset_symmDiff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) a (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toHasSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toHasSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) a s) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3)) a t))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : Group.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) a (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.instLatticeFinset.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.instSDiffFinset.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.instLatticeFinset.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.instSDiffFinset.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) a s) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u1, u2} α β (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_2)) _inst_3))) a t))
+Case conversion may be inaccurate. Consider using '#align finset.smul_finset_symm_diff Finset.smul_finset_symmDiffₓ'. -/
@[to_additive]
theorem smul_finset_symmDiff : a • s ∆ t = (a • s) ∆ (a • t) :=
image_symmDiff _ _ <| MulAction.injective a
#align finset.smul_finset_symm_diff Finset.smul_finset_symmDiff
#align finset.vadd_finset_symm_diff Finset.vadd_finset_symmDiff
+#print Finset.smul_finset_univ /-
@[simp, to_additive]
theorem smul_finset_univ [Fintype β] : a • (univ : Finset β) = univ :=
image_univ_of_surjective <| MulAction.surjective a
#align finset.smul_finset_univ Finset.smul_finset_univ
#align finset.vadd_finset_univ Finset.vadd_finset_univ
+-/
+#print Finset.smul_univ /-
@[simp, to_additive]
theorem smul_univ [Fintype β] {s : Finset α} (hs : s.Nonempty) : s • (univ : Finset β) = univ :=
coe_injective <| by
@@ -2830,6 +2843,7 @@ theorem smul_univ [Fintype β] {s : Finset α} (hs : s.Nonempty) : s • (univ :
exact Set.smul_univ hs
#align finset.smul_univ Finset.smul_univ
#align finset.vadd_univ Finset.vadd_univ
+-/
#print Finset.card_smul_finset /-
@[simp, to_additive]
@@ -2907,14 +2921,32 @@ theorem subset_smul_finset_iff₀ (ha : a ≠ 0) : s ⊆ a • t ↔ a⁻¹ •
show _ ⊆ Units.mk0 a ha • _ ↔ _ from subset_smul_finset_iff
#align finset.subset_smul_finset_iff₀ Finset.subset_smul_finset_iff₀
+/- warning: finset.smul_finset_inter₀ -> Finset.smul_finset_inter₀ is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a (Inter.inter.{u2} (Finset.{u2} β) (Finset.hasInter.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (Inter.inter.{u2} (Finset.{u2} β) (Finset.hasInter.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a s) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a t)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {t : Finset.{u1} β} {a : α}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a (Inter.inter.{u1} (Finset.{u1} β) (Finset.instInterFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (Inter.inter.{u1} (Finset.{u1} β) (Finset.instInterFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a s) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a t)))
+Case conversion may be inaccurate. Consider using '#align finset.smul_finset_inter₀ Finset.smul_finset_inter₀ₓ'. -/
theorem smul_finset_inter₀ (ha : a ≠ 0) : a • (s ∩ t) = a • s ∩ a • t :=
image_inter _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_inter₀ Finset.smul_finset_inter₀
+/- warning: finset.smul_finset_sdiff₀ -> Finset.smul_finset_sdiff₀ is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a (SDiff.sdiff.{u2} (Finset.{u2} β) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (SDiff.sdiff.{u2} (Finset.{u2} β) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a s) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a t)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {t : Finset.{u1} β} {a : α}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a (SDiff.sdiff.{u1} (Finset.{u1} β) (Finset.instSDiffFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (SDiff.sdiff.{u1} (Finset.{u1} β) (Finset.instSDiffFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a s) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a t)))
+Case conversion may be inaccurate. Consider using '#align finset.smul_finset_sdiff₀ Finset.smul_finset_sdiff₀ₓ'. -/
theorem smul_finset_sdiff₀ (ha : a ≠ 0) : a • (s \ t) = a • s \ a • t :=
image_sdiff _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_sdiff₀ Finset.smul_finset_sdiff₀
+/- warning: finset.smul_finset_symm_diff₀ -> Finset.smul_finset_symm_diff₀ is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] {s : Finset.{u2} β} {t : Finset.{u2} β} {a : α}, (Ne.{succ u1} α a (OfNat.ofNat.{u1} α 0 (OfNat.mk.{u1} α 0 (Zero.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))) -> (Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toHasSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (symmDiff.{u2} (Finset.{u2} β) (SemilatticeSup.toHasSup.{u2} (Finset.{u2} β) (Lattice.toSemilatticeSup.{u2} (Finset.{u2} β) (Finset.lattice.{u2} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.hasSdiff.{u2} β (fun (a : β) (b : β) => _inst_1 a b)) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a s) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) a t)))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} β] [_inst_2 : GroupWithZero.{u2} α] [_inst_3 : MulAction.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))] {s : Finset.{u1} β} {t : Finset.{u1} β} {a : α}, (Ne.{succ u2} α a (OfNat.ofNat.{u2} α 0 (Zero.toOfNat0.{u2} α (MonoidWithZero.toZero.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2))))) -> (Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a (symmDiff.{u1} (Finset.{u1} β) (SemilatticeSup.toSup.{u1} (Finset.{u1} β) (Lattice.toSemilatticeSup.{u1} (Finset.{u1} β) (Finset.instLatticeFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.instSDiffFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) s t)) (symmDiff.{u1} (Finset.{u1} β) (SemilatticeSup.toSup.{u1} (Finset.{u1} β) (Lattice.toSemilatticeSup.{u1} (Finset.{u1} β) (Finset.instLatticeFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)))) (Finset.instSDiffFinset.{u1} β (fun (a : β) (b : β) => _inst_1 a b)) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a s) (HSMul.hSMul.{u2, u1, u1} α (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} α (Finset.{u1} β) (Finset.smulFinset.{u2, u1} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toSMul.{u2, u1} α β (MonoidWithZero.toMonoid.{u2} α (GroupWithZero.toMonoidWithZero.{u2} α _inst_2)) _inst_3))) a t)))
+Case conversion may be inaccurate. Consider using '#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symm_diff₀ₓ'. -/
theorem smul_finset_symm_diff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (a • t) :=
image_symmDiff _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symm_diff₀
mathlib commit https://github.com/leanprover-community/mathlib/commit/b685f506164f8d17a6404048bc4d696739c5d976
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn, Yaël Dillies
! This file was ported from Lean 3 source module data.finset.pointwise
-! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
+! leanprover-community/mathlib commit b685f506164f8d17a6404048bc4d696739c5d976
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -2519,10 +2519,12 @@ instance isScalarTower'' [SMul α β] [SMul α γ] [SMul β γ] [IsScalarTower
-/
#print Finset.isCentralScalar /-
+@[to_additive]
instance isCentralScalar [SMul α β] [SMul αᵐᵒᵖ β] [IsCentralScalar α β] :
IsCentralScalar α (Finset β) :=
⟨fun a s => coe_injective <| by simp only [coe_smul_finset, coe_smul, op_smul_eq_smul]⟩
#align finset.is_central_scalar Finset.isCentralScalar
+#align finset.is_central_vadd Finset.is_central_vadd
-/
#print Finset.mulAction /-
@@ -2797,6 +2799,38 @@ theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t :=
#align finset.subset_smul_finset_iff Finset.subset_smul_finset_iff
#align finset.subset_vadd_finset_iff Finset.subset_vadd_finset_iff
+@[to_additive]
+theorem smul_finset_inter : a • (s ∩ t) = a • s ∩ a • t :=
+ image_inter _ _ <| MulAction.injective a
+#align finset.smul_finset_inter Finset.smul_finset_inter
+#align finset.vadd_finset_inter Finset.vadd_finset_inter
+
+@[to_additive]
+theorem smul_finset_sdiff : a • (s \ t) = a • s \ a • t :=
+ image_sdiff _ _ <| MulAction.injective a
+#align finset.smul_finset_sdiff Finset.smul_finset_sdiff
+#align finset.vadd_finset_sdiff Finset.vadd_finset_sdiff
+
+@[to_additive]
+theorem smul_finset_symmDiff : a • s ∆ t = (a • s) ∆ (a • t) :=
+ image_symmDiff _ _ <| MulAction.injective a
+#align finset.smul_finset_symm_diff Finset.smul_finset_symmDiff
+#align finset.vadd_finset_symm_diff Finset.vadd_finset_symmDiff
+
+@[simp, to_additive]
+theorem smul_finset_univ [Fintype β] : a • (univ : Finset β) = univ :=
+ image_univ_of_surjective <| MulAction.surjective a
+#align finset.smul_finset_univ Finset.smul_finset_univ
+#align finset.vadd_finset_univ Finset.vadd_finset_univ
+
+@[simp, to_additive]
+theorem smul_univ [Fintype β] {s : Finset α} (hs : s.Nonempty) : s • (univ : Finset β) = univ :=
+ coe_injective <| by
+ push_cast
+ exact Set.smul_univ hs
+#align finset.smul_univ Finset.smul_univ
+#align finset.vadd_univ Finset.vadd_univ
+
#print Finset.card_smul_finset /-
@[simp, to_additive]
theorem card_smul_finset (a : α) (s : Finset β) : (a • s).card = s.card :=
@@ -2873,6 +2907,18 @@ theorem subset_smul_finset_iff₀ (ha : a ≠ 0) : s ⊆ a • t ↔ a⁻¹ •
show _ ⊆ Units.mk0 a ha • _ ↔ _ from subset_smul_finset_iff
#align finset.subset_smul_finset_iff₀ Finset.subset_smul_finset_iff₀
+theorem smul_finset_inter₀ (ha : a ≠ 0) : a • (s ∩ t) = a • s ∩ a • t :=
+ image_inter _ _ <| MulAction.injective₀ ha
+#align finset.smul_finset_inter₀ Finset.smul_finset_inter₀
+
+theorem smul_finset_sdiff₀ (ha : a ≠ 0) : a • (s \ t) = a • s \ a • t :=
+ image_sdiff _ _ <| MulAction.injective₀ ha
+#align finset.smul_finset_sdiff₀ Finset.smul_finset_sdiff₀
+
+theorem smul_finset_symm_diff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (a • t) :=
+ image_symmDiff _ _ <| MulAction.injective₀ ha
+#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symm_diff₀
+
/- warning: finset.smul_univ₀ -> Finset.smul_univ₀ is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : GroupWithZero.{u1} α] [_inst_3 : MulAction.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2))] [_inst_4 : Fintype.{u2} β] {s : Finset.{u1} α}, (Not (HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) s (OfNat.ofNat.{u1} (Finset.{u1} α) 0 (OfNat.mk.{u1} (Finset.{u1} α) 0 (Zero.zero.{u1} (Finset.{u1} α) (Finset.zero.{u1} α (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)))))))))) -> (Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) (MulAction.toHasSmul.{u1, u2} α β (MonoidWithZero.toMonoid.{u1} α (GroupWithZero.toMonoidWithZero.{u1} α _inst_2)) _inst_3)) s (Finset.univ.{u2} β _inst_4)) (Finset.univ.{u2} β _inst_4))
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce86f4e05e9a9b8da5e316b22c76ce76440c56a1
@@ -170,11 +170,13 @@ theorem Nonempty.subset_one_iff (h : s.Nonempty) : s ⊆ 1 ↔ s = 1 :=
#align finset.nonempty.subset_zero_iff Finset.Nonempty.subset_zero_iff
-/
+#print Finset.card_one /-
@[simp, to_additive]
theorem card_one : (1 : Finset α).card = 1 :=
card_singleton _
#align finset.card_one Finset.card_one
#align finset.card_zero Finset.card_zero
+-/
#print Finset.singletonOneHom /-
/-- The singleton operation as a `one_hom`. -/
@@ -953,12 +955,24 @@ protected def commSemigroup : CommSemigroup (Finset α) :=
#align finset.add_comm_semigroup Finset.addCommSemigroup
-/
+/- warning: finset.inter_mul_union_subset -> Finset.inter_mul_union_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : CommSemigroup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toHasMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toHasMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) s t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : CommSemigroup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) s t)
+Case conversion may be inaccurate. Consider using '#align finset.inter_mul_union_subset Finset.inter_mul_union_subsetₓ'. -/
@[to_additive]
theorem inter_mul_union_subset : s ∩ t * (s ∪ t) ⊆ s * t :=
image₂_inter_union_subset mul_comm
#align finset.inter_mul_union_subset Finset.inter_mul_union_subset
#align finset.inter_add_union_subset Finset.inter_add_union_subset
+/- warning: finset.union_mul_inter_subset -> Finset.union_mul_inter_subset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : CommSemigroup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toHasMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) (Union.union.{u1} (Finset.{u1} α) (Finset.hasUnion.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toHasMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) s t)
+but is expected to have type
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : CommSemigroup.{u1} α] {s : Finset.{u1} α} {t : Finset.{u1} α}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) (Union.union.{u1} (Finset.{u1} α) (Finset.instUnionFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_1 a b)) s t)) (HMul.hMul.{u1, u1, u1} (Finset.{u1} α) (Finset.{u1} α) (Finset.{u1} α) (instHMul.{u1} (Finset.{u1} α) (Finset.mul.{u1} α (fun (a : α) (b : α) => _inst_1 a b) (Semigroup.toMul.{u1} α (CommSemigroup.toSemigroup.{u1} α _inst_3)))) s t)
+Case conversion may be inaccurate. Consider using '#align finset.union_mul_inter_subset Finset.union_mul_inter_subsetₓ'. -/
@[to_additive]
theorem union_mul_inter_subset : (s ∪ t) * (s ∩ t) ⊆ s * t :=
image₂_union_inter_subset mul_comm
@@ -1657,7 +1671,7 @@ variable [Group α] {s t : Finset α} {a b : α}
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a) b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9367 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 x._@.Mathlib.Data.Finset.Pointwise._hyg.9367) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9367 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 x._@.Mathlib.Data.Finset.Pointwise._hyg.9367) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9499 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9501 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9499 x._@.Mathlib.Data.Finset.Pointwise._hyg.9501) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9499 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9501 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9499 x._@.Mathlib.Data.Finset.Pointwise._hyg.9501) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singletonₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_singleton :
@@ -1683,7 +1697,7 @@ theorem preimage_mul_right_singleton :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9551 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 x._@.Mathlib.Data.Finset.Pointwise._hyg.9551) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9551 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 x._@.Mathlib.Data.Finset.Pointwise._hyg.9551) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9683 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9685 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9683 x._@.Mathlib.Data.Finset.Pointwise._hyg.9685) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9683 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9685 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9683 x._@.Mathlib.Data.Finset.Pointwise._hyg.9685) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one Finset.preimage_mul_left_oneₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹} :=
@@ -1707,7 +1721,7 @@ theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).Inj
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9720 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 x._@.Mathlib.Data.Finset.Pointwise._hyg.9720) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9720 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 x._@.Mathlib.Data.Finset.Pointwise._hyg.9720) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9852 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9854 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9852 x._@.Mathlib.Data.Finset.Pointwise._hyg.9854) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9852 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9854 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9852 x._@.Mathlib.Data.Finset.Pointwise._hyg.9854) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one' Finset.preimage_mul_left_one'ₓ'. -/
@[to_additive]
theorem preimage_mul_left_one' : preimage 1 ((· * ·) a⁻¹) ((mul_right_injective _).InjOn _) = {a} :=
@@ -2011,7 +2025,7 @@ scoped[Pointwise] attribute [instance] Finset.vsub
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11576 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11578 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11576 x._@.Mathlib.Data.Finset.Pointwise._hyg.11578) s t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11710 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11712 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11710 x._@.Mathlib.Data.Finset.Pointwise._hyg.11712) s t)
Case conversion may be inaccurate. Consider using '#align finset.vsub_def Finset.vsub_defₓ'. -/
theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
rfl
@@ -2021,7 +2035,7 @@ theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11628 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11630 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11628 x._@.Mathlib.Data.Finset.Pointwise._hyg.11630) s t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11762 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11764 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11762 x._@.Mathlib.Data.Finset.Pointwise._hyg.11764) s t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)
Case conversion may be inaccurate. Consider using '#align finset.image_vsub_product Finset.image_vsub_productₓ'. -/
@[simp]
theorem image_vsub_product : image₂ (· -ᵥ ·) s t = s -ᵥ t :=
@@ -2158,7 +2172,7 @@ theorem vsub_singleton (b : β) : s -ᵥ ({b} : Finset β) = s.image (· -ᵥ b)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {t : Finset.{u2} β} (a : β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) a) t) (Finset.image.{u2, u1} β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2 a) t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {t : Finset.{u1} β} (a : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) t) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12365 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12367 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12365 x._@.Mathlib.Data.Finset.Pointwise._hyg.12367) a) t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {t : Finset.{u1} β} (a : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) t) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12499 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12501 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12499 x._@.Mathlib.Data.Finset.Pointwise._hyg.12501) a) t)
Case conversion may be inaccurate. Consider using '#align finset.singleton_vsub Finset.singleton_vsubₓ'. -/
theorem singleton_vsub (a : β) : ({a} : Finset β) -ᵥ t = t.image ((· -ᵥ ·) a) :=
image₂_singleton_left
@@ -2683,6 +2697,12 @@ end
open Pointwise
+/- warning: finset.image_smul_comm -> Finset.image_smul_comm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} β] [_inst_2 : DecidableEq.{succ u3} γ] [_inst_3 : SMul.{u1, u2} α β] [_inst_4 : SMul.{u1, u3} α γ] (f : β -> γ) (a : α) (s : Finset.{u2} β), (forall (b : β), Eq.{succ u3} γ (f (SMul.smul.{u1, u2} α β _inst_3 a b)) (SMul.smul.{u1, u3} α γ _inst_4 a (f b))) -> (Eq.{succ u3} (Finset.{u3} γ) (Finset.image.{u2, u3} β γ (fun (a : γ) (b : γ) => _inst_2 a b) f (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_3) a s)) (SMul.smul.{u1, u3} α (Finset.{u3} γ) (Finset.smulFinset.{u1, u3} α γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4) a (Finset.image.{u2, u3} β γ (fun (a : γ) (b : γ) => _inst_2 a b) f s)))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : DecidableEq.{succ u3} β] [_inst_2 : DecidableEq.{succ u2} γ] [_inst_3 : SMul.{u1, u3} α β] [_inst_4 : SMul.{u1, u2} α γ] (f : β -> γ) (a : α) (s : Finset.{u3} β), (forall (b : β), Eq.{succ u2} γ (f (HSMul.hSMul.{u1, u3, u3} α β β (instHSMul.{u1, u3} α β _inst_3) a b)) (HSMul.hSMul.{u1, u2, u2} α γ γ (instHSMul.{u1, u2} α γ _inst_4) a (f b))) -> (Eq.{succ u2} (Finset.{u2} γ) (Finset.image.{u3, u2} β γ (fun (a : γ) (b : γ) => _inst_2 a b) f (HSMul.hSMul.{u1, u3, u3} α (Finset.{u3} β) (Finset.{u3} β) (instHSMul.{u1, u3} α (Finset.{u3} β) (Finset.smulFinset.{u1, u3} α β (fun (a : β) (b : β) => _inst_1 a b) _inst_3)) a s)) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} γ) (Finset.{u2} γ) (instHSMul.{u1, u2} α (Finset.{u2} γ) (Finset.smulFinset.{u1, u2} α γ (fun (a : γ) (b : γ) => _inst_2 a b) _inst_4)) a (Finset.image.{u3, u2} β γ (fun (a : γ) (b : γ) => _inst_2 a b) f s)))
+Case conversion may be inaccurate. Consider using '#align finset.image_smul_comm Finset.image_smul_commₓ'. -/
@[to_additive]
theorem image_smul_comm [DecidableEq β] [DecidableEq γ] [SMul α β] [SMul α γ] (f : β → γ) (a : α)
(s : Finset β) : (∀ b, f (a • b) = a • f b) → (a • s).image f = a • s.image f :=
@@ -2690,6 +2710,12 @@ theorem image_smul_comm [DecidableEq β] [DecidableEq γ] [SMul α β] [SMul α
#align finset.image_smul_comm Finset.image_smul_comm
#align finset.image_vadd_comm Finset.image_vadd_comm
+/- warning: finset.image_smul_distrib -> Finset.image_smul_distrib is a dubious translation:
+lean 3 declaration is
+ forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Monoid.{u2} α] [_inst_4 : Monoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4)] (f : F) (a : α) (s : Finset.{u2} α), Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4) _inst_5))) f) (SMul.smul.{u2, u2} α (Finset.{u2} α) (Finset.smulFinset.{u2, u2} α α (fun (a : α) (b : α) => _inst_1 a b) (Mul.toSMul.{u2} α (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)))) a s)) (SMul.smul.{u3, u3} β (Finset.{u3} β) (Finset.smulFinset.{u3, u3} β β (fun (a : β) (b : β) => _inst_2 a b) (Mul.toSMul.{u3} β (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)))) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4) _inst_5))) f a) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α _inst_3)) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α _inst_3) (Monoid.toMulOneClass.{u3} β _inst_4) _inst_5))) f) s))
+but is expected to have type
+ forall {F : Type.{u1}} {α : Type.{u3}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u3} α] [_inst_2 : DecidableEq.{succ u2} β] [_inst_3 : Monoid.{u3} α] [_inst_4 : Monoid.{u2} β] [_inst_5 : MonoidHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4)] (f : F) (a : α) (s : Finset.{u3} α), Eq.{succ u2} (Finset.{u2} β) (Finset.image.{u3, u2} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f) (HSMul.hSMul.{u3, u3, u3} α (Finset.{u3} α) (Finset.{u3} α) (instHSMul.{u3, u3} α (Finset.{u3} α) (Finset.smulFinset.{u3, u3} α α (fun (a : α) (b : α) => _inst_1 a b) (MulAction.toSMul.{u3, u3} α α _inst_3 (Monoid.toMulAction.{u3} α _inst_3)))) a s)) (HSMul.hSMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) (Finset.{u2} β) (Finset.smulFinset.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) β (fun (a : β) (b : β) => _inst_2 a b) (MulAction.toSMul.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) β _inst_4 (Monoid.toMulAction.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) _inst_4)))) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f a) (Finset.image.{u3, u2} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u3, succ u2} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u3, u2} F α β (MulOneClass.toMul.{u3} α (Monoid.toMulOneClass.{u3} α _inst_3)) (MulOneClass.toMul.{u2} β (Monoid.toMulOneClass.{u2} β _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F α β (Monoid.toMulOneClass.{u3} α _inst_3) (Monoid.toMulOneClass.{u2} β _inst_4) _inst_5)) f) s))
+Case conversion may be inaccurate. Consider using '#align finset.image_smul_distrib Finset.image_smul_distribₓ'. -/
@[to_additive]
theorem image_smul_distrib [DecidableEq α] [DecidableEq β] [Monoid α] [Monoid β]
[MonoidHomClass F α β] (f : F) (a : α) (s : Finset α) : (a • s).image f = f a • s.image f :=
@@ -2771,11 +2797,13 @@ theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t :=
#align finset.subset_smul_finset_iff Finset.subset_smul_finset_iff
#align finset.subset_vadd_finset_iff Finset.subset_vadd_finset_iff
+#print Finset.card_smul_finset /-
@[simp, to_additive]
theorem card_smul_finset (a : α) (s : Finset β) : (a • s).card = s.card :=
card_image_of_injective _ <| MulAction.injective _
#align finset.card_smul_finset Finset.card_smul_finset
#align finset.card_vadd_finset Finset.card_vadd_finset
+-/
end Group
@@ -3027,17 +3055,21 @@ section One
variable [One α]
+#print Set.toFinset_one /-
@[simp, to_additive]
theorem toFinset_one : (1 : Set α).toFinset = 1 :=
rfl
#align set.to_finset_one Set.toFinset_one
#align set.to_finset_zero Set.toFinset_zero
+-/
+#print Set.Finite.toFinset_one /-
@[simp, to_additive]
theorem Finite.toFinset_one (h : (1 : Set α).Finite := finite_one) : h.toFinset = 1 :=
Finite.toFinset_singleton _
#align set.finite.to_finset_one Set.Finite.toFinset_one
#align set.finite.to_finset_zero Set.Finite.toFinset_zero
+-/
end One
@@ -3045,19 +3077,23 @@ section Mul
variable [DecidableEq α] [Mul α] {s t : Set α}
+#print Set.toFinset_mul /-
@[simp, to_additive]
theorem toFinset_mul (s t : Set α) [Fintype s] [Fintype t] [Fintype ↥(s * t)] :
(s * t).toFinset = s.toFinset * t.toFinset :=
toFinset_image2 _ _ _
#align set.to_finset_mul Set.toFinset_mul
#align set.to_finset_add Set.toFinset_add
+-/
+#print Set.Finite.toFinset_mul /-
@[to_additive]
theorem Finite.toFinset_mul (hs : s.Finite) (ht : t.Finite) (hf := hs.mul ht) :
hf.toFinset = hs.toFinset * ht.toFinset :=
Finite.toFinset_image2 _ _ _
#align set.finite.to_finset_mul Set.Finite.toFinset_mul
#align set.finite.to_finset_add Set.Finite.toFinset_add
+-/
end Mul
@@ -3065,6 +3101,12 @@ section SMul
variable [SMul α β] [DecidableEq β] {a : α} {s : Set α} {t : Set β}
+/- warning: set.to_finset_smul -> Set.toFinset_smul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SMul.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u2} β] (s : Set.{u1} α) (t : Set.{u2} β) [_inst_3 : Fintype.{u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} α) Type.{u1} (Set.hasCoeToSort.{u1} α) s)] [_inst_4 : Fintype.{u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} β) Type.{u2} (Set.hasCoeToSort.{u2} β) t)] [_inst_5 : Fintype.{u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} β) Type.{u2} (Set.hasCoeToSort.{u2} β) (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_1) s t))], Eq.{succ u2} (Finset.{u2} β) (Set.toFinset.{u2} β (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_1) s t) _inst_5) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_2 a b) _inst_1) (Set.toFinset.{u1} α s _inst_3) (Set.toFinset.{u2} β t _inst_4))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u1} β] (s : Set.{u2} α) (t : Set.{u1} β) [_inst_3 : Fintype.{u2} (Set.Elem.{u2} α s)] [_inst_4 : Fintype.{u1} (Set.Elem.{u1} β t)] [_inst_5 : Fintype.{u1} (Set.Elem.{u1} β (HSMul.hSMul.{u2, u1, u1} (Set.{u2} α) (Set.{u1} β) (Set.{u1} β) (instHSMul.{u2, u1} (Set.{u2} α) (Set.{u1} β) (Set.smul.{u2, u1} α β _inst_1)) s t))], Eq.{succ u1} (Finset.{u1} β) (Set.toFinset.{u1} β (HSMul.hSMul.{u2, u1, u1} (Set.{u2} α) (Set.{u1} β) (Set.{u1} β) (instHSMul.{u2, u1} (Set.{u2} α) (Set.{u1} β) (Set.smul.{u2, u1} α β _inst_1)) s t) _inst_5) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_2 a b) _inst_1)) (Set.toFinset.{u2} α s _inst_3) (Set.toFinset.{u1} β t _inst_4))
+Case conversion may be inaccurate. Consider using '#align set.to_finset_smul Set.toFinset_smulₓ'. -/
@[simp, to_additive]
theorem toFinset_smul (s : Set α) (t : Set β) [Fintype s] [Fintype t] [Fintype ↥(s • t)] :
(s • t).toFinset = s.toFinset • t.toFinset :=
@@ -3072,12 +3114,18 @@ theorem toFinset_smul (s : Set α) (t : Set β) [Fintype s] [Fintype t] [Fintype
#align set.to_finset_smul Set.toFinset_smul
#align set.to_finset_vadd Set.toFinset_vadd
+/- warning: set.finite.to_finset_smul -> Set.Finite.toFinset_smul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : SMul.{u1, u2} α β] [_inst_2 : DecidableEq.{succ u2} β] {s : Set.{u1} α} {t : Set.{u2} β} (hs : Set.Finite.{u1} α s) (ht : Set.Finite.{u2} β t) (hf : optParam.{0} (Set.Finite.{u2} β (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_1) s t)) (Set.Finite.smul.{u1, u2} α β _inst_1 s t hs ht)), Eq.{succ u2} (Finset.{u2} β) (Set.Finite.toFinset.{u2} β (SMul.smul.{u1, u2} (Set.{u1} α) (Set.{u2} β) (Set.smul.{u1, u2} α β _inst_1) s t) hf) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_2 a b) _inst_1) (Set.Finite.toFinset.{u1} α s hs) (Set.Finite.toFinset.{u2} β t ht))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : SMul.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u1} β] {s : Set.{u2} α} {t : Set.{u1} β} (hs : Set.Finite.{u2} α s) (ht : Set.Finite.{u1} β t) (hf : optParam.{0} (Set.Finite.{u1} β (HSMul.hSMul.{u2, u1, u1} (Set.{u2} α) (Set.{u1} β) (Set.{u1} β) (instHSMul.{u2, u1} (Set.{u2} α) (Set.{u1} β) (Set.smul.{u2, u1} α β _inst_1)) s t)) (Set.Finite.smul.{u1, u2} α β _inst_1 s t hs ht)), Eq.{succ u1} (Finset.{u1} β) (Set.Finite.toFinset.{u1} β (HSMul.hSMul.{u2, u1, u1} (Set.{u2} α) (Set.{u1} β) (Set.{u1} β) (instHSMul.{u2, u1} (Set.{u2} α) (Set.{u1} β) (Set.smul.{u2, u1} α β _inst_1)) s t) hf) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_2 a b) _inst_1)) (Set.Finite.toFinset.{u2} α s hs) (Set.Finite.toFinset.{u1} β t ht))
+Case conversion may be inaccurate. Consider using '#align set.finite.to_finset_smul Set.Finite.toFinset_smulₓ'. -/
@[to_additive]
theorem Finite.toFinset_smul (hs : s.Finite) (ht : t.Finite) (hf := hs.smul ht) :
hf.toFinset = hs.toFinset • ht.toFinset :=
Finite.toFinset_image2 _ _ _
#align set.finite.to_finset_smul Set.Finite.toFinset_smul
-#align set.finite.to_finset_vadd Set.Finite.to_finset_vadd
+#align set.finite.to_finset_vadd Set.Finite.toFinset_vadd
end SMul
@@ -3085,19 +3133,23 @@ section SMul
variable [DecidableEq β] [SMul α β] {a : α} {s : Set β}
+#print Set.toFinset_smul_set /-
@[simp, to_additive]
theorem toFinset_smul_set (a : α) (s : Set β) [Fintype s] [Fintype ↥(a • s)] :
(a • s).toFinset = a • s.toFinset :=
toFinset_image _ _
#align set.to_finset_smul_set Set.toFinset_smul_set
#align set.to_finset_vadd_set Set.toFinset_vadd_set
+-/
+#print Set.Finite.toFinset_smul_set /-
@[to_additive]
theorem Finite.toFinset_smul_set (hs : s.Finite) (hf : (a • s).Finite := hs.smul_set) :
hf.toFinset = a • hs.toFinset :=
Finite.toFinset_image _ _ _
#align set.finite.to_finset_smul_set Set.Finite.toFinset_smul_set
#align set.finite.to_finset_vadd_set Set.Finite.toFinset_vadd_set
+-/
end SMul
@@ -3107,16 +3159,20 @@ variable [DecidableEq α] [VSub α β] {s t : Set β}
include α
+#print Set.toFinset_vsub /-
@[simp]
theorem toFinset_vsub (s t : Set β) [Fintype s] [Fintype t] [Fintype ↥(s -ᵥ t)] :
(s -ᵥ t : Set α).toFinset = s.toFinset -ᵥ t.toFinset :=
toFinset_image2 _ _ _
#align set.to_finset_vsub Set.toFinset_vsub
+-/
+#print Set.Finite.toFinset_vsub /-
theorem Finite.toFinset_vsub (hs : s.Finite) (ht : t.Finite) (hf := hs.vsub ht) :
hf.toFinset = hs.toFinset -ᵥ ht.toFinset :=
Finite.toFinset_image2 _ _ _
#align set.finite.to_finset_vsub Set.Finite.toFinset_vsub
+-/
end VSub
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce86f4e05e9a9b8da5e316b22c76ce76440c56a1
@@ -2993,7 +2993,7 @@ variable [Ring α] [AddCommGroup β] [Module α β] [DecidableEq β] {s : Finset
/- warning: finset.neg_smul_finset -> Finset.neg_smul_finset is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Ring.{u1} α] [_inst_2 : AddCommGroup.{u2} β] [_inst_3 : Module.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)] [_inst_4 : DecidableEq.{succ u2} β] {t : Finset.{u2} β} {a : α}, Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) (Neg.neg.{u1} α (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (NonAssocRing.toAddGroupWithOne.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1))))) a) t) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β (AddCommGroup.toAddGroup.{u2} β _inst_2)))) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) a t))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Ring.{u1} α] [_inst_2 : AddCommGroup.{u2} β] [_inst_3 : Module.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)] [_inst_4 : DecidableEq.{succ u2} β] {t : Finset.{u2} β} {a : α}, Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) (Neg.neg.{u1} α (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1))))) a) t) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β (AddCommGroup.toAddGroup.{u2} β _inst_2)))) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) a t))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Ring.{u1} α] [_inst_2 : AddCommGroup.{u2} β] [_inst_3 : Module.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)] [_inst_4 : DecidableEq.{succ u2} β] {t : Finset.{u2} β} {a : α}, Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} α β (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3)))))) (Neg.neg.{u1} α (Ring.toNeg.{u1} α _inst_1) a) t) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2)))))) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} α β (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3)))))) a t))
Case conversion may be inaccurate. Consider using '#align finset.neg_smul_finset Finset.neg_smul_finsetₓ'. -/
@@ -3004,7 +3004,7 @@ theorem neg_smul_finset : -a • t = -(a • t) := by
/- warning: finset.neg_smul -> Finset.neg_smul is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Ring.{u1} α] [_inst_2 : AddCommGroup.{u2} β] [_inst_3 : Module.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)] [_inst_4 : DecidableEq.{succ u2} β] {s : Finset.{u1} α} {t : Finset.{u2} β} [_inst_5 : DecidableEq.{succ u1} α], Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) (Neg.neg.{u1} (Finset.{u1} α) (Finset.neg.{u1} α (fun (a : α) (b : α) => _inst_5 a b) (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (NonAssocRing.toAddGroupWithOne.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) s) t) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β (AddCommGroup.toAddGroup.{u2} β _inst_2)))) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) s t))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Ring.{u1} α] [_inst_2 : AddCommGroup.{u2} β] [_inst_3 : Module.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)] [_inst_4 : DecidableEq.{succ u2} β] {s : Finset.{u1} α} {t : Finset.{u2} β} [_inst_5 : DecidableEq.{succ u1} α], Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) (Neg.neg.{u1} (Finset.{u1} α) (Finset.neg.{u1} α (fun (a : α) (b : α) => _inst_5 a b) (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (AddCommGroupWithOne.toAddGroupWithOne.{u1} α (Ring.toAddCommGroupWithOne.{u1} α _inst_1)))))) s) t) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β (AddCommGroup.toAddGroup.{u2} β _inst_2)))) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) s t))
but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : Ring.{u2} α] [_inst_2 : AddCommGroup.{u1} β] [_inst_3 : Module.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2)] [_inst_4 : DecidableEq.{succ u1} β] {s : Finset.{u2} α} {t : Finset.{u1} β} [_inst_5 : DecidableEq.{succ u2} α], Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} α β (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1))) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} α β (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1)) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (Module.toMulActionWithZero.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2) _inst_3)))))) (Neg.neg.{u2} (Finset.{u2} α) (Finset.neg.{u2} α (fun (a : α) (b : α) => _inst_5 a b) (Ring.toNeg.{u2} α _inst_1)) s) t) (Neg.neg.{u1} (Finset.{u1} β) (Finset.neg.{u1} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2)))))) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} α β (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1))) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} α β (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1)) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (Module.toMulActionWithZero.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2) _inst_3)))))) s t))
Case conversion may be inaccurate. Consider using '#align finset.neg_smul Finset.neg_smulₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/55d771df074d0dd020139ee1cd4b95521422df9f
@@ -4,12 +4,13 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn, Yaël Dillies
! This file was ported from Lean 3 source module data.finset.pointwise
-! leanprover-community/mathlib commit f16e7a22e11fc09c71f25446ac1db23a24e8a0bd
+! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Data.Finset.NAry
import Mathbin.Data.Finset.Preimage
+import Mathbin.Data.Set.Pointwise.Finite
import Mathbin.Data.Set.Pointwise.Smul
import Mathbin.Data.Set.Pointwise.ListOfFn
@@ -169,6 +170,12 @@ theorem Nonempty.subset_one_iff (h : s.Nonempty) : s ⊆ 1 ↔ s = 1 :=
#align finset.nonempty.subset_zero_iff Finset.Nonempty.subset_zero_iff
-/
+@[simp, to_additive]
+theorem card_one : (1 : Finset α).card = 1 :=
+ card_singleton _
+#align finset.card_one Finset.card_one
+#align finset.card_zero Finset.card_zero
+
#print Finset.singletonOneHom /-
/-- The singleton operation as a `one_hom`. -/
@[to_additive "The singleton operation as a `zero_hom`."]
@@ -933,15 +940,33 @@ protected def semigroup [Semigroup α] : Semigroup (Finset α) :=
#align finset.add_semigroup Finset.addSemigroup
-/
+section CommSemigroup
+
+variable [CommSemigroup α] {s t : Finset α}
+
#print Finset.commSemigroup /-
/-- `finset α` is a `comm_semigroup` under pointwise operations if `α` is. -/
@[to_additive "`finset α` is an `add_comm_semigroup` under pointwise operations if `α` is. "]
-protected def commSemigroup [CommSemigroup α] : CommSemigroup (Finset α) :=
+protected def commSemigroup : CommSemigroup (Finset α) :=
coe_injective.CommSemigroup _ coe_mul
#align finset.comm_semigroup Finset.commSemigroup
#align finset.add_comm_semigroup Finset.addCommSemigroup
-/
+@[to_additive]
+theorem inter_mul_union_subset : s ∩ t * (s ∪ t) ⊆ s * t :=
+ image₂_inter_union_subset mul_comm
+#align finset.inter_mul_union_subset Finset.inter_mul_union_subset
+#align finset.inter_add_union_subset Finset.inter_add_union_subset
+
+@[to_additive]
+theorem union_mul_inter_subset : (s ∪ t) * (s ∩ t) ⊆ s * t :=
+ image₂_union_inter_subset mul_comm
+#align finset.union_mul_inter_subset Finset.union_mul_inter_subset
+#align finset.union_add_inter_subset Finset.union_add_inter_subset
+
+end CommSemigroup
+
section MulOneClass
variable [MulOneClass α]
@@ -2658,6 +2683,20 @@ end
open Pointwise
+@[to_additive]
+theorem image_smul_comm [DecidableEq β] [DecidableEq γ] [SMul α β] [SMul α γ] (f : β → γ) (a : α)
+ (s : Finset β) : (∀ b, f (a • b) = a • f b) → (a • s).image f = a • s.image f :=
+ image_comm
+#align finset.image_smul_comm Finset.image_smul_comm
+#align finset.image_vadd_comm Finset.image_vadd_comm
+
+@[to_additive]
+theorem image_smul_distrib [DecidableEq α] [DecidableEq β] [Monoid α] [Monoid β]
+ [MonoidHomClass F α β] (f : F) (a : α) (s : Finset α) : (a • s).image f = f a • s.image f :=
+ image_comm <| map_mul _ _
+#align finset.image_smul_distrib Finset.image_smul_distrib
+#align finset.image_vadd_distrib Finset.image_vadd_distrib
+
section Group
variable [DecidableEq β] [Group α] [MulAction α β] {s t : Finset β} {a : α} {b : β}
@@ -2732,6 +2771,12 @@ theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t :=
#align finset.subset_smul_finset_iff Finset.subset_smul_finset_iff
#align finset.subset_vadd_finset_iff Finset.subset_vadd_finset_iff
+@[simp, to_additive]
+theorem card_smul_finset (a : α) (s : Finset β) : (a • s).card = s.card :=
+ card_image_of_injective _ <| MulAction.injective _
+#align finset.card_smul_finset Finset.card_smul_finset
+#align finset.card_vadd_finset Finset.card_vadd_finset
+
end Group
section GroupWithZero
@@ -2974,3 +3019,106 @@ end Ring
end Finset
+open Pointwise
+
+namespace Set
+
+section One
+
+variable [One α]
+
+@[simp, to_additive]
+theorem toFinset_one : (1 : Set α).toFinset = 1 :=
+ rfl
+#align set.to_finset_one Set.toFinset_one
+#align set.to_finset_zero Set.toFinset_zero
+
+@[simp, to_additive]
+theorem Finite.toFinset_one (h : (1 : Set α).Finite := finite_one) : h.toFinset = 1 :=
+ Finite.toFinset_singleton _
+#align set.finite.to_finset_one Set.Finite.toFinset_one
+#align set.finite.to_finset_zero Set.Finite.toFinset_zero
+
+end One
+
+section Mul
+
+variable [DecidableEq α] [Mul α] {s t : Set α}
+
+@[simp, to_additive]
+theorem toFinset_mul (s t : Set α) [Fintype s] [Fintype t] [Fintype ↥(s * t)] :
+ (s * t).toFinset = s.toFinset * t.toFinset :=
+ toFinset_image2 _ _ _
+#align set.to_finset_mul Set.toFinset_mul
+#align set.to_finset_add Set.toFinset_add
+
+@[to_additive]
+theorem Finite.toFinset_mul (hs : s.Finite) (ht : t.Finite) (hf := hs.mul ht) :
+ hf.toFinset = hs.toFinset * ht.toFinset :=
+ Finite.toFinset_image2 _ _ _
+#align set.finite.to_finset_mul Set.Finite.toFinset_mul
+#align set.finite.to_finset_add Set.Finite.toFinset_add
+
+end Mul
+
+section SMul
+
+variable [SMul α β] [DecidableEq β] {a : α} {s : Set α} {t : Set β}
+
+@[simp, to_additive]
+theorem toFinset_smul (s : Set α) (t : Set β) [Fintype s] [Fintype t] [Fintype ↥(s • t)] :
+ (s • t).toFinset = s.toFinset • t.toFinset :=
+ toFinset_image2 _ _ _
+#align set.to_finset_smul Set.toFinset_smul
+#align set.to_finset_vadd Set.toFinset_vadd
+
+@[to_additive]
+theorem Finite.toFinset_smul (hs : s.Finite) (ht : t.Finite) (hf := hs.smul ht) :
+ hf.toFinset = hs.toFinset • ht.toFinset :=
+ Finite.toFinset_image2 _ _ _
+#align set.finite.to_finset_smul Set.Finite.toFinset_smul
+#align set.finite.to_finset_vadd Set.Finite.to_finset_vadd
+
+end SMul
+
+section SMul
+
+variable [DecidableEq β] [SMul α β] {a : α} {s : Set β}
+
+@[simp, to_additive]
+theorem toFinset_smul_set (a : α) (s : Set β) [Fintype s] [Fintype ↥(a • s)] :
+ (a • s).toFinset = a • s.toFinset :=
+ toFinset_image _ _
+#align set.to_finset_smul_set Set.toFinset_smul_set
+#align set.to_finset_vadd_set Set.toFinset_vadd_set
+
+@[to_additive]
+theorem Finite.toFinset_smul_set (hs : s.Finite) (hf : (a • s).Finite := hs.smul_set) :
+ hf.toFinset = a • hs.toFinset :=
+ Finite.toFinset_image _ _ _
+#align set.finite.to_finset_smul_set Set.Finite.toFinset_smul_set
+#align set.finite.to_finset_vadd_set Set.Finite.toFinset_vadd_set
+
+end SMul
+
+section VSub
+
+variable [DecidableEq α] [VSub α β] {s t : Set β}
+
+include α
+
+@[simp]
+theorem toFinset_vsub (s t : Set β) [Fintype s] [Fintype t] [Fintype ↥(s -ᵥ t)] :
+ (s -ᵥ t : Set α).toFinset = s.toFinset -ᵥ t.toFinset :=
+ toFinset_image2 _ _ _
+#align set.to_finset_vsub Set.toFinset_vsub
+
+theorem Finite.toFinset_vsub (hs : s.Finite) (ht : t.Finite) (hf := hs.vsub ht) :
+ hf.toFinset = hs.toFinset -ᵥ ht.toFinset :=
+ Finite.toFinset_image2 _ _ _
+#align set.finite.to_finset_vsub Set.Finite.toFinset_vsub
+
+end VSub
+
+end Set
+
mathlib commit https://github.com/leanprover-community/mathlib/commit/dd6388c44e6f6b4547070b887c5905d5cfe6c9f8
@@ -1520,7 +1520,7 @@ theorem isUnit_iff_singleton : IsUnit s ↔ ∃ a, s = {a} := by
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a) b) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a)) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_3)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a)) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a) b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a)) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) (Finset.toSet.{u1} α t))))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a)) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) (Finset.toSet.{u1} α t))))
Case conversion may be inaccurate. Consider using '#align finset.image_mul_left Finset.image_mul_leftₓ'. -/
@[simp, to_additive]
theorem image_mul_left :
@@ -1545,7 +1545,7 @@ theorem image_mul_right : image (· * b) t = preimage t (· * b⁻¹) ((mul_left
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a) b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_3)))) a) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) t))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) a) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Finset.toSet.{u1} α t))))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : Group.{u1} α] {t : Finset.{u1} α} {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.image.{u1, u1} α α (fun (a : α) (b : α) => _inst_1 a b) (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_3)))) a) b) t) (Finset.preimage.{u1, u1} α α t (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_3))) a) (Set.preimage.{u1, u1} α α (fun (b : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) a b) (Finset.toSet.{u1} α t))))
Case conversion may be inaccurate. Consider using '#align finset.image_mul_left' Finset.image_mul_left'ₓ'. -/
@[to_additive]
theorem image_mul_left' :
@@ -1632,7 +1632,7 @@ variable [Group α] {s t : Finset α} {a b : α}
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a) b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9367 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 x._@.Mathlib.Data.Finset.Pointwise._hyg.9367) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9367 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 x._@.Mathlib.Data.Finset.Pointwise._hyg.9367) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9367 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 x._@.Mathlib.Data.Finset.Pointwise._hyg.9367) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9367 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 x._@.Mathlib.Data.Finset.Pointwise._hyg.9367) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singletonₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_singleton :
@@ -1658,7 +1658,7 @@ theorem preimage_mul_right_singleton :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9551 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 x._@.Mathlib.Data.Finset.Pointwise._hyg.9551) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9551 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 x._@.Mathlib.Data.Finset.Pointwise._hyg.9551) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9551 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 x._@.Mathlib.Data.Finset.Pointwise._hyg.9551) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9551 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 x._@.Mathlib.Data.Finset.Pointwise._hyg.9551) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one Finset.preimage_mul_left_oneₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹} :=
@@ -1682,7 +1682,7 @@ theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).Inj
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9720 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 x._@.Mathlib.Data.Finset.Pointwise._hyg.9720) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9720 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 x._@.Mathlib.Data.Finset.Pointwise._hyg.9720) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9720 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 x._@.Mathlib.Data.Finset.Pointwise._hyg.9720) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2622 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2624 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2622 x._@.Mathlib.Algebra.Group.Defs._hyg.2624) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9720 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 x._@.Mathlib.Data.Finset.Pointwise._hyg.9720) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one' Finset.preimage_mul_left_one'ₓ'. -/
@[to_additive]
theorem preimage_mul_left_one' : preimage 1 ((· * ·) a⁻¹) ((mul_right_injective _).InjOn _) = {a} :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -996,7 +996,7 @@ def singletonMonoidHom : α →* Finset α :=
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α))
Case conversion may be inaccurate. Consider using '#align finset.coe_singleton_monoid_hom Finset.coe_singletonMonoidHomₓ'. -/
@[simp, to_additive]
theorem coe_singletonMonoidHom : (singletonMonoidHom : α → Finset α) = singleton :=
@@ -1008,7 +1008,7 @@ theorem coe_singletonMonoidHom : (singletonMonoidHom : α → Finset α) = singl
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (a : α), Eq.{succ u1} (Finset.{u1} α) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) a) (Singleton.singleton.{u1, u1} α ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => Finset.{u1} α) a) (Finset.instSingletonFinset.{u1} α) a)
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) a) (Singleton.singleton.{u1, u1} α ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => Finset.{u1} α) a) (Finset.instSingletonFinset.{u1} α) a)
Case conversion may be inaccurate. Consider using '#align finset.singleton_monoid_hom_apply Finset.singletonMonoidHom_applyₓ'. -/
@[simp, to_additive]
theorem singletonMonoidHom_apply (a : α) : singletonMonoidHom a = {a} :=
@@ -1031,7 +1031,7 @@ def coeMonoidHom : Finset α →* Set α where
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : Finset.{u1} α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Finset.{u1} α) => Set.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (CoeTC.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.instCoeTCFinsetSet.{u1} α))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : Finset.{u1} α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Finset.{u1} α) => Set.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (CoeTC.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.instCoeTCFinsetSet.{u1} α))
Case conversion may be inaccurate. Consider using '#align finset.coe_coe_monoid_hom Finset.coe_coeMonoidHomₓ'. -/
@[simp, to_additive]
theorem coe_coeMonoidHom : (coeMonoidHom : Finset α → Set α) = coe :=
@@ -1043,7 +1043,7 @@ theorem coe_coeMonoidHom : (coeMonoidHom : Finset α → Set α) = coe :=
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} (Set.{u1} α) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Finset.{u1} α) => Set.{u1} α) s) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) s) (Finset.toSet.{u1} α s)
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Finset.{u1} α) => Set.{u1} α) s) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) s) (Finset.toSet.{u1} α s)
Case conversion may be inaccurate. Consider using '#align finset.coe_monoid_hom_apply Finset.coeMonoidHom_applyₓ'. -/
@[simp, to_additive]
theorem coeMonoidHom_apply (s : Finset α) : coeMonoidHom s = s :=
@@ -1570,7 +1570,7 @@ theorem image_mul_right' :
lean 3 declaration is
forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))] (f : F) {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) (HDiv.hDiv.{u2, u2, u2} (Finset.{u2} α) (Finset.{u2} α) (Finset.{u2} α) (instHDiv.{u2} (Finset.{u2} α) (Finset.div.{u2} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toHasDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) s t)) (HDiv.hDiv.{u3, u3, u3} (Finset.{u3} β) (Finset.{u3} β) (Finset.{u3} β) (instHDiv.{u3} (Finset.{u3} β) (Finset.div.{u3} β (fun (a : β) (b : β) => _inst_2 a b) (DivInvMonoid.toHasDiv.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) s) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) t))
but is expected to have type
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))] (f : F) {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) (HDiv.hDiv.{u2, u2, u2} (Finset.{u2} α) (Finset.{u2} α) (Finset.{u2} α) (instHDiv.{u2} (Finset.{u2} α) (Finset.div.{u2} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) s t)) (HDiv.hDiv.{u3, u3, u3} (Finset.{u3} β) (Finset.{u3} β) (Finset.{u3} β) (instHDiv.{u3} (Finset.{u3} β) (Finset.div.{u3} β (fun (a : β) (b : β) => _inst_2 a b) (DivInvMonoid.toDiv.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) s) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) t))
+ forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))] (f : F) {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) (HDiv.hDiv.{u2, u2, u2} (Finset.{u2} α) (Finset.{u2} α) (Finset.{u2} α) (instHDiv.{u2} (Finset.{u2} α) (Finset.div.{u2} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) s t)) (HDiv.hDiv.{u3, u3, u3} (Finset.{u3} β) (Finset.{u3} β) (Finset.{u3} β) (instHDiv.{u3} (Finset.{u3} β) (Finset.div.{u3} β (fun (a : β) (b : β) => _inst_2 a b) (DivInvMonoid.toDiv.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) s) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) t))
Case conversion may be inaccurate. Consider using '#align finset.image_div Finset.image_divₓ'. -/
theorem image_div : (s / t).image (f : α → β) = s.image f / t.image f :=
image_image₂_distrib <| map_div f
@@ -1632,7 +1632,7 @@ variable [Group α] {s t : Finset α} {a b : α}
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a) b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9348 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9350 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9348 x._@.Mathlib.Data.Finset.Pointwise._hyg.9350) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9348 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9350 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9348 x._@.Mathlib.Data.Finset.Pointwise._hyg.9350) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9367 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 x._@.Mathlib.Data.Finset.Pointwise._hyg.9367) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9367 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9365 x._@.Mathlib.Data.Finset.Pointwise._hyg.9367) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singletonₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_singleton :
@@ -1658,7 +1658,7 @@ theorem preimage_mul_right_singleton :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9532 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9534 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9532 x._@.Mathlib.Data.Finset.Pointwise._hyg.9534) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9532 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9534 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9532 x._@.Mathlib.Data.Finset.Pointwise._hyg.9534) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9551 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 x._@.Mathlib.Data.Finset.Pointwise._hyg.9551) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9551 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9549 x._@.Mathlib.Data.Finset.Pointwise._hyg.9551) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one Finset.preimage_mul_left_oneₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹} :=
@@ -1682,7 +1682,7 @@ theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).Inj
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9701 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9703 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9701 x._@.Mathlib.Data.Finset.Pointwise._hyg.9703) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9701 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9703 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9701 x._@.Mathlib.Data.Finset.Pointwise._hyg.9703) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9720 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 x._@.Mathlib.Data.Finset.Pointwise._hyg.9720) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9720 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9718 x._@.Mathlib.Data.Finset.Pointwise._hyg.9720) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one' Finset.preimage_mul_left_one'ₓ'. -/
@[to_additive]
theorem preimage_mul_left_one' : preimage 1 ((· * ·) a⁻¹) ((mul_right_injective _).InjOn _) = {a} :=
@@ -1986,7 +1986,7 @@ scoped[Pointwise] attribute [instance] Finset.vsub
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11559 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11561 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11559 x._@.Mathlib.Data.Finset.Pointwise._hyg.11561) s t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11576 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11578 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11576 x._@.Mathlib.Data.Finset.Pointwise._hyg.11578) s t)
Case conversion may be inaccurate. Consider using '#align finset.vsub_def Finset.vsub_defₓ'. -/
theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
rfl
@@ -1996,7 +1996,7 @@ theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11611 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11613 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11611 x._@.Mathlib.Data.Finset.Pointwise._hyg.11613) s t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11628 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11630 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11628 x._@.Mathlib.Data.Finset.Pointwise._hyg.11630) s t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)
Case conversion may be inaccurate. Consider using '#align finset.image_vsub_product Finset.image_vsub_productₓ'. -/
@[simp]
theorem image_vsub_product : image₂ (· -ᵥ ·) s t = s -ᵥ t :=
@@ -2133,7 +2133,7 @@ theorem vsub_singleton (b : β) : s -ᵥ ({b} : Finset β) = s.image (· -ᵥ b)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {t : Finset.{u2} β} (a : β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) a) t) (Finset.image.{u2, u1} β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2 a) t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {t : Finset.{u1} β} (a : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) t) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12348 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12350 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12348 x._@.Mathlib.Data.Finset.Pointwise._hyg.12350) a) t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {t : Finset.{u1} β} (a : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) t) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12365 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12367 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12365 x._@.Mathlib.Data.Finset.Pointwise._hyg.12367) a) t)
Case conversion may be inaccurate. Consider using '#align finset.singleton_vsub Finset.singleton_vsubₓ'. -/
theorem singleton_vsub (a : β) : ({a} : Finset β) -ᵥ t = t.image ((· -ᵥ ·) a) :=
image₂_singleton_left
mathlib commit https://github.com/leanprover-community/mathlib/commit/38f16f960f5006c6c0c2bac7b0aba5273188f4e5
@@ -996,7 +996,7 @@ def singletonMonoidHom : α →* Finset α :=
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α))
Case conversion may be inaccurate. Consider using '#align finset.coe_singleton_monoid_hom Finset.coe_singletonMonoidHomₓ'. -/
@[simp, to_additive]
theorem coe_singletonMonoidHom : (singletonMonoidHom : α → Finset α) = singleton :=
@@ -1008,7 +1008,7 @@ theorem coe_singletonMonoidHom : (singletonMonoidHom : α → Finset α) = singl
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (a : α), Eq.{succ u1} (Finset.{u1} α) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (fun (_x : MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) => α -> (Finset.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) a) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) a) (Singleton.singleton.{u1, u1} α ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => Finset.{u1} α) a) (Finset.instSingletonFinset.{u1} α) a)
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => Finset.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => Finset.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) (MulOneClass.toMul.{u1} α _inst_3) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (MonoidHom.monoidHomClass.{u1, u1} α (Finset.{u1} α) _inst_3 (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)))) (Finset.singletonMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) a) (Singleton.singleton.{u1, u1} α ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => Finset.{u1} α) a) (Finset.instSingletonFinset.{u1} α) a)
Case conversion may be inaccurate. Consider using '#align finset.singleton_monoid_hom_apply Finset.singletonMonoidHom_applyₓ'. -/
@[simp, to_additive]
theorem singletonMonoidHom_apply (a : α) : singletonMonoidHom a = {a} :=
@@ -1031,7 +1031,7 @@ def coeMonoidHom : Finset α →* Set α where
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : Finset.{u1} α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Finset.{u1} α) => Set.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (CoeTC.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.instCoeTCFinsetSet.{u1} α))
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α], Eq.{succ u1} (forall (a : Finset.{u1} α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Finset.{u1} α) => Set.{u1} α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (CoeTC.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.instCoeTCFinsetSet.{u1} α))
Case conversion may be inaccurate. Consider using '#align finset.coe_coe_monoid_hom Finset.coe_coeMonoidHomₓ'. -/
@[simp, to_additive]
theorem coe_coeMonoidHom : (coeMonoidHom : Finset α → Set α) = coe :=
@@ -1043,7 +1043,7 @@ theorem coe_coeMonoidHom : (coeMonoidHom : Finset α → Set α) = coe :=
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} (Set.{u1} α) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (fun (_x : MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) => (Finset.{u1} α) -> (Set.{u1} α)) (MonoidHom.hasCoeToFun.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) s) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) s)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Finset.{u1} α) => Set.{u1} α) s) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) s) (Finset.toSet.{u1} α s)
+ forall {α : Type.{u1}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_3 : MulOneClass.{u1} α] (s : Finset.{u1} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Finset.{u1} α) => Set.{u1} α) s) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (fun (_x : Finset.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Finset.{u1} α) => Set.{u1} α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (MulOneClass.toMul.{u1} (Finset.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3)) (MulOneClass.toMul.{u1} (Set.{u1} α) (Set.mulOneClass.{u1} α _inst_3)) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)) (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3) (MonoidHom.monoidHomClass.{u1, u1} (Finset.{u1} α) (Set.{u1} α) (Finset.mulOneClass.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) (Set.mulOneClass.{u1} α _inst_3)))) (Finset.coeMonoidHom.{u1} α (fun (a : α) (b : α) => _inst_1 a b) _inst_3) s) (Finset.toSet.{u1} α s)
Case conversion may be inaccurate. Consider using '#align finset.coe_monoid_hom_apply Finset.coeMonoidHom_applyₓ'. -/
@[simp, to_additive]
theorem coeMonoidHom_apply (s : Finset α) : coeMonoidHom s = s :=
@@ -1570,7 +1570,7 @@ theorem image_mul_right' :
lean 3 declaration is
forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))] (f : F) {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) (HDiv.hDiv.{u2, u2, u2} (Finset.{u2} α) (Finset.{u2} α) (Finset.{u2} α) (instHDiv.{u2} (Finset.{u2} α) (Finset.div.{u2} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toHasDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) s t)) (HDiv.hDiv.{u3, u3, u3} (Finset.{u3} β) (Finset.{u3} β) (Finset.{u3} β) (instHDiv.{u3} (Finset.{u3} β) (Finset.div.{u3} β (fun (a : β) (b : β) => _inst_2 a b) (DivInvMonoid.toHasDiv.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) s) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => α -> β) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F α (fun (_x : α) => β) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toHasMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toHasMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5))) f) t))
but is expected to have type
- forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))] (f : F) {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) (HDiv.hDiv.{u2, u2, u2} (Finset.{u2} α) (Finset.{u2} α) (Finset.{u2} α) (instHDiv.{u2} (Finset.{u2} α) (Finset.div.{u2} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) s t)) (HDiv.hDiv.{u3, u3, u3} (Finset.{u3} β) (Finset.{u3} β) (Finset.{u3} β) (instHDiv.{u3} (Finset.{u3} β) (Finset.div.{u3} β (fun (a : β) (b : β) => _inst_2 a b) (DivInvMonoid.toDiv.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) s) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) t))
+ forall {F : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : DecidableEq.{succ u2} α] [_inst_2 : DecidableEq.{succ u3} β] [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u3} β] [_inst_5 : MonoidHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))] (f : F) {s : Finset.{u2} α} {t : Finset.{u2} α}, Eq.{succ u3} (Finset.{u3} β) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) (HDiv.hDiv.{u2, u2, u2} (Finset.{u2} α) (Finset.{u2} α) (Finset.{u2} α) (instHDiv.{u2} (Finset.{u2} α) (Finset.div.{u2} α (fun (a : α) (b : α) => _inst_1 a b) (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) s t)) (HDiv.hDiv.{u3, u3, u3} (Finset.{u3} β) (Finset.{u3} β) (Finset.{u3} β) (instHDiv.{u3} (Finset.{u3} β) (Finset.div.{u3} β (fun (a : β) (b : β) => _inst_2 a b) (DivInvMonoid.toDiv.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) s) (Finset.image.{u2, u3} α β (fun (a : β) (b : β) => _inst_2 a b) (FunLike.coe.{succ u1, succ u2, succ u3} F α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{u1, u2, u3} F α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u3} β (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u3} β (DivInvMonoid.toMonoid.{u3} β (DivisionMonoid.toDivInvMonoid.{u3} β _inst_4))) _inst_5)) f) t))
Case conversion may be inaccurate. Consider using '#align finset.image_div Finset.image_divₓ'. -/
theorem image_div : (s / t).image (f : α → β) = s.image f / t.image f :=
image_image₂_distrib <| map_div f
mathlib commit https://github.com/leanprover-community/mathlib/commit/22131150f88a2d125713ffa0f4693e3355b1eb49
@@ -2926,14 +2926,18 @@ theorem smul_finset_neg : a • -t = -(a • t) := by
simp only [← image_smul, ← image_neg, Function.comp, image_image, smul_neg]
#align finset.smul_finset_neg Finset.smul_finset_neg
-#print Finset.smul_neg /-
+/- warning: finset.smul_neg -> Finset.smul_neg is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Monoid.{u1} α] [_inst_2 : AddGroup.{u2} β] [_inst_3 : DistribMulAction.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))] [_inst_4 : DecidableEq.{succ u2} β] (s : Finset.{u1} α) (t : Finset.{u2} β), Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3)))) s (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) t)) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)))) (DistribSMul.toSmulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3)))) s t))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Monoid.{u1} α] [_inst_2 : AddGroup.{u2} β] [_inst_3 : DistribMulAction.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))] [_inst_4 : DecidableEq.{succ u2} β] (s : Finset.{u1} α) (t : Finset.{u2} β), Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3))))) s (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2))))) t)) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2))))) (HSMul.hSMul.{u1, u2, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (AddGroup.toSubtractionMonoid.{u2} β _inst_2)))) (DistribSMul.toSMulZeroClass.{u1, u2} α β (AddMonoid.toAddZeroClass.{u2} β (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2))) (DistribMulAction.toDistribSMul.{u1, u2} α β _inst_1 (SubNegMonoid.toAddMonoid.{u2} β (AddGroup.toSubNegMonoid.{u2} β _inst_2)) _inst_3))))) s t))
+Case conversion may be inaccurate. Consider using '#align finset.smul_neg Finset.smul_negₓ'. -/
@[simp]
protected theorem smul_neg : s • -t = -(s • t) :=
by
simp_rw [← image_neg]
exact image_image₂_right_comm smul_neg
#align finset.smul_neg Finset.smul_neg
--/
end Monoid
@@ -2942,21 +2946,29 @@ section Ring
variable [Ring α] [AddCommGroup β] [Module α β] [DecidableEq β] {s : Finset α} {t : Finset β}
{a : α}
-#print Finset.neg_smul_finset /-
+/- warning: finset.neg_smul_finset -> Finset.neg_smul_finset is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Ring.{u1} α] [_inst_2 : AddCommGroup.{u2} β] [_inst_3 : Module.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)] [_inst_4 : DecidableEq.{succ u2} β] {t : Finset.{u2} β} {a : α}, Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) (Neg.neg.{u1} α (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (NonAssocRing.toAddGroupWithOne.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1))))) a) t) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β (AddCommGroup.toAddGroup.{u2} β _inst_2)))) (SMul.smul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) a t))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Ring.{u1} α] [_inst_2 : AddCommGroup.{u2} β] [_inst_3 : Module.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)] [_inst_4 : DecidableEq.{succ u2} β] {t : Finset.{u2} β} {a : α}, Eq.{succ u2} (Finset.{u2} β) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} α β (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3)))))) (Neg.neg.{u1} α (Ring.toNeg.{u1} α _inst_1) a) t) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2)))))) (HSMul.hSMul.{u1, u2, u2} α (Finset.{u2} β) (Finset.{u2} β) (instHSMul.{u1, u2} α (Finset.{u2} β) (Finset.smulFinset.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u1, u2} α β (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u1, u2} α β (MonoidWithZero.toZero.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (NegZeroClass.toZero.{u2} β (SubNegZeroMonoid.toNegZeroClass.{u2} β (SubtractionMonoid.toSubNegZeroMonoid.{u2} β (SubtractionCommMonoid.toSubtractionMonoid.{u2} β (AddCommGroup.toDivisionAddCommMonoid.{u2} β _inst_2))))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3)))))) a t))
+Case conversion may be inaccurate. Consider using '#align finset.neg_smul_finset Finset.neg_smul_finsetₓ'. -/
@[simp]
theorem neg_smul_finset : -a • t = -(a • t) := by
simp only [← image_smul, ← image_neg, image_image, neg_smul]
#align finset.neg_smul_finset Finset.neg_smul_finset
--/
-#print Finset.neg_smul /-
+/- warning: finset.neg_smul -> Finset.neg_smul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Ring.{u1} α] [_inst_2 : AddCommGroup.{u2} β] [_inst_3 : Module.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)] [_inst_4 : DecidableEq.{succ u2} β] {s : Finset.{u1} α} {t : Finset.{u2} β} [_inst_5 : DecidableEq.{succ u1} α], Eq.{succ u2} (Finset.{u2} β) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) (Neg.neg.{u1} (Finset.{u1} α) (Finset.neg.{u1} α (fun (a : α) (b : α) => _inst_5 a b) (SubNegMonoid.toHasNeg.{u1} α (AddGroup.toSubNegMonoid.{u1} α (AddGroupWithOne.toAddGroup.{u1} α (NonAssocRing.toAddGroupWithOne.{u1} α (Ring.toNonAssocRing.{u1} α _inst_1)))))) s) t) (Neg.neg.{u2} (Finset.{u2} β) (Finset.neg.{u2} β (fun (a : β) (b : β) => _inst_4 a b) (SubNegMonoid.toHasNeg.{u2} β (AddGroup.toSubNegMonoid.{u2} β (AddCommGroup.toAddGroup.{u2} β _inst_2)))) (SMul.smul.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.smul.{u1, u2} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toHasSmul.{u1, u2} α β (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (SMulWithZero.toSmulZeroClass.{u1, u2} α β (MulZeroClass.toHasZero.{u1} α (MulZeroOneClass.toMulZeroClass.{u1} α (MonoidWithZero.toMulZeroOneClass.{u1} α (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1))))) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (MulActionWithZero.toSMulWithZero.{u1, u2} α β (Semiring.toMonoidWithZero.{u1} α (Ring.toSemiring.{u1} α _inst_1)) (AddZeroClass.toHasZero.{u2} β (AddMonoid.toAddZeroClass.{u2} β (AddCommMonoid.toAddMonoid.{u2} β (AddCommGroup.toAddCommMonoid.{u2} β _inst_2)))) (Module.toMulActionWithZero.{u1, u2} α β (Ring.toSemiring.{u1} α _inst_1) (AddCommGroup.toAddCommMonoid.{u2} β _inst_2) _inst_3))))) s t))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : Ring.{u2} α] [_inst_2 : AddCommGroup.{u1} β] [_inst_3 : Module.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2)] [_inst_4 : DecidableEq.{succ u1} β] {s : Finset.{u2} α} {t : Finset.{u1} β} [_inst_5 : DecidableEq.{succ u2} α], Eq.{succ u1} (Finset.{u1} β) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} α β (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1))) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} α β (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1)) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (Module.toMulActionWithZero.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2) _inst_3)))))) (Neg.neg.{u2} (Finset.{u2} α) (Finset.neg.{u2} α (fun (a : α) (b : α) => _inst_5 a b) (Ring.toNeg.{u2} α _inst_1)) s) t) (Neg.neg.{u1} (Finset.{u1} β) (Finset.neg.{u1} β (fun (a : β) (b : β) => _inst_4 a b) (NegZeroClass.toNeg.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2)))))) (HSMul.hSMul.{u2, u1, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.{u1} β) (instHSMul.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.smul.{u2, u1} α β (fun (a : β) (b : β) => _inst_4 a b) (SMulZeroClass.toSMul.{u2, u1} α β (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (SMulWithZero.toSMulZeroClass.{u2, u1} α β (MonoidWithZero.toZero.{u2} α (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1))) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (MulActionWithZero.toSMulWithZero.{u2, u1} α β (Semiring.toMonoidWithZero.{u2} α (Ring.toSemiring.{u2} α _inst_1)) (NegZeroClass.toZero.{u1} β (SubNegZeroMonoid.toNegZeroClass.{u1} β (SubtractionMonoid.toSubNegZeroMonoid.{u1} β (SubtractionCommMonoid.toSubtractionMonoid.{u1} β (AddCommGroup.toDivisionAddCommMonoid.{u1} β _inst_2))))) (Module.toMulActionWithZero.{u2, u1} α β (Ring.toSemiring.{u2} α _inst_1) (AddCommGroup.toAddCommMonoid.{u1} β _inst_2) _inst_3)))))) s t))
+Case conversion may be inaccurate. Consider using '#align finset.neg_smul Finset.neg_smulₓ'. -/
@[simp]
protected theorem neg_smul [DecidableEq α] : -s • t = -(s • t) :=
by
simp_rw [← image_neg]
exact image₂_image_left_comm neg_smul
#align finset.neg_smul Finset.neg_smul
--/
end Ring
mathlib commit https://github.com/leanprover-community/mathlib/commit/3ade05ac9447ae31a22d2ea5423435e054131240
@@ -1632,7 +1632,7 @@ variable [Group α] {s t : Finset α} {a b : α}
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a) b))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9292 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9294 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9292 x._@.Mathlib.Data.Finset.Pointwise._hyg.9294) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9292 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9294 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9292 x._@.Mathlib.Data.Finset.Pointwise._hyg.9294) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α} {b : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9348 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9350 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9348 x._@.Mathlib.Data.Finset.Pointwise._hyg.9350) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9348 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9350 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9348 x._@.Mathlib.Data.Finset.Pointwise._hyg.9350) a) (Finset.toSet.{u1} α (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) b))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a) b))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singletonₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_singleton :
@@ -1658,7 +1658,7 @@ theorem preimage_mul_right_singleton :
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) a) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) a) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a))
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9476 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9478 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9476 x._@.Mathlib.Data.Finset.Pointwise._hyg.9478) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9476 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9478 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9476 x._@.Mathlib.Data.Finset.Pointwise._hyg.9478) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9532 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9534 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9532 x._@.Mathlib.Data.Finset.Pointwise._hyg.9534) a) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) a) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) a) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9532 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9534 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9532 x._@.Mathlib.Data.Finset.Pointwise._hyg.9534) a) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a))
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one Finset.preimage_mul_left_oneₓ'. -/
@[simp, to_additive]
theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).InjOn _) = {a⁻¹} :=
@@ -1682,7 +1682,7 @@ theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).Inj
lean 3 declaration is
forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))) (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Function.Injective.injOn.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (mul_right_injective.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (LeftCancelSemigroup.toIsLeftCancelMul.{u1} α (LeftCancelMonoid.toLeftCancelSemigroup.{u1} α (CancelMonoid.toLeftCancelMonoid.{u1} α (Group.toCancelMonoid.{u1} α _inst_1)))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) (Set.preimage.{u1, u1} α α (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)) a)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Finset.{u1} α) (Set.{u1} α) (HasLiftT.mk.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (CoeTCₓ.coe.{succ u1, succ u1} (Finset.{u1} α) (Set.{u1} α) (Finset.Set.hasCoeT.{u1} α))) (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (OfNat.mk.{u1} (Finset.{u1} α) 1 (One.one.{u1} (Finset.{u1} α) (Finset.one.{u1} α (MulOneClass.toHasOne.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.hasSingleton.{u1} α) a)
but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9645 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9647 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9645 x._@.Mathlib.Data.Finset.Pointwise._hyg.9647) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9645 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9647 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9645 x._@.Mathlib.Data.Finset.Pointwise._hyg.9647) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
+ forall {α : Type.{u1}} [_inst_1 : Group.{u1} α] {a : α}, Eq.{succ u1} (Finset.{u1} α) (Finset.preimage.{u1, u1} α α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9701 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9703 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9701 x._@.Mathlib.Data.Finset.Pointwise._hyg.9703) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Function.Injective.injOn.{u1, u1} α α ((fun (x._@.Mathlib.Algebra.Group.Defs._hyg.2619 : α) (x._@.Mathlib.Algebra.Group.Defs._hyg.2621 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Algebra.Group.Defs._hyg.2619 x._@.Mathlib.Algebra.Group.Defs._hyg.2621) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (mul_right_injective.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (IsCancelMul.toIsLeftCancelMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1)))) (CancelMonoid.toIsCancelMul.{u1} α (Group.toCancelMonoid.{u1} α _inst_1))) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Set.preimage.{u1, u1} α α ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.9701 : α) (x._@.Mathlib.Data.Finset.Pointwise._hyg.9703 : α) => HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_1))))) x._@.Mathlib.Data.Finset.Pointwise._hyg.9701 x._@.Mathlib.Data.Finset.Pointwise._hyg.9703) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1)))) a)) (Finset.toSet.{u1} α (OfNat.ofNat.{u1} (Finset.{u1} α) 1 (One.toOfNat1.{u1} (Finset.{u1} α) (Finset.one.{u1} α (InvOneClass.toOne.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (Group.toDivisionMonoid.{u1} α _inst_1))))))))))) (Singleton.singleton.{u1, u1} α (Finset.{u1} α) (Finset.instSingletonFinset.{u1} α) a)
Case conversion may be inaccurate. Consider using '#align finset.preimage_mul_left_one' Finset.preimage_mul_left_one'ₓ'. -/
@[to_additive]
theorem preimage_mul_left_one' : preimage 1 ((· * ·) a⁻¹) ((mul_right_injective _).InjOn _) = {a} :=
@@ -1986,7 +1986,7 @@ scoped[Pointwise] attribute [instance] Finset.vsub
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11503 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11505 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11503 x._@.Mathlib.Data.Finset.Pointwise._hyg.11505) s t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11559 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11561 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11559 x._@.Mathlib.Data.Finset.Pointwise._hyg.11561) s t)
Case conversion may be inaccurate. Consider using '#align finset.vsub_def Finset.vsub_defₓ'. -/
theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
rfl
@@ -1996,7 +1996,7 @@ theorem vsub_def : s -ᵥ t = image₂ (· -ᵥ ·) s t :=
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {s : Finset.{u2} β} {t : Finset.{u2} β}, Eq.{succ u1} (Finset.{u1} α) (Finset.image₂.{u2, u2, u1} β β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2) s t) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) s t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11555 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11557 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11555 x._@.Mathlib.Data.Finset.Pointwise._hyg.11557) s t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {s : Finset.{u1} β} {t : Finset.{u1} β}, Eq.{succ u2} (Finset.{u2} α) (Finset.image₂.{u1, u1, u2} β β α (fun (a : α) (b : α) => _inst_2 a b) (fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.11611 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.11613 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.11611 x._@.Mathlib.Data.Finset.Pointwise._hyg.11613) s t) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) s t)
Case conversion may be inaccurate. Consider using '#align finset.image_vsub_product Finset.image_vsub_productₓ'. -/
@[simp]
theorem image_vsub_product : image₂ (· -ᵥ ·) s t = s -ᵥ t :=
@@ -2133,7 +2133,7 @@ theorem vsub_singleton (b : β) : s -ᵥ ({b} : Finset β) = s.image (· -ᵥ b)
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : DecidableEq.{succ u1} α] [_inst_2 : VSub.{u1, u2} α β] {t : Finset.{u2} β} (a : β), Eq.{succ u1} (Finset.{u1} α) (VSub.vsub.{u1, u2} (Finset.{u1} α) (Finset.{u2} β) (Finset.vsub.{u1, u2} α β (fun (a : α) (b : α) => _inst_1 a b) _inst_2) (Singleton.singleton.{u2, u2} β (Finset.{u2} β) (Finset.hasSingleton.{u2} β) a) t) (Finset.image.{u2, u1} β α (fun (a : α) (b : α) => _inst_1 a b) (VSub.vsub.{u1, u2} α β _inst_2 a) t)
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {t : Finset.{u1} β} (a : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) t) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12292 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12294 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12292 x._@.Mathlib.Data.Finset.Pointwise._hyg.12294) a) t)
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : VSub.{u2, u1} α β] [_inst_2 : DecidableEq.{succ u2} α] {t : Finset.{u1} β} (a : β), Eq.{succ u2} (Finset.{u2} α) (VSub.vsub.{u2, u1} (Finset.{u2} α) (Finset.{u1} β) (Finset.vsub.{u2, u1} α β _inst_1 (fun (a : α) (b : α) => _inst_2 a b)) (Singleton.singleton.{u1, u1} β (Finset.{u1} β) (Finset.instSingletonFinset.{u1} β) a) t) (Finset.image.{u1, u2} β α (fun (a : α) (b : α) => _inst_2 a b) ((fun (x._@.Mathlib.Data.Finset.Pointwise._hyg.12348 : β) (x._@.Mathlib.Data.Finset.Pointwise._hyg.12350 : β) => VSub.vsub.{u2, u1} α β _inst_1 x._@.Mathlib.Data.Finset.Pointwise._hyg.12348 x._@.Mathlib.Data.Finset.Pointwise._hyg.12350) a) t)
Case conversion may be inaccurate. Consider using '#align finset.singleton_vsub Finset.singleton_vsubₓ'. -/
theorem singleton_vsub (a : β) : ({a} : Finset β) -ᵥ t = t.image ((· -ᵥ ·) a) :=
image₂_singleton_left
@@ -2413,41 +2413,41 @@ section Instances
variable [DecidableEq γ]
-#print Finset.sMulCommClass_finset /-
+#print Finset.smulCommClass_finset /-
@[to_additive]
-instance sMulCommClass_finset [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
+instance smulCommClass_finset [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
SMulCommClass α β (Finset γ) :=
⟨fun _ _ => Commute.finset_image <| smul_comm _ _⟩
-#align finset.smul_comm_class_finset Finset.sMulCommClass_finset
-#align finset.vadd_comm_class_finset Finset.vAddCommClass_finset
+#align finset.smul_comm_class_finset Finset.smulCommClass_finset
+#align finset.vadd_comm_class_finset Finset.vaddCommClass_finset
-/
-#print Finset.sMulCommClass_finset' /-
+#print Finset.smulCommClass_finset' /-
@[to_additive]
-instance sMulCommClass_finset' [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
+instance smulCommClass_finset' [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
SMulCommClass α (Finset β) (Finset γ) :=
⟨fun a s t => coe_injective <| by simp only [coe_smul_finset, coe_smul, smul_comm]⟩
-#align finset.smul_comm_class_finset' Finset.sMulCommClass_finset'
-#align finset.vadd_comm_class_finset' Finset.vAddCommClass_finset'
+#align finset.smul_comm_class_finset' Finset.smulCommClass_finset'
+#align finset.vadd_comm_class_finset' Finset.vaddCommClass_finset'
-/
-#print Finset.sMulCommClass_finset'' /-
+#print Finset.smulCommClass_finset'' /-
@[to_additive]
-instance sMulCommClass_finset'' [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
+instance smulCommClass_finset'' [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
SMulCommClass (Finset α) β (Finset γ) :=
haveI := SMulCommClass.symm α β γ
SMulCommClass.symm _ _ _
-#align finset.smul_comm_class_finset'' Finset.sMulCommClass_finset''
-#align finset.vadd_comm_class_finset'' Finset.vAddCommClass_finset''
+#align finset.smul_comm_class_finset'' Finset.smulCommClass_finset''
+#align finset.vadd_comm_class_finset'' Finset.vaddCommClass_finset''
-/
-#print Finset.sMulCommClass /-
+#print Finset.smulCommClass /-
@[to_additive]
-instance sMulCommClass [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
+instance smulCommClass [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
SMulCommClass (Finset α) (Finset β) (Finset γ) :=
⟨fun s t u => coe_injective <| by simp_rw [coe_smul, smul_comm]⟩
-#align finset.smul_comm_class Finset.sMulCommClass
-#align finset.vadd_comm_class Finset.vAddCommClass
+#align finset.smul_comm_class Finset.smulCommClass
+#align finset.vadd_comm_class Finset.vaddCommClass
-/
#print Finset.isScalarTower /-
@@ -2456,7 +2456,7 @@ instance isScalarTower [SMul α β] [SMul α γ] [SMul β γ] [IsScalarTower α
IsScalarTower α β (Finset γ) :=
⟨fun a b s => by simp only [← image_smul, image_image, smul_assoc]⟩
#align finset.is_scalar_tower Finset.isScalarTower
-#align finset.vadd_assoc_class Finset.vAddAssocClass
+#align finset.vadd_assoc_class Finset.vaddAssocClass
-/
variable [DecidableEq β]
@@ -2467,7 +2467,7 @@ instance isScalarTower' [SMul α β] [SMul α γ] [SMul β γ] [IsScalarTower α
IsScalarTower α (Finset β) (Finset γ) :=
⟨fun a s t => coe_injective <| by simp only [coe_smul_finset, coe_smul, smul_assoc]⟩
#align finset.is_scalar_tower' Finset.isScalarTower'
-#align finset.vadd_assoc_class' Finset.vAddAssocClass'
+#align finset.vadd_assoc_class' Finset.vaddAssocClass'
-/
#print Finset.isScalarTower'' /-
@@ -2476,7 +2476,7 @@ instance isScalarTower'' [SMul α β] [SMul α γ] [SMul β γ] [IsScalarTower
IsScalarTower (Finset α) (Finset β) (Finset γ) :=
⟨fun a s t => coe_injective <| by simp only [coe_smul_finset, coe_smul, smul_assoc]⟩
#align finset.is_scalar_tower'' Finset.isScalarTower''
-#align finset.vadd_assoc_class'' Finset.vAddAssocClass''
+#align finset.vadd_assoc_class'' Finset.vaddAssocClass''
-/
#print Finset.isCentralScalar /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Similar to #12486, which did this for Algebra.Algebra.Basic
.
Splits Algebra.Module.Defs
off Algebra.Module.Basic
. Most imports only need the Defs file, which has significantly smaller imports. The remaining Algebra.Module.Basic
is now a grab-bag of unrelated results, and should probably be split further or rehomed.
This is mostly motivated by the wasted effort during minimization upon encountering Algebra.Module.Basic.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com>
@@ -8,6 +8,7 @@ import Mathlib.Data.Finset.Preimage
import Mathlib.Data.Set.Pointwise.Finite
import Mathlib.Data.Set.Pointwise.SMul
import Mathlib.Data.Set.Pointwise.ListOfFn
+import Mathlib.GroupTheory.GroupAction.Pi
import Mathlib.SetTheory.Cardinal.Finite
#align_import data.finset.pointwise from "leanprover-community/mathlib"@"eba7871095e834365616b5e43c8c7bb0b37058d0"
@@ -850,7 +850,7 @@ protected def zsmul [Zero α] [Add α] [Neg α] : SMul ℤ (Finset α) :=
multiplication/division!) of a `Finset`. See note [pointwise nat action]. -/
@[to_additive existing]
protected def zpow [One α] [Mul α] [Inv α] : Pow (Finset α) ℤ :=
- ⟨fun s n => zpowRec n s⟩
+ ⟨fun s n => zpowRec npowRec n s⟩
#align finset.has_zpow Finset.zpow
scoped[Pointwise] attribute [instance] Finset.nsmul Finset.npow Finset.zsmul Finset.zpow
We change the following field in the definition of an additive commutative monoid:
nsmul_succ : ∀ (n : ℕ) (x : G),
- AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
+ AddMonoid.nsmul (n + 1) x = AddMonoid.nsmul n x + x
where the latter is more natural
We adjust the definitions of ^
in monoids, groups, etc.
Originally there was a warning comment about why this natural order was preferred
use
x * npowRec n x
and notnpowRec n x * x
in the definition to make sure that definitional unfolding ofnpowRec
is blocked, to avoid deep recursion issues.
but it seems to no longer apply.
Remarks on the PR :
pow_succ
and pow_succ'
have switched their meanings.Ideal.IsPrime.mul_mem_pow
which is defined in [Mathlib/RingTheory/DedekindDomain/Ideal.lean]. Changing the order of operation forced me to add the symmetric lemma Ideal.IsPrime.mem_pow_mul
.@@ -991,7 +991,7 @@ theorem pow_mem_pow (ha : a ∈ s) : ∀ n : ℕ, a ^ n ∈ s ^ n
exact one_mem_one
| n + 1 => by
rw [pow_succ]
- exact mul_mem_mul ha (pow_mem_pow ha n)
+ exact mul_mem_mul (pow_mem_pow ha n) ha
#align finset.pow_mem_pow Finset.pow_mem_pow
#align finset.nsmul_mem_nsmul Finset.nsmul_mem_nsmul
@@ -1001,7 +1001,7 @@ theorem pow_subset_pow (hst : s ⊆ t) : ∀ n : ℕ, s ^ n ⊆ t ^ n
simp [pow_zero]
| n + 1 => by
rw [pow_succ]
- exact mul_subset_mul hst (pow_subset_pow hst n)
+ exact mul_subset_mul (pow_subset_pow hst n) hst
#align finset.pow_subset_pow Finset.pow_subset_pow
#align finset.nsmul_subset_nsmul Finset.nsmul_subset_nsmul
@@ -1011,7 +1011,7 @@ theorem pow_subset_pow_of_one_mem (hs : (1 : α) ∈ s) : m ≤ n → s ^ m ⊆
· exact fun _ hn => hn
· intro n _ hmn
rw [pow_succ]
- exact hmn.trans (subset_mul_right (s ^ n) hs)
+ exact hmn.trans (subset_mul_left (s ^ n) hs)
#align finset.pow_subset_pow_of_one_mem Finset.pow_subset_pow_of_one_mem
#align finset.nsmul_subset_nsmul_of_zero_mem Finset.nsmul_subset_nsmul_of_zero_mem
@@ -1039,7 +1039,7 @@ theorem mem_pow {a : α} {n : ℕ} :
@[to_additive (attr := simp)]
theorem empty_pow (hn : n ≠ 0) : (∅ : Finset α) ^ n = ∅ := by
- rw [← tsub_add_cancel_of_le (Nat.succ_le_of_lt <| Nat.pos_of_ne_zero hn), pow_succ, empty_mul]
+ rw [← tsub_add_cancel_of_le (Nat.succ_le_of_lt <| Nat.pos_of_ne_zero hn), pow_succ', empty_mul]
#align finset.empty_pow Finset.empty_pow
#align finset.empty_nsmul Finset.empty_nsmul
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -1032,6 +1032,7 @@ theorem mem_prod_list_ofFn {a : α} {s : Fin n → Finset α} :
@[to_additive]
theorem mem_pow {a : α} {n : ℕ} :
a ∈ s ^ n ↔ ∃ f : Fin n → s, (List.ofFn fun i => ↑(f i)).prod = a := by
+ set_option tactic.skipAssignedInstances false in
simp [← mem_coe, coe_pow, Set.mem_pow]
#align finset.mem_pow Finset.mem_pow
#align finset.mem_nsmul Finset.mem_nsmul
@@ -111,7 +111,7 @@ theorem one_mem_one : (1 : α) ∈ (1 : Finset α) :=
#align finset.one_mem_one Finset.one_mem_one
#align finset.zero_mem_zero Finset.zero_mem_zero
-@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
+@[to_additive (attr := simp, aesop safe apply (rule_sets := [finsetNonempty]))]
theorem one_nonempty : (1 : Finset α).Nonempty :=
⟨1, one_mem_one⟩
#align finset.one_nonempty Finset.one_nonempty
@@ -253,7 +253,7 @@ theorem inv_empty : (∅ : Finset α)⁻¹ = ∅ :=
#align finset.inv_empty Finset.inv_empty
#align finset.neg_empty Finset.neg_empty
-@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
+@[to_additive (attr := simp, aesop safe apply (rule_sets := [finsetNonempty]))]
theorem inv_nonempty_iff : s⁻¹.Nonempty ↔ s.Nonempty := image_nonempty
#align finset.inv_nonempty_iff Finset.inv_nonempty_iff
#align finset.neg_nonempty_iff Finset.neg_nonempty_iff
@@ -419,7 +419,7 @@ theorem mul_eq_empty : s * t = ∅ ↔ s = ∅ ∨ t = ∅ :=
#align finset.mul_eq_empty Finset.mul_eq_empty
#align finset.add_eq_empty Finset.add_eq_empty
-@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
+@[to_additive (attr := simp, aesop safe apply (rule_sets := [finsetNonempty]))]
theorem mul_nonempty : (s * t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.mul_nonempty Finset.mul_nonempty
@@ -669,7 +669,7 @@ theorem div_eq_empty : s / t = ∅ ↔ s = ∅ ∨ t = ∅ :=
#align finset.div_eq_empty Finset.div_eq_empty
#align finset.sub_eq_empty Finset.sub_eq_empty
-@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
+@[to_additive (attr := simp, aesop safe apply (rule_sets := [finsetNonempty]))]
theorem div_nonempty : (s / t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.div_nonempty Finset.div_nonempty
@@ -1433,7 +1433,7 @@ theorem smul_eq_empty : s • t = ∅ ↔ s = ∅ ∨ t = ∅ :=
#align finset.smul_eq_empty Finset.smul_eq_empty
#align finset.vadd_eq_empty Finset.vadd_eq_empty
-@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
+@[to_additive (attr := simp, aesop safe apply (rule_sets := [finsetNonempty]))]
theorem smul_nonempty_iff : (s • t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.smul_nonempty_iff Finset.smul_nonempty_iff
@@ -1598,7 +1598,7 @@ theorem vsub_eq_empty : s -ᵥ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
image₂_eq_empty_iff
#align finset.vsub_eq_empty Finset.vsub_eq_empty
-@[simp, aesop safe apply (rule_sets [finsetNonempty])]
+@[simp, aesop safe apply (rule_sets := [finsetNonempty])]
theorem vsub_nonempty : (s -ᵥ t : Finset α).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.vsub_nonempty Finset.vsub_nonempty
@@ -1743,7 +1743,7 @@ theorem smul_finset_eq_empty : a • s = ∅ ↔ s = ∅ :=
#align finset.smul_finset_eq_empty Finset.smul_finset_eq_empty
#align finset.vadd_finset_eq_empty Finset.vadd_finset_eq_empty
-@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
+@[to_additive (attr := simp, aesop safe apply (rule_sets := [finsetNonempty]))]
theorem smul_finset_nonempty : (a • s).Nonempty ↔ s.Nonempty :=
image_nonempty
#align finset.smul_finset_nonempty Finset.smul_finset_nonempty
Finset.sum
(#10538)
Also define a new aesop
rule-set and an auxiliary metaprogram proveFinsetNonempty
for dealing with Finset.Nonempty
conditions.
From LeanAPAP
Co-authored-by: Alex J. Best <alex.j.best@gmail.com>
Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Alex J Best <alex.j.best@gmail.com>
@@ -111,7 +111,7 @@ theorem one_mem_one : (1 : α) ∈ (1 : Finset α) :=
#align finset.one_mem_one Finset.one_mem_one
#align finset.zero_mem_zero Finset.zero_mem_zero
-@[to_additive]
+@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
theorem one_nonempty : (1 : Finset α).Nonempty :=
⟨1, one_mem_one⟩
#align finset.one_nonempty Finset.one_nonempty
@@ -253,7 +253,7 @@ theorem inv_empty : (∅ : Finset α)⁻¹ = ∅ :=
#align finset.inv_empty Finset.inv_empty
#align finset.neg_empty Finset.neg_empty
-@[to_additive (attr := simp)]
+@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
theorem inv_nonempty_iff : s⁻¹.Nonempty ↔ s.Nonempty := image_nonempty
#align finset.inv_nonempty_iff Finset.inv_nonempty_iff
#align finset.neg_nonempty_iff Finset.neg_nonempty_iff
@@ -419,7 +419,7 @@ theorem mul_eq_empty : s * t = ∅ ↔ s = ∅ ∨ t = ∅ :=
#align finset.mul_eq_empty Finset.mul_eq_empty
#align finset.add_eq_empty Finset.add_eq_empty
-@[to_additive (attr := simp)]
+@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
theorem mul_nonempty : (s * t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.mul_nonempty Finset.mul_nonempty
@@ -669,7 +669,7 @@ theorem div_eq_empty : s / t = ∅ ↔ s = ∅ ∨ t = ∅ :=
#align finset.div_eq_empty Finset.div_eq_empty
#align finset.sub_eq_empty Finset.sub_eq_empty
-@[to_additive (attr := simp)]
+@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
theorem div_nonempty : (s / t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.div_nonempty Finset.div_nonempty
@@ -1433,7 +1433,7 @@ theorem smul_eq_empty : s • t = ∅ ↔ s = ∅ ∨ t = ∅ :=
#align finset.smul_eq_empty Finset.smul_eq_empty
#align finset.vadd_eq_empty Finset.vadd_eq_empty
-@[to_additive (attr := simp)]
+@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
theorem smul_nonempty_iff : (s • t).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.smul_nonempty_iff Finset.smul_nonempty_iff
@@ -1598,7 +1598,7 @@ theorem vsub_eq_empty : s -ᵥ t = ∅ ↔ s = ∅ ∨ t = ∅ :=
image₂_eq_empty_iff
#align finset.vsub_eq_empty Finset.vsub_eq_empty
-@[simp]
+@[simp, aesop safe apply (rule_sets [finsetNonempty])]
theorem vsub_nonempty : (s -ᵥ t : Finset α).Nonempty ↔ s.Nonempty ∧ t.Nonempty :=
image₂_nonempty_iff
#align finset.vsub_nonempty Finset.vsub_nonempty
@@ -1743,7 +1743,7 @@ theorem smul_finset_eq_empty : a • s = ∅ ↔ s = ∅ :=
#align finset.smul_finset_eq_empty Finset.smul_finset_eq_empty
#align finset.vadd_finset_eq_empty Finset.vadd_finset_eq_empty
-@[to_additive (attr := simp)]
+@[to_additive (attr := simp, aesop safe apply (rule_sets [finsetNonempty]))]
theorem smul_finset_nonempty : (a • s).Nonempty ↔ s.Nonempty :=
image_nonempty
#align finset.smul_finset_nonempty Finset.smul_finset_nonempty
@@ -705,7 +705,8 @@ theorem singleton_div (a : α) : {a} / s = s.image (a / ·) :=
#align finset.singleton_div Finset.singleton_div
#align finset.singleton_sub Finset.singleton_sub
--- @[to_additive (attr := simp)] -- Porting note: simp can prove this & the additive version
+-- @[to_additive (attr := simp)]
+-- Porting note (#10618): simp can prove this & the additive version
@[to_additive]
theorem singleton_div_singleton (a b : α) : ({a} : Finset α) / {b} = {a / b} :=
image₂_singleton
@@ -1623,7 +1624,7 @@ theorem singleton_vsub (a : β) : ({a} : Finset β) -ᵥ t = t.image (a -ᵥ ·)
image₂_singleton_left
#align finset.singleton_vsub Finset.singleton_vsub
--- @[simp] -- Porting note: simp can prove this
+-- @[simp] -- Porting note (#10618): simp can prove this
theorem singleton_vsub_singleton (a b : β) : ({a} : Finset β) -ᵥ {b} = {a -ᵥ b} :=
image₂_singleton
#align finset.singleton_vsub_singleton Finset.singleton_vsub_singleton
@@ -264,6 +264,9 @@ alias ⟨Nonempty.of_inv, Nonempty.inv⟩ := inv_nonempty_iff
attribute [to_additive] Nonempty.inv Nonempty.of_inv
+@[to_additive (attr := simp)]
+theorem inv_eq_empty : s⁻¹ = ∅ ↔ s = ∅ := image_eq_empty
+
@[to_additive (attr := mono)]
theorem inv_subset_inv (h : s ⊆ t) : s⁻¹ ⊆ t⁻¹ :=
image_subset_image h
@@ -2215,7 +2215,7 @@ variable [Zero α] [Zero β] [SMulWithZero α β] [DecidableEq β] {s : Finset
/-!
Note that we have neither `SMulWithZero α (Finset β)` nor `SMulWithZero (Finset α) (Finset β)`
-because `0 * ∅ ≠ 0`.
+because `0 • ∅ ≠ 0`.
-/
lemma zero_smul_subset (t : Finset β) : (0 : Finset α) • t ⊆ 0 := by simp [subset_iff, mem_smul]
The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun
instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike
is EquivLike
, since that has a custom coe_injective'
field that is easier to implement. All other classes should take FunLike
or EquivLike
as a parameter.
Previously, morphism classes would be Type
-valued and extend FunLike
:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
After this PR, they should be Prop
-valued and take FunLike
as a parameter:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
[FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
(Note that A B
stay marked as outParam
even though they are not purely required to be so due to the FunLike
parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam
is slightly faster.)
Similarly, MyEquivClass
should take EquivLike
as a parameter.
As a result, every mention of [MyHomClass F A B]
should become [FunLike F A B] [MyHomClass F A B]
.
While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul
is more expensive. This is due to suboptimal processing of arguments. For example:
variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)
theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y
example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _
Before this PR, applying map_mul f
gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Since M
and N
are out_param
s, [MulHomClass F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found.
After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Now [FunLike F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found, before trying MulHomClass F M N
which fails. Since the Mul
hierarchy is very big, this can be slow to fail, especially when there is no such Mul
instance.
A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul
to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N]
because MulHomClass
fails or succeeds much faster than the others.
As a consequence, the simpNF
linter is much slower since by design it tries and fails to apply many map_
lemmas. The same issue occurs a few times in existing calls to simp [map_mul]
, where map_mul
is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.
simp
not firing sometimesThis affects map_smulₛₗ
and related definitions. For simp
lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw
can find every argument to map_smulₛₗ
successfully but simp
can't: leanprover/lean4#3701.
Especially in the category theory library, we might sometimes have a type A
which is also accessible as a synonym (Bundled A hA).1
. Instance synthesis doesn't always work if we have f : A →* B
but x * y : (Bundled A hA).1
or vice versa. This seems to be mostly fixed by keeping A B
as outParam
s in MulHomClass F A B
. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1
instead of using the syntax in the discrimination tree.)
The timeouts can be worked around for now by specifying which map_mul
we mean, either as map_mul f
for some explicit f
, or as e.g. MonoidHomClass.map_mul
.
map_smulₛₗ
not firing as simp
lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ
a simp
lemma instead of the generic map_smulₛₗ
. Writing simp [map_smulₛₗ _]
also works.
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -168,7 +168,7 @@ theorem singletonOneHom_apply (a : α) : singletonOneHom a = {a} :=
/-- Lift a `OneHom` to `Finset` via `image`. -/
@[to_additive (attr := simps) "Lift a `ZeroHom` to `Finset` via `image`"]
-def imageOneHom [DecidableEq β] [One β] [OneHomClass F α β] (f : F) :
+def imageOneHom [DecidableEq β] [One β] [FunLike F α β] [OneHomClass F α β] (f : F) :
OneHom (Finset α) (Finset β) where
toFun := Finset.image f
map_one' := by rw [image_one, map_one, singleton_one]
@@ -341,8 +341,8 @@ end InvolutiveInv
section Mul
-variable [DecidableEq α] [DecidableEq β] [Mul α] [Mul β] [MulHomClass F α β] (f : F)
- {s s₁ s₂ t t₁ t₂ u : Finset α} {a b : α}
+variable [DecidableEq α] [DecidableEq β] [Mul α] [Mul β] [FunLike F α β] [MulHomClass F α β]
+ (f : F) {s s₁ s₂ t t₁ t₂ u : Finset α} {a b : α}
/-- The pointwise multiplication of finsets `s * t` and `t` is defined as `{x * y | x ∈ s, y ∈ t}`
in locale `Pointwise`. -/
@@ -951,7 +951,8 @@ theorem coeMonoidHom_apply (s : Finset α) : coeMonoidHom s = s :=
/-- Lift a `MonoidHom` to `Finset` via `image`. -/
@[to_additive (attr := simps) "Lift an `add_monoid_hom` to `Finset` via `image`"]
-def imageMonoidHom [MulOneClass β] [MonoidHomClass F α β] (f : F) : Finset α →* Finset β :=
+def imageMonoidHom [MulOneClass β] [FunLike F α β] [MonoidHomClass F α β] (f : F) :
+ Finset α →* Finset β :=
{ imageMulHom f, imageOneHom f with }
#align finset.image_monoid_hom Finset.imageMonoidHom
#align finset.image_add_monoid_hom Finset.imageAddMonoidHom
@@ -1215,7 +1216,8 @@ end MulZeroClass
section Group
-variable [Group α] [DivisionMonoid β] [MonoidHomClass F α β] (f : F) {s t : Finset α} {a b : α}
+variable [Group α] [DivisionMonoid β] [FunLike F α β] [MonoidHomClass F α β]
+variable (f : F) {s t : Finset α} {a b : α}
/-! Note that `Finset` is not a `Group` because `s / s ≠ 1` in general. -/
@@ -2054,7 +2056,7 @@ theorem image_smul_comm [DecidableEq β] [DecidableEq γ] [SMul α β] [SMul α
#align finset.image_vadd_comm Finset.image_vadd_comm
@[to_additive]
-theorem image_smul_distrib [DecidableEq α] [DecidableEq β] [Monoid α] [Monoid β]
+theorem image_smul_distrib [DecidableEq α] [DecidableEq β] [Monoid α] [Monoid β] [FunLike F α β]
[MonoidHomClass F α β] (f : F) (a : α) (s : Finset α) : (a • s).image f = f a • s.image f :=
image_comm <| map_mul _ _
#align finset.image_smul_distrib Finset.image_smul_distrib
Those notations are not scoped whereas the file is very low in the import hierarchy.
@@ -2116,6 +2116,7 @@ theorem smul_finset_sdiff : a • (s \ t) = a • s \ a • t :=
#align finset.smul_finset_sdiff Finset.smul_finset_sdiff
#align finset.vadd_finset_sdiff Finset.vadd_finset_sdiff
+open scoped symmDiff in
@[to_additive]
theorem smul_finset_symmDiff : a • s ∆ t = (a • s) ∆ (a • t) :=
image_symmDiff _ _ <| MulAction.injective a
@@ -2278,6 +2279,7 @@ theorem smul_finset_sdiff₀ (ha : a ≠ 0) : a • (s \ t) = a • s \ a • t
image_sdiff _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_sdiff₀ Finset.smul_finset_sdiff₀
+open scoped symmDiff in
theorem smul_finset_symmDiff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (a • t) :=
image_symmDiff _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symmDiff₀
@@ -65,7 +65,6 @@ namespace Finset
/-! ### `0`/`1` as finsets -/
-
section One
variable [One α] {s : Finset α} {a : α}
@@ -169,18 +168,41 @@ theorem singletonOneHom_apply (a : α) : singletonOneHom a = {a} :=
/-- Lift a `OneHom` to `Finset` via `image`. -/
@[to_additive (attr := simps) "Lift a `ZeroHom` to `Finset` via `image`"]
-def imageOneHom [DecidableEq β] [One β] [OneHomClass F α β] (f : F) : OneHom (Finset α) (Finset β)
- where
+def imageOneHom [DecidableEq β] [One β] [OneHomClass F α β] (f : F) :
+ OneHom (Finset α) (Finset β) where
toFun := Finset.image f
map_one' := by rw [image_one, map_one, singleton_one]
#align finset.image_one_hom Finset.imageOneHom
#align finset.image_zero_hom Finset.imageZeroHom
+@[to_additive (attr := simp)]
+lemma sup_one [SemilatticeSup β] [OrderBot β] (f : α → β) : sup 1 f = f 1 := sup_singleton
+
+@[to_additive (attr := simp)]
+lemma sup'_one [SemilatticeSup β] (f : α → β) : sup' 1 one_nonempty f = f 1 := rfl
+
+@[to_additive (attr := simp)]
+lemma inf_one [SemilatticeInf β] [OrderTop β] (f : α → β) : inf 1 f = f 1 := inf_singleton
+
+@[to_additive (attr := simp)]
+lemma inf'_one [SemilatticeInf β] (f : α → β) : inf' 1 one_nonempty f = f 1 := rfl
+
+@[to_additive (attr := simp)]
+lemma max_one [LinearOrder α] : (1 : Finset α).max = 1 := rfl
+
+@[to_additive (attr := simp)]
+lemma min_one [LinearOrder α] : (1 : Finset α).min = 1 := rfl
+
+@[to_additive (attr := simp)]
+lemma max'_one [LinearOrder α] : (1 : Finset α).max' one_nonempty = 1 := rfl
+
+@[to_additive (attr := simp)]
+lemma min'_one [LinearOrder α] : (1 : Finset α).min' one_nonempty = 1 := rfl
+
end One
/-! ### Finset negation/inversion -/
-
section Inv
variable [DecidableEq α] [Inv α] {s s₁ s₂ t t₁ t₂ u : Finset α} {a b : α}
@@ -260,6 +282,26 @@ theorem inv_insert (a : α) (s : Finset α) : (insert a s)⁻¹ = insert a⁻¹
#align finset.inv_insert Finset.inv_insert
#align finset.neg_insert Finset.neg_insert
+@[to_additive (attr := simp)]
+lemma sup_inv [SemilatticeSup β] [OrderBot β] (s : Finset α) (f : α → β) :
+ sup s⁻¹ f = sup s (f ·⁻¹) :=
+ sup_image ..
+
+@[to_additive (attr := simp)]
+lemma sup'_inv [SemilatticeSup β] {s : Finset α} (hs : s⁻¹.Nonempty) (f : α → β) :
+ sup' s⁻¹ hs f = sup' s hs.of_inv (f ·⁻¹) :=
+ sup'_image ..
+
+@[to_additive (attr := simp)]
+lemma inf_inv [SemilatticeInf β] [OrderTop β] (s : Finset α) (f : α → β) :
+ inf s⁻¹ f = inf s (f ·⁻¹) :=
+ inf_image ..
+
+@[to_additive (attr := simp)]
+lemma inf'_inv [SemilatticeInf β] {s : Finset α} (hs : s⁻¹.Nonempty) (f : α → β) :
+ inf' s⁻¹ hs f = inf' s hs.of_inv (f ·⁻¹) :=
+ inf'_image ..
+
@[to_additive] lemma image_op_inv (s : Finset α) : s⁻¹.image op = (s.image op)⁻¹ :=
image_comm op_inv
@@ -520,11 +562,40 @@ def imageMulHom : Finset α →ₙ* Finset β where
#align finset.image_mul_hom Finset.imageMulHom
#align finset.image_add_hom Finset.imageAddHom
+@[to_additive (attr := simp (default + 1))]
+lemma sup_mul_le [SemilatticeSup β] [OrderBot β] {s t : Finset α} {f : α → β} {a : β} :
+ sup (s * t) f ≤ a ↔ ∀ x ∈ s, ∀ y ∈ t, f (x * y) ≤ a :=
+ sup_image₂_le
+
+@[to_additive]
+lemma sup_mul_left [SemilatticeSup β] [OrderBot β] (s t : Finset α) (f : α → β) :
+ sup (s * t) f = sup s fun x ↦ sup t (f <| x * ·) :=
+ sup_image₂_left ..
+
+@[to_additive]
+lemma sup_mul_right [SemilatticeSup β] [OrderBot β] (s t : Finset α) (f : α → β) :
+ sup (s * t) f = sup t fun y ↦ sup s (f <| · * y) :=
+ sup_image₂_right ..
+
+@[to_additive (attr := simp (default + 1))]
+lemma le_inf_mul [SemilatticeInf β] [OrderTop β] {s t : Finset α} {f : α → β} {a : β} :
+ a ≤ inf (s * t) f ↔ ∀ x ∈ s, ∀ y ∈ t, a ≤ f (x * y) :=
+ le_inf_image₂
+
+@[to_additive]
+lemma inf_mul_left [SemilatticeInf β] [OrderTop β] (s t : Finset α) (f : α → β) :
+ inf (s * t) f = inf s fun x ↦ inf t (f <| x * ·) :=
+ inf_image₂_left ..
+
+@[to_additive]
+lemma inf_mul_right [SemilatticeInf β] [OrderTop β] (s t : Finset α) (f : α → β) :
+ inf (s * t) f = inf t fun y ↦ inf s (f <| · * y) :=
+ inf_image₂_right ..
+
end Mul
/-! ### Finset subtraction/division -/
-
section Div
variable [DecidableEq α] [Div α] {s s₁ s₂ t t₁ t₂ u : Finset α} {a b : α}
@@ -709,6 +780,36 @@ theorem subset_div {s t : Set α} :
#align finset.subset_div Finset.subset_div
#align finset.subset_sub Finset.subset_sub
+@[to_additive (attr := simp (default + 1))]
+lemma sup_div_le [SemilatticeSup β] [OrderBot β] {s t : Finset α} {f : α → β} {a : β} :
+ sup (s / t) f ≤ a ↔ ∀ x ∈ s, ∀ y ∈ t, f (x / y) ≤ a :=
+ sup_image₂_le
+
+@[to_additive]
+lemma sup_div_left [SemilatticeSup β] [OrderBot β] (s t : Finset α) (f : α → β) :
+ sup (s / t) f = sup s fun x ↦ sup t (f <| x / ·) :=
+ sup_image₂_left ..
+
+@[to_additive]
+lemma sup_div_right [SemilatticeSup β] [OrderBot β] (s t : Finset α) (f : α → β) :
+ sup (s / t) f = sup t fun y ↦ sup s (f <| · / y) :=
+ sup_image₂_right ..
+
+@[to_additive (attr := simp (default + 1))]
+lemma le_inf_div [SemilatticeInf β] [OrderTop β] {s t : Finset α} {f : α → β} {a : β} :
+ a ≤ inf (s / t) f ↔ ∀ x ∈ s, ∀ y ∈ t, a ≤ f (x / y) :=
+ le_inf_image₂
+
+@[to_additive]
+lemma inf_div_left [SemilatticeInf β] [OrderTop β] (s t : Finset α) (f : α → β) :
+ inf (s / t) f = inf s fun x ↦ inf t (f <| x / ·) :=
+ inf_image₂_left ..
+
+@[to_additive]
+lemma inf_div_right [SemilatticeInf β] [OrderTop β] (s t : Finset α) (f : α → β) :
+ inf (s / t) f = inf t fun y ↦ inf s (f <| · / y) :=
+ inf_image₂_right ..
+
end Div
/-! ### Instances -/
$
with <|
(#9319)
See Zulip thread for the discussion.
@@ -2118,16 +2118,16 @@ lemma zero_smul_subset (t : Finset β) : (0 : Finset α) • t ⊆ 0 := by simp
#align finset.zero_smul_subset Finset.zero_smul_subset
lemma Nonempty.zero_smul (ht : t.Nonempty) : (0 : Finset α) • t = 0 :=
- t.zero_smul_subset.antisymm $ by simpa [mem_smul] using ht
+ t.zero_smul_subset.antisymm <| by simpa [mem_smul] using ht
#align finset.nonempty.zero_smul Finset.Nonempty.zero_smul
/-- A nonempty set is scaled by zero to the singleton set containing zero. -/
@[simp] lemma zero_smul_finset {s : Finset β} (h : s.Nonempty) : (0 : α) • s = (0 : Finset β) :=
- coe_injective $ by simpa using @Set.zero_smul_set α _ _ _ _ _ h
+ coe_injective <| by simpa using @Set.zero_smul_set α _ _ _ _ _ h
#align finset.zero_smul_finset Finset.zero_smul_finset
lemma zero_smul_finset_subset (s : Finset β) : (0 : α) • s ⊆ 0 :=
- image_subset_iff.2 fun x _ ↦ mem_zero.2 $ zero_smul α x
+ image_subset_iff.2 fun x _ ↦ mem_zero.2 <| zero_smul α x
#align finset.zero_smul_finset_subset Finset.zero_smul_finset_subset
variable [NoZeroSMulDivisors α β] {a : α}
@@ -2182,7 +2182,7 @@ theorem smul_finset_symmDiff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (
#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symmDiff₀
lemma smul_finset_univ₀ [Fintype β] (ha : a ≠ 0) : a • (univ : Finset β) = univ :=
- coe_injective $ by push_cast; exact Set.smul_set_univ₀ ha
+ coe_injective <| by push_cast; exact Set.smul_set_univ₀ ha
#align finset.smul_finset_univ₀ Finset.smul_finset_univ₀
theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ : Finset β) = univ :=
@@ -2193,7 +2193,7 @@ theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ
#align finset.smul_univ₀ Finset.smul_univ₀
lemma smul_univ₀' [Fintype β] {s : Finset α} (hs : s.Nontrivial) : s • (univ : Finset β) = univ :=
- coe_injective $ by push_cast; exact Set.smul_univ₀' hs
+ coe_injective <| by push_cast; exact Set.smul_univ₀' hs
variable [DecidableEq α]
@@ -2252,10 +2252,10 @@ section CommMonoid
variable [CommMonoid α] {ι : Type*} [DecidableEq ι]
@[to_additive (attr := simp)] lemma prod_inv_index [InvolutiveInv ι] (s : Finset ι) (f : ι → α) :
- ∏ i in s⁻¹, f i = ∏ i in s, f i⁻¹ := prod_image $ inv_injective.injOn _
+ ∏ i in s⁻¹, f i = ∏ i in s, f i⁻¹ := prod_image <| inv_injective.injOn _
@[to_additive existing, simp] lemma prod_neg_index [InvolutiveNeg ι] (s : Finset ι) (f : ι → α) :
- ∏ i in -s, f i = ∏ i in s, f (-i) := prod_image $ neg_injective.injOn _
+ ∏ i in -s, f i = ∏ i in s, f (-i) := prod_image <| neg_injective.injOn _
end CommMonoid
@@ -2263,7 +2263,7 @@ section AddCommMonoid
variable [AddCommMonoid α] {ι : Type*} [DecidableEq ι]
@[to_additive existing, simp] lemma sum_inv_index [InvolutiveInv ι] (s : Finset ι) (f : ι → α) :
- ∑ i in s⁻¹, f i = ∑ i in s, f i⁻¹ := sum_image $ inv_injective.injOn _
+ ∑ i in s⁻¹, f i = ∑ i in s, f i⁻¹ := sum_image <| inv_injective.injOn _
end AddCommMonoid
end BigOps
@@ -2445,5 +2445,5 @@ end Set
instance Nat.decidablePred_mem_vadd_set {s : Set ℕ} [DecidablePred (· ∈ s)] (a : ℕ) :
DecidablePred (· ∈ a +ᵥ s) :=
- fun n ↦ decidable_of_iff' (a ≤ n ∧ n - a ∈ s) $ by
+ fun n ↦ decidable_of_iff' (a ≤ n ∧ n - a ∈ s) <| by
simp only [Set.mem_vadd_set, vadd_eq_add]; aesop
Nonempty
arguments (#9377)
Finset.Nonempty.image_iff
to Finset.image_nonempty
, deprecate the old version;Set.nonempty_image_iff
to Set.image_nonempty
, deprecate the old version;Finset.Nonempty
arguments here and there;Nonempty s
instead of Nonempty (s.image f)
or Nonempty (s.map f)
.@@ -232,8 +232,7 @@ theorem inv_empty : (∅ : Finset α)⁻¹ = ∅ :=
#align finset.neg_empty Finset.neg_empty
@[to_additive (attr := simp)]
-theorem inv_nonempty_iff : s⁻¹.Nonempty ↔ s.Nonempty :=
- Nonempty.image_iff _
+theorem inv_nonempty_iff : s⁻¹.Nonempty ↔ s.Nonempty := image_nonempty
#align finset.inv_nonempty_iff Finset.inv_nonempty_iff
#align finset.neg_nonempty_iff Finset.neg_nonempty_iff
@@ -1639,7 +1638,7 @@ theorem smul_finset_eq_empty : a • s = ∅ ↔ s = ∅ :=
@[to_additive (attr := simp)]
theorem smul_finset_nonempty : (a • s).Nonempty ↔ s.Nonempty :=
- Nonempty.image_iff _
+ image_nonempty
#align finset.smul_finset_nonempty Finset.smul_finset_nonempty
#align finset.vadd_finset_nonempty Finset.vadd_finset_nonempty
@@ -57,7 +57,7 @@ pointwise subtraction
open Function MulOpposite
-open BigOperators Pointwise
+open scoped BigOperators Pointwise
variable {F α β γ : Type*}
@@ -2083,7 +2083,31 @@ lemma inv_op_smul_finset_distrib (a : α) (s : Finset α) : (op a • s)⁻¹ =
end Group
+section SMulZeroClass
+
+variable [Zero β] [SMulZeroClass α β] [DecidableEq β] {s : Finset α} {t : Finset β} {a : α}
+
+theorem smul_zero_subset (s : Finset α) : s • (0 : Finset β) ⊆ 0 := by simp [subset_iff, mem_smul]
+#align finset.smul_zero_subset Finset.smul_zero_subset
+
+theorem Nonempty.smul_zero (hs : s.Nonempty) : s • (0 : Finset β) = 0 :=
+ s.smul_zero_subset.antisymm <| by simpa [mem_smul] using hs
+#align finset.nonempty.smul_zero Finset.Nonempty.smul_zero
+
+theorem zero_mem_smul_finset (h : (0 : β) ∈ t) : (0 : β) ∈ a • t :=
+ mem_smul_finset.2 ⟨0, h, smul_zero _⟩
+#align finset.zero_mem_smul_finset Finset.zero_mem_smul_finset
+
+variable [Zero α] [NoZeroSMulDivisors α β]
+
+theorem zero_mem_smul_finset_iff (ha : a ≠ 0) : (0 : β) ∈ a • t ↔ (0 : β) ∈ t := by
+ rw [← mem_coe, coe_smul_finset, Set.zero_mem_smul_set_iff ha, mem_coe]
+#align finset.zero_mem_smul_finset_iff Finset.zero_mem_smul_finset_iff
+
+end SMulZeroClass
+
section SMulWithZero
+
variable [Zero α] [Zero β] [SMulWithZero α β] [DecidableEq β] {s : Finset α} {t : Finset β}
/-!
@@ -2091,16 +2115,9 @@ Note that we have neither `SMulWithZero α (Finset β)` nor `SMulWithZero (Finse
because `0 * ∅ ≠ 0`.
-/
-lemma smul_zero_subset (s : Finset α) : s • (0 : Finset β) ⊆ 0 := by simp [subset_iff, mem_smul]
-#align finset.smul_zero_subset Finset.smul_zero_subset
-
lemma zero_smul_subset (t : Finset β) : (0 : Finset α) • t ⊆ 0 := by simp [subset_iff, mem_smul]
#align finset.zero_smul_subset Finset.zero_smul_subset
-lemma Nonempty.smul_zero (hs : s.Nonempty) : s • (0 : Finset β) = 0 :=
- s.smul_zero_subset.antisymm $ by simpa [mem_smul] using hs
-#align finset.nonempty.smul_zero Finset.Nonempty.smul_zero
-
lemma Nonempty.zero_smul (ht : t.Nonempty) : (0 : Finset α) • t = 0 :=
t.zero_smul_subset.antisymm $ by simpa [mem_smul] using ht
#align finset.nonempty.zero_smul Finset.Nonempty.zero_smul
@@ -2114,10 +2131,6 @@ lemma zero_smul_finset_subset (s : Finset β) : (0 : α) • s ⊆ 0 :=
image_subset_iff.2 fun x _ ↦ mem_zero.2 $ zero_smul α x
#align finset.zero_smul_finset_subset Finset.zero_smul_finset_subset
-lemma zero_mem_smul_finset {t : Finset β} {a : α} (h : (0 : β) ∈ t) : (0 : β) ∈ a • t :=
- mem_smul_finset.2 ⟨0, h, smul_zero _⟩
-#align finset.zero_mem_smul_finset Finset.zero_mem_smul_finset
-
variable [NoZeroSMulDivisors α β] {a : α}
lemma zero_mem_smul_iff :
@@ -2125,10 +2138,6 @@ lemma zero_mem_smul_iff :
rw [← mem_coe, coe_smul, Set.zero_mem_smul_iff]; rfl
#align finset.zero_mem_smul_iff Finset.zero_mem_smul_iff
-lemma zero_mem_smul_finset_iff (ha : a ≠ 0) : (0 : β) ∈ a • t ↔ (0 : β) ∈ t := by
- rw [← mem_coe, coe_smul_finset, Set.zero_mem_smul_set_iff ha, mem_coe]
-#align finset.zero_mem_smul_finset_iff Finset.zero_mem_smul_finset_iff
-
end SMulWithZero
section GroupWithZero
Set.image2
etc (#9275)
Set.image2
to use ∃ a ∈ s, ∃ b ∈ t, f a b = c
instead of ∃ a b, a ∈ s ∧ b ∈ t ∧ f a b = c
.Set.seq
as Set.image2
. The new definition is equal to the old one but rw [Set.seq]
gives a different result.Filter.map₂
to use ∃ u ∈ f, ∃ v ∈ g, image2 m u v ⊆ s
instead of ∃ u v, u ∈ f ∧ v ∈ g ∧ ...
Set.mem_image2
, Finset.mem_image₂
, Set.mem_mul
, Finset.mem_div
etcThe two reasons to make the change are:
∃ a ∈ s, ∃ b ∈ t, _
is a simp
-normal form, and@@ -328,8 +328,7 @@ theorem image_mul_product : ((s ×ˢ t).image fun x : α × α => x.fst * x.snd)
#align finset.image_add_product Finset.image_add_product
@[to_additive]
-theorem mem_mul {x : α} : x ∈ s * t ↔ ∃ y z, y ∈ s ∧ z ∈ t ∧ y * z = x :=
- mem_image₂
+theorem mem_mul {x : α} : x ∈ s * t ↔ ∃ y ∈ s, ∃ z ∈ t, y * z = x := mem_image₂
#align finset.mem_mul Finset.mem_mul
#align finset.mem_add Finset.mem_add
@@ -556,7 +555,7 @@ theorem image_div_product : ((s ×ˢ t).image fun x : α × α => x.fst / x.snd)
#align finset.add_image_prod Finset.image_sub_product
@[to_additive]
-theorem mem_div : a ∈ s / t ↔ ∃ b c, b ∈ s ∧ c ∈ t ∧ b / c = a :=
+theorem mem_div : a ∈ s / t ↔ ∃ b ∈ s, ∃ c ∈ t, b / c = a :=
mem_image₂
#align finset.mem_div Finset.mem_div
#align finset.mem_sub Finset.mem_sub
@@ -800,13 +799,13 @@ scoped[Pointwise] attribute [instance] Finset.semigroup Finset.addSemigroup Fins
@[to_additive]
theorem subset_mul_left (s : Finset α) {t : Finset α} (ht : (1 : α) ∈ t) : s ⊆ s * t := fun a ha =>
- mem_mul.2 ⟨a, 1, ha, ht, mul_one _⟩
+ mem_mul.2 ⟨a, ha, 1, ht, mul_one _⟩
#align finset.subset_mul_left Finset.subset_mul_left
#align finset.subset_add_left Finset.subset_add_left
@[to_additive]
theorem subset_mul_right {s : Finset α} (t : Finset α) (hs : (1 : α) ∈ s) : t ⊆ s * t := fun a ha =>
- mem_mul.2 ⟨1, a, hs, ha, one_mul _⟩
+ mem_mul.2 ⟨1, hs, a, ha, one_mul _⟩
#align finset.subset_mul_right Finset.subset_mul_right
#align finset.subset_add_right Finset.subset_add_right
@@ -940,13 +939,13 @@ theorem empty_pow (hn : n ≠ 0) : (∅ : Finset α) ^ n = ∅ := by
@[to_additive]
theorem mul_univ_of_one_mem [Fintype α] (hs : (1 : α) ∈ s) : s * univ = univ :=
- eq_univ_iff_forall.2 fun _ => mem_mul.2 ⟨_, _, hs, mem_univ _, one_mul _⟩
+ eq_univ_iff_forall.2 fun _ => mem_mul.2 ⟨_, hs, _, mem_univ _, one_mul _⟩
#align finset.mul_univ_of_one_mem Finset.mul_univ_of_one_mem
#align finset.add_univ_of_zero_mem Finset.add_univ_of_zero_mem
@[to_additive]
theorem univ_mul_of_one_mem [Fintype α] (ht : (1 : α) ∈ t) : univ * t = univ :=
- eq_univ_iff_forall.2 fun _ => mem_mul.2 ⟨_, _, mem_univ _, ht, mul_one _⟩
+ eq_univ_iff_forall.2 fun _ => mem_mul.2 ⟨_, mem_univ _, _, ht, mul_one _⟩
#align finset.univ_mul_of_one_mem Finset.univ_mul_of_one_mem
#align finset.univ_add_of_zero_mem Finset.univ_add_of_zero_mem
@@ -1136,7 +1135,7 @@ theorem not_one_mem_div_iff : (1 : α) ∉ s / t ↔ Disjoint s t :=
@[to_additive]
theorem Nonempty.one_mem_div (h : s.Nonempty) : (1 : α) ∈ s / s :=
let ⟨a, ha⟩ := h
- mem_div.2 ⟨a, a, ha, ha, div_self' _⟩
+ mem_div.2 ⟨a, ha, a, ha, div_self' _⟩
#align finset.nonempty.one_mem_div Finset.Nonempty.one_mem_div
#align finset.nonempty.zero_mem_sub Finset.Nonempty.zero_mem_sub
@@ -1287,7 +1286,7 @@ theorem image_smul_product : ((s ×ˢ t).image fun x : α × β => x.fst • x.s
#align finset.image_vadd_product Finset.image_vadd_product
@[to_additive]
-theorem mem_smul {x : β} : x ∈ s • t ↔ ∃ y z, y ∈ s ∧ z ∈ t ∧ y • z = x :=
+theorem mem_smul {x : β} : x ∈ s • t ↔ ∃ y ∈ s, ∃ z ∈ t, y • z = x :=
mem_image₂
#align finset.mem_smul Finset.mem_smul
#align finset.mem_vadd Finset.mem_vadd
@@ -1461,7 +1460,7 @@ theorem image_vsub_product : image₂ (· -ᵥ ·) s t = s -ᵥ t :=
rfl
#align finset.image_vsub_product Finset.image_vsub_product
-theorem mem_vsub : a ∈ s -ᵥ t ↔ ∃ b c, b ∈ s ∧ c ∈ t ∧ b -ᵥ c = a :=
+theorem mem_vsub : a ∈ s -ᵥ t ↔ ∃ b ∈ s, ∃ c ∈ t, b -ᵥ c = a :=
mem_image₂
#align finset.mem_vsub Finset.mem_vsub
(a • s)⁻¹ = s⁻¹ • a⁻¹
(#9199)
and other simple pointwise lemmas for Set
and Finset
. Also add supporting Fintype.piFinset
lemmas and fix the names of two lemmas.
From LeanAPAP and LeanCamCombi
@@ -91,6 +91,9 @@ theorem coe_one : ↑(1 : Finset α) = (1 : Set α) :=
#align finset.coe_one Finset.coe_one
#align finset.coe_zero Finset.coe_zero
+@[to_additive (attr := simp, norm_cast)]
+lemma coe_eq_one : (s : Set α) = 1 ↔ s = 1 := coe_eq_singleton
+
@[to_additive (attr := simp)]
theorem one_subset : (1 : Finset α) ⊆ s ↔ (1 : α) ∈ s :=
singleton_subset_iff
@@ -258,32 +261,38 @@ theorem inv_insert (a : α) (s : Finset α) : (insert a s)⁻¹ = insert a⁻¹
#align finset.inv_insert Finset.inv_insert
#align finset.neg_insert Finset.neg_insert
+@[to_additive] lemma image_op_inv (s : Finset α) : s⁻¹.image op = (s.image op)⁻¹ :=
+ image_comm op_inv
+
end Inv
open Pointwise
section InvolutiveInv
+variable [DecidableEq α] [InvolutiveInv α] {s : Finset α} {a : α}
-variable [DecidableEq α] [InvolutiveInv α] (s : Finset α)
+@[to_additive (attr := simp)]
+lemma mem_inv' : a ∈ s⁻¹ ↔ a⁻¹ ∈ s := by simp [mem_inv, inv_eq_iff_eq_inv]
@[to_additive (attr := simp, norm_cast)]
-theorem coe_inv : ↑s⁻¹ = (s : Set α)⁻¹ :=
- coe_image.trans Set.image_inv
+theorem coe_inv (s : Finset α) : ↑s⁻¹ = (s : Set α)⁻¹ := coe_image.trans Set.image_inv
#align finset.coe_inv Finset.coe_inv
#align finset.coe_neg Finset.coe_neg
@[to_additive (attr := simp)]
-theorem card_inv : s⁻¹.card = s.card :=
- card_image_of_injective _ inv_injective
+theorem card_inv (s : Finset α) : s⁻¹.card = s.card := card_image_of_injective _ inv_injective
#align finset.card_inv Finset.card_inv
#align finset.card_neg Finset.card_neg
@[to_additive (attr := simp)]
-theorem preimage_inv : s.preimage Inv.inv (inv_injective.injOn _) = s⁻¹ :=
+theorem preimage_inv (s : Finset α) : s.preimage (·⁻¹) (inv_injective.injOn _) = s⁻¹ :=
coe_injective <| by rw [coe_preimage, Set.inv_preimage, coe_inv]
#align finset.preimage_inv Finset.preimage_inv
#align finset.preimage_neg Finset.preimage_neg
+@[to_additive (attr := simp)]
+lemma inv_univ [Fintype α] : (univ : Finset α)⁻¹ = univ := by ext; simp
+
end InvolutiveInv
/-! ### Finset addition/multiplication -/
@@ -540,11 +549,11 @@ theorem div_def : s / t = (s ×ˢ t).image fun p : α × α => p.1 / p.2 :=
#align finset.div_def Finset.div_def
#align finset.sub_def Finset.sub_def
-@[to_additive add_image_prod]
-theorem image_div_prod : ((s ×ˢ t).image fun x : α × α => x.fst / x.snd) = s / t :=
+@[to_additive]
+theorem image_div_product : ((s ×ˢ t).image fun x : α × α => x.fst / x.snd) = s / t :=
rfl
-#align finset.image_div_prod Finset.image_div_prod
-#align finset.add_image_prod Finset.add_image_prod
+#align finset.image_div_prod Finset.image_div_product
+#align finset.add_image_prod Finset.image_sub_product
@[to_additive]
theorem mem_div : a ∈ s / t ↔ ∃ b c, b ∈ s ∧ c ∈ t ∧ b / c = a :=
@@ -1012,6 +1021,8 @@ protected def divisionMonoid : DivisionMonoid (Finset α) :=
#align finset.division_monoid Finset.divisionMonoid
#align finset.subtraction_monoid Finset.subtractionMonoid
+scoped[Pointwise] attribute [instance] Finset.divisionMonoid Finset.subtractionMonoid
+
@[to_additive (attr := simp)]
theorem isUnit_iff : IsUnit s ↔ ∃ a, s = {a} ∧ IsUnit a := by
constructor
@@ -1031,6 +1042,9 @@ theorem isUnit_coe : IsUnit (s : Set α) ↔ IsUnit s := by
#align finset.is_unit_coe Finset.isUnit_coe
#align finset.is_add_unit_coe Finset.isAddUnit_coe
+@[to_additive (attr := simp)]
+lemma univ_div_univ [Fintype α] : (univ / univ : Finset α) = univ := by simp [div_eq_mul_inv]
+
end DivisionMonoid
/-- `Finset α` is a commutative division monoid under pointwise operations if `α` is. -/
@@ -1047,9 +1061,7 @@ protected def distribNeg [Mul α] [HasDistribNeg α] : HasDistribNeg (Finset α)
#align finset.has_distrib_neg Finset.distribNeg
scoped[Pointwise]
- attribute [instance]
- Finset.divisionMonoid Finset.subtractionMonoid
- Finset.divisionCommMonoid Finset.subtractionCommMonoid Finset.distribNeg
+ attribute [instance] Finset.divisionCommMonoid Finset.subtractionCommMonoid Finset.distribNeg
section Distrib
@@ -1433,7 +1445,7 @@ section VSub
-- Porting note: Reordered [VSub α β] and [DecidableEq α] to make vsub less dangerous. Bad?
variable [VSub α β] [DecidableEq α] {s s₁ s₂ t t₁ t₂ : Finset β} {u : Finset α} {a : α} {b c : β}
-/-- The pointwise product of two finsets `s` and `t`: `s -ᵥ t = {x -ᵥ y | x ∈ s, y ∈ t}`. -/
+/-- The pointwise subtraction of two finsets `s` and `t`: `s -ᵥ t = {x -ᵥ y | x ∈ s, y ∈ t}`. -/
protected def vsub : VSub (Finset α) (Finset β) :=
⟨image₂ (· -ᵥ ·)⟩
#align finset.has_vsub Finset.vsub
@@ -2062,8 +2074,64 @@ theorem card_dvd_card_mul_right {s t : Finset α} :
((· • t) '' (s : Set α)).PairwiseDisjoint id → t.card ∣ (s * t).card :=
card_dvd_card_image₂_right fun _ _ => mul_right_injective _
+@[to_additive (attr := simp)]
+lemma inv_smul_finset_distrib (a : α) (s : Finset α) : (a • s)⁻¹ = op a⁻¹ • s⁻¹ := by
+ ext; simp [← inv_smul_mem_iff]
+
+@[to_additive (attr := simp)]
+lemma inv_op_smul_finset_distrib (a : α) (s : Finset α) : (op a • s)⁻¹ = a⁻¹ • s⁻¹ := by
+ ext; simp [← inv_smul_mem_iff]
+
end Group
+section SMulWithZero
+variable [Zero α] [Zero β] [SMulWithZero α β] [DecidableEq β] {s : Finset α} {t : Finset β}
+
+/-!
+Note that we have neither `SMulWithZero α (Finset β)` nor `SMulWithZero (Finset α) (Finset β)`
+because `0 * ∅ ≠ 0`.
+-/
+
+lemma smul_zero_subset (s : Finset α) : s • (0 : Finset β) ⊆ 0 := by simp [subset_iff, mem_smul]
+#align finset.smul_zero_subset Finset.smul_zero_subset
+
+lemma zero_smul_subset (t : Finset β) : (0 : Finset α) • t ⊆ 0 := by simp [subset_iff, mem_smul]
+#align finset.zero_smul_subset Finset.zero_smul_subset
+
+lemma Nonempty.smul_zero (hs : s.Nonempty) : s • (0 : Finset β) = 0 :=
+ s.smul_zero_subset.antisymm $ by simpa [mem_smul] using hs
+#align finset.nonempty.smul_zero Finset.Nonempty.smul_zero
+
+lemma Nonempty.zero_smul (ht : t.Nonempty) : (0 : Finset α) • t = 0 :=
+ t.zero_smul_subset.antisymm $ by simpa [mem_smul] using ht
+#align finset.nonempty.zero_smul Finset.Nonempty.zero_smul
+
+/-- A nonempty set is scaled by zero to the singleton set containing zero. -/
+@[simp] lemma zero_smul_finset {s : Finset β} (h : s.Nonempty) : (0 : α) • s = (0 : Finset β) :=
+ coe_injective $ by simpa using @Set.zero_smul_set α _ _ _ _ _ h
+#align finset.zero_smul_finset Finset.zero_smul_finset
+
+lemma zero_smul_finset_subset (s : Finset β) : (0 : α) • s ⊆ 0 :=
+ image_subset_iff.2 fun x _ ↦ mem_zero.2 $ zero_smul α x
+#align finset.zero_smul_finset_subset Finset.zero_smul_finset_subset
+
+lemma zero_mem_smul_finset {t : Finset β} {a : α} (h : (0 : β) ∈ t) : (0 : β) ∈ a • t :=
+ mem_smul_finset.2 ⟨0, h, smul_zero _⟩
+#align finset.zero_mem_smul_finset Finset.zero_mem_smul_finset
+
+variable [NoZeroSMulDivisors α β] {a : α}
+
+lemma zero_mem_smul_iff :
+ (0 : β) ∈ s • t ↔ (0 : α) ∈ s ∧ t.Nonempty ∨ (0 : β) ∈ t ∧ s.Nonempty := by
+ rw [← mem_coe, coe_smul, Set.zero_mem_smul_iff]; rfl
+#align finset.zero_mem_smul_iff Finset.zero_mem_smul_iff
+
+lemma zero_mem_smul_finset_iff (ha : a ≠ 0) : (0 : β) ∈ a • t ↔ (0 : β) ∈ t := by
+ rw [← mem_coe, coe_smul_finset, Set.zero_mem_smul_set_iff ha, mem_coe]
+#align finset.zero_mem_smul_finset_iff Finset.zero_mem_smul_finset_iff
+
+end SMulWithZero
+
section GroupWithZero
variable [DecidableEq β] [GroupWithZero α] [MulAction α β] {s t : Finset β} {a : α} {b : β}
@@ -2106,6 +2174,10 @@ theorem smul_finset_symmDiff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (
image_symmDiff _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symmDiff₀
+lemma smul_finset_univ₀ [Fintype β] (ha : a ≠ 0) : a • (univ : Finset β) = univ :=
+ coe_injective $ by push_cast; exact Set.smul_set_univ₀ ha
+#align finset.smul_finset_univ₀ Finset.smul_finset_univ₀
+
theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ : Finset β) = univ :=
coe_injective <| by
rw [← coe_subset] at hs
@@ -2113,64 +2185,24 @@ theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ
exact Set.smul_univ₀ hs
#align finset.smul_univ₀ Finset.smul_univ₀
-theorem smul_finset_univ₀ [Fintype β] (ha : a ≠ 0) : a • (univ : Finset β) = univ :=
- coe_injective <| by
- push_cast
- exact Set.smul_set_univ₀ ha
-#align finset.smul_finset_univ₀ Finset.smul_finset_univ₀
-
-end GroupWithZero
-
-section SMulWithZero
-
-variable [Zero α] [Zero β] [SMulWithZero α β] [DecidableEq β] {s : Finset α} {t : Finset β}
-
-/-!
-Note that we have neither `SMulWithZero α (Finset β)` nor `SMulWithZero (Finset α) (Finset β)`
-because `0 * ∅ ≠ 0`.
--/
-
-
-theorem smul_zero_subset (s : Finset α) : s • (0 : Finset β) ⊆ 0 := by simp [subset_iff, mem_smul]
-#align finset.smul_zero_subset Finset.smul_zero_subset
-
-theorem zero_smul_subset (t : Finset β) : (0 : Finset α) • t ⊆ 0 := by simp [subset_iff, mem_smul]
-#align finset.zero_smul_subset Finset.zero_smul_subset
-
-theorem Nonempty.smul_zero (hs : s.Nonempty) : s • (0 : Finset β) = 0 :=
- s.smul_zero_subset.antisymm <| by simpa [mem_smul] using hs
-#align finset.nonempty.smul_zero Finset.Nonempty.smul_zero
-
-theorem Nonempty.zero_smul (ht : t.Nonempty) : (0 : Finset α) • t = 0 :=
- t.zero_smul_subset.antisymm <| by simpa [mem_smul] using ht
-#align finset.nonempty.zero_smul Finset.Nonempty.zero_smul
+lemma smul_univ₀' [Fintype β] {s : Finset α} (hs : s.Nontrivial) : s • (univ : Finset β) = univ :=
+ coe_injective $ by push_cast; exact Set.smul_univ₀' hs
-/-- A nonempty set is scaled by zero to the singleton set containing 0. -/
-theorem zero_smul_finset {s : Finset β} (h : s.Nonempty) : (0 : α) • s = (0 : Finset β) :=
- coe_injective <| by simpa using @Set.zero_smul_set α _ _ _ _ _ h
-#align finset.zero_smul_finset Finset.zero_smul_finset
-
-theorem zero_smul_finset_subset (s : Finset β) : (0 : α) • s ⊆ 0 :=
- image_subset_iff.2 fun x _ => mem_zero.2 <| zero_smul α x
-#align finset.zero_smul_finset_subset Finset.zero_smul_finset_subset
+variable [DecidableEq α]
-theorem zero_mem_smul_finset {t : Finset β} {a : α} (h : (0 : β) ∈ t) : (0 : β) ∈ a • t :=
- mem_smul_finset.2 ⟨0, h, smul_zero _⟩
-#align finset.zero_mem_smul_finset Finset.zero_mem_smul_finset
+@[simp] protected lemma inv_zero : (0 : Finset α)⁻¹ = 0 := by ext; simp
-variable [NoZeroSMulDivisors α β] {a : α}
+@[simp] lemma inv_smul_finset_distrib₀ (a : α) (s : Finset α) : (a • s)⁻¹ = op a⁻¹ • s⁻¹ := by
+ obtain rfl | ha := eq_or_ne a 0
+ · obtain rfl | hs := s.eq_empty_or_nonempty <;> simp [*]
+ · ext; simp [← inv_smul_mem_iff₀, *]
-theorem zero_mem_smul_iff :
- (0 : β) ∈ s • t ↔ (0 : α) ∈ s ∧ t.Nonempty ∨ (0 : β) ∈ t ∧ s.Nonempty := by
- rw [← mem_coe, coe_smul, Set.zero_mem_smul_iff]
- rfl
-#align finset.zero_mem_smul_iff Finset.zero_mem_smul_iff
+@[simp] lemma inv_op_smul_finset_distrib₀ (a : α) (s : Finset α) : (op a • s)⁻¹ = a⁻¹ • s⁻¹ := by
+ obtain rfl | ha := eq_or_ne a 0
+ · obtain rfl | hs := s.eq_empty_or_nonempty <;> simp [*]
+ · ext; simp [← inv_smul_mem_iff₀, *]
-theorem zero_mem_smul_finset_iff (ha : a ≠ 0) : (0 : β) ∈ a • t ↔ (0 : β) ∈ t := by
- rw [← mem_coe, coe_smul_finset, Set.zero_mem_smul_set_iff ha, mem_coe]
-#align finset.zero_mem_smul_finset_iff Finset.zero_mem_smul_finset_iff
-
-end SMulWithZero
+end GroupWithZero
section Monoid
@@ -2208,8 +2240,57 @@ protected theorem neg_smul [DecidableEq α] : -s • t = -(s • t) := by
end Ring
+section BigOps
+section CommMonoid
+variable [CommMonoid α] {ι : Type*} [DecidableEq ι]
+
+@[to_additive (attr := simp)] lemma prod_inv_index [InvolutiveInv ι] (s : Finset ι) (f : ι → α) :
+ ∏ i in s⁻¹, f i = ∏ i in s, f i⁻¹ := prod_image $ inv_injective.injOn _
+
+@[to_additive existing, simp] lemma prod_neg_index [InvolutiveNeg ι] (s : Finset ι) (f : ι → α) :
+ ∏ i in -s, f i = ∏ i in s, f (-i) := prod_image $ neg_injective.injOn _
+
+end CommMonoid
+
+section AddCommMonoid
+variable [AddCommMonoid α] {ι : Type*} [DecidableEq ι]
+
+@[to_additive existing, simp] lemma sum_inv_index [InvolutiveInv ι] (s : Finset ι) (f : ι → α) :
+ ∑ i in s⁻¹, f i = ∑ i in s, f i⁻¹ := sum_image $ inv_injective.injOn _
+
+end AddCommMonoid
+end BigOps
end Finset
+namespace Fintype
+variable {ι : Type*} {α β : ι → Type*} [Fintype ι] [DecidableEq ι] [∀ i, DecidableEq (α i)]
+ [∀ i, DecidableEq (β i)]
+
+@[to_additive]
+lemma piFinset_mul [∀ i, Mul (α i)] (s t : ∀ i, Finset (α i)) :
+ piFinset (fun i ↦ s i * t i) = piFinset s * piFinset t := piFinset_image₂ _ _ _
+
+@[to_additive]
+lemma piFinset_div [∀ i, Div (α i)] (s t : ∀ i, Finset (α i)) :
+ piFinset (fun i ↦ s i / t i) = piFinset s / piFinset t := piFinset_image₂ _ _ _
+
+@[to_additive (attr := simp)]
+lemma piFinset_inv [∀ i, Inv (α i)] (s : ∀ i, Finset (α i)) :
+ piFinset (fun i ↦ (s i)⁻¹) = (piFinset s)⁻¹ := piFinset_image _ _
+
+@[to_additive]
+lemma piFinset_smul [∀ i, SMul (α i) (β i)] (s : ∀ i, Finset (α i)) (t : ∀ i, Finset (β i)) :
+ piFinset (fun i ↦ s i • t i) = piFinset s • piFinset t := piFinset_image₂ _ _ _
+
+@[to_additive]
+lemma piFinset_smul_finset [∀ i, SMul (α i) (β i)] (a : ∀ i, α i) (s : ∀ i, Finset (β i)) :
+ piFinset (fun i ↦ a i • s i) = a • piFinset s := piFinset_image _ _
+
+-- Note: We don't currently state `piFinset_vsub` because there's no
+-- `[∀ i, VSub (β i) (α i)] → VSub (∀ i, β i) (∀ i, α i)` instance
+
+end Fintype
+
open Pointwise
namespace Set
@@ -2354,3 +2435,8 @@ lemma card_div_le : Nat.card (s / t) ≤ Nat.card s * Nat.card t := by
end Group
end Set
+
+instance Nat.decidablePred_mem_vadd_set {s : Set ℕ} [DecidablePred (· ∈ s)] (a : ℕ) :
+ DecidablePred (· ∈ a +ᵥ s) :=
+ fun n ↦ decidable_of_iff' (a ≤ n ∧ n - a ∈ s) $ by
+ simp only [Set.mem_vadd_set, vadd_eq_add]; aesop
@@ -8,6 +8,7 @@ import Mathlib.Data.Finset.Preimage
import Mathlib.Data.Set.Pointwise.Finite
import Mathlib.Data.Set.Pointwise.SMul
import Mathlib.Data.Set.Pointwise.ListOfFn
+import Mathlib.SetTheory.Cardinal.Finite
#align_import data.finset.pointwise from "leanprover-community/mathlib"@"eba7871095e834365616b5e43c8c7bb0b37058d0"
@@ -2309,4 +2310,47 @@ theorem Finite.toFinset_vsub (hs : s.Finite) (ht : t.Finite) (hf := hs.vsub ht)
end VSub
+section MulAction
+variable [Group α] [MulAction α β]
+
+@[to_additive (attr := simp)]
+lemma card_smul_set (a : α) (s : Set β) : Nat.card ↥(a • s) = Nat.card s :=
+ Nat.card_image_of_injective (MulAction.injective a) _
+
+end MulAction
+
+section IsCancelMul
+variable [Mul α] [IsCancelMul α] {s t : Set α}
+
+@[to_additive]
+lemma card_mul_le : Nat.card (s * t) ≤ Nat.card s * Nat.card t := by
+ classical
+ obtain h | h := (s * t).infinite_or_finite
+ · simp [Set.Infinite.card_eq_zero h]
+ obtain ⟨hs, ht⟩ | rfl | rfl := finite_mul.1 h
+ · lift s to Finset α using hs
+ lift t to Finset α using ht
+ rw [← Finset.coe_mul]
+ simpa [-Finset.coe_mul] using Finset.card_mul_le
+ all_goals simp
+
+end IsCancelMul
+
+section InvolutiveInv
+variable [InvolutiveInv α] {s t : Set α}
+
+@[to_additive (attr := simp)]
+lemma card_inv (s : Set α) : Nat.card ↥(s⁻¹) = Nat.card s := by
+ rw [← image_inv, Nat.card_image_of_injective inv_injective]
+
+end InvolutiveInv
+
+section Group
+variable [Group α] {s t : Set α}
+
+@[to_additive]
+lemma card_div_le : Nat.card (s / t) ≤ Nat.card s * Nat.card t := by
+ rw [div_eq_mul_inv, ← card_inv t]; exact card_mul_le
+
+end Group
end Set
(· op ·) a
by (a op ·)
(#8843)
I used the regex \(\(· (.) ·\) (.)\)
, replacing with ($2 $1 ·)
.
@@ -397,7 +397,7 @@ theorem mul_singleton (a : α) : s * {a} = s.image (· * a) :=
#align finset.add_singleton Finset.add_singleton
@[to_additive]
-theorem singleton_mul (a : α) : {a} * s = s.image ((· * ·) a) :=
+theorem singleton_mul (a : α) : {a} * s = s.image (a * ·) :=
image₂_singleton_left
#align finset.singleton_mul Finset.singleton_mul
#align finset.singleton_add Finset.singleton_add
@@ -618,7 +618,7 @@ theorem div_singleton (a : α) : s / {a} = s.image (· / a) :=
#align finset.sub_singleton Finset.sub_singleton
@[to_additive (attr := simp)]
-theorem singleton_div (a : α) : {a} / s = s.image ((· / ·) a) :=
+theorem singleton_div (a : α) : {a} / s = s.image (a / ·) :=
image₂_singleton_left
#align finset.singleton_div Finset.singleton_div
#align finset.singleton_sub Finset.singleton_sub
@@ -1207,7 +1207,7 @@ variable [Group α] {s t : Finset α} {a b : α}
@[to_additive (attr := simp)]
theorem preimage_mul_left_singleton :
- preimage {b} ((· * ·) a) ((mul_right_injective _).injOn _) = {a⁻¹ * b} := by
+ preimage {b} (a * ·) ((mul_right_injective _).injOn _) = {a⁻¹ * b} := by
classical rw [← image_mul_left', image_singleton]
#align finset.preimage_mul_left_singleton Finset.preimage_mul_left_singleton
#align finset.preimage_add_left_singleton Finset.preimage_add_left_singleton
@@ -1220,7 +1220,7 @@ theorem preimage_mul_right_singleton :
#align finset.preimage_add_right_singleton Finset.preimage_add_right_singleton
@[to_additive (attr := simp)]
-theorem preimage_mul_left_one : preimage 1 ((· * ·) a) ((mul_right_injective _).injOn _) = {a⁻¹} :=
+theorem preimage_mul_left_one : preimage 1 (a * ·) ((mul_right_injective _).injOn _) = {a⁻¹} :=
by classical rw [← image_mul_left', image_one, mul_one]
#align finset.preimage_mul_left_one Finset.preimage_mul_left_one
#align finset.preimage_add_left_zero Finset.preimage_add_left_zero
@@ -1232,7 +1232,7 @@ theorem preimage_mul_right_one : preimage 1 (· * b) ((mul_left_injective _).inj
#align finset.preimage_add_right_zero Finset.preimage_add_right_zero
@[to_additive]
-theorem preimage_mul_left_one' : preimage 1 ((· * ·) a⁻¹) ((mul_right_injective _).injOn _) = {a} :=
+theorem preimage_mul_left_one' : preimage 1 (a⁻¹ * ·) ((mul_right_injective _).injOn _) = {a} :=
by rw [preimage_mul_left_one, inv_inv]
#align finset.preimage_mul_left_one' Finset.preimage_mul_left_one'
#align finset.preimage_add_left_zero' Finset.preimage_add_left_zero'
@@ -1502,7 +1502,7 @@ theorem vsub_singleton (b : β) : s -ᵥ ({b} : Finset β) = s.image (· -ᵥ b)
image₂_singleton_right
#align finset.vsub_singleton Finset.vsub_singleton
-theorem singleton_vsub (a : β) : ({a} : Finset β) -ᵥ t = t.image ((· -ᵥ ·) a) :=
+theorem singleton_vsub (a : β) : ({a} : Finset β) -ᵥ t = t.image (a -ᵥ ·) :=
image₂_singleton_left
#align finset.singleton_vsub Finset.singleton_vsub
@@ -1571,14 +1571,14 @@ variable [DecidableEq β] [SMul α β] {s s₁ s₂ t u : Finset β} {a : α} {b
/-- The scaling of a finset `s` by a scalar `a`: `a • s = {a • x | x ∈ s}`. -/
@[to_additive "The translation of a finset `s` by a vector `a`: `a +ᵥ s = {a +ᵥ x | x ∈ s}`."]
protected def smulFinset : SMul α (Finset β) :=
- ⟨fun a => image <| (· • ·) a⟩
+ ⟨fun a => image <| (a • ·)⟩
#align finset.has_smul_finset Finset.smulFinset
#align finset.has_vadd_finset Finset.vaddFinset
scoped[Pointwise] attribute [instance] Finset.smulFinset Finset.vaddFinset
@[to_additive]
-theorem smul_finset_def : a • s = s.image ((· • ·) a) :=
+theorem smul_finset_def : a • s = s.image (a • ·) :=
rfl
#align finset.smul_finset_def Finset.smul_finset_def
#align finset.vadd_finset_def Finset.vadd_finset_def
@@ -1772,6 +1772,22 @@ scoped[Pointwise]
attribute [instance]
Finset.mulActionFinset Finset.addActionFinset Finset.mulAction Finset.addAction
+/-- If scalar multiplication by elements of `α` sends `(0 : β)` to zero,
+then the same is true for `(0 : Finset β)`. -/
+protected def smulZeroClassFinset [Zero β] [SMulZeroClass α β] :
+ SMulZeroClass α (Finset β) :=
+ coe_injective.smulZeroClass ⟨(↑), coe_zero⟩ coe_smul_finset
+
+scoped[Pointwise] attribute [instance] Finset.smulZeroClassFinset
+
+/-- If the scalar multiplication `(· • ·) : α → β → β` is distributive,
+then so is `(· • ·) : α → Finset β → Finset β`. -/
+protected def distribSMulFinset [AddZeroClass β] [DistribSMul α β] :
+ DistribSMul α (Finset β) :=
+ coe_injective.distribSMul coeAddMonoidHom coe_smul_finset
+
+scoped[Pointwise] attribute [instance] Finset.distribSMulFinset
+
/-- A distributive multiplicative action of a monoid on an additive monoid `β` gives a distributive
multiplicative action on `Finset β`. -/
protected def distribMulActionFinset [Monoid α] [AddMonoid β] [DistribMulAction α β] :
@@ -1792,17 +1808,9 @@ instance [DecidableEq α] [Zero α] [Mul α] [NoZeroDivisors α] : NoZeroDivisor
Function.Injective.noZeroDivisors (↑) coe_injective coe_zero coe_mul
instance noZeroSMulDivisors [Zero α] [Zero β] [SMul α β] [NoZeroSMulDivisors α β] :
- NoZeroSMulDivisors (Finset α) (Finset β) :=
- ⟨by
- intro s t h
- by_contra H
- have hst : (s • t).Nonempty := h.symm.subst zero_nonempty
- rw [← hst.of_smul_left.subset_zero_iff, ← hst.of_smul_right.subset_zero_iff] at H
- push_neg at H
- simp_rw [not_subset, mem_zero] at H
- obtain ⟨⟨a, hs, ha⟩, b, ht, hb⟩ := H
- exact (eq_zero_or_eq_zero_of_smul_eq_zero <| mem_zero.1 <| subset_of_eq h
- <| smul_mem_smul hs ht).elim ha hb⟩
+ NoZeroSMulDivisors (Finset α) (Finset β) where
+ eq_zero_or_eq_zero_of_smul_eq_zero {s t} := by
+ exact_mod_cast eq_zero_or_eq_zero_of_smul_eq_zero (c := s.toSet) (x := t.toSet)
instance noZeroSMulDivisors_finset [Zero α] [Zero β] [SMul α β] [NoZeroSMulDivisors α β] :
NoZeroSMulDivisors α (Finset β) :=
IsCancelMul
(#8428)
This lets lemmas about cancellative monoids work for cancellative semigroups
Some docstrings have been rewritten, as adjusting the wording was too awkward.
The new .all
names are intended to match Commute.all
.
@@ -1869,9 +1869,9 @@ theorem op_smul_finset_mul_eq_mul_smul_finset (a : α) (s : Finset α) (t : Fins
end Semigroup
-section LeftCancelSemigroup
+section IsLeftCancelMul
-variable [LeftCancelSemigroup α] [DecidableEq α] (s t : Finset α) (a : α)
+variable [Mul α] [IsLeftCancelMul α] [DecidableEq α] (s t : Finset α) (a : α)
@[to_additive]
theorem pairwiseDisjoint_smul_iff {s : Set α} {t : Finset α} :
@@ -1898,11 +1898,11 @@ theorem card_le_card_mul_left {s : Finset α} (hs : s.Nonempty) : t.card ≤ (s
#align finset.card_le_card_mul_left Finset.card_le_card_mul_left
#align finset.card_le_card_add_left Finset.card_le_card_add_left
-end LeftCancelSemigroup
+end IsLeftCancelMul
section
-variable [RightCancelSemigroup α] [DecidableEq α] (s t : Finset α) (a : α)
+variable [Mul α] [IsRightCancelMul α] [DecidableEq α] (s t : Finset α) (a : α)
@[to_additive (attr := simp)]
theorem card_mul_singleton : (s * {a}).card = s.card :=
@@ -623,7 +623,7 @@ theorem singleton_div (a : α) : {a} / s = s.image ((· / ·) a) :=
#align finset.singleton_div Finset.singleton_div
#align finset.singleton_sub Finset.singleton_sub
--- @[to_additive (attr := simp )] -- Porting note: simp can prove this & the additive version
+-- @[to_additive (attr := simp)] -- Porting note: simp can prove this & the additive version
@[to_additive]
theorem singleton_div_singleton (a b : α) : ({a} : Finset α) / {b} = {a / b} :=
image₂_singleton
@@ -854,7 +854,7 @@ section Monoid
variable [Monoid α] {s t : Finset α} {a : α} {m n : ℕ}
@[to_additive (attr := simp, norm_cast)]
-theorem coe_pow (s : Finset α) (n : ℕ) : ↑(s ^ n) = (s : Set α) ^ n := by
+theorem coe_pow (s : Finset α) (n : ℕ) : ↑(s ^ n) = (s : Set α) ^ n := by
change ↑(npowRec n s) = (s: Set α) ^ n
induction' n with n ih
· rw [npowRec, pow_zero, coe_one]
This makes it easier to refactor the order or inheritance structure of morphisms without having to change all of the anonymous constructors.
This is far from exhaustive.
@@ -146,8 +146,8 @@ theorem card_one : (1 : Finset α).card = 1 :=
/-- The singleton operation as a `OneHom`. -/
@[to_additive "The singleton operation as a `ZeroHom`."]
-def singletonOneHom : OneHom α (Finset α) :=
- ⟨singleton, singleton_one⟩
+def singletonOneHom : OneHom α (Finset α) where
+ toFun := singleton; map_one' := singleton_one
#align finset.singleton_one_hom Finset.singletonOneHom
#align finset.singleton_zero_hom Finset.singletonZeroHom
@@ -487,8 +487,8 @@ theorem image_mul : (s * t).image (f : α → β) = s.image f * t.image f :=
/-- The singleton operation as a `MulHom`. -/
@[to_additive "The singleton operation as an `AddHom`."]
-def singletonMulHom : α →ₙ* Finset α :=
- ⟨singleton, fun _ _ => (singleton_mul_singleton _ _).symm⟩
+def singletonMulHom : α →ₙ* Finset α where
+ toFun := singleton; map_mul' _ _ := (singleton_mul_singleton _ _).symm
#align finset.singleton_mul_hom Finset.singletonMulHom
#align finset.singleton_add_hom Finset.singletonAddHom
@@ -1776,13 +1776,13 @@ scoped[Pointwise]
multiplicative action on `Finset β`. -/
protected def distribMulActionFinset [Monoid α] [AddMonoid β] [DistribMulAction α β] :
DistribMulAction α (Finset β) :=
- Function.Injective.distribMulAction ⟨⟨(↑), coe_zero⟩, coe_add⟩ coe_injective coe_smul_finset
+ Function.Injective.distribMulAction coeAddMonoidHom coe_injective coe_smul_finset
#align finset.distrib_mul_action_finset Finset.distribMulActionFinset
/-- A multiplicative action of a monoid on a monoid `β` gives a multiplicative action on `Set β`. -/
protected def mulDistribMulActionFinset [Monoid α] [Monoid β] [MulDistribMulAction α β] :
MulDistribMulAction α (Finset β) :=
- Function.Injective.mulDistribMulAction ⟨⟨(↑), coe_one⟩, coe_mul⟩ coe_injective coe_smul_finset
+ Function.Injective.mulDistribMulAction coeMonoidHom coe_injective coe_smul_finset
#align finset.mul_distrib_mul_action_finset Finset.mulDistribMulActionFinset
scoped[Pointwise]
@@ -233,7 +233,7 @@ theorem inv_nonempty_iff : s⁻¹.Nonempty ↔ s.Nonempty :=
#align finset.inv_nonempty_iff Finset.inv_nonempty_iff
#align finset.neg_nonempty_iff Finset.neg_nonempty_iff
-alias inv_nonempty_iff ↔ Nonempty.of_inv Nonempty.inv
+alias ⟨Nonempty.of_inv, Nonempty.inv⟩ := inv_nonempty_iff
#align finset.nonempty.of_inv Finset.Nonempty.of_inv
#align finset.nonempty.inv Finset.Nonempty.inv
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -58,7 +58,7 @@ open Function MulOpposite
open BigOperators Pointwise
-variable {F α β γ : Type _}
+variable {F α β γ : Type*}
namespace Finset
@@ -974,7 +974,7 @@ protected def commMonoid : CommMonoid (Finset α) :=
scoped[Pointwise] attribute [instance] Finset.commMonoid Finset.addCommMonoid
@[to_additive (attr := simp, norm_cast)]
-theorem coe_prod {ι : Type _} (s : Finset ι) (f : ι → Finset α) :
+theorem coe_prod {ι : Type*} (s : Finset ι) (f : ι → Finset α) :
↑(∏ i in s, f i) = ∏ i in s, (f i : Set α) :=
map_prod ((coeMonoidHom) : Finset α →* Set α) _ _
#align finset.coe_prod Finset.coe_prod
MeasureTheory.MeasurePreserving.measure_symmDiff_preimage_iterate_le
(#6175)
Also some minor loosely-related other changes.
@@ -2093,9 +2093,9 @@ theorem smul_finset_sdiff₀ (ha : a ≠ 0) : a • (s \ t) = a • s \ a • t
image_sdiff _ _ <| MulAction.injective₀ ha
#align finset.smul_finset_sdiff₀ Finset.smul_finset_sdiff₀
-theorem smul_finset_symm_diff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (a • t) :=
+theorem smul_finset_symmDiff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (a • t) :=
image_symmDiff _ _ <| MulAction.injective₀ ha
-#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symm_diff₀
+#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symmDiff₀
theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ : Finset β) = univ :=
coe_injective <| by
@@ -2,11 +2,6 @@
Copyright (c) 2020 Floris van Doorn. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn, Yaël Dillies
-
-! This file was ported from Lean 3 source module data.finset.pointwise
-! leanprover-community/mathlib commit eba7871095e834365616b5e43c8c7bb0b37058d0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Data.Finset.NAry
import Mathlib.Data.Finset.Preimage
@@ -14,6 +9,8 @@ import Mathlib.Data.Set.Pointwise.Finite
import Mathlib.Data.Set.Pointwise.SMul
import Mathlib.Data.Set.Pointwise.ListOfFn
+#align_import data.finset.pointwise from "leanprover-community/mathlib"@"eba7871095e834365616b5e43c8c7bb0b37058d0"
+
/-!
# Pointwise operations of finsets
@@ -1599,7 +1599,7 @@ theorem mem_smul_finset {x : β} : x ∈ a • s ↔ ∃ y, y ∈ s ∧ a • y
#align finset.mem_vadd_finset Finset.mem_vadd_finset
@[to_additive (attr := simp, norm_cast)]
-theorem coe_smul_finset (a : α) (s : Finset β) : ↑(a • s) = a • (↑s : Set β) :=
+theorem coe_smul_finset (a : α) (s : Finset β) : ↑(a • s) = a • (↑s : Set β) :=
coe_image
#align finset.coe_smul_finset Finset.coe_smul_finset
#align finset.coe_vadd_finset Finset.coe_vadd_finset
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -2103,7 +2103,7 @@ theorem smul_finset_symm_diff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆
theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ : Finset β) = univ :=
coe_injective <| by
rw [← coe_subset] at hs
- push_cast at hs⊢
+ push_cast at hs ⊢
exact Set.smul_univ₀ hs
#align finset.smul_univ₀ Finset.smul_univ₀
Forward-port leanprover-community/mathlib#18663
Also add a missing lemma.
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn, Yaël Dillies
! This file was ported from Lean 3 source module data.finset.pointwise
-! leanprover-community/mathlib commit 5e526d18cea33550268dcbbddcb822d5cde40654
+! leanprover-community/mathlib commit eba7871095e834365616b5e43c8c7bb0b37058d0
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -2025,6 +2025,37 @@ theorem card_smul_finset (a : α) (s : Finset β) : (a • s).card = s.card :=
#align finset.card_smul_finset Finset.card_smul_finset
#align finset.card_vadd_finset Finset.card_vadd_finset
+/-- If the left cosets of `t` by elements of `s` are disjoint (but not necessarily distinct!), then
+the size of `t` divides the size of `s • t`. -/
+@[to_additive "If the left cosets of `t` by elements of `s` are disjoint (but not necessarily
+distinct!), then the size of `t` divides the size of `s +ᵥ t`."]
+theorem card_dvd_card_smul_right {s : Finset α} :
+ ((· • t) '' (s : Set α)).PairwiseDisjoint id → t.card ∣ (s • t).card :=
+ card_dvd_card_image₂_right fun _ _ => MulAction.injective _
+#align finset.card_dvd_card_smul_right Finset.card_dvd_card_smul_right
+#align finset.card_dvd_card_vadd_right Finset.card_dvd_card_vadd_right
+
+variable [DecidableEq α]
+
+/-- If the right cosets of `s` by elements of `t` are disjoint (but not necessarily distinct!), then
+the size of `s` divides the size of `s * t`. -/
+@[to_additive "If the right cosets of `s` by elements of `t` are disjoint (but not necessarily
+distinct!), then the size of `s` divides the size of `s + t`."]
+theorem card_dvd_card_mul_left {s t : Finset α} :
+ ((fun b => s.image fun a => a * b) '' (t : Set α)).PairwiseDisjoint id →
+ s.card ∣ (s * t).card :=
+ card_dvd_card_image₂_left fun _ _ => mul_left_injective _
+#align finset.card_dvd_card_mul_left Finset.card_dvd_card_mul_left
+#align finset.card_dvd_card_add_left Finset.card_dvd_card_add_left
+
+/-- If the left cosets of `t` by elements of `s` are disjoint (but not necessarily distinct!), then
+the size of `t` divides the size of `s * t`. -/
+@[to_additive "If the left cosets of `t` by elements of `s` are disjoint (but not necessarily
+distinct!), then the size of `t` divides the size of `s + t`."]
+theorem card_dvd_card_mul_right {s t : Finset α} :
+ ((· • t) '' (s : Set α)).PairwiseDisjoint id → t.card ∣ (s * t).card :=
+ card_dvd_card_image₂_right fun _ _ => mul_right_injective _
+
end Group
section GroupWithZero
@@ -857,7 +857,7 @@ section Monoid
variable [Monoid α] {s t : Finset α} {a : α} {m n : ℕ}
@[to_additive (attr := simp, norm_cast)]
-theorem coe_pow (s : Finset α) (n : ℕ) : ↑(s ^ n) = (s: Set α) ^ n := by
+theorem coe_pow (s : Finset α) (n : ℕ) : ↑(s ^ n) = (s : Set α) ^ n := by
change ↑(npowRec n s) = (s: Set α) ^ n
induction' n with n ih
· rw [npowRec, pow_zero, coe_one]
@@ -992,7 +992,7 @@ section DivisionMonoid
variable [DivisionMonoid α] {s t : Finset α}
@[to_additive (attr := simp)]
-theorem coe_zpow (s : Finset α) : ∀ n : ℤ, ↑(s ^ n) = (s: Set α) ^ n
+theorem coe_zpow (s : Finset α) : ∀ n : ℤ, ↑(s ^ n) = (s : Set α) ^ n
| Int.ofNat n => coe_pow _ _
| Int.negSucc n => by
refine' (coe_inv _).trans _
@@ -1420,7 +1420,7 @@ theorem union_smul_inter_subset_union [DecidableEq α] : (s₁ ∪ s₂) • (t
"If a finset `u` is contained in the scalar sum of two sets `s +ᵥ t`, we can find two
finsets `s'`, `t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' +ᵥ t'`."]
theorem subset_smul {s : Set α} {t : Set β} :
- ↑u ⊆ s • t → ∃ (s' : Finset α)(t' : Finset β), ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' • t' :=
+ ↑u ⊆ s • t → ∃ (s' : Finset α) (t' : Finset β), ↑s' ⊆ s ∧ ↑t' ⊆ t ∧ u ⊆ s' • t' :=
subset_image₂
#align finset.subset_smul Finset.subset_smul
#align finset.subset_vadd Finset.subset_vadd
@@ -524,7 +524,7 @@ section Div
variable [DecidableEq α] [Div α] {s s₁ s₂ t t₁ t₂ u : Finset α} {a b : α}
-/-- The pointwise division of sfinets `s / t` is defined as `{x / y | x ∈ s, y ∈ t}` in locale
+/-- The pointwise division of finsets `s / t` is defined as `{x / y | x ∈ s, y ∈ t}` in locale
`Pointwise`. -/
@[to_additive
"The pointwise subtraction of finsets `s - t` is defined as `{x - y | x ∈ s, y ∈ t}`
SProd
to implement overloaded notation · ×ˢ ·
(#4200)
Currently, the following notations are changed from · ×ˢ ·
because Lean 4 can't deal with ambiguous notations.
| Definition | Notation |
| :
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Chris Hughes <chrishughes24@gmail.com>
@@ -309,13 +309,13 @@ protected def mul : Mul (Finset α) :=
scoped[Pointwise] attribute [instance] Finset.mul Finset.add
@[to_additive]
-theorem mul_def : s * t = (s ×ᶠ t).image fun p : α × α => p.1 * p.2 :=
+theorem mul_def : s * t = (s ×ˢ t).image fun p : α × α => p.1 * p.2 :=
rfl
#align finset.mul_def Finset.mul_def
#align finset.add_def Finset.add_def
@[to_additive]
-theorem image_mul_product : ((s ×ᶠ t).image fun x : α × α => x.fst * x.snd) = s * t :=
+theorem image_mul_product : ((s ×ˢ t).image fun x : α × α => x.fst * x.snd) = s * t :=
rfl
#align finset.image_mul_product Finset.image_mul_product
#align finset.image_add_product Finset.image_add_product
@@ -537,13 +537,13 @@ protected def div : Div (Finset α) :=
scoped[Pointwise] attribute [instance] Finset.div Finset.sub
@[to_additive]
-theorem div_def : s / t = (s ×ᶠ t).image fun p : α × α => p.1 / p.2 :=
+theorem div_def : s / t = (s ×ˢ t).image fun p : α × α => p.1 / p.2 :=
rfl
#align finset.div_def Finset.div_def
#align finset.sub_def Finset.sub_def
@[to_additive add_image_prod]
-theorem image_div_prod : ((s ×ᶠ t).image fun x : α × α => x.fst / x.snd) = s / t :=
+theorem image_div_prod : ((s ×ˢ t).image fun x : α × α => x.fst / x.snd) = s / t :=
rfl
#align finset.image_div_prod Finset.image_div_prod
#align finset.add_image_prod Finset.add_image_prod
@@ -1265,13 +1265,13 @@ protected def smul : SMul (Finset α) (Finset β) :=
scoped[Pointwise] attribute [instance] Finset.smul Finset.vadd
@[to_additive]
-theorem smul_def : s • t = (s ×ᶠ t).image fun p : α × β => p.1 • p.2 :=
+theorem smul_def : s • t = (s ×ˢ t).image fun p : α × β => p.1 • p.2 :=
rfl
#align finset.smul_def Finset.smul_def
#align finset.vadd_def Finset.vadd_def
@[to_additive]
-theorem image_smul_product : ((s ×ᶠ t).image fun x : α × β => x.fst • x.snd) = s • t :=
+theorem image_smul_product : ((s ×ˢ t).image fun x : α × β => x.fst • x.snd) = s • t :=
rfl
#align finset.image_smul_product Finset.image_smul_product
#align finset.image_vadd_product Finset.image_vadd_product
fix-comments.py
on all files.@@ -822,7 +822,7 @@ theorem singletonMonoidHom_apply (a : α) : singletonMonoidHom a = {a} :=
#align finset.singleton_monoid_hom_apply Finset.singletonMonoidHom_apply
#align finset.singleton_add_monoid_hom_apply Finset.singletonAddMonoidHom_apply
-/-- The coercion from `Finset` to `set` as a `MonoidHom`. -/
+/-- The coercion from `Finset` to `Set` as a `MonoidHom`. -/
@[to_additive "The coercion from `Finset` to `set` as an `AddMonoidHom`."]
noncomputable def coeMonoidHom : Finset α →* Set α where
toFun := CoeTC.coe
@@ -1782,7 +1782,7 @@ protected def distribMulActionFinset [Monoid α] [AddMonoid β] [DistribMulActio
Function.Injective.distribMulAction ⟨⟨(↑), coe_zero⟩, coe_add⟩ coe_injective coe_smul_finset
#align finset.distrib_mul_action_finset Finset.distribMulActionFinset
-/-- A multiplicative action of a monoid on a monoid `β` gives a multiplicative action on `set β`. -/
+/-- A multiplicative action of a monoid on a monoid `β` gives a multiplicative action on `Set β`. -/
protected def mulDistribMulActionFinset [Monoid α] [Monoid β] [MulDistribMulAction α β] :
MulDistribMulAction α (Finset β) :=
Function.Injective.mulDistribMulAction ⟨⟨(↑), coe_one⟩, coe_mul⟩ coe_injective coe_smul_finset
@@ -2044,7 +2044,7 @@ theorem mem_inv_smul_finset_iff₀ (ha : a ≠ 0) : b ∈ a⁻¹ • s ↔ a •
show _ ∈ (Units.mk0 a ha)⁻¹ • _ ↔ _ from mem_inv_smul_finset_iff
#align finset.mem_inv_smul_finset_iff₀ Finset.mem_inv_smul_finset_iff₀
--- @[simp] -- Porting note: `simpNF` linter times out
+@[simp]
theorem smul_finset_subset_smul_finset_iff₀ (ha : a ≠ 0) : a • s ⊆ a • t ↔ s ⊆ t :=
show Units.mk0 a ha • _ ⊆ _ ↔ _ from smul_finset_subset_smul_finset_iff
#align finset.smul_finset_subset_smul_finset_iff₀ Finset.smul_finset_subset_smul_finset_iff₀
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -1677,10 +1677,10 @@ theorem smul_finset_subset_smul {s : Finset α} : a ∈ s → a • t ⊆ s •
#align finset.vadd_finset_subset_vadd Finset.vadd_finset_subset_vadd
@[to_additive (attr := simp)]
-theorem bunionᵢ_smul_finset (s : Finset α) (t : Finset β) : s.bunionᵢ (· • t) = s • t :=
- bunionᵢ_image_left
-#align finset.bUnion_smul_finset Finset.bunionᵢ_smul_finset
-#align finset.bUnion_vadd_finset Finset.bunionᵢ_vadd_finset
+theorem biUnion_smul_finset (s : Finset α) (t : Finset β) : s.biUnion (· • t) = s • t :=
+ biUnion_image_left
+#align finset.bUnion_smul_finset Finset.biUnion_smul_finset
+#align finset.bUnion_vadd_finset Finset.biUnion_vadd_finset
end SMul
@@ -1840,10 +1840,10 @@ theorem op_smul_finset_subset_mul : a ∈ t → op a • s ⊆ s * t :=
#align finset.op_vadd_finset_subset_add Finset.op_vadd_finset_subset_add
@[to_additive (attr := simp)]
-theorem bunionᵢ_op_smul_finset (s t : Finset α) : (t.bunionᵢ fun a => op a • s) = s * t :=
- bunionᵢ_image_right
-#align finset.bUnion_op_smul_finset Finset.bunionᵢ_op_smul_finset
-#align finset.bUnion_op_vadd_finset Finset.bunionᵢ_op_vadd_finset
+theorem biUnion_op_smul_finset (s t : Finset α) : (t.biUnion fun a => op a • s) = s * t :=
+ biUnion_image_right
+#align finset.bUnion_op_smul_finset Finset.biUnion_op_smul_finset
+#align finset.bUnion_op_vadd_finset Finset.biUnion_op_vadd_finset
@[to_additive]
theorem mul_subset_iff_left : s * t ⊆ u ↔ ∀ a ∈ s, a • t ⊆ u :=
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".
@@ -1821,8 +1821,7 @@ variable [DecidableEq β] [DecidableEq γ] [SMul αᵐᵒᵖ β] [SMul β γ] [S
-- TODO: replace hypothesis and conclusion with a typeclass
@[to_additive]
theorem op_smul_finset_smul_eq_smul_smul_finset (a : α) (s : Finset β) (t : Finset γ)
- (h : ∀ (a : α) (b : β) (c : γ), (op a • b) • c = b • a • c) : (op a • s) • t = s • a • t :=
- by
+ (h : ∀ (a : α) (b : β) (c : γ), (op a • b) • c = b • a • c) : (op a • s) • t = s • a • t := by
ext
simp [mem_smul, mem_smul_finset, h]
#align finset.op_smul_finset_smul_eq_smul_smul_finset Finset.op_smul_finset_smul_eq_smul_smul_finset
a • t ⊆ s • t
(#3227)
Match https://github.com/leanprover-community/mathlib/pull/18697
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn, Yaël Dillies
! This file was ported from Lean 3 source module data.finset.pointwise
-! leanprover-community/mathlib commit b685f506164f8d17a6404048bc4d696739c5d976
+! leanprover-community/mathlib commit 5e526d18cea33550268dcbbddcb822d5cde40654
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -57,7 +57,7 @@ pointwise subtraction
-/
-open Function
+open Function MulOpposite
open BigOperators Pointwise
@@ -236,9 +236,11 @@ theorem inv_nonempty_iff : s⁻¹.Nonempty ↔ s.Nonempty :=
#align finset.inv_nonempty_iff Finset.inv_nonempty_iff
#align finset.neg_nonempty_iff Finset.neg_nonempty_iff
-alias inv_nonempty_iff ↔ nonempty.inv nonempty.of_inv
-#align finset.nonempty.inv Finset.nonempty.inv
-#align finset.nonempty.of_inv Finset.nonempty.of_inv
+alias inv_nonempty_iff ↔ Nonempty.of_inv Nonempty.inv
+#align finset.nonempty.of_inv Finset.Nonempty.of_inv
+#align finset.nonempty.inv Finset.Nonempty.inv
+
+attribute [to_additive] Nonempty.inv Nonempty.of_inv
@[to_additive (attr := mono)]
theorem inv_subset_inv (h : s ⊆ t) : s⁻¹ ⊆ t⁻¹ :=
@@ -457,6 +459,18 @@ theorem mul_inter_subset : s * (t₁ ∩ t₂) ⊆ s * t₁ ∩ (s * t₂) :=
#align finset.mul_inter_subset Finset.mul_inter_subset
#align finset.add_inter_subset Finset.add_inter_subset
+@[to_additive]
+theorem inter_mul_union_subset_union : s₁ ∩ s₂ * (t₁ ∪ t₂) ⊆ s₁ * t₁ ∪ s₂ * t₂ :=
+ image₂_inter_union_subset_union
+#align finset.inter_mul_union_subset_union Finset.inter_mul_union_subset_union
+#align finset.inter_add_union_subset_union Finset.inter_add_union_subset_union
+
+@[to_additive]
+theorem union_mul_inter_subset_union : (s₁ ∪ s₂) * (t₁ ∩ t₂) ⊆ s₁ * t₁ ∪ s₂ * t₂ :=
+ image₂_union_inter_subset_union
+#align finset.union_mul_inter_subset_union Finset.union_mul_inter_subset_union
+#align finset.union_add_inter_subset_union Finset.union_add_inter_subset_union
+
/-- If a finset `u` is contained in the product of two sets `s * t`, we can find two finsets `s'`,
`t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' * t'`. -/
@[to_additive
@@ -667,6 +681,18 @@ theorem div_inter_subset : s / (t₁ ∩ t₂) ⊆ s / t₁ ∩ (s / t₂) :=
#align finset.div_inter_subset Finset.div_inter_subset
#align finset.sub_inter_subset Finset.sub_inter_subset
+@[to_additive]
+theorem inter_div_union_subset_union : s₁ ∩ s₂ / (t₁ ∪ t₂) ⊆ s₁ / t₁ ∪ s₂ / t₂ :=
+ image₂_inter_union_subset_union
+#align finset.inter_div_union_subset_union Finset.inter_div_union_subset_union
+#align finset.inter_sub_union_subset_union Finset.inter_sub_union_subset_union
+
+@[to_additive]
+theorem union_div_inter_subset_union : (s₁ ∪ s₂) / (t₁ ∩ t₂) ⊆ s₁ / t₁ ∪ s₂ / t₂ :=
+ image₂_union_inter_subset_union
+#align finset.union_div_inter_subset_union Finset.union_div_inter_subset_union
+#align finset.union_sub_inter_subset_union Finset.union_sub_inter_subset_union
+
/-- If a finset `u` is contained in the product of two sets `s / t`, we can find two finsets `s'`,
`t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' / t'`. -/
@[to_additive
@@ -1376,6 +1402,18 @@ theorem smul_inter_subset : s • (t₁ ∩ t₂) ⊆ s • t₁ ∩ s • t₂
#align finset.smul_inter_subset Finset.smul_inter_subset
#align finset.vadd_inter_subset Finset.vadd_inter_subset
+@[to_additive]
+theorem inter_smul_union_subset_union [DecidableEq α] : (s₁ ∩ s₂) • (t₁ ∪ t₂) ⊆ s₁ • t₁ ∪ s₂ • t₂ :=
+ image₂_inter_union_subset_union
+#align finset.inter_smul_union_subset_union Finset.inter_smul_union_subset_union
+#align finset.inter_vadd_union_subset_union Finset.inter_vadd_union_subset_union
+
+@[to_additive]
+theorem union_smul_inter_subset_union [DecidableEq α] : (s₁ ∪ s₂) • (t₁ ∩ t₂) ⊆ s₁ • t₁ ∪ s₂ • t₂ :=
+ image₂_union_inter_subset_union
+#align finset.union_smul_inter_subset_union Finset.union_smul_inter_subset_union
+#align finset.union_vadd_inter_subset_union Finset.union_vadd_inter_subset_union
+
/-- If a finset `u` is contained in the scalar product of two sets `s • t`, we can find two finsets
`s'`, `t'` such that `s' ⊆ s`, `t' ⊆ t` and `u ⊆ s' • t'`. -/
@[to_additive
@@ -1567,10 +1605,10 @@ theorem coe_smul_finset (a : α) (s : Finset β) : ↑(a • s) = a • (↑s :
#align finset.coe_vadd_finset Finset.coe_vadd_finset
@[to_additive]
-theorem smul_finset_mem_smul_finset : b ∈ s → a • b ∈ a • s :=
+theorem smul_mem_smul_finset : b ∈ s → a • b ∈ a • s :=
mem_image_of_mem _
-#align finset.smul_finset_mem_smul_finset Finset.smul_finset_mem_smul_finset
-#align finset.vadd_finset_mem_vadd_finset Finset.vadd_finset_mem_vadd_finset
+#align finset.smul_mem_smul_finset Finset.smul_mem_smul_finset
+#align finset.vadd_mem_vadd_finset Finset.vadd_mem_vadd_finset
@[to_additive]
theorem smul_finset_card_le : (a • s).card ≤ s.card :=
@@ -1632,10 +1670,17 @@ theorem smul_finset_inter_subset : a • (s₁ ∩ s₂) ⊆ a • s₁ ∩ a
#align finset.smul_finset_inter_subset Finset.smul_finset_inter_subset
#align finset.vadd_finset_inter_subset Finset.vadd_finset_inter_subset
-@[simp]
+@[to_additive]
+theorem smul_finset_subset_smul {s : Finset α} : a ∈ s → a • t ⊆ s • t :=
+ image_subset_image₂_right
+#align finset.smul_finset_subset_smul Finset.smul_finset_subset_smul
+#align finset.vadd_finset_subset_vadd Finset.vadd_finset_subset_vadd
+
+@[to_additive (attr := simp)]
theorem bunionᵢ_smul_finset (s : Finset α) (t : Finset β) : s.bunionᵢ (· • t) = s • t :=
bunionᵢ_image_left
#align finset.bUnion_smul_finset Finset.bunionᵢ_smul_finset
+#align finset.bUnion_vadd_finset Finset.bunionᵢ_vadd_finset
end SMul
@@ -1769,6 +1814,65 @@ instance noZeroSMulDivisors_finset [Zero α] [Zero β] [SMul α β] [NoZeroSMulD
end Instances
+section SMul
+
+variable [DecidableEq β] [DecidableEq γ] [SMul αᵐᵒᵖ β] [SMul β γ] [SMul α γ]
+
+-- TODO: replace hypothesis and conclusion with a typeclass
+@[to_additive]
+theorem op_smul_finset_smul_eq_smul_smul_finset (a : α) (s : Finset β) (t : Finset γ)
+ (h : ∀ (a : α) (b : β) (c : γ), (op a • b) • c = b • a • c) : (op a • s) • t = s • a • t :=
+ by
+ ext
+ simp [mem_smul, mem_smul_finset, h]
+#align finset.op_smul_finset_smul_eq_smul_smul_finset Finset.op_smul_finset_smul_eq_smul_smul_finset
+#align finset.op_vadd_finset_vadd_eq_vadd_vadd_finset Finset.op_vadd_finset_vadd_eq_vadd_vadd_finset
+
+end SMul
+
+section Mul
+
+variable [Mul α] [DecidableEq α] {s t u : Finset α} {a : α}
+
+@[to_additive]
+theorem op_smul_finset_subset_mul : a ∈ t → op a • s ⊆ s * t :=
+ image_subset_image₂_left
+#align finset.op_smul_finset_subset_mul Finset.op_smul_finset_subset_mul
+#align finset.op_vadd_finset_subset_add Finset.op_vadd_finset_subset_add
+
+@[to_additive (attr := simp)]
+theorem bunionᵢ_op_smul_finset (s t : Finset α) : (t.bunionᵢ fun a => op a • s) = s * t :=
+ bunionᵢ_image_right
+#align finset.bUnion_op_smul_finset Finset.bunionᵢ_op_smul_finset
+#align finset.bUnion_op_vadd_finset Finset.bunionᵢ_op_vadd_finset
+
+@[to_additive]
+theorem mul_subset_iff_left : s * t ⊆ u ↔ ∀ a ∈ s, a • t ⊆ u :=
+ image₂_subset_iff_left
+#align finset.mul_subset_iff_left Finset.mul_subset_iff_left
+#align finset.add_subset_iff_left Finset.add_subset_iff_left
+
+@[to_additive]
+theorem mul_subset_iff_right : s * t ⊆ u ↔ ∀ b ∈ t, op b • s ⊆ u :=
+ image₂_subset_iff_right
+#align finset.mul_subset_iff_right Finset.mul_subset_iff_right
+#align finset.add_subset_iff_right Finset.add_subset_iff_right
+
+end Mul
+
+section Semigroup
+
+variable [Semigroup α] [DecidableEq α]
+
+@[to_additive]
+theorem op_smul_finset_mul_eq_mul_smul_finset (a : α) (s : Finset α) (t : Finset α) :
+ op a • s * t = s * a • t :=
+ op_smul_finset_smul_eq_smul_smul_finset _ _ _ fun _ _ _ => mul_assoc _ _ _
+#align finset.op_smul_finset_mul_eq_mul_smul_finset Finset.op_smul_finset_mul_eq_mul_smul_finset
+#align finset.op_vadd_finset_add_eq_add_vadd_finset Finset.op_vadd_finset_add_eq_add_vadd_finset
+
+end Semigroup
+
section LeftCancelSemigroup
variable [LeftCancelSemigroup α] [DecidableEq α] (s t : Finset α) (a : α)
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn, Yaël Dillies
! This file was ported from Lean 3 source module data.finset.pointwise
-! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
+! leanprover-community/mathlib commit b685f506164f8d17a6404048bc4d696739c5d976
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -1697,10 +1697,12 @@ instance isScalarTower'' [SMul α β] [SMul α γ] [SMul β γ] [IsScalarTower
#align finset.is_scalar_tower'' Finset.isScalarTower''
#align finset.vadd_assoc_class'' Finset.vaddAssocClass''
+@[to_additive]
instance isCentralScalar [SMul α β] [SMul αᵐᵒᵖ β] [IsCentralScalar α β] :
IsCentralScalar α (Finset β) :=
⟨fun a s => coe_injective <| by simp only [coe_smul_finset, coe_smul, op_smul_eq_smul]⟩
#align finset.is_central_scalar Finset.isCentralScalar
+#align finset.is_central_vadd Finset.isCentralVAdd
/-- A multiplicative action of a monoid `α` on a type `β` gives a multiplicative action of
`Finset α` on `Finset β`. -/
@@ -1882,6 +1884,38 @@ theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t := by
#align finset.subset_smul_finset_iff Finset.subset_smul_finset_iff
#align finset.subset_vadd_finset_iff Finset.subset_vadd_finset_iff
+@[to_additive]
+theorem smul_finset_inter : a • (s ∩ t) = a • s ∩ a • t :=
+ image_inter _ _ <| MulAction.injective a
+#align finset.smul_finset_inter Finset.smul_finset_inter
+#align finset.vadd_finset_inter Finset.vadd_finset_inter
+
+@[to_additive]
+theorem smul_finset_sdiff : a • (s \ t) = a • s \ a • t :=
+ image_sdiff _ _ <| MulAction.injective a
+#align finset.smul_finset_sdiff Finset.smul_finset_sdiff
+#align finset.vadd_finset_sdiff Finset.vadd_finset_sdiff
+
+@[to_additive]
+theorem smul_finset_symmDiff : a • s ∆ t = (a • s) ∆ (a • t) :=
+ image_symmDiff _ _ <| MulAction.injective a
+#align finset.smul_finset_symm_diff Finset.smul_finset_symmDiff
+#align finset.vadd_finset_symm_diff Finset.vadd_finset_symmDiff
+
+@[to_additive (attr := simp)]
+theorem smul_finset_univ [Fintype β] : a • (univ : Finset β) = univ :=
+ image_univ_of_surjective <| MulAction.surjective a
+#align finset.smul_finset_univ Finset.smul_finset_univ
+#align finset.vadd_finset_univ Finset.vadd_finset_univ
+
+@[to_additive (attr := simp)]
+theorem smul_univ [Fintype β] {s : Finset α} (hs : s.Nonempty) : s • (univ : Finset β) = univ :=
+ coe_injective <| by
+ push_cast
+ exact Set.smul_univ hs
+#align finset.smul_univ Finset.smul_univ
+#align finset.vadd_univ Finset.vadd_univ
+
@[to_additive (attr := simp)]
theorem card_smul_finset (a : α) (s : Finset β) : (a • s).card = s.card :=
card_image_of_injective _ <| MulAction.injective _
@@ -1920,6 +1954,18 @@ theorem subset_smul_finset_iff₀ (ha : a ≠ 0) : s ⊆ a • t ↔ a⁻¹ •
show _ ⊆ Units.mk0 a ha • _ ↔ _ from subset_smul_finset_iff
#align finset.subset_smul_finset_iff₀ Finset.subset_smul_finset_iff₀
+theorem smul_finset_inter₀ (ha : a ≠ 0) : a • (s ∩ t) = a • s ∩ a • t :=
+ image_inter _ _ <| MulAction.injective₀ ha
+#align finset.smul_finset_inter₀ Finset.smul_finset_inter₀
+
+theorem smul_finset_sdiff₀ (ha : a ≠ 0) : a • (s \ t) = a • s \ a • t :=
+ image_sdiff _ _ <| MulAction.injective₀ ha
+#align finset.smul_finset_sdiff₀ Finset.smul_finset_sdiff₀
+
+theorem smul_finset_symm_diff₀ (ha : a ≠ 0) : a • s ∆ t = (a • s) ∆ (a • t) :=
+ image_symmDiff _ _ <| MulAction.injective₀ ha
+#align finset.smul_finset_symm_diff₀ Finset.smul_finset_symm_diff₀
+
theorem smul_univ₀ [Fintype β] {s : Finset α} (hs : ¬s ⊆ 0) : s • (univ : Finset β) = univ :=
coe_injective <| by
rw [← coe_subset] at hs
s ∩ t * s ∪ t ⊆ s * t
(#1619)
Match https://github.com/leanprover-community/mathlib/pull/17961
Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -4,12 +4,13 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn, Yaël Dillies
! This file was ported from Lean 3 source module data.finset.pointwise
-! leanprover-community/mathlib commit f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c
+! leanprover-community/mathlib commit 517cc149e0b515d2893baa376226ed10feb319c7
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Data.Finset.NAry
import Mathlib.Data.Finset.Preimage
+import Mathlib.Data.Set.Pointwise.Finite
import Mathlib.Data.Set.Pointwise.SMul
import Mathlib.Data.Set.Pointwise.ListOfFn
@@ -140,6 +141,12 @@ theorem Nonempty.subset_one_iff (h : s.Nonempty) : s ⊆ 1 ↔ s = 1 :=
#align finset.nonempty.subset_one_iff Finset.Nonempty.subset_one_iff
#align finset.nonempty.subset_zero_iff Finset.Nonempty.subset_zero_iff
+@[to_additive (attr := simp)]
+theorem card_one : (1 : Finset α).card = 1 :=
+ card_singleton _
+#align finset.card_one Finset.card_one
+#align finset.card_zero Finset.card_zero
+
/-- The singleton operation as a `OneHom`. -/
@[to_additive "The singleton operation as a `ZeroHom`."]
def singletonOneHom : OneHom α (Finset α) :=
@@ -719,13 +726,31 @@ protected def semigroup [Semigroup α] : Semigroup (Finset α) :=
#align finset.semigroup Finset.semigroup
#align finset.add_semigroup Finset.addSemigroup
+section CommSemigroup
+
+variable [CommSemigroup α] {s t : Finset α}
+
/-- `Finset α` is a `CommSemigroup` under pointwise operations if `α` is. -/
@[to_additive "`Finset α` is an `AddCommSemigroup` under pointwise operations if `α` is. "]
-protected def commSemigroup [CommSemigroup α] : CommSemigroup (Finset α) :=
+protected def commSemigroup : CommSemigroup (Finset α) :=
coe_injective.commSemigroup _ coe_mul
#align finset.comm_semigroup Finset.commSemigroup
#align finset.add_comm_semigroup Finset.addCommSemigroup
+@[to_additive]
+theorem inter_mul_union_subset : s ∩ t * (s ∪ t) ⊆ s * t :=
+ image₂_inter_union_subset mul_comm
+#align finset.inter_mul_union_subset Finset.inter_mul_union_subset
+#align finset.inter_add_union_subset Finset.inter_add_union_subset
+
+@[to_additive]
+theorem union_mul_inter_subset : (s ∪ t) * (s ∩ t) ⊆ s * t :=
+ image₂_union_inter_subset mul_comm
+#align finset.union_mul_inter_subset Finset.union_mul_inter_subset
+#align finset.union_add_inter_subset Finset.union_add_inter_subset
+
+end CommSemigroup
+
section MulOneClass
variable [MulOneClass α]
@@ -1799,6 +1824,20 @@ end
open Pointwise
+@[to_additive]
+theorem image_smul_comm [DecidableEq β] [DecidableEq γ] [SMul α β] [SMul α γ] (f : β → γ) (a : α)
+ (s : Finset β) : (∀ b, f (a • b) = a • f b) → (a • s).image f = a • s.image f :=
+ image_comm
+#align finset.image_smul_comm Finset.image_smul_comm
+#align finset.image_vadd_comm Finset.image_vadd_comm
+
+@[to_additive]
+theorem image_smul_distrib [DecidableEq α] [DecidableEq β] [Monoid α] [Monoid β]
+ [MonoidHomClass F α β] (f : F) (a : α) (s : Finset α) : (a • s).image f = f a • s.image f :=
+ image_comm <| map_mul _ _
+#align finset.image_smul_distrib Finset.image_smul_distrib
+#align finset.image_vadd_distrib Finset.image_vadd_distrib
+
section Group
variable [DecidableEq β] [Group α] [MulAction α β] {s t : Finset β} {a : α} {b : β}
@@ -1843,6 +1882,12 @@ theorem subset_smul_finset_iff : s ⊆ a • t ↔ a⁻¹ • s ⊆ t := by
#align finset.subset_smul_finset_iff Finset.subset_smul_finset_iff
#align finset.subset_vadd_finset_iff Finset.subset_vadd_finset_iff
+@[to_additive (attr := simp)]
+theorem card_smul_finset (a : α) (s : Finset β) : (a • s).card = s.card :=
+ card_image_of_injective _ <| MulAction.injective _
+#align finset.card_smul_finset Finset.card_smul_finset
+#align finset.card_vadd_finset Finset.card_vadd_finset
+
end Group
section GroupWithZero
@@ -1978,3 +2023,105 @@ protected theorem neg_smul [DecidableEq α] : -s • t = -(s • t) := by
end Ring
end Finset
+
+open Pointwise
+
+namespace Set
+
+section One
+
+variable [One α]
+
+@[to_additive (attr := simp)]
+theorem toFinset_one : (1 : Set α).toFinset = 1 :=
+ rfl
+#align set.to_finset_one Set.toFinset_one
+#align set.to_finset_zero Set.toFinset_zero
+
+-- Porting note: should take priority over `Finite.toFinset_singleton`
+@[to_additive (attr := simp high)]
+theorem Finite.toFinset_one (h : (1 : Set α).Finite := finite_one) : h.toFinset = 1 :=
+ Finite.toFinset_singleton _
+#align set.finite.to_finset_one Set.Finite.toFinset_one
+#align set.finite.to_finset_zero Set.Finite.toFinset_zero
+
+end One
+
+section Mul
+
+variable [DecidableEq α] [Mul α] {s t : Set α}
+
+@[to_additive (attr := simp)]
+theorem toFinset_mul (s t : Set α) [Fintype s] [Fintype t] [Fintype ↑(s * t)] :
+ (s * t).toFinset = s.toFinset * t.toFinset :=
+ toFinset_image2 _ _ _
+#align set.to_finset_mul Set.toFinset_mul
+#align set.to_finset_add Set.toFinset_add
+
+@[to_additive]
+theorem Finite.toFinset_mul (hs : s.Finite) (ht : t.Finite) (hf := hs.mul ht) :
+ hf.toFinset = hs.toFinset * ht.toFinset :=
+ Finite.toFinset_image2 _ _ _
+#align set.finite.to_finset_mul Set.Finite.toFinset_mul
+#align set.finite.to_finset_add Set.Finite.toFinset_add
+
+end Mul
+
+section SMul
+
+variable [SMul α β] [DecidableEq β] {a : α} {s : Set α} {t : Set β}
+
+@[to_additive (attr := simp)]
+theorem toFinset_smul (s : Set α) (t : Set β) [Fintype s] [Fintype t] [Fintype ↑(s • t)] :
+ (s • t).toFinset = s.toFinset • t.toFinset :=
+ toFinset_image2 _ _ _
+#align set.to_finset_smul Set.toFinset_smul
+#align set.to_finset_vadd Set.toFinset_vadd
+
+@[to_additive]
+theorem Finite.toFinset_smul (hs : s.Finite) (ht : t.Finite) (hf := hs.smul ht) :
+ hf.toFinset = hs.toFinset • ht.toFinset :=
+ Finite.toFinset_image2 _ _ _
+#align set.finite.to_finset_smul Set.Finite.toFinset_smul
+#align set.finite.to_finset_vadd Set.Finite.toFinset_vadd
+
+end SMul
+
+section SMul
+
+variable [DecidableEq β] [SMul α β] {a : α} {s : Set β}
+
+@[to_additive (attr := simp)]
+theorem toFinset_smul_set (a : α) (s : Set β) [Fintype s] [Fintype ↑(a • s)] :
+ (a • s).toFinset = a • s.toFinset :=
+ toFinset_image _ _
+#align set.to_finset_smul_set Set.toFinset_smul_set
+#align set.to_finset_vadd_set Set.toFinset_vadd_set
+
+@[to_additive]
+theorem Finite.toFinset_smul_set (hs : s.Finite) (hf : (a • s).Finite := hs.smul_set) :
+ hf.toFinset = a • hs.toFinset :=
+ Finite.toFinset_image _ _ _
+#align set.finite.to_finset_smul_set Set.Finite.toFinset_smul_set
+#align set.finite.to_finset_vadd_set Set.Finite.toFinset_vadd_set
+
+end SMul
+
+section VSub
+
+variable [DecidableEq α] [VSub α β] {s t : Set β}
+
+@[simp]
+theorem toFinset_vsub (s t : Set β) [Fintype s] [Fintype t] [Fintype ↑(s -ᵥ t)] :
+ (s -ᵥ t : Set α).toFinset = s.toFinset -ᵥ t.toFinset :=
+ toFinset_image2 _ _ _
+#align set.to_finset_vsub Set.toFinset_vsub
+
+theorem Finite.toFinset_vsub (hs : s.Finite) (ht : t.Finite) (hf := hs.vsub ht) :
+ hf.toFinset = hs.toFinset -ᵥ ht.toFinset :=
+ Finite.toFinset_image2 _ _ _
+#align set.finite.to_finset_vsub Set.Finite.toFinset_vsub
+
+end VSub
+
+end Set
@@ -694,7 +694,7 @@ protected def npow [One α] [Mul α] : Pow (Finset α) ℕ :=
⟨fun s n => npowRec n s⟩
#align finset.has_npow Finset.npow
-attribute [to_additive] Finset.npow
+attribute [to_additive existing] Finset.npow
/-- Repeated pointwise addition/subtraction (not the same as pointwise repeated
@@ -705,7 +705,7 @@ protected def zsmul [Zero α] [Add α] [Neg α] : SMul ℤ (Finset α) :=
/-- Repeated pointwise multiplication/division (not the same as pointwise repeated
multiplication/division!) of a `Finset`. See note [pointwise nat action]. -/
-@[to_additive]
+@[to_additive existing]
protected def zpow [One α] [Mul α] [Inv α] : Pow (Finset α) ℤ :=
⟨fun s n => zpowRec n s⟩
#align finset.has_zpow Finset.zpow
@@ -233,16 +233,12 @@ alias inv_nonempty_iff ↔ nonempty.inv nonempty.of_inv
#align finset.nonempty.inv Finset.nonempty.inv
#align finset.nonempty.of_inv Finset.nonempty.of_inv
--- porting notes: removed `mono`
-@[to_additive]
+@[to_additive (attr := mono)]
theorem inv_subset_inv (h : s ⊆ t) : s⁻¹ ⊆ t⁻¹ :=
image_subset_image h
#align finset.inv_subset_inv Finset.inv_subset_inv
#align finset.neg_subset_neg Finset.neg_subset_neg
--- porting notes: no `mono` yet
---attribute [mono] neg_subset_neg
-
@[to_additive (attr := simp)]
theorem inv_singleton (a : α) : ({a} : Finset α)⁻¹ = {a⁻¹} :=
image_singleton _ _
@@ -339,7 +335,6 @@ theorem card_mul_le : (s * t).card ≤ s.card * t.card :=
#align finset.card_mul_le Finset.card_mul_le
#align finset.card_add_le Finset.card_add_le
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[to_additive]
theorem card_mul_iff :
(s * t).card = s.card * t.card ↔ (s ×ˢ t : Set (α × α)).InjOn fun p => p.1 * p.2 :=
@@ -407,8 +402,7 @@ theorem singleton_mul_singleton (a b : α) : ({a} : Finset α) * {b} = {a * b} :
#align finset.singleton_mul_singleton Finset.singleton_mul_singleton
#align finset.singleton_add_singleton Finset.singleton_add_singleton
--- porting note: deleted `mono`, not available yet
-@[to_additive]
+@[to_additive (attr := mono)]
theorem mul_subset_mul : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ * t₁ ⊆ s₂ * t₂ :=
image₂_subset
#align finset.mul_subset_mul Finset.mul_subset_mul
@@ -432,9 +426,6 @@ theorem mul_subset_iff : s * t ⊆ u ↔ ∀ x ∈ s, ∀ y ∈ t, x * y ∈ u :
#align finset.mul_subset_iff Finset.mul_subset_iff
#align finset.add_subset_iff Finset.add_subset_iff
--- porting note: no `mono` yet
---attribute [mono] add_subset_add
-
@[to_additive]
theorem union_mul : (s₁ ∪ s₂) * t = s₁ * t ∪ s₂ * t :=
image₂_union_left
@@ -621,8 +612,7 @@ theorem singleton_div_singleton (a b : α) : ({a} : Finset α) / {b} = {a / b} :
#align finset.singleton_div_singleton Finset.singleton_div_singleton
#align finset.singleton_sub_singleton Finset.singleton_sub_singleton
--- porting note: deleted `mono`, not available yet
-@[to_additive]
+@[to_additive (attr := mono)]
theorem div_subset_div : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ / t₁ ⊆ s₂ / t₂ :=
image₂_subset
#align finset.div_subset_div Finset.div_subset_div
@@ -646,9 +636,6 @@ theorem div_subset_iff : s / t ⊆ u ↔ ∀ x ∈ s, ∀ y ∈ t, x / y ∈ u :
#align finset.div_subset_iff Finset.div_subset_iff
#align finset.sub_subset_iff Finset.sub_subset_iff
--- porting note: no `mono` yet
---attribute [mono] sub_subset_sub
-
@[to_additive]
theorem union_div : (s₁ ∪ s₂) / t = s₁ / t ∪ s₂ / t :=
image₂_union_left
@@ -818,17 +805,12 @@ section Monoid
variable [Monoid α] {s t : Finset α} {a : α} {m n : ℕ}
-/- porting note: replaced rws with simps because the npowRec equations were not correctly translated
-by to_additive.
-
-See https://leanprover.zulipchat.com/#narrow/stream287929-mathlib4/topic/
-to_additive.20for.20generated.20lemmas-/
@[to_additive (attr := simp, norm_cast)]
theorem coe_pow (s : Finset α) (n : ℕ) : ↑(s ^ n) = (s: Set α) ^ n := by
change ↑(npowRec n s) = (s: Set α) ^ n
induction' n with n ih
- · simp [npowRec, pow_zero, coe_one]
- · simp [npowRec, pow_succ, coe_mul, ih]
+ · rw [npowRec, pow_zero, coe_one]
+ · rw [npowRec, pow_succ, coe_mul, ih]
#align finset.coe_pow Finset.coe_pow
/-- `Finset α` is a `Monoid` under pointwise operations if `α` is. -/
@@ -1321,8 +1303,7 @@ theorem singleton_smul_singleton (a : α) (b : β) : ({a} : Finset α) • ({b}
#align finset.singleton_smul_singleton Finset.singleton_smul_singleton
#align finset.singleton_vadd_singleton Finset.singleton_vadd_singleton
--- porting notes: removed `mono` currently unsupported
-@[to_additive]
+@[to_additive (attr := mono)]
theorem smul_subset_smul : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ • t₁ ⊆ s₂ • t₂ :=
image₂_subset
#align finset.smul_subset_smul Finset.smul_subset_smul
@@ -1346,9 +1327,6 @@ theorem smul_subset_iff : s • t ⊆ u ↔ ∀ a ∈ s, ∀ b ∈ t, a • b
#align finset.smul_subset_iff Finset.smul_subset_iff
#align finset.vadd_subset_iff Finset.vadd_subset_iff
--- porting note: no `mono` yet
---attribute [mono] vadd_subset_vadd
-
@[to_additive]
theorem union_smul [DecidableEq α] : (s₁ ∪ s₂) • t = s₁ • t ∪ s₂ • t :=
image₂_union_left
@@ -1473,8 +1451,7 @@ theorem singleton_vsub_singleton (a b : β) : ({a} : Finset β) -ᵥ {b} = {a -
image₂_singleton
#align finset.singleton_vsub_singleton Finset.singleton_vsub_singleton
--- porting note: no `mono` yet
---@[mono]
+@[mono]
theorem vsub_subset_vsub : s₁ ⊆ s₂ → t₁ ⊆ t₂ → s₁ -ᵥ t₁ ⊆ s₂ -ᵥ t₂ :=
image₂_subset
#align finset.vsub_subset_vsub Finset.vsub_subset_vsub
@@ -1606,16 +1583,12 @@ theorem singleton_smul (a : α) : ({a} : Finset α) • t = a • t :=
#align finset.singleton_smul Finset.singleton_smul
#align finset.singleton_vadd Finset.singleton_vadd
--- porting note: removed `mono`, not available yet
-@[to_additive]
+@[to_additive (attr := mono)]
theorem smul_finset_subset_smul_finset : s ⊆ t → a • s ⊆ a • t :=
image_subset_image
#align finset.smul_finset_subset_smul_finset Finset.smul_finset_subset_smul_finset
#align finset.vadd_finset_subset_vadd_finset Finset.vadd_finset_subset_vadd_finset
--- porting note: no `mono` yet
---attribute [mono] vadd_finset_subset_vadd_finset
-
@[to_additive (attr := simp)]
theorem smul_finset_singleton (b : β) : a • ({b} : Finset β) = {a • b} :=
image_singleton _ _
@@ -1647,57 +1620,57 @@ section Instances
variable [DecidableEq γ]
-@[to_additive vAddCommClass_finset]
-instance sMulCommClass_finset [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
+@[to_additive]
+instance smulCommClass_finset [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
SMulCommClass α β (Finset γ) :=
⟨fun _ _ => Commute.finset_image <| smul_comm _ _⟩
-#align finset.smul_comm_class_finset Finset.sMulCommClass_finset
-#align finset.vadd_comm_class_finset Finset.vAddCommClass_finset
+#align finset.smul_comm_class_finset Finset.smulCommClass_finset
+#align finset.vadd_comm_class_finset Finset.vaddCommClass_finset
-@[to_additive vAddCommClass_finset']
-instance sMulCommClass_finset' [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
+@[to_additive]
+instance smulCommClass_finset' [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
SMulCommClass α (Finset β) (Finset γ) :=
⟨fun a s t => coe_injective <| by simp only [coe_smul_finset, coe_smul, smul_comm]⟩
-#align finset.smul_comm_class_finset' Finset.sMulCommClass_finset'
-#align finset.vadd_comm_class_finset' Finset.vAddCommClass_finset'
+#align finset.smul_comm_class_finset' Finset.smulCommClass_finset'
+#align finset.vadd_comm_class_finset' Finset.vaddCommClass_finset'
-@[to_additive vAddCommClass_finset'']
-instance sMulCommClass_finset'' [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
+@[to_additive]
+instance smulCommClass_finset'' [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
SMulCommClass (Finset α) β (Finset γ) :=
haveI := SMulCommClass.symm α β γ
SMulCommClass.symm _ _ _
-#align finset.smul_comm_class_finset'' Finset.sMulCommClass_finset''
-#align finset.vadd_comm_class_finset'' Finset.vAddCommClass_finset''
+#align finset.smul_comm_class_finset'' Finset.smulCommClass_finset''
+#align finset.vadd_comm_class_finset'' Finset.vaddCommClass_finset''
-@[to_additive vAddCommClass]
-instance sMulCommClass [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
+@[to_additive]
+instance smulCommClass [SMul α γ] [SMul β γ] [SMulCommClass α β γ] :
SMulCommClass (Finset α) (Finset β) (Finset γ) :=
⟨fun s t u => coe_injective <| by simp_rw [coe_smul, smul_comm]⟩
-#align finset.smul_comm_class Finset.sMulCommClass
-#align finset.vadd_comm_class Finset.vAddCommClass
+#align finset.smul_comm_class Finset.smulCommClass
+#align finset.vadd_comm_class Finset.vaddCommClass
-@[to_additive vAddAssocClass]
+@[to_additive vaddAssocClass]
instance isScalarTower [SMul α β] [SMul α γ] [SMul β γ] [IsScalarTower α β γ] :
IsScalarTower α β (Finset γ) :=
⟨fun a b s => by simp only [← image_smul, image_image, smul_assoc, Function.comp]⟩
#align finset.is_scalar_tower Finset.isScalarTower
-#align finset.vadd_assoc_class Finset.vAddAssocClass
+#align finset.vadd_assoc_class Finset.vaddAssocClass
variable [DecidableEq β]
-@[to_additive vAddAssocClass']
+@[to_additive vaddAssocClass']
instance isScalarTower' [SMul α β] [SMul α γ] [SMul β γ] [IsScalarTower α β γ] :
IsScalarTower α (Finset β) (Finset γ) :=
⟨fun a s t => coe_injective <| by simp only [coe_smul_finset, coe_smul, smul_assoc]⟩
#align finset.is_scalar_tower' Finset.isScalarTower'
-#align finset.vadd_assoc_class' Finset.vAddAssocClass'
+#align finset.vadd_assoc_class' Finset.vaddAssocClass'
-@[to_additive vAddAssocClass'']
+@[to_additive vaddAssocClass'']
instance isScalarTower'' [SMul α β] [SMul α γ] [SMul β γ] [IsScalarTower α β γ] :
IsScalarTower (Finset α) (Finset β) (Finset γ) :=
⟨fun a s t => coe_injective <| by simp only [coe_smul_finset, coe_smul, smul_assoc]⟩
#align finset.is_scalar_tower'' Finset.isScalarTower''
-#align finset.vadd_assoc_class'' Finset.vAddAssocClass''
+#align finset.vadd_assoc_class'' Finset.vaddAssocClass''
instance isCentralScalar [SMul α β] [SMul αᵐᵒᵖ β] [IsCentralScalar α β] :
IsCentralScalar α (Finset β) :=
@@ -1749,7 +1722,7 @@ scoped[Pointwise]
instance [DecidableEq α] [Zero α] [Mul α] [NoZeroDivisors α] : NoZeroDivisors (Finset α) :=
Function.Injective.noZeroDivisors (↑) coe_injective coe_zero coe_mul
-instance noZeroSmulDivisors [Zero α] [Zero β] [SMul α β] [NoZeroSMulDivisors α β] :
+instance noZeroSMulDivisors [Zero α] [Zero β] [SMul α β] [NoZeroSMulDivisors α β] :
NoZeroSMulDivisors (Finset α) (Finset β) :=
⟨by
intro s t h
@@ -1773,7 +1746,6 @@ section LeftCancelSemigroup
variable [LeftCancelSemigroup α] [DecidableEq α] (s t : Finset α) (a : α)
-/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@[to_additive]
theorem pairwiseDisjoint_smul_iff {s : Set α} {t : Finset α} :
s.PairwiseDisjoint (· • t) ↔ (s ×ˢ t : Set (α × α)).InjOn fun p => p.1 * p.2 := by
@@ -1890,7 +1890,7 @@ theorem mem_inv_smul_finset_iff₀ (ha : a ≠ 0) : b ∈ a⁻¹ • s ↔ a •
show _ ∈ (Units.mk0 a ha)⁻¹ • _ ↔ _ from mem_inv_smul_finset_iff
#align finset.mem_inv_smul_finset_iff₀ Finset.mem_inv_smul_finset_iff₀
-@[simp]
+-- @[simp] -- Porting note: `simpNF` linter times out
theorem smul_finset_subset_smul_finset_iff₀ (ha : a ≠ 0) : a • s ⊆ a • t ↔ s ⊆ t :=
show Units.mk0 a ha • _ ⊆ _ ↔ _ from smul_finset_subset_smul_finset_iff
#align finset.smul_finset_subset_smul_finset_iff₀ Finset.smul_finset_subset_smul_finset_iff₀
@@ -496,9 +496,8 @@ theorem singletonMulHom_apply (a : α) : singletonMulHom a = {a} :=
#align finset.singleton_add_hom_apply Finset.singletonAddHom_apply
/-- Lift a `MulHom` to `Finset` via `image`. -/
-@[to_additive "Lift an `AddHom` to `Finset` via `image`", simps]
-def imageMulHom : Finset α →ₙ* Finset β
- where
+@[to_additive (attr := simps) "Lift an `AddHom` to `Finset` via `image`"]
+def imageMulHom : Finset α →ₙ* Finset β where
toFun := Finset.image f
map_mul' _ _ := image_mul _
#align finset.image_mul_hom Finset.imageMulHom
@@ -807,7 +806,7 @@ theorem coeMonoidHom_apply (s : Finset α) : coeMonoidHom s = s :=
#align finset.coe_add_monoid_hom_apply Finset.coeAddMonoidHom_apply
/-- Lift a `MonoidHom` to `Finset` via `image`. -/
-@[to_additive "Lift an `add_monoid_hom` to `Finset` via `image`", simps]
+@[to_additive (attr := simps) "Lift an `add_monoid_hom` to `Finset` via `image`"]
def imageMonoidHom [MulOneClass β] [MonoidHomClass F α β] (f : F) : Finset α →* Finset β :=
{ imageMulHom f, imageOneHom f with }
#align finset.image_monoid_hom Finset.imageMonoidHom
The unported dependencies are