data.finsupp.pointwiseMathlib.Data.Finsupp.Pointwise

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -61,7 +61,7 @@ theorem support_mul [DecidableEq α] {g₁ g₂ : α →₀ β} :
     (g₁ * g₂).support ⊆ g₁.support ∩ g₂.support :=
   by
   intro a h
-  simp only [mul_apply, mem_support_iff] at h 
+  simp only [mul_apply, mem_support_iff] at h
   simp only [mem_support_iff, mem_inter, Ne.def]
   rw [← not_or]
   intro w
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
-import Mathbin.Data.Finsupp.Defs
-import Mathbin.Algebra.Ring.Pi
+import Data.Finsupp.Defs
+import Algebra.Ring.Pi
 
 #align_import data.finsupp.pointwise from "leanprover-community/mathlib"@"68d1483e8a718ec63219f0e227ca3f0140361086"
 
Diff
@@ -2,15 +2,12 @@
 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 68d1483e8a718ec63219f0e227ca3f0140361086
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Data.Finsupp.Defs
 import Mathbin.Algebra.Ring.Pi
 
+#align_import data.finsupp.pointwise from "leanprover-community/mathlib"@"68d1483e8a718ec63219f0e227ca3f0140361086"
+
 /-!
 # The pointwise product on `finsupp`.
 
Diff
@@ -46,15 +46,20 @@ variable [MulZeroClass β]
 instance : Mul (α →₀ β) :=
   ⟨zipWith (· * ·) (MulZeroClass.mul_zero 0)⟩
 
+#print Finsupp.coe_mul /-
 theorem coe_mul (g₁ g₂ : α →₀ β) : ⇑(g₁ * g₂) = g₁ * g₂ :=
   rfl
 #align finsupp.coe_mul Finsupp.coe_mul
+-/
 
+#print Finsupp.mul_apply /-
 @[simp]
 theorem mul_apply {g₁ g₂ : α →₀ β} {a : α} : (g₁ * g₂) a = g₁ a * g₂ a :=
   rfl
 #align finsupp.mul_apply Finsupp.mul_apply
+-/
 
+#print Finsupp.support_mul /-
 theorem support_mul [DecidableEq α] {g₁ g₂ : α →₀ β} :
     (g₁ * g₂).support ⊆ g₁.support ∩ g₂.support :=
   by
@@ -66,6 +71,7 @@ theorem support_mul [DecidableEq α] {g₁ g₂ : α →₀ β} :
   apply h
   cases w <;> · rw [w]; simp
 #align finsupp.support_mul Finsupp.support_mul
+-/
 
 instance : MulZeroClass (α →₀ β) :=
   Finsupp.coeFn_injective.MulZeroClass _ coe_zero coe_mul
@@ -96,6 +102,7 @@ instance [NonUnitalCommRing β] : NonUnitalCommRing (α →₀ β) :=
   Finsupp.coeFn_injective.NonUnitalCommRing _ coe_zero coe_add coe_mul coe_neg coe_sub
     (fun _ _ => rfl) fun _ _ => rfl
 
+#print Finsupp.pointwiseScalar /-
 -- TODO can this be generalized in the direction of `pi.has_smul'`
 -- (i.e. dependent functions and finsupps)
 -- TODO in theory this could be generalised, we only really need `smul_zero` for the definition
@@ -110,16 +117,21 @@ instance pointwiseScalar [Semiring β] : SMul (α → β) (α →₀ β)
         apply hx
         rw [h, smul_zero])
 #align finsupp.pointwise_scalar Finsupp.pointwiseScalar
+-/
 
+#print Finsupp.coe_pointwise_smul /-
 @[simp]
 theorem coe_pointwise_smul [Semiring β] (f : α → β) (g : α →₀ β) : ⇑(f • g) = f • g :=
   rfl
 #align finsupp.coe_pointwise_smul Finsupp.coe_pointwise_smul
+-/
 
+#print Finsupp.pointwiseModule /-
 /-- The pointwise multiplicative action of functions on finitely supported functions -/
 instance pointwiseModule [Semiring β] : Module (α → β) (α →₀ β) :=
   Function.Injective.module _ coeFnAddHom coeFn_injective coe_pointwise_smul
 #align finsupp.pointwise_module Finsupp.pointwiseModule
