Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2020 Scott Morrison. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Scott Morrison

! This file was ported from Lean 3 source module data.finsupp.pointwise
! leanprover-community/mathlib commit f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Data.Finsupp.Defs
import Mathlib.Algebra.Ring.Pi

/-!
# The pointwise product on `Finsupp`.

For the convolution product on `Finsupp` when the domain has a binary operation,
see the type synonyms `AddMonoidAlgebra`
(which is in turn used to define `Polynomial` and `MvPolynomial`)
and `MonoidAlgebra`.
-/


noncomputable section

open Finset

universe u₁ u₂ u₃ u₄ u₅

variable {
α: Type u₁
α
:
Type u₁: Type (u₁+1)
Type u₁
} {
β: Type u₂
β
:
Type u₂: Type (u₂+1)
Type u₂
} {
γ: Type u₃
γ
:
Type u₃: Type (u₃+1)
Type u₃
} {
δ: Type u₄
δ
:
Type u₄: Type (u₄+1)
Type u₄
} {
ι: Type u₅
ι
:
Type u₅: Type (u₅+1)
Type u₅
} namespace Finsupp /-! ### Declarations about the pointwise product on `Finsupp`s -/ section variable [
MulZeroClass: Type ?u.3444 → Type ?u.3444
MulZeroClass
β: Type u₂
β
] /-- The product of `f g : α →₀ β` is the finitely supported function whose value at `a` is `f a * g a`. -/
instance: {α : Type u₁} → {β : Type u₂} → [inst : MulZeroClass β] → Mul (α →₀ β)
instance
:
Mul: Type ?u.38 → Type ?u.38
Mul
(
α: Type u₁
α
→₀
β: Type u₂
β
) := ⟨
zipWith: {α : Type ?u.401} → {M : Type ?u.400} → {N : Type ?u.399} → {P : Type ?u.398} → [inst : Zero M] → [inst_1 : Zero N] → [inst_2 : Zero P] → (f : MNP) → f 0 0 = 0(α →₀ M) → (α →₀ N) → α →₀ P
zipWith
(· * ·): βββ
(· * ·)
(
mul_zero: ∀ {M₀ : Type ?u.1016} [self : MulZeroClass M₀] (a : M₀), a * 0 = 0
mul_zero
0: ?m.1020
0
)⟩ theorem
coe_mul: ∀ (g₁ g₂ : α →₀ β), ↑(g₁ * g₂) = g₁ * g₂
coe_mul
(
g₁: α →₀ β
g₁
g₂: α →₀ β
g₂
:
α: Type u₁
α
→₀
β: Type u₂
β
) : ⇑(
g₁: α →₀ β
g₁
*
g₂: α →₀ β
g₂
) =
g₁: α →₀ β
g₁
*
g₂: α →₀ β
g₂
:=
rfl: ∀ {α : Sort ?u.3412} {a : α}, a = a
rfl
#align finsupp.coe_mul
Finsupp.coe_mul: ∀ {α : Type u₁} {β : Type u₂} [inst : MulZeroClass β] (g₁ g₂ : α →₀ β), ↑(g₁ * g₂) = g₁ * g₂
Finsupp.coe_mul
@[simp] theorem
mul_apply: ∀ {g₁ g₂ : α →₀ β} {a : α}, ↑(g₁ * g₂) a = g₁ a * g₂ a
mul_apply
{
g₁: α →₀ β
g₁
g₂: α →₀ β
g₂
:
α: Type u₁
α
→₀
β: Type u₂
β
} {
a: α
a
:
α: Type u₁
α
} : (
g₁: α →₀ β
g₁
*
g₂: α →₀ β
g₂
)
a: α
a
=
g₁: α →₀ β
g₁
a: α
a
*
g₂: α →₀ β
g₂
a: α
a
:=
rfl: ∀ {α : Sort ?u.4439} {a : α}, a = a
rfl
#align finsupp.mul_apply
Finsupp.mul_apply: ∀ {α : Type u₁} {β : Type u₂} [inst : MulZeroClass β] {g₁ g₂ : α →₀ β} {a : α}, ↑(g₁ * g₂) a = g₁ a * g₂ a
Finsupp.mul_apply
theorem
support_mul: ∀ [inst : DecidableEq α] {g₁ g₂ : α →₀ β}, (g₁ * g₂).support g₁.support g₂.support
support_mul
[
DecidableEq: Sort ?u.4500 → Sort (max1?u.4500)
DecidableEq
α: Type u₁
α
] {
g₁: α →₀ β
g₁
g₂: α →₀ β
g₂
:
α: Type u₁
α
→₀
β: Type u₂
β
} : (
g₁: α →₀ β
g₁
*
g₂: α →₀ β
g₂
).
support: {α : Type ?u.4946} → {M : Type ?u.4945} → [inst : Zero M] → (α →₀ M) → Finset α
support
g₁: α →₀ β
g₁
.
support: {α : Type ?u.4965} → {M : Type ?u.4964} → [inst : Zero M] → (α →₀ M) → Finset α
support
g₂: α →₀ β
g₂
.
support: {α : Type ?u.4970} → {M : Type ?u.4969} → [inst : Zero M] → (α →₀ M) → Finset α
support
:=

