@@ -34,7 +34,7 @@ For finsets `s` and `t`:
34
34
For `α` a semigroup/monoid, `finset α` is a semigroup/monoid.
35
35
As an unfortunate side effect, this means that `n • s`, where `n : ℕ`, is ambiguous between
36
36
pointwise scaling and repeated pointwise addition; the former has `(2 : ℕ) • {1, 2} = {2, 4}`, while
37
- the latter has `(2 : ℕ) • {1, 2} = {2, 3, 4}`.
37
+ the latter has `(2 : ℕ) • {1, 2} = {2, 3, 4}`. See note [pointwise nat action].
38
38
39
39
## Implementation notes
40
40
@@ -603,7 +603,7 @@ subset_image₂
603
603
604
604
end has_scalar
605
605
606
- /-! ### Finset addition/multiplication -/
606
+ /-! ### Scalar subtraction of finsets -/
607
607
608
608
section has_vsub
609
609
variables [decidable_eq α] [has_vsub α β] {s s₁ s₂ t t₁ t₂ : finset β} {u : finset α} {a : α}
@@ -684,7 +684,7 @@ lemma mem_smul_finset {x : β} : x ∈ a • s ↔ ∃ y, y ∈ s ∧ a • y =
684
684
by simp only [finset.smul_finset_def, and.assoc, mem_image, exists_prop, prod.exists, mem_product]
685
685
686
686
@[simp, norm_cast, to_additive]
687
- lemma coe_smul_finset (s : finset β) : (↑(a • s) : set β) = a • s := coe_image
687
+ lemma coe_smul_finset (a : α) ( s : finset β) : (↑(a • s) : set β) = a • s := coe_image
688
688
689
689
@[to_additive] lemma smul_finset_mem_smul_finset : b ∈ s → a • b ∈ a • s := mem_image_of_mem _
690
690
@[to_additive] lemma smul_finset_card_le : (a • s).card ≤ s.card := card_image_le
@@ -750,5 +750,38 @@ instance is_central_scalar [has_scalar α β] [has_scalar αᵐᵒᵖ β] [is_ce
750
750
is_central_scalar α (finset β) :=
751
751
⟨λ a s, coe_injective $ by simp only [coe_smul_finset, coe_smul, op_smul_eq_smul]⟩
752
752
753
+ /-- A multiplicative action of a monoid `α` on a type `β` gives a multiplicative action of
754
+ `finset α` on `finset β`. -/
755
+ @[to_additive " An additive action of an additive monoid `α` on a type `β` gives an additive action
756
+ of `finset α` on `finset β`" ]
757
+ protected def mul_action [decidable_eq α] [monoid α] [mul_action α β] :
758
+ mul_action (finset α) (finset β) :=
759
+ { mul_smul := λ _ _ _, image₂_assoc mul_smul,
760
+ one_smul := λ s, image₂_singleton_left.trans $ by simp_rw [one_smul, image_id'] }
761
+
762
+ /-- A multiplicative action of a monoid on a type `β` gives a multiplicative action on `finset β`.
763
+ -/
764
+ @[to_additive " An additive action of an additive monoid on a type `β` gives an additive action
765
+ on `finset β`." ]
766
+ protected def mul_action_finset [monoid α] [mul_action α β] : mul_action α (finset β) :=
767
+ coe_injective.mul_action _ coe_smul_finset
768
+
769
+ localized " attribute [instance] finset.mul_action_finset finset.add_action_finset
770
+ finset.mul_action finset.add_action" in pointwise
771
+
772
+ /-- A distributive multiplicative action of a monoid on an additive monoid `β` gives a distributive
773
+ multiplicative action on `finset β`. -/
774
+ protected def distrib_mul_action_finset [monoid α] [add_monoid β] [distrib_mul_action α β] :
775
+ distrib_mul_action α (finset β) :=
776
+ function.injective.distrib_mul_action ⟨coe, coe_zero, coe_add⟩ coe_injective coe_smul_finset
777
+
778
+ /-- A multiplicative action of a monoid on a monoid `β` gives a multiplicative action on `set β`. -/
779
+ protected def mul_distrib_mul_action_finset [monoid α] [monoid β] [mul_distrib_mul_action α β] :
780
+ mul_distrib_mul_action α (finset β) :=
781
+ function.injective.mul_distrib_mul_action ⟨coe, coe_one, coe_mul⟩ coe_injective coe_smul_finset
782
+
783
+ localized " attribute [instance] finset.distrib_mul_action_finset
784
+ finset.mul_distrib_mul_action_finset" in pointwise
785
+
753
786
end instances
754
787
end finset
0 commit comments