+-/
 
 end Finsupp
 
Diff
@@ -59,7 +59,7 @@ theorem support_mul [DecidableEq α] {g₁ g₂ : α →₀ β} :
     (g₁ * g₂).support ⊆ g₁.support ∩ g₂.support :=
   by
   intro a h
-  simp only [mul_apply, mem_support_iff] at h
+  simp only [mul_apply, mem_support_iff] at h 
   simp only [mem_support_iff, mem_inter, Ne.def]
   rw [← not_or]
   intro w
Diff
@@ -46,33 +46,15 @@ variable [MulZeroClass β]
 instance : Mul (α →₀ β) :=
   ⟨zipWith (· * ·) (MulZeroClass.mul_zero 0)⟩
 
-/- warning: finsupp.coe_mul -> Finsupp.coe_mul is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] (g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)), Eq.{succ (max u1 u2)} (α -> β) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.hasMul.{u1, u2} α β _inst_1)) g₁ g₂)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> β) (α -> β) (α -> β) (instHMul.{max u1 u2} (α -> β) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => MulZeroClass.toHasMul.{u2} β _inst_1))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₁) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₂))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] (g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)), Eq.{max (succ u1) (succ u2)} (forall (ᾰ : α), (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.instMulFinsuppToZero.{u1, u2} α β _inst_1)) g₁ g₂)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (forall (ᾰ : α), (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (forall (ᾰ : α), (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (forall (ᾰ : α), (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (instHMul.{max u1 u2} (forall (ᾰ : α), (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (fun (i : α) => MulZeroClass.toMul.{u2} ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) i) _inst_1))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) g₁) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) g₂))
-Case conversion may be inaccurate. Consider using '#align finsupp.coe_mul Finsupp.coe_mulₓ'. -/
 theorem coe_mul (g₁ g₂ : α →₀ β) : ⇑(g₁ * g₂) = g₁ * g₂ :=
   rfl
 #align finsupp.coe_mul Finsupp.coe_mul
 
-/- warning: finsupp.mul_apply -> Finsupp.mul_apply is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] {g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)} {g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)} {a : α}, Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.hasMul.{u1, u2} α β _inst_1)) g₁ g₂) a) (HMul.hMul.{u2, u2, u2} β β β (instHMul.{u2} β (MulZeroClass.toHasMul.{u2} β _inst_1)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₁ a) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₂ a))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] {g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)} {g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)} {a : α}, Eq.{succ u2} ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.instMulFinsuppToZero.{u1, u2} α β _inst_1)) g₁ g₂) a) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) (instHMul.{u2} ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) (MulZeroClass.toMul.{u2} ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) g₁ a) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) g₂ a))
-Case conversion may be inaccurate. Consider using '#align finsupp.mul_apply Finsupp.mul_applyₓ'. -/
 @[simp]
 theorem mul_apply {g₁ g₂ : α →₀ β} {a : α} : (g₁ * g₂) a = g₁ a * g₂ a :=
   rfl
 #align finsupp.mul_apply Finsupp.mul_apply
 
-/- warning: finsupp.support_mul -> Finsupp.support_mul is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)} {g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.hasSubset.{u1} α) (Finsupp.support.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.hasMul.{u1, u2} α β _inst_1)) g₁ g₂)) (Inter.inter.{u1} (Finset.{u1} α) (Finset.hasInter.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finsupp.support.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1) g₁) (Finsupp.support.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1) g₂))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] [_inst_2 : DecidableEq.{succ u1} α] {g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)} {g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)}, HasSubset.Subset.{u1} (Finset.{u1} α) (Finset.instHasSubsetFinset.{u1} α) (Finsupp.support.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.instMulFinsuppToZero.{u1, u2} α β _inst_1)) g₁ g₂)) (Inter.inter.{u1} (Finset.{u1} α) (Finset.instInterFinset.{u1} α (fun (a : α) (b : α) => _inst_2 a b)) (Finsupp.support.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1) g₁) (Finsupp.support.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1) g₂))
-Case conversion may be inaccurate. Consider using '#align finsupp.support_mul Finsupp.support_mulₓ'. -/
 theorem support_mul [DecidableEq α] {g₁ g₂ : α →₀ β} :
     (g₁ * g₂).support ⊆ g₁.support ∩ g₂.support :=
   by