Goals accomplished! 🐙
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β


(g₁ * g₂).support g₁.support g₂.support
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: a (g₁ * g₂).support


a g₁.support g₂.support
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β


(g₁ * g₂).support g₁.support g₂.support
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0


a g₁.support g₂.support
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β


(g₁ * g₂).support g₁.support g₂.support
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0


¬g₁ a = 0 ¬g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β


(g₁ * g₂).support g₁.support g₂.support
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0


¬g₁ a = 0 ¬g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0


¬(g₁ a = 0 g₂ a = 0)
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0


¬(g₁ a = 0 g₂ a = 0)
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β


(g₁ * g₂).support g₁.support g₂.support
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₁ a = 0 g₂ a = 0


α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β


(g₁ * g₂).support g₁.support g₂.support
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₁ a = 0 g₂ a = 0


g₁ a * g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β


(g₁ * g₂).support g₁.support g₂.support
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₁ a = 0


inl
g₁ a * g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₂ a = 0


inr
g₁ a * g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₁ a = 0 g₂ a = 0


g₁ a * g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₁ a = 0


inl
g₁ a * g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₂ a = 0


inr
g₁ a * g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₁ a = 0 g₂ a = 0


g₁ a * g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₂ a = 0


inr
g₁ a * g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₂ a = 0


inr
g₁ a * g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₂ a = 0


inr
g₁ a * 0 = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₂ a = 0


inr
g₁ a * 0 = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₂ a = 0


inr
g₁ a * g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₁ a = 0


inl
0 * g₂ a = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝¹: MulZeroClass β

inst✝: DecidableEq α

g₁, g₂: α →₀ β

a: α

h: g₁ a * g₂ a 0

w: g₂ a = 0


inr
g₁ a * g₂ a = 0

Goals accomplished! 🐙