@@ -114,12 +96,6 @@ instance [NonUnitalCommRing β] : NonUnitalCommRing (α →₀ β) :=
   Finsupp.coeFn_injective.NonUnitalCommRing _ coe_zero coe_add coe_mul coe_neg coe_sub
     (fun _ _ => rfl) fun _ _ => rfl
 
-/- warning: finsupp.pointwise_scalar -> Finsupp.pointwiseScalar is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Semiring.{u2} β], SMul.{max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1)))))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Semiring.{u2} β], SMul.{max u1 u2, max u2 u1} (α -> β) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1)))
-Case conversion may be inaccurate. Consider using '#align finsupp.pointwise_scalar Finsupp.pointwiseScalarₓ'. -/
 -- TODO can this be generalized in the direction of `pi.has_smul'`
 -- (i.e. dependent functions and finsupps)
 -- TODO in theory this could be generalised, we only really need `smul_zero` for the definition
@@ -135,23 +111,11 @@ instance pointwiseScalar [Semiring β] : SMul (α → β) (α →₀ β)
         rw [h, smul_zero])
 #align finsupp.pointwise_scalar Finsupp.pointwiseScalar
 
-/- warning: finsupp.coe_pointwise_smul -> Finsupp.coe_pointwise_smul is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Semiring.{u2} β] (f : α -> β) (g : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))), Eq.{succ (max u1 u2)} (α -> β) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (SMul.smul.{max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (Finsupp.pointwiseScalar.{u1, u2} α β _inst_1) f g)) (SMul.smul.{max u1 u2, max u1 u2} (α -> β) (α -> β) (Pi.smul'.{u1, u2, u2} α (fun (ᾰ : α) => β) (fun (ᾰ : α) => β) (fun (i : α) => Mul.toSMul.{u2} β (Distrib.toHasMul.{u2} β (NonUnitalNonAssocSemiring.toDistrib.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1)))))) f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) g))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Semiring.{u2} β] (f : α -> β) (g : Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))), Eq.{max (succ u1) (succ u2)} (α -> β) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) α (fun (_x : α) => β) (Finsupp.funLike.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (HSMul.hSMul.{max u1 u2, max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (instHSMul.{max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (Finsupp.pointwiseScalar.{u1, u2} α β _inst_1)) f g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) α (fun (a : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) (Finsupp.funLike.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (HSMul.hSMul.{max u1 u2, max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (instHSMul.{max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (Finsupp.pointwiseScalar.{u1, u2} α β _inst_1)) f g))
-Case conversion may be inaccurate. Consider using '#align finsupp.coe_pointwise_smul Finsupp.coe_pointwise_smulₓ'. -/
 @[simp]
 theorem coe_pointwise_smul [Semiring β] (f : α → β) (g : α →₀ β) : ⇑(f • g) = f • g :=
   rfl
 #align finsupp.coe_pointwise_smul Finsupp.coe_pointwise_smul
 
-/- warning: finsupp.pointwise_module -> Finsupp.pointwiseModule is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Semiring.{u2} β], Module.{max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (Pi.semiring.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => _inst_1)) (Finsupp.addCommMonoid.{u1, u2} α β (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Semiring.{u2} β], Module.{max u1 u2, max u2 u1} (α -> β) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (Pi.semiring.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => _inst_1)) (Finsupp.addCommMonoid.{u1, u2} α β (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))
-Case conversion may be inaccurate. Consider using '#align finsupp.pointwise_module Finsupp.pointwiseModuleₓ'. -/
 /-- The pointwise multiplicative action of functions on finitely supported functions -/
 instance pointwiseModule [Semiring β] : Module (α → β) (α →₀ β) :=
   Function.Injective.module _ coeFnAddHom coeFn_injective coe_pointwise_smul
Diff
@@ -82,9 +82,7 @@ theorem support_mul [DecidableEq α] {g₁ g₂ : α →₀ β} :
   rw [← not_or]
   intro w
   apply h
-  cases w <;>
-    · rw [w]
-      simp
+  cases w <;> · rw [w]; simp
 #align finsupp.support_mul Finsupp.support_mul
 
 instance : MulZeroClass (α →₀ β) :=
Diff
@@ -44,7 +44,7 @@ variable [MulZeroClass β]
 /-- The product of `f g : α →₀ β` is the finitely supported function
   whose value at `a` is `f a * g a`. -/
 instance : Mul (α →₀ β) :=
-  ⟨zipWith (· * ·) (mul_zero 0)⟩
+  ⟨zipWith (· * ·) (MulZeroClass.mul_zero 0)⟩
 
 /- warning: finsupp.coe_mul -> Finsupp.coe_mul is a dubious translation:
 lean 3 declaration is
Diff
@@ -48,7 +48,7 @@ instance : Mul (α →₀ β) :=
 
 /- warning: finsupp.coe_mul -> Finsupp.coe_mul is a dubious translation:
 lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] (g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)), Eq.{succ (max u1 u2)} (α -> β) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.hasCoeToFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.hasMul.{u1, u2} α β _inst_1)) g₁ g₂)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> β) (α -> β) (α -> β) (instHMul.{max u1 u2} (α -> β) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => MulZeroClass.toHasMul.{u2} β _inst_1))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.hasCoeToFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₁) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.hasCoeToFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₂))