Goals accomplished! 🐙
#align finsupp.support_mul
Finsupp.support_mul: ∀ {α : Type u₁} {β : Type u₂} [inst : MulZeroClass β] [inst_1 : DecidableEq α] {g₁ g₂ : α →₀ β}, (g₁ * g₂).support g₁.support g₂.support
Finsupp.support_mul
instance: {α : Type u₁} → {β : Type u₂} → [inst : MulZeroClass β] → MulZeroClass (α →₀ β)
instance
:
MulZeroClass: Type ?u.6625 → Type ?u.6625
MulZeroClass
(
α: Type u₁
α
→₀
β: Type u₂
β
) :=
FunLike.coe_injective: ∀ {F : Sort ?u.6980} {α : Sort ?u.6981} {β : αSort ?u.6982} [i : FunLike F α β], Function.Injective fun f => f
FunLike.coe_injective
.
mulZeroClass: {M₀ : Type ?u.7043} → {M₀' : Type ?u.7042} → [inst : MulZeroClass M₀] → [inst_1 : Mul M₀'] → [inst_2 : Zero M₀'] → (f : M₀'M₀) → Function.Injective ff 0 = 0(∀ (a b : M₀'), f (a * b) = f a * f b) → MulZeroClass M₀'
mulZeroClass
_: ?m.7054?m.7053
_
coe_zero: ∀ {α : Type ?u.7164} {M : Type ?u.7165} [inst : Zero M], 0 = 0
coe_zero
coe_mul: ∀ {α : Type ?u.7286} {β : Type ?u.7285} [inst : MulZeroClass β] (g₁ g₂ : α →₀ β), ↑(g₁ * g₂) = g₁ * g₂
coe_mul
end
instance: {α : Type u₁} → {β : Type u₂} → [inst : SemigroupWithZero β] → SemigroupWithZero (α →₀ β)
instance
[
SemigroupWithZero: Type ?u.7575 → Type ?u.7575
SemigroupWithZero
β: Type u₂
β
] :
SemigroupWithZero: Type ?u.7578 → Type ?u.7578
SemigroupWithZero
(
α: Type u₁
α
→₀
β: Type u₂
β
) :=
FunLike.coe_injective: ∀ {F : Sort ?u.7891} {α : Sort ?u.7892} {β : αSort ?u.7893} [i : FunLike F α β], Function.Injective fun f => f
FunLike.coe_injective
.
semigroupWithZero: {M₀ : Type ?u.7954} → {M₀' : Type ?u.7953} → [inst : Zero M₀'] → [inst_1 : Mul M₀'] → [inst_2 : SemigroupWithZero M₀] → (f : M₀'M₀) → Function.Injective ff 0 = 0(∀ (x y : M₀'), f (x * y) = f x * f y) → SemigroupWithZero M₀'
semigroupWithZero
_: ?m.7965?m.7964
_
coe_zero: ∀ {α : Type ?u.8073} {M : Type ?u.8074} [inst : Zero M], 0 = 0
coe_zero
coe_mul: ∀ {α : Type ?u.8429} {β : Type ?u.8428} [inst : MulZeroClass β] (g₁ g₂ : α →₀ β), ↑(g₁ * g₂) = g₁ * g₂
coe_mul
instance: {α : Type u₁} → {β : Type u₂} → [inst : NonUnitalNonAssocSemiring β] → NonUnitalNonAssocSemiring (α →₀ β)
instance
[
NonUnitalNonAssocSemiring: Type ?u.8991 → Type ?u.8991
NonUnitalNonAssocSemiring
β: Type u₂
β
] :
NonUnitalNonAssocSemiring: Type ?u.8994 → Type ?u.8994
NonUnitalNonAssocSemiring
(
α: Type u₁
α
→₀
β: Type u₂
β
) :=
FunLike.coe_injective: ∀ {F : Sort ?u.9357} {α : Sort ?u.9358} {β : αSort ?u.9359} [i : FunLike F α β], Function.Injective fun f => f
FunLike.coe_injective
.
nonUnitalNonAssocSemiring: {β : Type ?u.9419} → [inst : Zero β] → [inst_1 : Add β] → [inst_2 : Mul β] → [inst_3 : SMul β] → {α : Type ?u.9420} → [inst_4 : NonUnitalNonAssocSemiring α] → (f : βα) → Function.Injective ff 0 = 0(∀ (x y : β), f (x + y) = f x + f y) → (∀ (x y : β), f (x * y) = f x * f y) → (∀ (x : β) (n : ), f (n x) = n f x) → NonUnitalNonAssocSemiring β
nonUnitalNonAssocSemiring
_: ?m.9434?m.9439
_
coe_zero: ∀ {α : Type ?u.9597} {M : Type ?u.9598} [inst : Zero M], 0 = 0
coe_zero
coe_add: ∀ {α : Type ?u.9993} {M : Type ?u.9994} [inst : AddZeroClass M] (f g : α →₀ M), ↑(f + g) = f + g
coe_add
coe_mul: ∀ {α : Type ?u.10459} {β : Type ?u.10458} [inst : MulZeroClass β] (g₁ g₂ : α →₀ β), ↑(g₁ * g₂) = g₁ * g₂
coe_mul
fun
_: ?m.10518
_
_: ?m.10521
_
rfl: ∀ {α : Sort ?u.10523} {a : α}, a = a
rfl
instance: {α : Type u₁} → {β : Type u₂} → [inst : NonUnitalSemiring β] → NonUnitalSemiring (α →₀ β)
instance
[
NonUnitalSemiring: Type ?u.11139 → Type ?u.11139
NonUnitalSemiring
β: Type u₂
β
] :
NonUnitalSemiring: Type ?u.11142 → Type ?u.11142
NonUnitalSemiring
(
α: Type u₁
α
→₀
β: Type u₂
β
) :=
FunLike.coe_injective: ∀ {F : Sort ?u.11462} {α : Sort ?u.11463} {β : αSort ?u.11464} [i : FunLike F α β], Function.Injective fun f => f
FunLike.coe_injective
.
nonUnitalSemiring: {β : Type ?u.11524} → [inst : Zero β] → [inst_1 : Add β] → [inst_2 : Mul β] → [inst_3 : SMul β] → {α : Type ?u.11525} → [inst_4 : NonUnitalSemiring α] → (f : βα) → Function.Injective ff 0 = 0(∀ (x y : β), f (x + y) = f x + f y) → (∀ (x y : β), f (x * y) = f x * f y) → (∀ (x : β) (n : ), f (n x) = n f x) → NonUnitalSemiring β
nonUnitalSemiring
_: ?m.11539?m.11544
_
coe_zero: ∀ {α : Type ?u.11702} {M : Type ?u.11703} [inst : Zero M], 0 = 0
coe_zero
coe_add: ∀ {α : Type ?u.12065} {M : Type ?u.12066} [inst : AddZeroClass M] (f g : α →₀ M), ↑(f + g) = f + g
coe_add
coe_mul: ∀ {α : Type ?u.12546} {β : Type ?u.12545} [inst : MulZeroClass β] (g₁ g₂ : α →₀ β), ↑(g₁ * g₂) = g₁ * g₂
coe_mul
fun
_: ?m.12783
_
_: ?m.12786
_
rfl: ∀ {α : Sort ?u.12788} {a : α}, a = a
rfl
instance: {α : Type u₁} → {β : Type u₂} → [inst : NonUnitalCommSemiring β] → NonUnitalCommSemiring (α →₀ β)
instance
[
NonUnitalCommSemiring: Type ?u.13409 → Type ?u.13409
NonUnitalCommSemiring
β: Type u₂
β
] :
NonUnitalCommSemiring: Type ?u.13412 → Type ?u.13412
NonUnitalCommSemiring
(
α: Type u₁
α
→₀
β: Type u₂
β
) :=
FunLike.coe_injective: ∀ {F : Sort ?u.13738} {α : Sort ?u.13739} {β : αSort ?u.13740} [i : FunLike F α β], Function.Injective fun f => f
FunLike.coe_injective
.
nonUnitalCommSemiring: {α : Type ?u.13801} → {γ : Type ?u.13800} → [inst : NonUnitalCommSemiring α] → [inst_1 : Zero γ] → [inst_2 : Add γ] → [inst_3 : Mul γ] → [inst_4 : SMul γ] → (f : γα) → Function.Injective ff 0 = 0(∀ (x y : γ), f (x + y) = f x + f y) → (∀ (x y : γ), f (x * y) = f x * f y) → (∀ (x : γ) (n : ), f (n x) = n f x) → NonUnitalCommSemiring γ
nonUnitalCommSemiring
_: ?m.13816?m.13815
_
coe_zero: ∀ {α : Type ?u.13976} {M : Type ?u.13977} [inst : Zero M], 0 = 0
coe_zero
coe_add: ∀ {α : Type ?u.14341} {M : Type ?u.14342} [inst : AddZeroClass M] (f g : α →₀ M), ↑(f + g) = f + g
coe_add
coe_mul: ∀ {α : Type ?u.14826} {β : Type ?u.14825} [inst : MulZeroClass β] (g₁ g₂ : α →₀ β), ↑(g₁ * g₂) = g₁ * g₂
coe_mul
fun
_: ?m.15067
_
_: ?m.15070
_
rfl: ∀ {α : Sort ?u.15072} {a : α}, a = a
rfl
instance: {α : Type u₁} → {β : Type u₂} → [inst : NonUnitalNonAssocRing β] → NonUnitalNonAssocRing (α →₀ β)
instance
[
NonUnitalNonAssocRing: Type ?u.15699 → Type ?u.15699
NonUnitalNonAssocRing
β: Type u₂
β
] :
NonUnitalNonAssocRing: Type ?u.15702 → Type ?u.15702
NonUnitalNonAssocRing
(
α: Type u₁
α
→₀
β: Type u₂
β
) :=
FunLike.coe_injective: ∀ {F : Sort ?u.16071} {α : Sort ?u.16072} {β : αSort ?u.16073} [i : FunLike F α β], Function.Injective fun f => f
FunLike.coe_injective
.
nonUnitalNonAssocRing: {α : Type ?u.16134} → {β : Type ?u.16133} → [inst : NonUnitalNonAssocRing α] → [inst_1 : Zero β] → [inst_2 : Add β] → [inst_3 : Mul β] → [inst_4 : Neg β] → [inst_5 : Sub β] → [inst_6 : SMul β] → [inst_7 : SMul β] → (f : βα) → Function.Injective ff 0 = 0(∀ (x y : β), f (x + y) = f x + f y) → (∀ (x y : β), f (x * y) = f x * f y) → (∀ (x : β), f (-x) = -f x) → (∀ (x y : β), f (x - y) = f x - f y) → (∀ (x : β) (n : ), f (n x) = n f x) → (∀ (x : β) (n : ), f (n x) = n f x) → NonUnitalNonAssocRing β
nonUnitalNonAssocRing
_: ?m.16155?m.16154
_
coe_zero: ∀ {α : Type ?u.16390} {M : Type ?u.16391} [inst : Zero M], 0 = 0
coe_zero
coe_add: ∀ {α : Type ?u.16788} {M : Type ?u.16789} [inst : AddZeroClass M] (f g : α →₀ M), ↑(f + g) = f + g
coe_add
coe_mul: ∀ {α : Type ?u.17102} {β : Type ?u.17101} [inst : MulZeroClass β] (g₁ g₂ : α →₀ β), ↑(g₁ * g₂) = g₁ * g₂
coe_mul
coe_neg: ∀ {α : Type ?u.17165} {G : Type ?u.17164} [inst : NegZeroClass G] (g : α →₀ G), ↑(-g) = -g
coe_neg
coe_sub: ∀ {α : Type ?u.17290} {G : Type ?u.17289} [inst : SubNegZeroMonoid G] (g₁ g₂ : α →₀ G), ↑(g₁ - g₂) = g₁ - g₂
coe_sub
(fun
_: ?m.17430
_
_: ?m.17433
_
rfl: ∀ {α : Sort ?u.17435} {a : α}, a = a
rfl
) fun
_: ?m.17704
_
_: ?m.17707
_
rfl: ∀ {α : Sort ?u.17709} {a : α}, a = a
rfl
instance: {α : Type u₁} → {β : Type u₂} → [inst : NonUnitalRing β] → NonUnitalRing (α →₀ β)
instance
[
NonUnitalRing: Type ?u.18052 → Type ?u.18052
NonUnitalRing
β: Type u₂
β
] :
NonUnitalRing: Type ?u.18055 → Type ?u.18055
NonUnitalRing
(
α: Type u₁
α
→₀
β: Type u₂
β
) :=
FunLike.coe_injective: ∀ {F : Sort ?u.18398} {α : Sort ?u.18399} {β : αSort ?u.18400} [i : FunLike F α β], Function.Injective fun f => f
FunLike.coe_injective
.
nonUnitalRing: {α : Type ?u.18461} → {β : Type ?u.18460} → [inst : NonUnitalRing α] → [inst_1 : Zero β] → [inst_2 : Add β] → [inst_3 : Mul β] → [inst_4 : Neg β] → [inst_5 : Sub β] → [inst_6 : SMul β] → [inst_7 : SMul β] → (f : βα) → Function.Injective ff 0 = 0(∀ (x y : β), f (x + y) = f x + f y) → (∀ (x y : β), f (x * y) = f x * f y) → (∀ (x : β), f (-x) = -f x) → (∀ (x y : β), f (x - y) = f x - f y) → (∀ (x : β) (n : ), f (n x) = n f x) → (∀ (x : β) (n : ), f (n x) = n f x) → NonUnitalRing β
nonUnitalRing
_: ?m.18482?m.18481
_
coe_zero: ∀ {α : Type ?u.18717} {M : Type ?u.18718} [inst : Zero M], 0 = 0
coe_zero
coe_add: ∀ {α : Type ?u.19095} {M : Type ?u.19096} [inst : AddZeroClass M] (f g : α →₀ M), ↑(f + g) = f + g
coe_add
coe_mul: ∀ {α : Type ?u.19417} {β : Type ?u.19416} [inst : MulZeroClass β] (g₁ g₂ : α →₀ β), ↑(g₁ * g₂) = g₁ * g₂
coe_mul
coe_neg: ∀ {α : Type ?u.19543} {G : Type ?u.19542} [inst : NegZeroClass G] (g : α →₀ G), ↑(-g) = -g
coe_neg
coe_sub: ∀ {α : Type ?u.19677} {G : Type ?u.19676} [inst : SubNegZeroMonoid G] (g₁ g₂ : α →₀ G), ↑(g₁ - g₂) = g₁ - g₂
coe_sub
(fun
_: ?m.19826
_
_: ?m.19829
_
rfl: ∀ {α : Sort ?u.19831} {a : α}, a = a
rfl
) fun
_: ?m.20107
_
_: ?m.20110
_
rfl: ∀ {α : Sort ?u.20112} {a : α}, a = a
rfl
instance: {α : Type u₁} → {β : Type u₂} → [inst : NonUnitalCommRing β] → NonUnitalCommRing (α →₀ β)
instance
[
NonUnitalCommRing: Type ?u.20427 → Type ?u.20427
NonUnitalCommRing
β: Type u₂
β
] :
NonUnitalCommRing: Type ?u.20430 → Type ?u.20430
NonUnitalCommRing
(
α: Type u₁
α
→₀
β: Type u₂
β
) :=
FunLike.coe_injective: ∀ {F : Sort ?u.20761} {α : Sort ?u.20762} {β : αSort ?u.20763} [i : FunLike F α β], Function.Injective fun f => f
FunLike.coe_injective
.
nonUnitalCommRing: {α : Type ?u.20824} → {β : Type ?u.20823} → [inst : NonUnitalCommRing α] → [inst_1 : Zero β] → [inst_2 : Add β] → [inst_3 : Mul β] → [inst_4 : Neg β] → [inst_5 : Sub β] → [inst_6 : SMul β] → [inst_7 : SMul β] → (f : βα) → Function.Injective ff 0 = 0(∀ (x y : β), f (x + y) = f x + f y) → (∀ (x y : β), f (x * y) = f x * f y) → (∀ (x : β), f (-x) = -f x) → (∀ (x y : β), f (x - y) = f x - f y) → (∀ (x : β) (n : ), f (n x) = n f x) → (∀ (x : β) (n : ), f (n x) = n f x) → NonUnitalCommRing β
nonUnitalCommRing
_: ?m.20845?m.20844
_
coe_zero: ∀ {α : Type ?u.21078} {M : Type ?u.21079} [inst : Zero M], 0 = 0
coe_zero
coe_add: ∀ {α : Type ?u.21444} {M : Type ?u.21445} [inst : AddZeroClass M] (f g : α →₀ M), ↑(f + g) = f + g
coe_add
coe_mul: ∀ {α : Type ?u.21771} {β : Type ?u.21770} [inst : MulZeroClass β] (g₁ g₂ : α →₀ β), ↑(g₁ * g₂) = g₁ * g₂
coe_mul
coe_neg: ∀ {α : Type ?u.21900} {G : Type ?u.21899} [inst : NegZeroClass G] (g : α →₀ G), ↑(-g) = -g
coe_neg
coe_sub: ∀ {α : Type ?u.22037} {G : Type ?u.22036} [inst : SubNegZeroMonoid G] (g₁ g₂ : α →₀ G), ↑(g₁ - g₂) = g₁ - g₂
coe_sub
(fun
_: ?m.22189
_
_: ?m.22192
_
rfl: ∀ {α : Sort ?u.22194} {a : α}, a = a
rfl
) fun
_: ?m.22474
_
_: ?m.22477
_
rfl: ∀ {α : Sort ?u.22479} {a : α}, a = a
rfl
-- TODO can this be generalized in the direction of `Pi.smul'` -- (i.e. dependent functions and finsupps) -- TODO in theory this could be generalised, we only really need `smul_zero` for the definition instance
pointwiseScalar: [inst : Semiring β] → SMul (αβ) (α →₀ β)
pointwiseScalar
[
Semiring: Type ?u.22796 → Type ?u.22796
Semiring
β: Type u₂
β
] :
SMul: Type ?u.22800 → Type ?u.22799 → Type (max?u.22800?u.22799)
SMul
(
α: Type u₁
α
β: Type u₂
β
) (
α: Type u₁
α
→₀
β: Type u₂
β
) where smul
f: ?m.22979
f
g: ?m.22982
g
:=
Finsupp.ofSupportFinite: {α : Type ?u.22985} → {M : Type ?u.22984} → [inst : Zero M] → (f : αM) → Set.Finite (Function.support f)α →₀ M
Finsupp.ofSupportFinite
(fun
a: ?m.23033
a
f: ?m.22979
f
a: ?m.23033
a
g: ?m.22982
g
a: ?m.23033
a
) (

Goals accomplished! 🐙
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β


Set.Finite (Function.support fun a => f a g a)
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β


(Function.support fun a => f a g a) Function.support g
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β


Set.Finite (Function.support fun a => f a g a)
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β


∀ (x : α), ¬f x g x = 0¬g x = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β


Set.Finite (Function.support fun a => f a g a)
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β

x: α

hx: ¬f x g x = 0

h: g x = 0


α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β


Set.Finite (Function.support fun a => f a g a)
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β

x: α

hx: ¬f x g x = 0

h: g x = 0


f x g x = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β


Set.Finite (Function.support fun a => f a g a)
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β

x: α

hx: ¬f x g x = 0

h: g x = 0


f x g x = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β

x: α

hx: ¬f x g x = 0

h: g x = 0


f x 0 = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β

x: α

hx: ¬f x g x = 0

h: g x = 0


f x g x = 0
α: Type u₁

β: Type u₂

γ: Type u₃

δ: Type u₄

ι: Type u₅

inst✝: Semiring β

f: αβ

g: α →₀ β

x: α

hx: ¬f x g x = 0

h: g x = 0


0 = 0

Goals accomplished! 🐙
) #align finsupp.pointwise_scalar
Finsupp.pointwiseScalar: {α : Type u₁} → {β : Type u₂} → [inst : Semiring β] → SMul (αβ) (α →₀ β)
Finsupp.pointwiseScalar
@[simp] theorem
coe_pointwise_smul: ∀ {α : Type u₁} {β : Type u₂} [inst : Semiring β] (f : αβ) (g : α →₀ β), ↑(f g) = ↑(f g)
coe_pointwise_smul
[
Semiring: Type ?u.25101 → Type ?u.25101
Semiring
β: Type u₂
β
] (
f: αβ
f
:
α: Type u₁
α
β: Type u₂
β
) (
g: α →₀ β
g
:
α: Type u₁
α
→₀
β: Type u₂
β
) :
FunLike.coe: {F : Sort ?u.25278} → {α : outParam (Sort ?u.25277)} → {β : outParam (αSort ?u.25276)} → [self : FunLike F α β] → F(a : α) → β a
FunLike.coe
(
f: αβ
f
g: α →₀ β
g
) =
f: αβ
f
g: α →₀ β
g
:=
rfl: ∀ {α : Sort ?u.25621} {a : α}, a = a
rfl
#align finsupp.coe_pointwise_smul
Finsupp.coe_pointwise_smul: ∀ {α : Type u₁} {β : Type u₂} [inst : Semiring β] (f : αβ) (g : α →₀ β), ↑(f g) = ↑(f g)
Finsupp.coe_pointwise_smul
/-- The pointwise multiplicative action of functions on finitely supported functions -/ instance
pointwiseModule: {α : Type u₁} → {β : Type u₂} → [inst : Semiring β] → Module (αβ) (α →₀ β)
pointwiseModule
[
Semiring: Type ?u.25673 → Type ?u.25673
Semiring
β: Type u₂
β
] :
Module: (R : Type ?u.25677) → (M : Type ?u.25676) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.25677?u.25676)
Module
(
α: Type u₁
α
β: Type u₂
β
) (
α: Type u₁
α
→₀
β: Type u₂
β
) :=
Function.Injective.module: (R : Type ?u.26163) → {M : Type ?u.26162} → {M₂ : Type ?u.26161} → [inst : Semiring R] → [inst_1 : AddCommMonoid M] → [inst_2 : Module R M] → [inst_3 : AddCommMonoid M₂] → [inst_4 : SMul R M₂] → (f : M₂ →+ M) → Function.Injective f(∀ (c : R) (x : M₂), f (c x) = c f x) → Module R M₂
Function.Injective.module
_: Type ?u.26163
_
coeFnAddHom: {α : Type ?u.26308} → {M : Type ?u.26307} → [inst : AddZeroClass M] → (α →₀ M) →+ αM
coeFnAddHom
FunLike.coe_injective: ∀ {F : Sort ?u.26768} {α : Sort ?u.26769} {β : αSort ?u.26770} [i : FunLike F α β], Function.Injective fun f => f
FunLike.coe_injective
coe_pointwise_smul: ∀ {α : Type ?u.26944} {β : Type ?u.26943} [inst : Semiring β] (f : αβ) (g : α →₀ β), ↑(f g) = ↑(f g)
coe_pointwise_smul
#align finsupp.pointwise_module
Finsupp.pointwiseModule: {α : Type u₁} → {β : Type u₂} → [inst : Semiring β] → Module (αβ) (α →₀ β)
Finsupp.pointwiseModule
end Finsupp