+  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] (g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)), Eq.{succ (max u1 u2)} (α -> β) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.hasMul.{u1, u2} α β _inst_1)) g₁ g₂)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> β) (α -> β) (α -> β) (instHMul.{max u1 u2} (α -> β) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => β) (fun (i : α) => MulZeroClass.toHasMul.{u2} β _inst_1))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₁) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₂))
 but is expected to have type
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] (g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)), Eq.{max (succ u1) (succ u2)} (forall (ᾰ : α), (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.instMulFinsuppToZero.{u1, u2} α β _inst_1)) g₁ g₂)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (forall (ᾰ : α), (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (forall (ᾰ : α), (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (forall (ᾰ : α), (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (instHMul.{max u1 u2} (forall (ᾰ : α), (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) ᾰ) (fun (i : α) => MulZeroClass.toMul.{u2} ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) i) _inst_1))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) g₁) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) g₂))
 Case conversion may be inaccurate. Consider using '#align finsupp.coe_mul Finsupp.coe_mulₓ'. -/
@@ -58,7 +58,7 @@ theorem coe_mul (g₁ g₂ : α →₀ β) : ⇑(g₁ * g₂) = g₁ * g₂ :=
 
 /- warning: finsupp.mul_apply -> Finsupp.mul_apply is a dubious translation:
 lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] {g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)} {g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)} {a : α}, Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.hasCoeToFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.hasMul.{u1, u2} α β _inst_1)) g₁ g₂) a) (HMul.hMul.{u2, u2, u2} β β β (instHMul.{u2} β (MulZeroClass.toHasMul.{u2} β _inst_1)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.hasCoeToFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₁ a) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.hasCoeToFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₂ a))
+  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] {g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)} {g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)} {a : α}, Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (Finsupp.hasMul.{u1, u2} α β _inst_1)) g₁ g₂) a) (HMul.hMul.{u2, u2, u2} β β β (instHMul.{u2} β (MulZeroClass.toHasMul.{u2} β _inst_1)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₁ a) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β _inst_1)) g₂ a))
 but is expected to have type
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : MulZeroClass.{u2} β] {g₁ : Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)} {g₂ : Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)} {a : α}, Eq.{succ u2} ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (instHMul.{max u1 u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) (Finsupp.instMulFinsuppToZero.{u1, u2} α β _inst_1)) g₁ g₂) a) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) (instHMul.{u2} ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) (MulZeroClass.toMul.{u2} ((fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) g₁ a) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) α (fun (_x : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) _x) (Finsupp.funLike.{u1, u2} α β (MulZeroClass.toZero.{u2} β _inst_1)) g₂ a))
 Case conversion may be inaccurate. Consider using '#align finsupp.mul_apply Finsupp.mul_applyₓ'. -/
@@ -139,7 +139,7 @@ instance pointwiseScalar [Semiring β] : SMul (α → β) (α →₀ β)
 
 /- warning: finsupp.coe_pointwise_smul -> Finsupp.coe_pointwise_smul is a dubious translation:
 lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Semiring.{u2} β] (f : α -> β) (g : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))), Eq.{succ (max u1 u2)} (α -> β) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) => α -> β) (Finsupp.hasCoeToFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (SMul.smul.{max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (Finsupp.pointwiseScalar.{u1, u2} α β _inst_1) f g)) (SMul.smul.{max u1 u2, max u1 u2} (α -> β) (α -> β) (Pi.smul'.{u1, u2, u2} α (fun (ᾰ : α) => β) (fun (ᾰ : α) => β) (fun (i : α) => Mul.toSMul.{u2} β (Distrib.toHasMul.{u2} β (NonUnitalNonAssocSemiring.toDistrib.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1)))))) f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) => α -> β) (Finsupp.hasCoeToFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) g))
+  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Semiring.{u2} β] (f : α -> β) (g : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))), Eq.{succ (max u1 u2)} (α -> β) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (SMul.smul.{max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (Finsupp.pointwiseScalar.{u1, u2} α β _inst_1) f g)) (SMul.smul.{max u1 u2, max u1 u2} (α -> β) (α -> β) (Pi.smul'.{u1, u2, u2} α (fun (ᾰ : α) => β) (fun (ᾰ : α) => β) (fun (i : α) => Mul.toSMul.{u2} β (Distrib.toHasMul.{u2} β (NonUnitalNonAssocSemiring.toDistrib.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1)))))) f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) (fun (_x : Finsupp.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) => α -> β) (Finsupp.coeFun.{u1, u2} α β (MulZeroClass.toHasZero.{u2} β (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} β (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} β (Semiring.toNonAssocSemiring.{u2} β _inst_1))))) g))
 but is expected to have type
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : Semiring.{u2} β] (f : α -> β) (g : Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))), Eq.{max (succ u1) (succ u2)} (α -> β) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) α (fun (_x : α) => β) (Finsupp.funLike.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (HSMul.hSMul.{max u1 u2, max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (instHSMul.{max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (Finsupp.pointwiseScalar.{u1, u2} α β _inst_1)) f g)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) α (fun (a : α) => (fun (x._@.Mathlib.Data.Finsupp.Defs._hyg.779 : α) => β) a) (Finsupp.funLike.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (HSMul.hSMul.{max u1 u2, max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (instHSMul.{max u1 u2, max u1 u2} (α -> β) (Finsupp.{u1, u2} α β (MonoidWithZero.toZero.{u2} β (Semiring.toMonoidWithZero.{u2} β _inst_1))) (Finsupp.pointwiseScalar.{u1, u2} α β _inst_1)) f g))
 Case conversion may be inaccurate. Consider using '#align finsupp.coe_pointwise_smul Finsupp.coe_pointwise_smulₓ'. -/

Changes in mathlib4

mathlib3
mathlib4
chore: split Algebra.Module.Basic (#12501)

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>

Diff
@@ -3,7 +3,7 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
-import Mathlib.Algebra.Module.Basic
+import Mathlib.Algebra.Module.Defs
 import Mathlib.Algebra.Ring.Pi
 import Mathlib.Data.Finsupp.Defs
 
chore: avoid Ne.def (adaptation for nightly-2024-03-27) (#11801)
Diff
@@ -58,7 +58,7 @@ theorem support_mul [DecidableEq α] {g₁ g₂ : α →₀ β} :
     (g₁ * g₂).support ⊆ g₁.support ∩ g₂.support := by
   intro a h
   simp only [mul_apply, mem_support_iff] at h
-  simp only [mem_support_iff, mem_inter, Ne.def]
+  simp only [mem_support_iff, mem_inter, Ne]
   rw [← not_or]
   intro w
   apply h
@@ -101,7 +101,7 @@ instance pointwiseScalar [Semiring β] : SMul (α → β) (α →₀ β) where
   smul f g :=
     Finsupp.ofSupportFinite (fun a ↦ f a • g a) (by
       apply Set.Finite.subset g.finite_support
-      simp only [Function.support_subset_iff, Finsupp.mem_support_iff, Ne.def,
+      simp only [Function.support_subset_iff, Finsupp.mem_support_iff, Ne,
         Finsupp.fun_support_eq, Finset.mem_coe]
       intro x hx h
       apply hx
chore(*): rename FunLike to DFunLike (#9785)

This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.

This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:

sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean     
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean

Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>

Diff
@@ -66,32 +66,32 @@ theorem support_mul [DecidableEq α] {g₁ g₂ : α →₀ β} :
 #align finsupp.support_mul Finsupp.support_mul
 
 instance : MulZeroClass (α →₀ β) :=
-  FunLike.coe_injective.mulZeroClass _ coe_zero coe_mul
+  DFunLike.coe_injective.mulZeroClass _ coe_zero coe_mul
 
 end
 
 instance [SemigroupWithZero β] : SemigroupWithZero (α →₀ β) :=
-  FunLike.coe_injective.semigroupWithZero _ coe_zero coe_mul
+  DFunLike.coe_injective.semigroupWithZero _ coe_zero coe_mul
 
 instance [NonUnitalNonAssocSemiring β] : NonUnitalNonAssocSemiring (α →₀ β) :=
-  FunLike.coe_injective.nonUnitalNonAssocSemiring _ coe_zero coe_add coe_mul fun _ _ ↦ rfl
+  DFunLike.coe_injective.nonUnitalNonAssocSemiring _ coe_zero coe_add coe_mul fun _ _ ↦ rfl
 
 instance [NonUnitalSemiring β] : NonUnitalSemiring (α →₀ β) :=
-  FunLike.coe_injective.nonUnitalSemiring _ coe_zero coe_add coe_mul fun _ _ ↦ rfl
+  DFunLike.coe_injective.nonUnitalSemiring _ coe_zero coe_add coe_mul fun _ _ ↦ rfl
 
 instance [NonUnitalCommSemiring β] : NonUnitalCommSemiring (α →₀ β) :=
-  FunLike.coe_injective.nonUnitalCommSemiring _ coe_zero coe_add coe_mul fun _ _ ↦ rfl
+  DFunLike.coe_injective.nonUnitalCommSemiring _ coe_zero coe_add coe_mul fun _ _ ↦ rfl
 
 instance [NonUnitalNonAssocRing β] : NonUnitalNonAssocRing (α →₀ β) :=
-  FunLike.coe_injective.nonUnitalNonAssocRing _ coe_zero coe_add coe_mul coe_neg coe_sub
+  DFunLike.coe_injective.nonUnitalNonAssocRing _ coe_zero coe_add coe_mul coe_neg coe_sub
     (fun _ _ ↦ rfl) fun _ _ ↦ rfl
 
 instance [NonUnitalRing β] : NonUnitalRing (α →₀ β) :=
-  FunLike.coe_injective.nonUnitalRing _ coe_zero coe_add coe_mul coe_neg coe_sub (fun _ _ ↦ rfl)
+  DFunLike.coe_injective.nonUnitalRing _ coe_zero coe_add coe_mul coe_neg coe_sub (fun _ _ ↦ rfl)
     fun _ _ ↦ rfl
 
 instance [NonUnitalCommRing β] : NonUnitalCommRing (α →₀ β) :=
-  FunLike.coe_injective.nonUnitalCommRing _ coe_zero coe_add coe_mul coe_neg coe_sub
+  DFunLike.coe_injective.nonUnitalCommRing _ coe_zero coe_add coe_mul coe_neg coe_sub
     (fun _ _ ↦ rfl) fun _ _ ↦ rfl
 
 -- TODO can this be generalized in the direction of `Pi.smul'`
@@ -115,7 +115,7 @@ theorem coe_pointwise_smul [Semiring β] (f : α → β) (g : α →₀ β) : 
 
 /-- The pointwise multiplicative action of functions on finitely supported functions -/
 instance pointwiseModule [Semiring β] : Module (α → β) (α →₀ β) :=
-  Function.Injective.module _ coeFnAddHom FunLike.coe_injective coe_pointwise_smul
+  Function.Injective.module _ coeFnAddHom DFunLike.coe_injective coe_pointwise_smul
 #align finsupp.pointwise_module Finsupp.pointwiseModule
 
 end Finsupp
chore: Sink Algebra.Support down the import tree (#8919)

Function.support is a very basic definition. Nevertheless, it is a pretty heavy import because it imports most objects a support lemma can be written about.

This PR reverses the dependencies between those objects and Function.support, so that the latter can become a much more lightweight import.

Only two import could not easily be reversed, namely the ones to Data.Set.Finite and Order.ConditionallyCompleteLattice.Basic, so I created two new files instead.

I credit:

Diff
@@ -3,8 +3,9 @@ Copyright (c) 2020 Scott Morrison. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Scott Morrison
 -/
-import Mathlib.Data.Finsupp.Defs
+import Mathlib.Algebra.Module.Basic
 import Mathlib.Algebra.Ring.Pi
+import Mathlib.Data.Finsupp.Defs
 
 #align_import data.finsupp.pointwise from "leanprover-community/mathlib"@"f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c"
 
perf(FunLike.Basic): beta reduce CoeFun.coe (#7905)

This eliminates (fun a ↦ β) α in the type when applying a FunLike.

Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -108,7 +108,7 @@ instance pointwiseScalar [Semiring β] : SMul (α → β) (α →₀ β) where
 #align finsupp.pointwise_scalar Finsupp.pointwiseScalar
 
 @[simp]
-theorem coe_pointwise_smul [Semiring β] (f : α → β) (g : α →₀ β) : FunLike.coe (f • g) = f • g :=
+theorem coe_pointwise_smul [Semiring β] (f : α → β) (g : α →₀ β) : ⇑(f • g) = f • ⇑g :=
   rfl
 #align finsupp.coe_pointwise_smul Finsupp.coe_pointwise_smul
 
fix(Mathlib/Algebra/Lie/DirectSum): remove unused R argument from lemmas (#8388)

This made them not actually work as a simp lemma.

Also extracts a common result that can be used to prove single_add for DFinsupp and Finsupp, and a new Finsupp.single_mul lemma.

Diff
@@ -49,6 +49,10 @@ theorem mul_apply {g₁ g₂ : α →₀ β} {a : α} : (g₁ * g₂) a = g₁ a
   rfl
 #align finsupp.mul_apply Finsupp.mul_apply
 
+@[simp]
+theorem single_mul (a : α) (b₁ b₂ : β) : single a (b₁ * b₂) = single a b₁ * single a b₂ :=
+  (zipWith_single_single _ _ _ _ _).symm
+
 theorem support_mul [DecidableEq α] {g₁ g₂ : α →₀ β} :
     (g₁ * g₂).support ⊆ g₁.support ∩ g₂.support := by
   intro a h
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,15 +2,12 @@
 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
 
+#align_import data.finsupp.pointwise from "leanprover-community/mathlib"@"f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c"
+
 /-!
 # The pointwise product on `Finsupp`.
 
chore: remove occurrences of semicolon after space (#5713)

This is the second half of the changes originally in #5699, removing all occurrences of ; after a space and implementing a linter rule to enforce it.

In most cases this 2-character substring has a space after it, so the following command was run first:

find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;

The remaining cases were few enough in number that they were done manually.

Diff
@@ -60,7 +60,7 @@ theorem support_mul [DecidableEq α] {g₁ g₂ : α →₀ β} :
   rw [← not_or]
   intro w
   apply h
-  cases' w with w w <;> (rw [w] ; simp)
+  cases' w with w w <;> (rw [w]; simp)
 #align finsupp.support_mul Finsupp.support_mul
 
 instance : MulZeroClass (α →₀ β) :=
Refactor uses to rename_i that have easy fixes (#2429)
Diff
@@ -60,7 +60,7 @@ theorem support_mul [DecidableEq α] {g₁ g₂ : α →₀ β} :
   rw [← not_or]
   intro w
   apply h
-  cases w <;> (rename_i w ; rw [w] ; simp)
+  cases' w with w w <;> (rw [w] ; simp)
 #align finsupp.support_mul Finsupp.support_mul
 
 instance : MulZeroClass (α →₀ β) :=
chore: tidy various files (#2462)
Diff
@@ -95,8 +95,8 @@ instance [NonUnitalCommRing β] : NonUnitalCommRing (α →₀ β) :=
 -- 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 [Semiring β] : SMul (α → β) (α →₀ β)
-    where smul f g :=
+instance pointwiseScalar [Semiring β] : SMul (α → β) (α →₀ β) where
+  smul f g :=
     Finsupp.ofSupportFinite (fun a ↦ f a • g a) (by
       apply Set.Finite.subset g.finite_support
       simp only [Function.support_subset_iff, Finsupp.mem_support_iff, Ne.def,
feat: port Data.Finsupp.Pointwise (#1917)

Dependencies 7 + 241

242 files ported (97.2%)
106034 lines ported (97.2%)
Show graph

The unported dependencies are