topology.locally_constant.algebraMathlib.Topology.LocallyConstant.Algebra

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)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2021 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
 -/
-import Mathbin.Algebra.Algebra.Pi
-import Mathbin.Topology.LocallyConstant.Basic
+import Algebra.Algebra.Pi
+import Topology.LocallyConstant.Basic
 
 #align_import topology.locally_constant.algebra from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
 
Diff
@@ -211,8 +211,8 @@ instance [CommMonoid Y] : CommMonoid (LocallyConstant X Y) :=
 instance [Group Y] : Group (LocallyConstant X Y) :=
   { LocallyConstant.monoid, LocallyConstant.hasInv,
     LocallyConstant.hasDiv with
-    mul_left_inv := by intros; ext; simp only [mul_apply, inv_apply, one_apply, mul_left_inv]
-    div_eq_mul_inv := by intros; ext; simp only [mul_apply, inv_apply, div_apply, div_eq_mul_inv] }
+    hMul_left_inv := by intros; ext; simp only [mul_apply, inv_apply, one_apply, mul_left_inv]
+    div_eq_hMul_inv := by intros; ext; simp only [mul_apply, inv_apply, div_apply, div_eq_mul_inv] }
 
 @[to_additive]
 instance [CommGroup Y] : CommGroup (LocallyConstant X Y) :=
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2021 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
-
-! This file was ported from Lean 3 source module topology.locally_constant.algebra
-! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.Algebra.Pi
 import Mathbin.Topology.LocallyConstant.Basic
 
+#align_import topology.locally_constant.algebra from "leanprover-community/mathlib"@"f47581155c818e6361af4e4fda60d27d020c226b"
+
 /-!
 # Algebraic structure on locally constant functions
 
Diff
@@ -92,6 +92,7 @@ instance [MulOneClass Y] : MulOneClass (LocallyConstant X Y) :=
     one_mul := by intros; ext; simp only [mul_apply, one_apply, one_mul]
     mul_one := by intros; ext; simp only [mul_apply, one_apply, mul_one] }
 
+#print LocallyConstant.coeFnMonoidHom /-
 /-- `coe_fn` is a `monoid_hom`. -/
 @[to_additive "`coe_fn` is an `add_monoid_hom`.", simps]
 def coeFnMonoidHom [MulOneClass Y] : LocallyConstant X Y →* X → Y
@@ -101,7 +102,9 @@ def coeFnMonoidHom [MulOneClass Y] : LocallyConstant X Y →* X → Y
   map_mul' _ _ := rfl
 #align locally_constant.coe_fn_monoid_hom LocallyConstant.coeFnMonoidHom
 #align locally_constant.coe_fn_add_monoid_hom LocallyConstant.coeFnAddMonoidHom
+-/
 
+#print LocallyConstant.constMonoidHom /-
 /-- The constant-function embedding, as a multiplicative monoid hom. -/
 @[to_additive "The constant-function embedding, as an additive monoid hom.", simps]
 def constMonoidHom [MulOneClass Y] : Y →* LocallyConstant X Y
@@ -111,6 +114,7 @@ def constMonoidHom [MulOneClass Y] : Y →* LocallyConstant X Y
   map_mul' _ _ := rfl
 #align locally_constant.const_monoid_hom LocallyConstant.constMonoidHom
 #align locally_constant.const_add_monoid_hom LocallyConstant.constAddMonoidHom
+-/
 
 instance [MulZeroClass Y] : MulZeroClass (LocallyConstant X Y) :=
   { LocallyConstant.hasZero,
@@ -133,17 +137,23 @@ noncomputable def charFn (hU : IsClopen U) : LocallyConstant X Y :=
 #align locally_constant.char_fn LocallyConstant.charFn
 -/
 
+#print LocallyConstant.coe_charFn /-
 theorem coe_charFn (hU : IsClopen U) : (charFn Y hU : X → Y) = Set.indicator U 1 :=
   rfl
 #align locally_constant.coe_char_fn LocallyConstant.coe_charFn
+-/
 
+#print LocallyConstant.charFn_eq_one /-
 theorem charFn_eq_one [Nontrivial Y] (x : X) (hU : IsClopen U) : charFn Y hU x = (1 : Y) ↔ x ∈ U :=
   Set.indicator_eq_one_iff_mem _
 #align locally_constant.char_fn_eq_one LocallyConstant.charFn_eq_one
+-/
 
+#print LocallyConstant.charFn_eq_zero /-
 theorem charFn_eq_zero [Nontrivial Y] (x : X) (hU : IsClopen U) : charFn Y hU x = (0 : Y) ↔ x ∉ U :=
   Set.indicator_eq_zero_iff_not_mem _
 #align locally_constant.char_fn_eq_zero LocallyConstant.charFn_eq_zero
+-/
 
 #print LocallyConstant.charFn_inj /-
 theorem charFn_inj [Nontrivial Y] (hU : IsClopen U) (hV : IsClopen V)
@@ -228,11 +238,13 @@ instance [NonAssocSemiring Y] : NonAssocSemiring (LocallyConstant X Y) :=
   { LocallyConstant.mulOneClass, LocallyConstant.addMonoidWithOne,
     LocallyConstant.nonUnitalNonAssocSemiring with }
 
+#print LocallyConstant.constRingHom /-
 /-- The constant-function embedding, as a ring hom.  -/
 @[simps]
 def constRingHom [NonAssocSemiring Y] : Y →+* LocallyConstant X Y :=
   { constMonoidHom, constAddMonoidHom with toFun := const X }
 #align locally_constant.const_ring_hom LocallyConstant.constRingHom
+-/
 
 instance [Semiring Y] : Semiring (LocallyConstant X Y) :=
   { LocallyConstant.nonAssocSemiring, LocallyConstant.monoid with }
@@ -302,10 +314,12 @@ instance : Algebra R (LocallyConstant X Y)
   commutes' := by intros; ext; exact Algebra.commutes' _ _
   smul_def' := by intros; ext; exact Algebra.smul_def' _ _
 
+#print LocallyConstant.coe_algebraMap /-
 @[simp]
 theorem coe_algebraMap (r : R) : ⇑(algebraMap R (LocallyConstant X Y) r) = algebraMap R (X → Y) r :=
   rfl
 #align locally_constant.coe_algebra_map LocallyConstant.coe_algebraMap
+-/
 
 end Algebra
 
Diff
@@ -89,8 +89,8 @@ theorem mul_apply [Mul Y] (f g : LocallyConstant X Y) (x : X) : (f * g) x = f x
 instance [MulOneClass Y] : MulOneClass (LocallyConstant X Y) :=
   { LocallyConstant.hasOne,
     LocallyConstant.hasMul with
-    one_mul := by intros ; ext; simp only [mul_apply, one_apply, one_mul]
-    mul_one := by intros ; ext; simp only [mul_apply, one_apply, mul_one] }
+    one_mul := by intros; ext; simp only [mul_apply, one_apply, one_mul]
+    mul_one := by intros; ext; simp only [mul_apply, one_apply, mul_one] }
 
 /-- `coe_fn` is a `monoid_hom`. -/
 @[to_additive "`coe_fn` is an `add_monoid_hom`.", simps]
@@ -115,8 +115,8 @@ def constMonoidHom [MulOneClass Y] : Y →* LocallyConstant X Y
 instance [MulZeroClass Y] : MulZeroClass (LocallyConstant X Y) :=
   { LocallyConstant.hasZero,
     LocallyConstant.hasMul with
-    zero_mul := by intros ; ext; simp only [mul_apply, zero_apply, MulZeroClass.zero_mul]
-    mul_zero := by intros ; ext; simp only [mul_apply, zero_apply, MulZeroClass.mul_zero] }
+    zero_mul := by intros; ext; simp only [mul_apply, zero_apply, MulZeroClass.zero_mul]
+    mul_zero := by intros; ext; simp only [mul_apply, zero_apply, MulZeroClass.mul_zero] }
 
 instance [MulZeroOneClass Y] : MulZeroOneClass (LocallyConstant X Y) :=
   { LocallyConstant.mulZeroClass, LocallyConstant.mulOneClass with }
@@ -176,14 +176,14 @@ theorem div_apply [Div Y] (f g : LocallyConstant X Y) (x : X) : (f / g) x = f x
 
 @[to_additive]
 instance [Semigroup Y] : Semigroup (LocallyConstant X Y) :=
-  { LocallyConstant.hasMul with mul_assoc := by intros ; ext; simp only [mul_apply, mul_assoc] }
+  { LocallyConstant.hasMul with mul_assoc := by intros; ext; simp only [mul_apply, mul_assoc] }
 
 instance [SemigroupWithZero Y] : SemigroupWithZero (LocallyConstant X Y) :=
   { LocallyConstant.mulZeroClass, LocallyConstant.semigroup with }
 
 @[to_additive]
 instance [CommSemigroup Y] : CommSemigroup (LocallyConstant X Y) :=
-  { LocallyConstant.semigroup with mul_comm := by intros ; ext; simp only [mul_apply, mul_comm] }
+  { LocallyConstant.semigroup with mul_comm := by intros; ext; simp only [mul_apply, mul_comm] }
 
 @[to_additive]
 instance [Monoid Y] : Monoid (LocallyConstant X Y) :=
@@ -204,8 +204,8 @@ instance [CommMonoid Y] : CommMonoid (LocallyConstant X Y) :=
 instance [Group Y] : Group (LocallyConstant X Y) :=
   { LocallyConstant.monoid, LocallyConstant.hasInv,
     LocallyConstant.hasDiv with
-    mul_left_inv := by intros ; ext; simp only [mul_apply, inv_apply, one_apply, mul_left_inv]
-    div_eq_mul_inv := by intros ; ext; simp only [mul_apply, inv_apply, div_apply, div_eq_mul_inv] }
+    mul_left_inv := by intros; ext; simp only [mul_apply, inv_apply, one_apply, mul_left_inv]
+    div_eq_mul_inv := by intros; ext; simp only [mul_apply, inv_apply, div_apply, div_eq_mul_inv] }
 
 @[to_additive]
 instance [CommGroup Y] : CommGroup (LocallyConstant X Y) :=
@@ -214,8 +214,8 @@ instance [CommGroup Y] : CommGroup (LocallyConstant X Y) :=
 instance [Distrib Y] : Distrib (LocallyConstant X Y) :=
   { LocallyConstant.hasAdd,
     LocallyConstant.hasMul with
-    left_distrib := by intros ; ext; simp only [mul_apply, add_apply, mul_add]
-    right_distrib := by intros ; ext; simp only [mul_apply, add_apply, add_mul] }
+    left_distrib := by intros; ext; simp only [mul_apply, add_apply, mul_add]
+    right_distrib := by intros; ext; simp only [mul_apply, add_apply, add_mul] }
 
 instance [NonUnitalNonAssocSemiring Y] : NonUnitalNonAssocSemiring (LocallyConstant X Y) :=
   { LocallyConstant.addCommMonoid, LocallyConstant.hasMul, LocallyConstant.distrib,
@@ -299,8 +299,8 @@ variable [CommSemiring R] [Semiring Y] [Algebra R Y]
 instance : Algebra R (LocallyConstant X Y)
     where
   toRingHom := constRingHom.comp <| algebraMap R Y
-  commutes' := by intros ; ext; exact Algebra.commutes' _ _
-  smul_def' := by intros ; ext; exact Algebra.smul_def' _ _
+  commutes' := by intros; ext; exact Algebra.commutes' _ _
+  smul_def' := by intros; ext; exact Algebra.smul_def' _ _
 
 @[simp]
 theorem coe_algebraMap (r : R) : ⇑(algebraMap R (LocallyConstant X Y) r) = algebraMap R (X → Y) r :=
Diff
@@ -92,12 +92,6 @@ instance [MulOneClass Y] : MulOneClass (LocallyConstant X Y) :=
     one_mul := by intros ; ext; simp only [mul_apply, one_apply, one_mul]
     mul_one := by intros ; ext; simp only [mul_apply, one_apply, mul_one] }
 
-/- warning: locally_constant.coe_fn_monoid_hom -> LocallyConstant.coeFnMonoidHom is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulOneClass.{u2} Y], MonoidHom.{max u1 u2, max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (X -> Y) (LocallyConstant.mulOneClass.{u1, u2} X Y _inst_1 _inst_2) (Pi.mulOneClass.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_2))
-but is expected to have type
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulOneClass.{u2} Y], MonoidHom.{max u2 u1, max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (X -> Y) (LocallyConstant.instMulOneClassLocallyConstant.{u1, u2} X Y _inst_1 _inst_2) (Pi.mulOneClass.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_2))
-Case conversion may be inaccurate. Consider using '#align locally_constant.coe_fn_monoid_hom LocallyConstant.coeFnMonoidHomₓ'. -/
 /-- `coe_fn` is a `monoid_hom`. -/
 @[to_additive "`coe_fn` is an `add_monoid_hom`.", simps]
 def coeFnMonoidHom [MulOneClass Y] : LocallyConstant X Y →* X → Y
@@ -108,12 +102,6 @@ def coeFnMonoidHom [MulOneClass Y] : LocallyConstant X Y →* X → Y
 #align locally_constant.coe_fn_monoid_hom LocallyConstant.coeFnMonoidHom
 #align locally_constant.coe_fn_add_monoid_hom LocallyConstant.coeFnAddMonoidHom
 
-/- warning: locally_constant.const_monoid_hom -> LocallyConstant.constMonoidHom is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulOneClass.{u2} Y], MonoidHom.{u2, max u1 u2} Y (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.mulOneClass.{u1, u2} X Y _inst_1 _inst_2)
-but is expected to have type
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulOneClass.{u2} Y], MonoidHom.{u2, max u2 u1} Y (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.instMulOneClassLocallyConstant.{u1, u2} X Y _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align locally_constant.const_monoid_hom LocallyConstant.constMonoidHomₓ'. -/
 /-- The constant-function embedding, as a multiplicative monoid hom. -/
 @[to_additive "The constant-function embedding, as an additive monoid hom.", simps]
 def constMonoidHom [MulOneClass Y] : Y →* LocallyConstant X Y
@@ -145,32 +133,14 @@ noncomputable def charFn (hU : IsClopen U) : LocallyConstant X Y :=
 #align locally_constant.char_fn LocallyConstant.charFn
 -/
 
-/- warning: locally_constant.coe_char_fn -> LocallyConstant.coe_charFn is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} (hU : IsClopen.{u1} X _inst_1 U), Eq.{max (succ u1) (succ u2)} ((fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU)) (Set.indicator.{u1, u2} X Y (MulZeroClass.toHasZero.{u2} Y (MulZeroOneClass.toMulZeroClass.{u2} Y _inst_2)) U (OfNat.ofNat.{max u1 u2} (X -> Y) 1 (OfNat.mk.{max u1 u2} (X -> Y) 1 (One.one.{max u1 u2} (X -> Y) (Pi.instOne.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => MulOneClass.toHasOne.{u2} Y (MulZeroOneClass.toMulOneClass.{u2} Y _inst_2)))))))
-but is expected to have type
-  forall {X : Type.{u2}} (Y : Type.{u1}) [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : MulZeroOneClass.{u1} Y] {U : Set.{u2} X} (hU : IsClopen.{u2} X _inst_1 U), Eq.{max (succ u2) (succ u1)} (forall (a : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LocallyConstant.{u2, u1} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u2, u1} X Y _inst_1) (LocallyConstant.charFn.{u2, u1} X Y _inst_1 _inst_2 U hU)) (Set.indicator.{u2, u1} X Y (MulZeroOneClass.toZero.{u1} Y _inst_2) U (OfNat.ofNat.{max u2 u1} (X -> Y) 1 (One.toOfNat1.{max u2 u1} (X -> Y) (Pi.instOne.{u2, u1} X (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : X) => Y) (fun (i : X) => MulOneClass.toOne.{u1} Y (MulZeroOneClass.toMulOneClass.{u1} Y _inst_2))))))
-Case conversion may be inaccurate. Consider using '#align locally_constant.coe_char_fn LocallyConstant.coe_charFnₓ'. -/
 theorem coe_charFn (hU : IsClopen U) : (charFn Y hU : X → Y) = Set.indicator U 1 :=
   rfl
 #align locally_constant.coe_char_fn LocallyConstant.coe_charFn
 
-/- warning: locally_constant.char_fn_eq_one -> LocallyConstant.charFn_eq_one is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} Y (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 1 (OfNat.mk.{u2} Y 1 (One.one.{u2} Y (MulOneClass.toHasOne.{u2} Y (MulZeroOneClass.toMulOneClass.{u2} Y _inst_2)))))) (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x U)
-but is expected to have type
-  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (LocallyConstant.{u1, u2} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 1 (One.toOfNat1.{u2} Y (MulOneClass.toOne.{u2} Y (MulZeroOneClass.toMulOneClass.{u2} Y _inst_2))))) (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x U)
-Case conversion may be inaccurate. Consider using '#align locally_constant.char_fn_eq_one LocallyConstant.charFn_eq_oneₓ'. -/
 theorem charFn_eq_one [Nontrivial Y] (x : X) (hU : IsClopen U) : charFn Y hU x = (1 : Y) ↔ x ∈ U :=
   Set.indicator_eq_one_iff_mem _
 #align locally_constant.char_fn_eq_one LocallyConstant.charFn_eq_one
 
-/- warning: locally_constant.char_fn_eq_zero -> LocallyConstant.charFn_eq_zero is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} Y (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 0 (OfNat.mk.{u2} Y 0 (Zero.zero.{u2} Y (MulZeroClass.toHasZero.{u2} Y (MulZeroOneClass.toMulZeroClass.{u2} Y _inst_2)))))) (Not (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x U))
-but is expected to have type
-  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (LocallyConstant.{u1, u2} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 0 (Zero.toOfNat0.{u2} Y (MulZeroOneClass.toZero.{u2} Y _inst_2)))) (Not (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x U))
-Case conversion may be inaccurate. Consider using '#align locally_constant.char_fn_eq_zero LocallyConstant.charFn_eq_zeroₓ'. -/
 theorem charFn_eq_zero [Nontrivial Y] (x : X) (hU : IsClopen U) : charFn Y hU x = (0 : Y) ↔ x ∉ U :=
   Set.indicator_eq_zero_iff_not_mem _
 #align locally_constant.char_fn_eq_zero LocallyConstant.charFn_eq_zero
@@ -258,12 +228,6 @@ instance [NonAssocSemiring Y] : NonAssocSemiring (LocallyConstant X Y) :=
   { LocallyConstant.mulOneClass, LocallyConstant.addMonoidWithOne,
     LocallyConstant.nonUnitalNonAssocSemiring with }
 
-/- warning: locally_constant.const_ring_hom -> LocallyConstant.constRingHom is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : NonAssocSemiring.{u2} Y], RingHom.{u2, max u1 u2} Y (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.nonAssocSemiring.{u1, u2} X Y _inst_1 _inst_2)
-but is expected to have type
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : NonAssocSemiring.{u2} Y], RingHom.{u2, max u2 u1} Y (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.instNonAssocSemiringLocallyConstant.{u1, u2} X Y _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align locally_constant.const_ring_hom LocallyConstant.constRingHomₓ'. -/
 /-- The constant-function embedding, as a ring hom.  -/
 @[simps]
 def constRingHom [NonAssocSemiring Y] : Y →+* LocallyConstant X Y :=
@@ -338,9 +302,6 @@ instance : Algebra R (LocallyConstant X Y)
   commutes' := by intros ; ext; exact Algebra.commutes' _ _
   smul_def' := by intros ; ext; exact Algebra.smul_def' _ _
 
-/- warning: locally_constant.coe_algebra_map -> LocallyConstant.coe_algebraMap is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align locally_constant.coe_algebra_map LocallyConstant.coe_algebraMapₓ'. -/
 @[simp]
 theorem coe_algebraMap (r : R) : ⇑(algebraMap R (LocallyConstant X Y) r) = algebraMap R (X → Y) r :=
   rfl
Diff
@@ -89,14 +89,8 @@ theorem mul_apply [Mul Y] (f g : LocallyConstant X Y) (x : X) : (f * g) x = f x
 instance [MulOneClass Y] : MulOneClass (LocallyConstant X Y) :=
   { LocallyConstant.hasOne,
     LocallyConstant.hasMul with
-    one_mul := by
-      intros
-      ext
-      simp only [mul_apply, one_apply, one_mul]
-    mul_one := by
-      intros
-      ext
-      simp only [mul_apply, one_apply, mul_one] }
+    one_mul := by intros ; ext; simp only [mul_apply, one_apply, one_mul]
+    mul_one := by intros ; ext; simp only [mul_apply, one_apply, mul_one] }
 
 /- warning: locally_constant.coe_fn_monoid_hom -> LocallyConstant.coeFnMonoidHom is a dubious translation:
 lean 3 declaration is
@@ -133,14 +127,8 @@ def constMonoidHom [MulOneClass Y] : Y →* LocallyConstant X Y
 instance [MulZeroClass Y] : MulZeroClass (LocallyConstant X Y) :=
   { LocallyConstant.hasZero,
     LocallyConstant.hasMul with
-    zero_mul := by
-      intros
-      ext
-      simp only [mul_apply, zero_apply, MulZeroClass.zero_mul]
-    mul_zero := by
-      intros
-      ext
-      simp only [mul_apply, zero_apply, MulZeroClass.mul_zero] }
+    zero_mul := by intros ; ext; simp only [mul_apply, zero_apply, MulZeroClass.zero_mul]
+    mul_zero := by intros ; ext; simp only [mul_apply, zero_apply, MulZeroClass.mul_zero] }
 
 instance [MulZeroOneClass Y] : MulZeroOneClass (LocallyConstant X Y) :=
   { LocallyConstant.mulZeroClass, LocallyConstant.mulOneClass with }
@@ -218,22 +206,14 @@ theorem div_apply [Div Y] (f g : LocallyConstant X Y) (x : X) : (f / g) x = f x
 
 @[to_additive]
 instance [Semigroup Y] : Semigroup (LocallyConstant X Y) :=
-  { LocallyConstant.hasMul with
-    mul_assoc := by
-      intros
-      ext
-      simp only [mul_apply, mul_assoc] }
+  { LocallyConstant.hasMul with mul_assoc := by intros ; ext; simp only [mul_apply, mul_assoc] }
 
 instance [SemigroupWithZero Y] : SemigroupWithZero (LocallyConstant X Y) :=
   { LocallyConstant.mulZeroClass, LocallyConstant.semigroup with }
 
 @[to_additive]
 instance [CommSemigroup Y] : CommSemigroup (LocallyConstant X Y) :=
-  { LocallyConstant.semigroup with
-    mul_comm := by
-      intros
-      ext
-      simp only [mul_apply, mul_comm] }
+  { LocallyConstant.semigroup with mul_comm := by intros ; ext; simp only [mul_apply, mul_comm] }
 
 @[to_additive]
 instance [Monoid Y] : Monoid (LocallyConstant X Y) :=
@@ -254,14 +234,8 @@ instance [CommMonoid Y] : CommMonoid (LocallyConstant X Y) :=
 instance [Group Y] : Group (LocallyConstant X Y) :=
   { LocallyConstant.monoid, LocallyConstant.hasInv,
     LocallyConstant.hasDiv with
-    mul_left_inv := by
-      intros
-      ext
-      simp only [mul_apply, inv_apply, one_apply, mul_left_inv]
-    div_eq_mul_inv := by
-      intros
-      ext
-      simp only [mul_apply, inv_apply, div_apply, div_eq_mul_inv] }
+    mul_left_inv := by intros ; ext; simp only [mul_apply, inv_apply, one_apply, mul_left_inv]
+    div_eq_mul_inv := by intros ; ext; simp only [mul_apply, inv_apply, div_apply, div_eq_mul_inv] }
 
 @[to_additive]
 instance [CommGroup Y] : CommGroup (LocallyConstant X Y) :=
@@ -270,14 +244,8 @@ instance [CommGroup Y] : CommGroup (LocallyConstant X Y) :=
 instance [Distrib Y] : Distrib (LocallyConstant X Y) :=
   { LocallyConstant.hasAdd,
     LocallyConstant.hasMul with
-    left_distrib := by
-      intros
-      ext
-      simp only [mul_apply, add_apply, mul_add]
-    right_distrib := by
-      intros
-      ext
-      simp only [mul_apply, add_apply, add_mul] }
+    left_distrib := by intros ; ext; simp only [mul_apply, add_apply, mul_add]
+    right_distrib := by intros ; ext; simp only [mul_apply, add_apply, add_mul] }
 
 instance [NonUnitalNonAssocSemiring Y] : NonUnitalNonAssocSemiring (LocallyConstant X Y) :=
   { LocallyConstant.addCommMonoid, LocallyConstant.hasMul, LocallyConstant.distrib,
@@ -367,14 +335,8 @@ variable [CommSemiring R] [Semiring Y] [Algebra R Y]
 instance : Algebra R (LocallyConstant X Y)
     where
   toRingHom := constRingHom.comp <| algebraMap R Y
-  commutes' := by
-    intros
-    ext
-    exact Algebra.commutes' _ _
-  smul_def' := by
-    intros
-    ext
-    exact Algebra.smul_def' _ _
+  commutes' := by intros ; ext; exact Algebra.commutes' _ _
+  smul_def' := by intros ; ext; exact Algebra.smul_def' _ _
 
 /- warning: locally_constant.coe_algebra_map -> LocallyConstant.coe_algebraMap is a dubious translation:
 <too large>
Diff
@@ -377,10 +377,7 @@ instance : Algebra R (LocallyConstant X Y)
     exact Algebra.smul_def' _ _
 
 /- warning: locally_constant.coe_algebra_map -> LocallyConstant.coe_algebraMap is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] {R : Type.{u3}} [_inst_2 : CommSemiring.{u3} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u3, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u1) (succ u2)} (X -> Y) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (fun (_x : RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) => R -> (LocallyConstant.{u1, u2} X Y _inst_1)) (RingHom.hasCoeToFun.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (algebraMap.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3) (LocallyConstant.algebra.{u1, u2, u3} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (fun (_x : RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) => R -> X -> Y) (RingHom.hasCoeToFun.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (algebraMap.{u3, max u1 u2} R (X -> Y) _inst_2 (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Function.algebra.{u3, u1, u2} R X Y _inst_2 _inst_3 _inst_4)) r)
-but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] {R : Type.{u1}} [_inst_2 : CommSemiring.{u1} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u1, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u3) (succ u2)} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) ᾰ) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => LocallyConstant.{u3, u2} X Y _inst_1) r) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u3, u2} X Y _inst_1) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => LocallyConstant.{u3, u2} X Y _inst_1) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))))) (algebraMap.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) _inst_2 (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3) (LocallyConstant.instAlgebraLocallyConstantInstSemiringLocallyConstant.{u3, u2, u1} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => X -> Y) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))))) (algebraMap.{u1, max u3 u2} R (X -> Y) _inst_2 (Pi.semiring.{u3, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Pi.algebra.{u3, u2, u1} X R (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) _inst_2 (fun (i : X) => _inst_3) (fun (i : X) => _inst_4))) r)
+<too large>
 Case conversion may be inaccurate. Consider using '#align locally_constant.coe_algebra_map LocallyConstant.coe_algebraMapₓ'. -/
 @[simp]
 theorem coe_algebraMap (r : R) : ⇑(algebraMap R (LocallyConstant X Y) r) = algebraMap R (X → Y) r :=
Diff
@@ -380,7 +380,7 @@ instance : Algebra R (LocallyConstant X Y)
 lean 3 declaration is
   forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] {R : Type.{u3}} [_inst_2 : CommSemiring.{u3} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u3, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u1) (succ u2)} (X -> Y) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (fun (_x : RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) => R -> (LocallyConstant.{u1, u2} X Y _inst_1)) (RingHom.hasCoeToFun.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (algebraMap.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3) (LocallyConstant.algebra.{u1, u2, u3} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (fun (_x : RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) => R -> X -> Y) (RingHom.hasCoeToFun.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (algebraMap.{u3, max u1 u2} R (X -> Y) _inst_2 (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Function.algebra.{u3, u1, u2} R X Y _inst_2 _inst_3 _inst_4)) r)
 but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] {R : Type.{u1}} [_inst_2 : CommSemiring.{u1} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u1, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u3) (succ u2)} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) ᾰ) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => LocallyConstant.{u3, u2} X Y _inst_1) r) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u3, u2} X Y _inst_1) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => LocallyConstant.{u3, u2} X Y _inst_1) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))))) (algebraMap.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) _inst_2 (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3) (LocallyConstant.instAlgebraLocallyConstantInstSemiringLocallyConstant.{u3, u2, u1} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => X -> Y) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))))) (algebraMap.{u1, max u3 u2} R (X -> Y) _inst_2 (Pi.semiring.{u3, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Pi.algebra.{u3, u2, u1} X R (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) _inst_2 (fun (i : X) => _inst_3) (fun (i : X) => _inst_4))) r)
+  forall {X : Type.{u3}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] {R : Type.{u1}} [_inst_2 : CommSemiring.{u1} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u1, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u3) (succ u2)} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) ᾰ) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => LocallyConstant.{u3, u2} X Y _inst_1) r) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u3, u2} X Y _inst_1) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => LocallyConstant.{u3, u2} X Y _inst_1) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))))) (algebraMap.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) _inst_2 (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3) (LocallyConstant.instAlgebraLocallyConstantInstSemiringLocallyConstant.{u3, u2, u1} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => X -> Y) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))))) (algebraMap.{u1, max u3 u2} R (X -> Y) _inst_2 (Pi.semiring.{u3, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Pi.algebra.{u3, u2, u1} X R (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) _inst_2 (fun (i : X) => _inst_3) (fun (i : X) => _inst_4))) r)
 Case conversion may be inaccurate. Consider using '#align locally_constant.coe_algebra_map LocallyConstant.coe_algebraMapₓ'. -/
 @[simp]
 theorem coe_algebraMap (r : R) : ⇑(algebraMap R (LocallyConstant X Y) r) = algebraMap R (X → Y) r :=
Diff
@@ -161,7 +161,7 @@ noncomputable def charFn (hU : IsClopen U) : LocallyConstant X Y :=
 lean 3 declaration is
   forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} (hU : IsClopen.{u1} X _inst_1 U), Eq.{max (succ u1) (succ u2)} ((fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU)) (Set.indicator.{u1, u2} X Y (MulZeroClass.toHasZero.{u2} Y (MulZeroOneClass.toMulZeroClass.{u2} Y _inst_2)) U (OfNat.ofNat.{max u1 u2} (X -> Y) 1 (OfNat.mk.{max u1 u2} (X -> Y) 1 (One.one.{max u1 u2} (X -> Y) (Pi.instOne.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => MulOneClass.toHasOne.{u2} Y (MulZeroOneClass.toMulOneClass.{u2} Y _inst_2)))))))
 but is expected to have type
-  forall {X : Type.{u2}} (Y : Type.{u1}) [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : MulZeroOneClass.{u1} Y] {U : Set.{u2} X} (hU : IsClopen.{u2} X _inst_1 U), Eq.{max (succ u2) (succ u1)} (forall (a : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LocallyConstant.{u2, u1} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u2, u1} X Y _inst_1) (LocallyConstant.charFn.{u2, u1} X Y _inst_1 _inst_2 U hU)) (Set.indicator.{u2, u1} X Y (MulZeroOneClass.toZero.{u1} Y _inst_2) U (OfNat.ofNat.{max u2 u1} (X -> Y) 1 (One.toOfNat1.{max u2 u1} (X -> Y) (Pi.instOne.{u2, u1} X (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : X) => Y) (fun (i : X) => MulOneClass.toOne.{u1} Y (MulZeroOneClass.toMulOneClass.{u1} Y _inst_2))))))
+  forall {X : Type.{u2}} (Y : Type.{u1}) [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : MulZeroOneClass.{u1} Y] {U : Set.{u2} X} (hU : IsClopen.{u2} X _inst_1 U), Eq.{max (succ u2) (succ u1)} (forall (a : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LocallyConstant.{u2, u1} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u2, u1} X Y _inst_1) (LocallyConstant.charFn.{u2, u1} X Y _inst_1 _inst_2 U hU)) (Set.indicator.{u2, u1} X Y (MulZeroOneClass.toZero.{u1} Y _inst_2) U (OfNat.ofNat.{max u2 u1} (X -> Y) 1 (One.toOfNat1.{max u2 u1} (X -> Y) (Pi.instOne.{u2, u1} X (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : X) => Y) (fun (i : X) => MulOneClass.toOne.{u1} Y (MulZeroOneClass.toMulOneClass.{u1} Y _inst_2))))))
 Case conversion may be inaccurate. Consider using '#align locally_constant.coe_char_fn LocallyConstant.coe_charFnₓ'. -/
 theorem coe_charFn (hU : IsClopen U) : (charFn Y hU : X → Y) = Set.indicator U 1 :=
   rfl
@@ -171,7 +171,7 @@ theorem coe_charFn (hU : IsClopen U) : (charFn Y hU : X → Y) = Set.indicator U
 lean 3 declaration is
   forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} Y (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 1 (OfNat.mk.{u2} Y 1 (One.one.{u2} Y (MulOneClass.toHasOne.{u2} Y (MulZeroOneClass.toMulOneClass.{u2} Y _inst_2)))))) (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x U)
 but is expected to have type
-  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (LocallyConstant.{u1, u2} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 1 (One.toOfNat1.{u2} Y (MulOneClass.toOne.{u2} Y (MulZeroOneClass.toMulOneClass.{u2} Y _inst_2))))) (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x U)
+  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (LocallyConstant.{u1, u2} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 1 (One.toOfNat1.{u2} Y (MulOneClass.toOne.{u2} Y (MulZeroOneClass.toMulOneClass.{u2} Y _inst_2))))) (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x U)
 Case conversion may be inaccurate. Consider using '#align locally_constant.char_fn_eq_one LocallyConstant.charFn_eq_oneₓ'. -/
 theorem charFn_eq_one [Nontrivial Y] (x : X) (hU : IsClopen U) : charFn Y hU x = (1 : Y) ↔ x ∈ U :=
   Set.indicator_eq_one_iff_mem _
@@ -181,7 +181,7 @@ theorem charFn_eq_one [Nontrivial Y] (x : X) (hU : IsClopen U) : charFn Y hU x =
 lean 3 declaration is
   forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} Y (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 0 (OfNat.mk.{u2} Y 0 (Zero.zero.{u2} Y (MulZeroClass.toHasZero.{u2} Y (MulZeroOneClass.toMulZeroClass.{u2} Y _inst_2)))))) (Not (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x U))
 but is expected to have type
-  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (LocallyConstant.{u1, u2} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 0 (Zero.toOfNat0.{u2} Y (MulZeroOneClass.toZero.{u2} Y _inst_2)))) (Not (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x U))
+  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (LocallyConstant.{u1, u2} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 0 (Zero.toOfNat0.{u2} Y (MulZeroOneClass.toZero.{u2} Y _inst_2)))) (Not (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x U))
 Case conversion may be inaccurate. Consider using '#align locally_constant.char_fn_eq_zero LocallyConstant.charFn_eq_zeroₓ'. -/
 theorem charFn_eq_zero [Nontrivial Y] (x : X) (hU : IsClopen U) : charFn Y hU x = (0 : Y) ↔ x ∉ U :=
   Set.indicator_eq_zero_iff_not_mem _
@@ -380,7 +380,7 @@ instance : Algebra R (LocallyConstant X Y)
 lean 3 declaration is
   forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] {R : Type.{u3}} [_inst_2 : CommSemiring.{u3} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u3, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u1) (succ u2)} (X -> Y) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (fun (_x : RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) => R -> (LocallyConstant.{u1, u2} X Y _inst_1)) (RingHom.hasCoeToFun.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (algebraMap.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3) (LocallyConstant.algebra.{u1, u2, u3} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (fun (_x : RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) => R -> X -> Y) (RingHom.hasCoeToFun.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (algebraMap.{u3, max u1 u2} R (X -> Y) _inst_2 (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Function.algebra.{u3, u1, u2} R X Y _inst_2 _inst_3 _inst_4)) r)
 but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] {R : Type.{u1}} [_inst_2 : CommSemiring.{u1} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u1, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u3) (succ u2)} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) ᾰ) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => LocallyConstant.{u3, u2} X Y _inst_1) r) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u3, u2} X Y _inst_1) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => LocallyConstant.{u3, u2} X Y _inst_1) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))))) (algebraMap.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) _inst_2 (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3) (LocallyConstant.instAlgebraLocallyConstantInstSemiringLocallyConstant.{u3, u2, u1} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => X -> Y) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))))) (algebraMap.{u1, max u3 u2} R (X -> Y) _inst_2 (Pi.semiring.{u3, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Pi.algebra.{u3, u2, u1} X R (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) _inst_2 (fun (i : X) => _inst_3) (fun (i : X) => _inst_4))) r)
+  forall {X : Type.{u3}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] {R : Type.{u1}} [_inst_2 : CommSemiring.{u1} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u1, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u3) (succ u2)} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) ᾰ) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => LocallyConstant.{u3, u2} X Y _inst_1) r) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.5691 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u3, u2} X Y _inst_1) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => LocallyConstant.{u3, u2} X Y _inst_1) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))))) (algebraMap.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) _inst_2 (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3) (LocallyConstant.instAlgebraLocallyConstantInstSemiringLocallyConstant.{u3, u2, u1} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => X -> Y) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))))) (algebraMap.{u1, max u3 u2} R (X -> Y) _inst_2 (Pi.semiring.{u3, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Pi.algebra.{u3, u2, u1} X R (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) _inst_2 (fun (i : X) => _inst_3) (fun (i : X) => _inst_4))) r)
 Case conversion may be inaccurate. Consider using '#align locally_constant.coe_algebra_map LocallyConstant.coe_algebraMapₓ'. -/
 @[simp]
 theorem coe_algebraMap (r : R) : ⇑(algebraMap R (LocallyConstant X Y) r) = algebraMap R (X → Y) r :=
Diff
@@ -380,7 +380,7 @@ instance : Algebra R (LocallyConstant X Y)
 lean 3 declaration is
   forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] {R : Type.{u3}} [_inst_2 : CommSemiring.{u3} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u3, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u1) (succ u2)} (X -> Y) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (fun (_x : RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) => R -> (LocallyConstant.{u1, u2} X Y _inst_1)) (RingHom.hasCoeToFun.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (algebraMap.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3) (LocallyConstant.algebra.{u1, u2, u3} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (fun (_x : RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) => R -> X -> Y) (RingHom.hasCoeToFun.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (algebraMap.{u3, max u1 u2} R (X -> Y) _inst_2 (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Function.algebra.{u3, u1, u2} R X Y _inst_2 _inst_3 _inst_4)) r)
 but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] {R : Type.{u1}} [_inst_2 : CommSemiring.{u1} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u1, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u3) (succ u2)} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) ᾰ) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => LocallyConstant.{u3, u2} X Y _inst_1) r) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u3, u2} X Y _inst_1) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => LocallyConstant.{u3, u2} X Y _inst_1) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))))) (algebraMap.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) _inst_2 (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3) (LocallyConstant.instAlgebraLocallyConstantInstSemiringLocallyConstant.{u3, u2, u1} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => X -> Y) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))))))) (algebraMap.{u1, max u3 u2} R (X -> Y) _inst_2 (Pi.semiring.{u3, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Pi.algebra.{u3, u2, u1} X R (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) _inst_2 (fun (i : X) => _inst_3) (fun (i : X) => _inst_4))) r)
+  forall {X : Type.{u3}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] {R : Type.{u1}} [_inst_2 : CommSemiring.{u1} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u1, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u3) (succ u2)} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) ᾰ) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => LocallyConstant.{u3, u2} X Y _inst_1) r) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u3, u2} X Y _inst_1) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => LocallyConstant.{u3, u2} X Y _inst_1) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))))) (algebraMap.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) _inst_2 (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3) (LocallyConstant.instAlgebraLocallyConstantInstSemiringLocallyConstant.{u3, u2, u1} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => X -> Y) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) (fun (i : X) => _inst_3))))))) (algebraMap.{u1, max u3 u2} R (X -> Y) _inst_2 (Pi.semiring.{u3, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Pi.algebra.{u3, u2, u1} X R (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2488 : X) => Y) _inst_2 (fun (i : X) => _inst_3) (fun (i : X) => _inst_4))) r)
 Case conversion may be inaccurate. Consider using '#align locally_constant.coe_algebra_map LocallyConstant.coe_algebraMapₓ'. -/
 @[simp]
 theorem coe_algebraMap (r : R) : ⇑(algebraMap R (LocallyConstant X Y) r) = algebraMap R (X → Y) r :=
Diff
@@ -136,11 +136,11 @@ instance [MulZeroClass Y] : MulZeroClass (LocallyConstant X Y) :=
     zero_mul := by
       intros
       ext
-      simp only [mul_apply, zero_apply, zero_mul]
+      simp only [mul_apply, zero_apply, MulZeroClass.zero_mul]
     mul_zero := by
       intros
       ext
-      simp only [mul_apply, zero_apply, mul_zero] }
+      simp only [mul_apply, zero_apply, MulZeroClass.mul_zero] }
 
 instance [MulZeroOneClass Y] : MulZeroOneClass (LocallyConstant X Y) :=
   { LocallyConstant.mulZeroClass, LocallyConstant.mulOneClass with }
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
 
 ! This file was ported from Lean 3 source module topology.locally_constant.algebra
-! leanprover-community/mathlib commit bcfa726826abd57587355b4b5b7e78ad6527b7e4
+! leanprover-community/mathlib commit f47581155c818e6361af4e4fda60d27d020c226b
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.Topology.LocallyConstant.Basic
 /-!
 # Algebraic structure on locally constant functions
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 This file puts algebraic structure (`add_group`, etc)
 on the type of locally constant functions.
 
Diff
@@ -377,7 +377,7 @@ instance : Algebra R (LocallyConstant X Y)
 lean 3 declaration is
   forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] {R : Type.{u3}} [_inst_2 : CommSemiring.{u3} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u3, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u1) (succ u2)} (X -> Y) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (fun (_x : RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) => R -> (LocallyConstant.{u1, u2} X Y _inst_1)) (RingHom.hasCoeToFun.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (algebraMap.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3) (LocallyConstant.algebra.{u1, u2, u3} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (fun (_x : RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) => R -> X -> Y) (RingHom.hasCoeToFun.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (algebraMap.{u3, max u1 u2} R (X -> Y) _inst_2 (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Function.algebra.{u3, u1, u2} R X Y _inst_2 _inst_3 _inst_4)) r)
 but is expected to have type
-  forall {X : Type.{u3}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] {R : Type.{u1}} [_inst_2 : CommSemiring.{u1} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u1, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u3) (succ u2)} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) ᾰ) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => LocallyConstant.{u3, u2} X Y _inst_1) r) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u3, u2} X Y _inst_1) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => LocallyConstant.{u3, u2} X Y _inst_1) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))))) (algebraMap.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) _inst_2 (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3) (LocallyConstant.instAlgebraLocallyConstantInstSemiringLocallyConstant.{u3, u2, u1} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => X -> Y) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))))))) (algebraMap.{u1, max u3 u2} R (X -> Y) _inst_2 (Pi.semiring.{u3, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Pi.algebra.{u3, u2, u1} X R (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) _inst_2 (fun (i : X) => _inst_3) (fun (i : X) => _inst_4))) r)
+  forall {X : Type.{u3}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] {R : Type.{u1}} [_inst_2 : CommSemiring.{u1} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u1, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u3) (succ u2)} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) ᾰ) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => LocallyConstant.{u3, u2} X Y _inst_1) r) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u3, u2} X Y _inst_1) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => LocallyConstant.{u3, u2} X Y _inst_1) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))))) (algebraMap.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) _inst_2 (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3) (LocallyConstant.instAlgebraLocallyConstantInstSemiringLocallyConstant.{u3, u2, u1} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : R) => X -> Y) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))))))) (algebraMap.{u1, max u3 u2} R (X -> Y) _inst_2 (Pi.semiring.{u3, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Pi.algebra.{u3, u2, u1} X R (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) _inst_2 (fun (i : X) => _inst_3) (fun (i : X) => _inst_4))) r)
 Case conversion may be inaccurate. Consider using '#align locally_constant.coe_algebra_map LocallyConstant.coe_algebraMapₓ'. -/
 @[simp]
 theorem coe_algebraMap (r : R) : ⇑(algebraMap R (LocallyConstant X Y) r) = algebraMap R (X → Y) r :=
Diff
@@ -27,48 +27,60 @@ variable {X Y : Type _} [TopologicalSpace X]
 @[to_additive]
 instance [One Y] : One (LocallyConstant X Y) where one := const X 1
 
+#print LocallyConstant.coe_one /-
 @[simp, to_additive]
 theorem coe_one [One Y] : ⇑(1 : LocallyConstant X Y) = (1 : X → Y) :=
   rfl
 #align locally_constant.coe_one LocallyConstant.coe_one
 #align locally_constant.coe_zero LocallyConstant.coe_zero
+-/
 
+#print LocallyConstant.one_apply /-
 @[to_additive]
 theorem one_apply [One Y] (x : X) : (1 : LocallyConstant X Y) x = 1 :=
   rfl
 #align locally_constant.one_apply LocallyConstant.one_apply
 #align locally_constant.zero_apply LocallyConstant.zero_apply
+-/
 
 @[to_additive]
 instance [Inv Y] : Inv (LocallyConstant X Y) where inv f := ⟨f⁻¹, f.IsLocallyConstant.inv⟩
 
+#print LocallyConstant.coe_inv /-
 @[simp, to_additive]
 theorem coe_inv [Inv Y] (f : LocallyConstant X Y) : ⇑f⁻¹ = f⁻¹ :=
   rfl
 #align locally_constant.coe_inv LocallyConstant.coe_inv
 #align locally_constant.coe_neg LocallyConstant.coe_neg
+-/
 
+#print LocallyConstant.inv_apply /-
 @[to_additive]
 theorem inv_apply [Inv Y] (f : LocallyConstant X Y) (x : X) : f⁻¹ x = (f x)⁻¹ :=
   rfl
 #align locally_constant.inv_apply LocallyConstant.inv_apply
 #align locally_constant.neg_apply LocallyConstant.neg_apply
+-/
 
 @[to_additive]
 instance [Mul Y] : Mul (LocallyConstant X Y)
     where mul f g := ⟨f * g, f.IsLocallyConstant.mul g.IsLocallyConstant⟩
 
+#print LocallyConstant.coe_mul /-
 @[simp, to_additive]
 theorem coe_mul [Mul Y] (f g : LocallyConstant X Y) : ⇑(f * g) = f * g :=
   rfl
 #align locally_constant.coe_mul LocallyConstant.coe_mul
 #align locally_constant.coe_add LocallyConstant.coe_add
+-/
 
+#print LocallyConstant.mul_apply /-
 @[to_additive]
 theorem mul_apply [Mul Y] (f g : LocallyConstant X Y) (x : X) : (f * g) x = f x * g x :=
   rfl
 #align locally_constant.mul_apply LocallyConstant.mul_apply
 #align locally_constant.add_apply LocallyConstant.add_apply
+-/
 
 @[to_additive]
 instance [MulOneClass Y] : MulOneClass (LocallyConstant X Y) :=
@@ -83,6 +95,12 @@ instance [MulOneClass Y] : MulOneClass (LocallyConstant X Y) :=
       ext
       simp only [mul_apply, one_apply, mul_one] }
 
+/- warning: locally_constant.coe_fn_monoid_hom -> LocallyConstant.coeFnMonoidHom is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulOneClass.{u2} Y], MonoidHom.{max u1 u2, max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (X -> Y) (LocallyConstant.mulOneClass.{u1, u2} X Y _inst_1 _inst_2) (Pi.mulOneClass.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_2))
+but is expected to have type
+  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulOneClass.{u2} Y], MonoidHom.{max u2 u1, max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (X -> Y) (LocallyConstant.instMulOneClassLocallyConstant.{u1, u2} X Y _inst_1 _inst_2) (Pi.mulOneClass.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_2))
+Case conversion may be inaccurate. Consider using '#align locally_constant.coe_fn_monoid_hom LocallyConstant.coeFnMonoidHomₓ'. -/
 /-- `coe_fn` is a `monoid_hom`. -/
 @[to_additive "`coe_fn` is an `add_monoid_hom`.", simps]
 def coeFnMonoidHom [MulOneClass Y] : LocallyConstant X Y →* X → Y
@@ -93,6 +111,12 @@ def coeFnMonoidHom [MulOneClass Y] : LocallyConstant X Y →* X → Y
 #align locally_constant.coe_fn_monoid_hom LocallyConstant.coeFnMonoidHom
 #align locally_constant.coe_fn_add_monoid_hom LocallyConstant.coeFnAddMonoidHom
 
+/- warning: locally_constant.const_monoid_hom -> LocallyConstant.constMonoidHom is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulOneClass.{u2} Y], MonoidHom.{u2, max u1 u2} Y (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.mulOneClass.{u1, u2} X Y _inst_1 _inst_2)
+but is expected to have type
+  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulOneClass.{u2} Y], MonoidHom.{u2, max u2 u1} Y (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.instMulOneClassLocallyConstant.{u1, u2} X Y _inst_1 _inst_2)
+Case conversion may be inaccurate. Consider using '#align locally_constant.const_monoid_hom LocallyConstant.constMonoidHomₓ'. -/
 /-- The constant-function embedding, as a multiplicative monoid hom. -/
 @[to_additive "The constant-function embedding, as an additive monoid hom.", simps]
 def constMonoidHom [MulOneClass Y] : Y →* LocallyConstant X Y
@@ -122,28 +146,50 @@ section CharFn
 
 variable (Y) [MulZeroOneClass Y] {U V : Set X}
 
+#print LocallyConstant.charFn /-
 /-- Characteristic functions are locally constant functions taking `x : X` to `1` if `x ∈ U`,
   where `U` is a clopen set, and `0` otherwise. -/
 noncomputable def charFn (hU : IsClopen U) : LocallyConstant X Y :=
   indicator 1 hU
 #align locally_constant.char_fn LocallyConstant.charFn
+-/
 
+/- warning: locally_constant.coe_char_fn -> LocallyConstant.coe_charFn is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} (hU : IsClopen.{u1} X _inst_1 U), Eq.{max (succ u1) (succ u2)} ((fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU)) (Set.indicator.{u1, u2} X Y (MulZeroClass.toHasZero.{u2} Y (MulZeroOneClass.toMulZeroClass.{u2} Y _inst_2)) U (OfNat.ofNat.{max u1 u2} (X -> Y) 1 (OfNat.mk.{max u1 u2} (X -> Y) 1 (One.one.{max u1 u2} (X -> Y) (Pi.instOne.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => MulOneClass.toHasOne.{u2} Y (MulZeroOneClass.toMulOneClass.{u2} Y _inst_2)))))))
+but is expected to have type
+  forall {X : Type.{u2}} (Y : Type.{u1}) [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : MulZeroOneClass.{u1} Y] {U : Set.{u2} X} (hU : IsClopen.{u2} X _inst_1 U), Eq.{max (succ u2) (succ u1)} (forall (a : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LocallyConstant.{u2, u1} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u2, u1} X Y _inst_1) (LocallyConstant.charFn.{u2, u1} X Y _inst_1 _inst_2 U hU)) (Set.indicator.{u2, u1} X Y (MulZeroOneClass.toZero.{u1} Y _inst_2) U (OfNat.ofNat.{max u2 u1} (X -> Y) 1 (One.toOfNat1.{max u2 u1} (X -> Y) (Pi.instOne.{u2, u1} X (fun (a._@.Mathlib.Algebra.IndicatorFunction._hyg.77 : X) => Y) (fun (i : X) => MulOneClass.toOne.{u1} Y (MulZeroOneClass.toMulOneClass.{u1} Y _inst_2))))))
+Case conversion may be inaccurate. Consider using '#align locally_constant.coe_char_fn LocallyConstant.coe_charFnₓ'. -/
 theorem coe_charFn (hU : IsClopen U) : (charFn Y hU : X → Y) = Set.indicator U 1 :=
   rfl
 #align locally_constant.coe_char_fn LocallyConstant.coe_charFn
 
+/- warning: locally_constant.char_fn_eq_one -> LocallyConstant.charFn_eq_one is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} Y (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 1 (OfNat.mk.{u2} Y 1 (One.one.{u2} Y (MulOneClass.toHasOne.{u2} Y (MulZeroOneClass.toMulOneClass.{u2} Y _inst_2)))))) (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x U)
+but is expected to have type
+  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (LocallyConstant.{u1, u2} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 1 (One.toOfNat1.{u2} Y (MulOneClass.toOne.{u2} Y (MulZeroOneClass.toMulOneClass.{u2} Y _inst_2))))) (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x U)
+Case conversion may be inaccurate. Consider using '#align locally_constant.char_fn_eq_one LocallyConstant.charFn_eq_oneₓ'. -/
 theorem charFn_eq_one [Nontrivial Y] (x : X) (hU : IsClopen U) : charFn Y hU x = (1 : Y) ↔ x ∈ U :=
   Set.indicator_eq_one_iff_mem _
 #align locally_constant.char_fn_eq_one LocallyConstant.charFn_eq_one
 
+/- warning: locally_constant.char_fn_eq_zero -> LocallyConstant.charFn_eq_zero is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} Y (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 0 (OfNat.mk.{u2} Y 0 (Zero.zero.{u2} Y (MulZeroClass.toHasZero.{u2} Y (MulZeroOneClass.toMulZeroClass.{u2} Y _inst_2)))))) (Not (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x U))
+but is expected to have type
+  forall {X : Type.{u1}} (Y : Type.{u2}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : MulZeroOneClass.{u2} Y] {U : Set.{u1} X} [_inst_3 : Nontrivial.{u2} Y] (x : X) (hU : IsClopen.{u1} X _inst_1 U), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) x) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (LocallyConstant.{u1, u2} X Y _inst_1) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.charFn.{u1, u2} X Y _inst_1 _inst_2 U hU) x) (OfNat.ofNat.{u2} Y 0 (Zero.toOfNat0.{u2} Y (MulZeroOneClass.toZero.{u2} Y _inst_2)))) (Not (Membership.mem.{u1, u1} X (Set.{u1} X) (Set.instMembershipSet.{u1} X) x U))
+Case conversion may be inaccurate. Consider using '#align locally_constant.char_fn_eq_zero LocallyConstant.charFn_eq_zeroₓ'. -/
 theorem charFn_eq_zero [Nontrivial Y] (x : X) (hU : IsClopen U) : charFn Y hU x = (0 : Y) ↔ x ∉ U :=
   Set.indicator_eq_zero_iff_not_mem _
 #align locally_constant.char_fn_eq_zero LocallyConstant.charFn_eq_zero
 
+#print LocallyConstant.charFn_inj /-
 theorem charFn_inj [Nontrivial Y] (hU : IsClopen U) (hV : IsClopen V)
     (h : charFn Y hU = charFn Y hV) : U = V :=
   Set.indicator_one_inj Y <| coe_inj.mpr h
 #align locally_constant.char_fn_inj LocallyConstant.charFn_inj
+-/
 
 end CharFn
 
@@ -151,17 +197,21 @@ end CharFn
 instance [Div Y] : Div (LocallyConstant X Y)
     where div f g := ⟨f / g, f.IsLocallyConstant.div g.IsLocallyConstant⟩
 
+#print LocallyConstant.coe_div /-
 @[to_additive]
 theorem coe_div [Div Y] (f g : LocallyConstant X Y) : ⇑(f / g) = f / g :=
   rfl
 #align locally_constant.coe_div LocallyConstant.coe_div
 #align locally_constant.coe_sub LocallyConstant.coe_sub
+-/
 
+#print LocallyConstant.div_apply /-
 @[to_additive]
 theorem div_apply [Div Y] (f g : LocallyConstant X Y) (x : X) : (f / g) x = f x / g x :=
   rfl
 #align locally_constant.div_apply LocallyConstant.div_apply
 #align locally_constant.sub_apply LocallyConstant.sub_apply
+-/
 
 @[to_additive]
 instance [Semigroup Y] : Semigroup (LocallyConstant X Y) :=
@@ -237,6 +287,12 @@ instance [NonAssocSemiring Y] : NonAssocSemiring (LocallyConstant X Y) :=
   { LocallyConstant.mulOneClass, LocallyConstant.addMonoidWithOne,
     LocallyConstant.nonUnitalNonAssocSemiring with }
 
+/- warning: locally_constant.const_ring_hom -> LocallyConstant.constRingHom is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : NonAssocSemiring.{u2} Y], RingHom.{u2, max u1 u2} Y (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.nonAssocSemiring.{u1, u2} X Y _inst_1 _inst_2)
+but is expected to have type
+  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : NonAssocSemiring.{u2} Y], RingHom.{u2, max u2 u1} Y (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.instNonAssocSemiringLocallyConstant.{u1, u2} X Y _inst_1 _inst_2)
+Case conversion may be inaccurate. Consider using '#align locally_constant.const_ring_hom LocallyConstant.constRingHomₓ'. -/
 /-- The constant-function embedding, as a ring hom.  -/
 @[simps]
 def constRingHom [NonAssocSemiring Y] : Y →+* LocallyConstant X Y :=
@@ -278,14 +334,18 @@ instance [SMul R Y] : SMul R (LocallyConstant X Y)
     { toFun := r • f
       IsLocallyConstant := (f.IsLocallyConstant.comp ((· • ·) r) : _) }
 
+#print LocallyConstant.coe_smul /-
 @[simp]
 theorem coe_smul [SMul R Y] (r : R) (f : LocallyConstant X Y) : ⇑(r • f) = r • f :=
   rfl
 #align locally_constant.coe_smul LocallyConstant.coe_smul
+-/
 
+#print LocallyConstant.smul_apply /-
 theorem smul_apply [SMul R Y] (r : R) (f : LocallyConstant X Y) (x : X) : (r • f) x = r • f x :=
   rfl
 #align locally_constant.smul_apply LocallyConstant.smul_apply
+-/
 
 instance [Monoid R] [MulAction R Y] : MulAction R (LocallyConstant X Y) :=
   Function.Injective.mulAction _ coe_injective fun _ _ => rfl
@@ -313,6 +373,12 @@ instance : Algebra R (LocallyConstant X Y)
     ext
     exact Algebra.smul_def' _ _
 
+/- warning: locally_constant.coe_algebra_map -> LocallyConstant.coe_algebraMap is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] {R : Type.{u3}} [_inst_2 : CommSemiring.{u3} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u3, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u1) (succ u2)} (X -> Y) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocallyConstant.{u1, u2} X Y _inst_1) (fun (_x : LocallyConstant.{u1, u2} X Y _inst_1) => X -> Y) (LocallyConstant.hasCoeToFun.{u1, u2} X Y _inst_1) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (fun (_x : RingHom.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) => R -> (LocallyConstant.{u1, u2} X Y _inst_1)) (RingHom.hasCoeToFun.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (LocallyConstant.{u1, u2} X Y _inst_1) (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3))) (algebraMap.{u3, max u1 u2} R (LocallyConstant.{u1, u2} X Y _inst_1) _inst_2 (LocallyConstant.semiring.{u1, u2} X Y _inst_1 _inst_3) (LocallyConstant.algebra.{u1, u2, u3} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ u3) (succ (max u1 u2))} (RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (fun (_x : RingHom.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) => R -> X -> Y) (RingHom.hasCoeToFun.{u3, max u1 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_2)) (Semiring.toNonAssocSemiring.{max u1 u2} (X -> Y) (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)))) (algebraMap.{u3, max u1 u2} R (X -> Y) _inst_2 (Pi.semiring.{u1, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Function.algebra.{u3, u1, u2} R X Y _inst_2 _inst_3 _inst_4)) r)
+but is expected to have type
+  forall {X : Type.{u3}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] {R : Type.{u1}} [_inst_2 : CommSemiring.{u1} R] [_inst_3 : Semiring.{u2} Y] [_inst_4 : Algebra.{u1, u2} R Y _inst_2 _inst_3] (r : R), Eq.{max (succ u3) (succ u2)} (forall (ᾰ : X), (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) ᾰ) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => LocallyConstant.{u3, u2} X Y _inst_1) r) X (fun (_x : X) => (fun (x._@.Mathlib.Topology.LocallyConstant.Basic._hyg.2185 : X) => Y) _x) (LocallyConstant.instFunLikeLocallyConstant.{u3, u2} X Y _inst_1) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => LocallyConstant.{u3, u2} X Y _inst_1) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3))) R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (LocallyConstant.{u3, u2} X Y _inst_1) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u2 u3} (LocallyConstant.{u3, u2} X Y _inst_1) (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3)))))) (algebraMap.{u1, max u2 u3} R (LocallyConstant.{u3, u2} X Y _inst_1) _inst_2 (LocallyConstant.instSemiringLocallyConstant.{u3, u2} X Y _inst_1 _inst_3) (LocallyConstant.instAlgebraLocallyConstantInstSemiringLocallyConstant.{u3, u2, u1} X Y _inst_1 R _inst_2 _inst_3 _inst_4)) r)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), succ u1, max (succ u3) (succ u2)} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : R) => X -> Y) _x) (MulHomClass.toFunLike.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonUnitalNonAssocSemiring.toMul.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)))) (NonUnitalNonAssocSemiring.toMul.{max u3 u2} (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))))) (NonUnitalRingHomClass.toMulHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{max u3 u2} (X -> Y) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) (RingHomClass.toNonUnitalRingHomClass.{max (max u3 u2) u1, u1, max u3 u2} (RingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3)))) R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))) (RingHom.instRingHomClassRingHom.{u1, max u3 u2} R (X -> Y) (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_2)) (Semiring.toNonAssocSemiring.{max u3 u2} (X -> Y) (Pi.semiring.{u3, u2} X (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) (fun (i : X) => _inst_3))))))) (algebraMap.{u1, max u3 u2} R (X -> Y) _inst_2 (Pi.semiring.{u3, u2} X (fun (ᾰ : X) => Y) (fun (i : X) => _inst_3)) (Pi.algebra.{u3, u2, u1} X R (fun (a._@.Mathlib.Topology.LocallyConstant.Algebra._hyg.2456 : X) => Y) _inst_2 (fun (i : X) => _inst_3) (fun (i : X) => _inst_4))) r)
+Case conversion may be inaccurate. Consider using '#align locally_constant.coe_algebra_map LocallyConstant.coe_algebraMapₓ'. -/
 @[simp]
 theorem coe_algebraMap (r : R) : ⇑(algebraMap R (LocallyConstant X Y) r) = algebraMap R (X → Y) r :=
   rfl

Changes in mathlib4

mathlib3
mathlib4
refactor(Topology): take continuous argument in LocallyConstant.comap (#12136)

Changes the definition of LocallyConstant.comap so that it takes an argument of the form C(X, Y) instead of X → Y. There was no example of a non-continuous argument in mathlib, and this definition generally makes proofs easier.

Diff
@@ -346,49 +346,49 @@ variable [TopologicalSpace Y] {Z : Type*}
 /-- `LocallyConstant.comap` as a `MulHom`. -/
 @[to_additive (attr := simps) "`LocallyConstant.comap` as an `AddHom`."]
 noncomputable
-def comapMulHom [Mul Z] (f : X → Y) (hf : Continuous f) :
+def comapMulHom [Mul Z]  (f : C(X, Y)) :
     LocallyConstant Y Z →ₙ* LocallyConstant X Z where
   toFun := comap f
-  map_mul' r s := by ext x; simp [hf]
+  map_mul' _ _ := rfl
 
 /-- `LocallyConstant.comap` as a `MonoidHom`. -/
 @[to_additive (attr := simps) "`LocallyConstant.comap` as an `AddMonoidHom`."]
 noncomputable
-def comapMonoidHom [MulOneClass Z] (f : X → Y) (hf : Continuous f) :
+def comapMonoidHom [MulOneClass Z]  (f : C(X, Y)) :
     LocallyConstant Y Z →* LocallyConstant X Z where
   toFun := comap f
-  map_one' := by ext x; simp [hf]
-  map_mul' := map_mul (comapMulHom f hf)
+  map_one' := rfl
+  map_mul' := map_mul (comapMulHom f)
 
 /-- `LocallyConstant.comap` as a linear map. -/
 @[simps!]
 noncomputable
-def comapₗ (R : Type*) [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
-    (hf : Continuous f) : LocallyConstant Y Z →ₗ[R] LocallyConstant X Z where
+def comapₗ (R : Type*) [Semiring R] [AddCommMonoid Z] [Module R Z] (f : C(X, Y)) :
+    LocallyConstant Y Z →ₗ[R] LocallyConstant X Z where
   toFun := comap f
-  map_add' := map_add (comapAddMonoidHom f hf)
-  map_smul' r s := by ext x; simp [hf]
+  map_add' := map_add (comapAddMonoidHom f)
+  map_smul' _ _ := rfl
 
 /-- `LocallyConstant.comap` as a `RingHom`. -/
 @[simps!]
 noncomputable
-def comapRingHom [Semiring Z] (f : X → Y) (hf : Continuous f) :
+def comapRingHom [Semiring Z] (f : C(X, Y)) :
     LocallyConstant Y Z →+* LocallyConstant X Z where
-  toMonoidHom := comapMonoidHom f hf
-  __ := comapAddMonoidHom f hf
+  toMonoidHom := comapMonoidHom f
+  __ := (comapAddMonoidHom f)
 
 /-- `LocallyConstant.comap` as an `AlgHom` -/
 @[simps!]
 noncomputable
 def comapₐ (R : Type*) [CommSemiring R] [Semiring Z] [Algebra R Z]
-    (f : X → Y) (hf : Continuous f) : LocallyConstant Y Z →ₐ[R] LocallyConstant X Z where
-  toRingHom := comapRingHom f hf
-  commutes' r := by ext x; simp [hf]
+    (f : C(X, Y)) : LocallyConstant Y Z →ₐ[R] LocallyConstant X Z where
+  toRingHom := comapRingHom f
+  commutes' _ := rfl
 
-lemma ker_comapₗ [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
-    (hf : Continuous f) (hfs : Function.Surjective f) :
-    LinearMap.ker (comapₗ R f hf : LocallyConstant Y Z →ₗ[R] LocallyConstant X Z) = ⊥ :=
-  LinearMap.ker_eq_bot_of_injective <| comap_injective _ hf hfs
+lemma ker_comapₗ [Semiring R] [AddCommMonoid Z] [Module R Z] (f : C(X, Y))
+    (hfs : Function.Surjective f) :
+    LinearMap.ker (comapₗ R f : LocallyConstant Y Z →ₗ[R] LocallyConstant X Z) = ⊥ :=
+  LinearMap.ker_eq_bot_of_injective <| comap_injective _ hfs
 
 /-- `LocallyConstant.congrLeft` as a `MulEquiv`. -/
 @[to_additive (attr := simps!) "`LocallyConstant.congrLeft` as an `AddEquiv`."]
@@ -396,14 +396,14 @@ noncomputable
 def congrLeftMulEquiv [Mul Z] (e : X ≃ₜ Y) :
     LocallyConstant X Z ≃* LocallyConstant Y Z where
   toEquiv := congrLeft e
-  map_mul' := map_mul (comapMulHom _ e.symm.continuous)
+  map_mul' := map_mul (comapMulHom ⟨_, e.symm.continuous⟩)
 
 /-- `LocallyConstant.congrLeft` as a linear equivalence. -/
 @[simps!]
 noncomputable
 def congrLeftₗ (R : Type*) [Semiring R] [AddCommMonoid Z] [Module R Z] (e : X ≃ₜ Y) :
     LocallyConstant X Z ≃ₗ[R] LocallyConstant Y Z where
-  toLinearMap := comapₗ R _ e.symm.continuous
+  toLinearMap := comapₗ R ⟨_, e.symm.continuous⟩
   __ := congrLeft e
 
 /-- `LocallyConstant.congrLeft` as a `RingEquiv`. -/
@@ -412,8 +412,8 @@ noncomputable
 def congrLeftRingEquiv [Semiring Z] (e : X ≃ₜ Y) :
     LocallyConstant X Z ≃+* LocallyConstant Y Z where
   toEquiv := congrLeft e
-  __ := comapMonoidHom _ e.symm.continuous
-  __ := comapAddMonoidHom _ e.symm.continuous
+  __ := comapMonoidHom ⟨_, e.symm.continuous⟩
+  __ := comapAddMonoidHom ⟨_, e.symm.continuous⟩
 
 /-- `LocallyConstant.congrLeft` as an `AlgEquiv`. -/
 @[simps!]
@@ -421,7 +421,7 @@ noncomputable
 def congrLeftₐ (R : Type*) [CommSemiring R] [Semiring Z] [Algebra R Z] (e : X ≃ₜ Y) :
     LocallyConstant X Z ≃ₐ[R] LocallyConstant Y Z where
   toEquiv := congrLeft e
-  __ := comapₐ R _ e.symm.continuous
+  __ := comapₐ R ⟨_, e.symm.continuous⟩
 
 end Comap
 
chore: superfluous parentheses part 2 (#12131)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -375,7 +375,7 @@ noncomputable
 def comapRingHom [Semiring Z] (f : X → Y) (hf : Continuous f) :
     LocallyConstant Y Z →+* LocallyConstant X Z where
   toMonoidHom := comapMonoidHom f hf
-  __ := (comapAddMonoidHom f hf)
+  __ := comapAddMonoidHom f hf
 
 /-- `LocallyConstant.comap` as an `AlgHom` -/
 @[simps!]
chore(Topology): remove autoImplicit from most remaining files (#9865)
Diff
@@ -17,8 +17,6 @@ on the type of locally constant functions.
 
 -/
 
-set_option autoImplicit true
-
 namespace LocallyConstant
 
 variable {X Y : Type*} [TopologicalSpace X]
@@ -153,6 +151,8 @@ instance [SemigroupWithZero Y] : SemigroupWithZero (LocallyConstant X Y) :=
 instance [CommSemigroup Y] : CommSemigroup (LocallyConstant X Y) :=
   Function.Injective.commSemigroup DFunLike.coe DFunLike.coe_injective' fun _ _ => rfl
 
+variable {α R : Type*}
+
 @[to_additive]
 instance smul [SMul α Y] : SMul α (LocallyConstant X Y) where
   smul n f := f.map (n • ·)
@@ -341,7 +341,7 @@ end Eval
 
 section Comap
 
-variable [TopologicalSpace Y]
+variable [TopologicalSpace Y] {Z : Type*}
 
 /-- `LocallyConstant.comap` as a `MulHom`. -/
 @[to_additive (attr := simps) "`LocallyConstant.comap` as an `AddHom`."]
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
@@ -71,12 +71,12 @@ theorem mul_apply [Mul Y] (f g : LocallyConstant X Y) (x : X) : (f * g) x = f x
 
 @[to_additive]
 instance [MulOneClass Y] : MulOneClass (LocallyConstant X Y) :=
-  Function.Injective.mulOneClass FunLike.coe FunLike.coe_injective' rfl fun _ _ => rfl
+  Function.Injective.mulOneClass DFunLike.coe DFunLike.coe_injective' rfl fun _ _ => rfl
 
-/-- `FunLike.coe` as a `MonoidHom`. -/
-@[to_additive (attr := simps) "`FunLike.coe` as an `AddMonoidHom`."]
+/-- `DFunLike.coe` as a `MonoidHom`. -/
+@[to_additive (attr := simps) "`DFunLike.coe` as an `AddMonoidHom`."]
 def coeFnMonoidHom [MulOneClass Y] : LocallyConstant X Y →* X → Y where
-  toFun := FunLike.coe
+  toFun := DFunLike.coe
   map_one' := rfl
   map_mul' _ _ := rfl
 #align locally_constant.coe_fn_monoid_hom LocallyConstant.coeFnMonoidHom
@@ -92,10 +92,10 @@ def constMonoidHom [MulOneClass Y] : Y →* LocallyConstant X Y where
 #align locally_constant.const_add_monoid_hom LocallyConstant.constAddMonoidHom
 
 instance [MulZeroClass Y] : MulZeroClass (LocallyConstant X Y) :=
-  Function.Injective.mulZeroClass FunLike.coe FunLike.coe_injective' rfl fun _ _ => rfl
+  Function.Injective.mulZeroClass DFunLike.coe DFunLike.coe_injective' rfl fun _ _ => rfl
 
 instance [MulZeroOneClass Y] : MulZeroOneClass (LocallyConstant X Y) :=
-  Function.Injective.mulZeroOneClass FunLike.coe FunLike.coe_injective' rfl rfl fun _ _ => rfl
+  Function.Injective.mulZeroOneClass DFunLike.coe DFunLike.coe_injective' rfl rfl fun _ _ => rfl
 
 section CharFn
 
@@ -144,14 +144,14 @@ theorem div_apply [Div Y] (f g : LocallyConstant X Y) (x : X) : (f / g) x = f x
 
 @[to_additive]
 instance [Semigroup Y] : Semigroup (LocallyConstant X Y) :=
-  Function.Injective.semigroup FunLike.coe FunLike.coe_injective' fun _ _ => rfl
+  Function.Injective.semigroup DFunLike.coe DFunLike.coe_injective' fun _ _ => rfl
 
 instance [SemigroupWithZero Y] : SemigroupWithZero (LocallyConstant X Y) :=
-  Function.Injective.semigroupWithZero FunLike.coe FunLike.coe_injective' rfl fun _ _ => rfl
+  Function.Injective.semigroupWithZero DFunLike.coe DFunLike.coe_injective' rfl fun _ _ => rfl
 
 @[to_additive]
 instance [CommSemigroup Y] : CommSemigroup (LocallyConstant X Y) :=
-  Function.Injective.commSemigroup FunLike.coe FunLike.coe_injective' fun _ _ => rfl
+  Function.Injective.commSemigroup DFunLike.coe DFunLike.coe_injective' fun _ _ => rfl
 
 @[to_additive]
 instance smul [SMul α Y] : SMul α (LocallyConstant X Y) where
@@ -173,7 +173,7 @@ instance [Pow Y α] : Pow (LocallyConstant X Y) α where
 
 @[to_additive]
 instance [Monoid Y] : Monoid (LocallyConstant X Y) :=
-  Function.Injective.monoid FunLike.coe FunLike.coe_injective' rfl (fun _ _ => rfl) fun _ _ => rfl
+  Function.Injective.monoid DFunLike.coe DFunLike.coe_injective' rfl (fun _ _ => rfl) fun _ _ => rfl
 
 instance [NatCast Y] : NatCast (LocallyConstant X Y) where
   natCast n := const X n
@@ -182,37 +182,37 @@ instance [IntCast Y] : IntCast (LocallyConstant X Y) where
   intCast n := const X n
 
 instance [AddMonoidWithOne Y] : AddMonoidWithOne (LocallyConstant X Y) :=
-  Function.Injective.addMonoidWithOne FunLike.coe FunLike.coe_injective' rfl rfl (fun _ _ => rfl)
+  Function.Injective.addMonoidWithOne DFunLike.coe DFunLike.coe_injective' rfl rfl (fun _ _ => rfl)
     (fun _ _ => rfl) fun _ => rfl
 
 @[to_additive]
 instance [CommMonoid Y] : CommMonoid (LocallyConstant X Y) :=
-  Function.Injective.commMonoid FunLike.coe FunLike.coe_injective' rfl (fun _ _ => rfl)
+  Function.Injective.commMonoid DFunLike.coe DFunLike.coe_injective' rfl (fun _ _ => rfl)
     fun _ _ => rfl
 
 @[to_additive]
 instance [Group Y] : Group (LocallyConstant X Y) :=
-  Function.Injective.group FunLike.coe FunLike.coe_injective' rfl (fun _ _ => rfl)
+  Function.Injective.group DFunLike.coe DFunLike.coe_injective' rfl (fun _ _ => rfl)
     (fun _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
 
 @[to_additive]
 instance [CommGroup Y] : CommGroup (LocallyConstant X Y) :=
-  Function.Injective.commGroup FunLike.coe FunLike.coe_injective' rfl (fun _ _ => rfl)
+  Function.Injective.commGroup DFunLike.coe DFunLike.coe_injective' rfl (fun _ _ => rfl)
     (fun _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
 
 instance [Distrib Y] : Distrib (LocallyConstant X Y) :=
-  Function.Injective.distrib FunLike.coe FunLike.coe_injective' (fun _ _ => rfl) fun _ _ => rfl
+  Function.Injective.distrib DFunLike.coe DFunLike.coe_injective' (fun _ _ => rfl) fun _ _ => rfl
 
 instance [NonUnitalNonAssocSemiring Y] : NonUnitalNonAssocSemiring (LocallyConstant X Y) :=
-  Function.Injective.nonUnitalNonAssocSemiring FunLike.coe FunLike.coe_injective' rfl
+  Function.Injective.nonUnitalNonAssocSemiring DFunLike.coe DFunLike.coe_injective' rfl
     (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
 
 instance [NonUnitalSemiring Y] : NonUnitalSemiring (LocallyConstant X Y) :=
-  Function.Injective.nonUnitalSemiring FunLike.coe FunLike.coe_injective' rfl
+  Function.Injective.nonUnitalSemiring DFunLike.coe DFunLike.coe_injective' rfl
     (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
 
 instance [NonAssocSemiring Y] : NonAssocSemiring (LocallyConstant X Y) :=
-  Function.Injective.nonAssocSemiring FunLike.coe FunLike.coe_injective' rfl rfl
+  Function.Injective.nonAssocSemiring DFunLike.coe DFunLike.coe_injective' rfl rfl
     (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) fun _ => rfl
 
 /-- The constant-function embedding, as a ring hom.  -/
@@ -222,41 +222,41 @@ def constRingHom [NonAssocSemiring Y] : Y →+* LocallyConstant X Y :=
 #align locally_constant.const_ring_hom LocallyConstant.constRingHom
 
 instance [Semiring Y] : Semiring (LocallyConstant X Y) :=
-  Function.Injective.semiring FunLike.coe FunLike.coe_injective' rfl rfl
+  Function.Injective.semiring DFunLike.coe DFunLike.coe_injective' rfl rfl
     (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) fun _ => rfl
 
 instance [NonUnitalCommSemiring Y] : NonUnitalCommSemiring (LocallyConstant X Y) :=
-  Function.Injective.nonUnitalCommSemiring FunLike.coe FunLike.coe_injective' rfl
+  Function.Injective.nonUnitalCommSemiring DFunLike.coe DFunLike.coe_injective' rfl
     (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
 
 instance [CommSemiring Y] : CommSemiring (LocallyConstant X Y) :=
-  Function.Injective.commSemiring FunLike.coe FunLike.coe_injective' rfl rfl
+  Function.Injective.commSemiring DFunLike.coe DFunLike.coe_injective' rfl rfl
     (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) fun _ => rfl
 
 instance [NonUnitalNonAssocRing Y] : NonUnitalNonAssocRing (LocallyConstant X Y) :=
-  Function.Injective.nonUnitalNonAssocRing FunLike.coe FunLike.coe_injective' rfl (fun _ _ => rfl)
+  Function.Injective.nonUnitalNonAssocRing DFunLike.coe DFunLike.coe_injective' rfl (fun _ _ => rfl)
     (fun _ _ => rfl) (fun _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
 
 instance [NonUnitalRing Y] : NonUnitalRing (LocallyConstant X Y) :=
-  Function.Injective.nonUnitalRing FunLike.coe FunLike.coe_injective' rfl (fun _ _ => rfl)
+  Function.Injective.nonUnitalRing DFunLike.coe DFunLike.coe_injective' rfl (fun _ _ => rfl)
     (fun _ _ => rfl) (fun _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
 
 instance [NonAssocRing Y] : NonAssocRing (LocallyConstant X Y) :=
-  Function.Injective.nonAssocRing FunLike.coe FunLike.coe_injective' rfl rfl (fun _ _ => rfl)
+  Function.Injective.nonAssocRing DFunLike.coe DFunLike.coe_injective' rfl rfl (fun _ _ => rfl)
     (fun _ _ => rfl) (fun _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
     (fun _ => rfl) (fun _ => rfl)
 
 instance [Ring Y] : Ring (LocallyConstant X Y) :=
-  Function.Injective.ring FunLike.coe FunLike.coe_injective' rfl rfl (fun _ _ => rfl)
+  Function.Injective.ring DFunLike.coe DFunLike.coe_injective' rfl rfl (fun _ _ => rfl)
     (fun _ _ => rfl) (fun _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
     (fun _ _ => rfl) (fun _ => rfl) fun _ => rfl
 
 instance [NonUnitalCommRing Y] : NonUnitalCommRing (LocallyConstant X Y) :=
-  Function.Injective.nonUnitalCommRing FunLike.coe FunLike.coe_injective' rfl (fun _ _ => rfl)
+  Function.Injective.nonUnitalCommRing DFunLike.coe DFunLike.coe_injective' rfl (fun _ _ => rfl)
     (fun _ _ => rfl) (fun _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
 
 instance [CommRing Y] : CommRing (LocallyConstant X Y) :=
-  Function.Injective.commRing FunLike.coe FunLike.coe_injective' rfl rfl (fun _ _ => rfl)
+  Function.Injective.commRing DFunLike.coe DFunLike.coe_injective' rfl rfl (fun _ _ => rfl)
     (fun _ _ => rfl) (fun _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
     (fun _ _ => rfl) (fun _ => rfl) fun _ => rfl
 
@@ -296,18 +296,18 @@ end Algebra
 
 section coeFn
 
-/-- `FunLike.coe` as a `RingHom`. -/
+/-- `DFunLike.coe` as a `RingHom`. -/
 @[simps!] def coeFnRingHom [Semiring Y] : LocallyConstant X Y →+* X → Y where
   toMonoidHom := coeFnMonoidHom
   __ := coeFnAddMonoidHom
 
-/-- `FunLike.coe` as a linear map. -/
+/-- `DFunLike.coe` as a linear map. -/
 @[simps!] def coeFnₗ (R : Type*) [Semiring R] [AddCommMonoid Y]
     [Module R Y] : LocallyConstant X Y →ₗ[R] X → Y where
   toAddHom := coeFnAddMonoidHom.toAddHom
   map_smul' _ _ := rfl
 
-/-- `FunLike.coe` as an `AlgHom`. -/
+/-- `DFunLike.coe` as an `AlgHom`. -/
 @[simps!] def coeFnAlgHom (R : Type*) [CommSemiring R] [Semiring Y] [Algebra R Y] :
     LocallyConstant X Y →ₐ[R] X → Y where
   toRingHom := coeFnRingHom
style: add missing spaces around colons (#8293)

This is not exhaustive

Diff
@@ -380,7 +380,7 @@ def comapRingHom [Semiring Z] (f : X → Y) (hf : Continuous f) :
 /-- `LocallyConstant.comap` as an `AlgHom` -/
 @[simps!]
 noncomputable
-def comapₐ (R: Type*) [CommSemiring R] [Semiring Z] [Algebra R Z]
+def comapₐ (R : Type*) [CommSemiring R] [Semiring Z] [Algebra R Z]
     (f : X → Y) (hf : Continuous f) : LocallyConstant Y Z →ₐ[R] LocallyConstant X Z where
   toRingHom := comapRingHom f hf
   commutes' r := by ext x; simp [hf]
@@ -401,7 +401,7 @@ def congrLeftMulEquiv [Mul Z] (e : X ≃ₜ Y) :
 /-- `LocallyConstant.congrLeft` as a linear equivalence. -/
 @[simps!]
 noncomputable
-def congrLeftₗ (R: Type*) [Semiring R] [AddCommMonoid Z] [Module R Z] (e : X ≃ₜ Y) :
+def congrLeftₗ (R : Type*) [Semiring R] [AddCommMonoid Z] [Module R Z] (e : X ≃ₜ Y) :
     LocallyConstant X Z ≃ₗ[R] LocallyConstant Y Z where
   toLinearMap := comapₗ R _ e.symm.continuous
   __ := congrLeft e
@@ -418,7 +418,7 @@ def congrLeftRingEquiv [Semiring Z] (e : X ≃ₜ Y) :
 /-- `LocallyConstant.congrLeft` as an `AlgEquiv`. -/
 @[simps!]
 noncomputable
-def congrLeftₐ (R: Type*) [CommSemiring R] [Semiring Z] [Algebra R Z] (e : X ≃ₜ Y) :
+def congrLeftₐ (R : Type*) [CommSemiring R] [Semiring Z] [Algebra R Z] (e : X ≃ₜ Y) :
     LocallyConstant X Z ≃ₐ[R] LocallyConstant Y Z where
   toEquiv := congrLeft e
   __ := comapₐ R _ e.symm.continuous
feat: algebraic maps in LocallyConstant (#6520)

We define more algebraic versions of LocallyConstant.comap and evaluation of locally constant maps, continuing the work of #6396.

Diff
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
 -/
 import Mathlib.Algebra.Algebra.Pi
+import Mathlib.LinearAlgebra.Pi
 import Mathlib.Topology.LocallyConstant.Basic
 
 #align_import topology.locally_constant.algebra from "leanprover-community/mathlib"@"bcfa726826abd57587355b4b5b7e78ad6527b7e4"
@@ -72,8 +73,8 @@ theorem mul_apply [Mul Y] (f g : LocallyConstant X Y) (x : X) : (f * g) x = f x
 instance [MulOneClass Y] : MulOneClass (LocallyConstant X Y) :=
   Function.Injective.mulOneClass FunLike.coe FunLike.coe_injective' rfl fun _ _ => rfl
 
-/-- `FunLike.coe` is a `MonoidHom`. -/
-@[to_additive (attr := simps) "`FunLike.coe` is an `AddMonoidHom`."]
+/-- `FunLike.coe` as a `MonoidHom`. -/
+@[to_additive (attr := simps) "`FunLike.coe` as an `AddMonoidHom`."]
 def coeFnMonoidHom [MulOneClass Y] : LocallyConstant X Y →* X → Y where
   toFun := FunLike.coe
   map_one' := rfl
@@ -293,48 +294,134 @@ theorem coe_algebraMap (r : R) : ⇑(algebraMap R (LocallyConstant X Y) r) = alg
 
 end Algebra
 
+section coeFn
+
+/-- `FunLike.coe` as a `RingHom`. -/
+@[simps!] def coeFnRingHom [Semiring Y] : LocallyConstant X Y →+* X → Y where
+  toMonoidHom := coeFnMonoidHom
+  __ := coeFnAddMonoidHom
+
+/-- `FunLike.coe` as a linear map. -/
+@[simps!] def coeFnₗ (R : Type*) [Semiring R] [AddCommMonoid Y]
+    [Module R Y] : LocallyConstant X Y →ₗ[R] X → Y where
+  toAddHom := coeFnAddMonoidHom.toAddHom
+  map_smul' _ _ := rfl
+
+/-- `FunLike.coe` as an `AlgHom`. -/
+@[simps!] def coeFnAlgHom (R : Type*) [CommSemiring R] [Semiring Y] [Algebra R Y] :
+    LocallyConstant X Y →ₐ[R] X → Y where
+  toRingHom := coeFnRingHom
+  commutes' _ := rfl
+
+end coeFn
+
+section Eval
+
+/-- Evaluation as a `MonoidHom` -/
+@[to_additive (attr := simps!) "Evaluation as an `AddMonoidHom`"]
+def evalMonoidHom [MulOneClass Y] (x : X) : LocallyConstant X Y →* Y :=
+  (Pi.evalMonoidHom _ x).comp coeFnMonoidHom
+
+/-- Evaluation as a linear map -/
+@[simps!] def evalₗ (R : Type*) [Semiring R] [AddCommMonoid Y]
+    [Module R Y] (x : X) : LocallyConstant X Y →ₗ[R] Y :=
+  (LinearMap.proj x).comp (coeFnₗ R)
+
+/-- Evaluation as a `RingHom` -/
+@[simps!] def evalRingHom [Semiring Y] (x : X) : LocallyConstant X Y →+* Y :=
+  (Pi.evalRingHom _ x).comp coeFnRingHom
+
+/-- Evaluation as an `AlgHom` -/
+@[simps!]
+def evalₐ (R : Type*) [CommSemiring R] [Semiring Y] [Algebra R Y] (x : X) :
+    LocallyConstant X Y →ₐ[R] Y :=
+  (Pi.evalAlgHom _ _ x).comp (coeFnAlgHom R)
+
+end Eval
+
 section Comap
 
 variable [TopologicalSpace Y]
 
-/-- `LocallyConstant.comap` is a `MonoidHom`. -/
-@[to_additive "`LocallyConstant.comap` is an `AddMonoidHom`."]
+/-- `LocallyConstant.comap` as a `MulHom`. -/
+@[to_additive (attr := simps) "`LocallyConstant.comap` as an `AddHom`."]
+noncomputable
+def comapMulHom [Mul Z] (f : X → Y) (hf : Continuous f) :
+    LocallyConstant Y Z →ₙ* LocallyConstant X Z where
+  toFun := comap f
+  map_mul' r s := by ext x; simp [hf]
+
+/-- `LocallyConstant.comap` as a `MonoidHom`. -/
+@[to_additive (attr := simps) "`LocallyConstant.comap` as an `AddMonoidHom`."]
 noncomputable
 def comapMonoidHom [MulOneClass Z] (f : X → Y) (hf : Continuous f) :
     LocallyConstant Y Z →* LocallyConstant X Z where
   toFun := comap f
-  map_one' := by
-    ext x
-    simp only [hf, coe_comap, coe_one, Function.comp_apply, Pi.one_apply]
-  map_mul' r s := by
-    ext x
-    simp only [hf, coe_comap, coe_mul, Function.comp_apply, Pi.mul_apply]
-
-/-- `LocallyConstant.comap` is a linear map. -/
+  map_one' := by ext x; simp [hf]
+  map_mul' := map_mul (comapMulHom f hf)
+
+/-- `LocallyConstant.comap` as a linear map. -/
+@[simps!]
 noncomputable
-def comapₗ {R : Type*} [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
+def comapₗ (R : Type*) [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
     (hf : Continuous f) : LocallyConstant Y Z →ₗ[R] LocallyConstant X Z where
   toFun := comap f
-  map_add' := (comapAddMonoidHom f hf).map_add'
-  map_smul' r s := by
-    ext x
-    simp only [hf, coe_comap, coe_smul, Function.comp_apply, Pi.smul_apply, RingHom.id_apply]
+  map_add' := map_add (comapAddMonoidHom f hf)
+  map_smul' r s := by ext x; simp [hf]
+
+/-- `LocallyConstant.comap` as a `RingHom`. -/
+@[simps!]
+noncomputable
+def comapRingHom [Semiring Z] (f : X → Y) (hf : Continuous f) :
+    LocallyConstant Y Z →+* LocallyConstant X Z where
+  toMonoidHom := comapMonoidHom f hf
+  __ := (comapAddMonoidHom f hf)
+
+/-- `LocallyConstant.comap` as an `AlgHom` -/
+@[simps!]
+noncomputable
+def comapₐ (R: Type*) [CommSemiring R] [Semiring Z] [Algebra R Z]
+    (f : X → Y) (hf : Continuous f) : LocallyConstant Y Z →ₐ[R] LocallyConstant X Z where
+  toRingHom := comapRingHom f hf
+  commutes' r := by ext x; simp [hf]
 
-lemma ker_comapₗ {R : Type*} [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
+lemma ker_comapₗ [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
     (hf : Continuous f) (hfs : Function.Surjective f) :
-    LinearMap.ker (comapₗ f hf : LocallyConstant Y Z →ₗ[R] LocallyConstant X Z) = ⊥ :=
+    LinearMap.ker (comapₗ R f hf : LocallyConstant Y Z →ₗ[R] LocallyConstant X Z) = ⊥ :=
   LinearMap.ker_eq_bot_of_injective <| comap_injective _ hf hfs
 
-/-- `LocallyConstant.congrLeft` is a linear equivalence. -/
+/-- `LocallyConstant.congrLeft` as a `MulEquiv`. -/
+@[to_additive (attr := simps!) "`LocallyConstant.congrLeft` as an `AddEquiv`."]
+noncomputable
+def congrLeftMulEquiv [Mul Z] (e : X ≃ₜ Y) :
+    LocallyConstant X Z ≃* LocallyConstant Y Z where
+  toEquiv := congrLeft e
+  map_mul' := map_mul (comapMulHom _ e.symm.continuous)
+
+/-- `LocallyConstant.congrLeft` as a linear equivalence. -/
+@[simps!]
 noncomputable
-def congrLeftₗ {R : Type*} [Semiring R] [AddCommMonoid Z] [Module R Z] (e : X ≃ₜ Y) :
+def congrLeftₗ (R: Type*) [Semiring R] [AddCommMonoid Z] [Module R Z] (e : X ≃ₜ Y) :
     LocallyConstant X Z ≃ₗ[R] LocallyConstant Y Z where
-  toFun := (congrLeft e).toFun
-  map_smul' := (comapₗ _ e.continuous_invFun).map_smul'
-  map_add' := (comapAddMonoidHom _ e.continuous_invFun).map_add'
-  invFun := (congrLeft e).invFun
-  left_inv := (congrLeft e).left_inv
-  right_inv := (congrLeft e).right_inv
+  toLinearMap := comapₗ R _ e.symm.continuous
+  __ := congrLeft e
+
+/-- `LocallyConstant.congrLeft` as a `RingEquiv`. -/
+@[simps!]
+noncomputable
+def congrLeftRingEquiv [Semiring Z] (e : X ≃ₜ Y) :
+    LocallyConstant X Z ≃+* LocallyConstant Y Z where
+  toEquiv := congrLeft e
+  __ := comapMonoidHom _ e.symm.continuous
+  __ := comapAddMonoidHom _ e.symm.continuous
+
+/-- `LocallyConstant.congrLeft` as an `AlgEquiv`. -/
+@[simps!]
+noncomputable
+def congrLeftₐ (R: Type*) [CommSemiring R] [Semiring Z] [Algebra R Z] (e : X ≃ₜ Y) :
+    LocallyConstant X Z ≃ₐ[R] LocallyConstant Y Z where
+  toEquiv := congrLeft e
+  __ := comapₐ R _ e.symm.continuous
 
 end Comap
 
fix: disable autoImplicit globally (#6528)

Autoimplicits are highly controversial and also defeat the performance-improving work in #6474.

The intent of this PR is to make autoImplicit opt-in on a per-file basis, by disabling it in the lakefile and enabling it again with set_option autoImplicit true in the few files that rely on it.

That also keeps this PR small, as opposed to attempting to "fix" files to not need it any more.

I claim that many of the uses of autoImplicit in these files are accidental; situations such as:

  • Assuming variables are in scope, but pasting the lemma in the wrong section
  • Pasting in a lemma from a scratch file without checking to see if the variable names are consistent with the rest of the file
  • Making a copy-paste error between lemmas and forgetting to add an explicit arguments.

Having set_option autoImplicit false as the default prevents these types of mistake being made in the 90% of files where autoImplicits are not used at all, and causes them to be caught by CI during review.

I think there were various points during the port where we encouraged porters to delete the universes u v lines; I think having autoparams for universe variables only would cover a lot of the cases we actually use them, while avoiding any real shortcomings.

A Zulip poll (after combining overlapping votes accordingly) was in favor of this change with 5:5:18 as the no:dontcare:yes vote ratio.

While this PR was being reviewed, a handful of files gained some more likely-accidental autoImplicits. In these places, set_option autoImplicit true has been placed locally within a section, rather than at the top of the file.

Diff
@@ -16,6 +16,8 @@ on the type of locally constant functions.
 
 -/
 
+set_option autoImplicit true
+
 namespace LocallyConstant
 
 variable {X Y : Type*} [TopologicalSpace X]
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -18,7 +18,7 @@ on the type of locally constant functions.
 
 namespace LocallyConstant
 
-variable {X Y : Type _} [TopologicalSpace X]
+variable {X Y : Type*} [TopologicalSpace X]
 
 @[to_additive]
 instance [One Y] : One (LocallyConstant X Y) where one := const X 1
@@ -257,7 +257,7 @@ instance [CommRing Y] : CommRing (LocallyConstant X Y) :=
     (fun _ _ => rfl) (fun _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl) (fun _ _ => rfl)
     (fun _ _ => rfl) (fun _ => rfl) fun _ => rfl
 
-variable {R : Type _}
+variable {R : Type*}
 
 instance [Monoid R] [MulAction R Y] : MulAction R (LocallyConstant X Y) :=
   Function.Injective.mulAction _ coe_injective fun _ _ => rfl
@@ -310,7 +310,7 @@ def comapMonoidHom [MulOneClass Z] (f : X → Y) (hf : Continuous f) :
 
 /-- `LocallyConstant.comap` is a linear map. -/
 noncomputable
-def comapₗ {R : Type _} [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
+def comapₗ {R : Type*} [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
     (hf : Continuous f) : LocallyConstant Y Z →ₗ[R] LocallyConstant X Z where
   toFun := comap f
   map_add' := (comapAddMonoidHom f hf).map_add'
@@ -318,14 +318,14 @@ def comapₗ {R : Type _} [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X →
     ext x
     simp only [hf, coe_comap, coe_smul, Function.comp_apply, Pi.smul_apply, RingHom.id_apply]
 
-lemma ker_comapₗ {R : Type _} [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
+lemma ker_comapₗ {R : Type*} [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
     (hf : Continuous f) (hfs : Function.Surjective f) :
     LinearMap.ker (comapₗ f hf : LocallyConstant Y Z →ₗ[R] LocallyConstant X Z) = ⊥ :=
   LinearMap.ker_eq_bot_of_injective <| comap_injective _ hf hfs
 
 /-- `LocallyConstant.congrLeft` is a linear equivalence. -/
 noncomputable
-def congrLeftₗ {R : Type _} [Semiring R] [AddCommMonoid Z] [Module R Z] (e : X ≃ₜ Y) :
+def congrLeftₗ {R : Type*} [Semiring R] [AddCommMonoid Z] [Module R Z] (e : X ≃ₜ Y) :
     LocallyConstant X Z ≃ₗ[R] LocallyConstant Y Z where
   toFun := (congrLeft e).toFun
   map_smul' := (comapₗ _ e.continuous_invFun).map_smul'
feat: algebraic versions of LocallyConstant.comap (#6396)

We give algebraic versions of LocallyConstant.comap given the relevant algebraic structure on the target.

Diff
@@ -291,4 +291,49 @@ theorem coe_algebraMap (r : R) : ⇑(algebraMap R (LocallyConstant X Y) r) = alg
 
 end Algebra
 
+section Comap
+
+variable [TopologicalSpace Y]
+
+/-- `LocallyConstant.comap` is a `MonoidHom`. -/
+@[to_additive "`LocallyConstant.comap` is an `AddMonoidHom`."]
+noncomputable
+def comapMonoidHom [MulOneClass Z] (f : X → Y) (hf : Continuous f) :
+    LocallyConstant Y Z →* LocallyConstant X Z where
+  toFun := comap f
+  map_one' := by
+    ext x
+    simp only [hf, coe_comap, coe_one, Function.comp_apply, Pi.one_apply]
+  map_mul' r s := by
+    ext x
+    simp only [hf, coe_comap, coe_mul, Function.comp_apply, Pi.mul_apply]
+
+/-- `LocallyConstant.comap` is a linear map. -/
+noncomputable
+def comapₗ {R : Type _} [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
+    (hf : Continuous f) : LocallyConstant Y Z →ₗ[R] LocallyConstant X Z where
+  toFun := comap f
+  map_add' := (comapAddMonoidHom f hf).map_add'
+  map_smul' r s := by
+    ext x
+    simp only [hf, coe_comap, coe_smul, Function.comp_apply, Pi.smul_apply, RingHom.id_apply]
+
+lemma ker_comapₗ {R : Type _} [Semiring R] [AddCommMonoid Z] [Module R Z] (f : X → Y)
+    (hf : Continuous f) (hfs : Function.Surjective f) :
+    LinearMap.ker (comapₗ f hf : LocallyConstant Y Z →ₗ[R] LocallyConstant X Z) = ⊥ :=
+  LinearMap.ker_eq_bot_of_injective <| comap_injective _ hf hfs
+
+/-- `LocallyConstant.congrLeft` is a linear equivalence. -/
+noncomputable
+def congrLeftₗ {R : Type _} [Semiring R] [AddCommMonoid Z] [Module R Z] (e : X ≃ₜ Y) :
+    LocallyConstant X Z ≃ₗ[R] LocallyConstant Y Z where
+  toFun := (congrLeft e).toFun
+  map_smul' := (comapₗ _ e.continuous_invFun).map_smul'
+  map_add' := (comapAddMonoidHom _ e.continuous_invFun).map_add'
+  invFun := (congrLeft e).invFun
+  left_inv := (congrLeft e).left_inv
+  right_inv := (congrLeft e).right_inv
+
+end Comap
+
 end LocallyConstant
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) 2021 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
-
-! This file was ported from Lean 3 source module topology.locally_constant.algebra
-! leanprover-community/mathlib commit bcfa726826abd57587355b4b5b7e78ad6527b7e4
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.Algebra.Pi
 import Mathlib.Topology.LocallyConstant.Basic
 
+#align_import topology.locally_constant.algebra from "leanprover-community/mathlib"@"bcfa726826abd57587355b4b5b7e78ad6527b7e4"
+
 /-!
 # Algebraic structure on locally constant functions
 
chore: tidy various files (#2950)
Diff
@@ -54,8 +54,8 @@ theorem inv_apply [Inv Y] (f : LocallyConstant X Y) (x : X) : f⁻¹ x = (f x)
 #align locally_constant.neg_apply LocallyConstant.neg_apply
 
 @[to_additive]
-instance [Mul Y] : Mul (LocallyConstant X Y)
-    where mul f g := ⟨f * g, f.isLocallyConstant.mul g.isLocallyConstant⟩
+instance [Mul Y] : Mul (LocallyConstant X Y) where
+  mul f g := ⟨f * g, f.isLocallyConstant.mul g.isLocallyConstant⟩
 
 @[to_additive (attr := simp)]
 theorem coe_mul [Mul Y] (f g : LocallyConstant X Y) : ⇑(f * g) = f * g :=
@@ -73,8 +73,8 @@ theorem mul_apply [Mul Y] (f g : LocallyConstant X Y) (x : X) : (f * g) x = f x
 instance [MulOneClass Y] : MulOneClass (LocallyConstant X Y) :=
   Function.Injective.mulOneClass FunLike.coe FunLike.coe_injective' rfl fun _ _ => rfl
 
-/-- `coe_fn` is a `monoid_hom`. -/
-@[to_additive (attr := simps) "`coe_fn` is an `add_monoid_hom`."]
+/-- `FunLike.coe` is a `MonoidHom`. -/
+@[to_additive (attr := simps) "`FunLike.coe` is an `AddMonoidHom`."]
 def coeFnMonoidHom [MulOneClass Y] : LocallyConstant X Y →* X → Y where
   toFun := FunLike.coe
   map_one' := rfl
@@ -127,8 +127,8 @@ theorem charFn_inj [Nontrivial Y] (hU : IsClopen U) (hV : IsClopen V)
 end CharFn
 
 @[to_additive]
-instance [Div Y] : Div (LocallyConstant X Y)
-    where div f g := ⟨f / g, f.isLocallyConstant.div g.isLocallyConstant⟩
+instance [Div Y] : Div (LocallyConstant X Y) where
+  div f g := ⟨f / g, f.isLocallyConstant.div g.isLocallyConstant⟩
 
 @[to_additive]
 theorem coe_div [Div Y] (f g : LocallyConstant X Y) : ⇑(f / g) = f / g :=
@@ -154,7 +154,7 @@ instance [CommSemigroup Y] : CommSemigroup (LocallyConstant X Y) :=
   Function.Injective.commSemigroup FunLike.coe FunLike.coe_injective' fun _ _ => rfl
 
 @[to_additive]
-instance instSMulLocallyConstant [SMul α Y] : SMul α (LocallyConstant X Y) where
+instance smul [SMul α Y] : SMul α (LocallyConstant X Y) where
   smul n f := f.map (n • ·)
 
 @[to_additive (attr := simp)]
@@ -167,7 +167,7 @@ theorem smul_apply [SMul R Y] (r : R) (f : LocallyConstant X Y) (x : X) : (r •
   rfl
 #align locally_constant.smul_apply LocallyConstant.smul_apply
 
-@[to_additive existing instSMulLocallyConstant]
+@[to_additive existing LocallyConstant.smul]
 instance [Pow Y α] : Pow (LocallyConstant X Y) α where
   pow f n := f.map (· ^ n)
 
Feat: to_additive warns if simps is not applied to the additive version (#2908)
  • Note: the changes in the test file are unrelated, but that removes some linter warnings
Diff
@@ -74,7 +74,7 @@ instance [MulOneClass Y] : MulOneClass (LocallyConstant X Y) :=
   Function.Injective.mulOneClass FunLike.coe FunLike.coe_injective' rfl fun _ _ => rfl
 
 /-- `coe_fn` is a `monoid_hom`. -/
-@[to_additive "`coe_fn` is an `add_monoid_hom`.", simps]
+@[to_additive (attr := simps) "`coe_fn` is an `add_monoid_hom`."]
 def coeFnMonoidHom [MulOneClass Y] : LocallyConstant X Y →* X → Y where
   toFun := FunLike.coe
   map_one' := rfl
@@ -83,7 +83,7 @@ def coeFnMonoidHom [MulOneClass Y] : LocallyConstant X Y →* X → Y where
 #align locally_constant.coe_fn_add_monoid_hom LocallyConstant.coeFnAddMonoidHom
 
 /-- The constant-function embedding, as a multiplicative monoid hom. -/
-@[to_additive "The constant-function embedding, as an additive monoid hom.", simps]
+@[to_additive (attr := simps) "The constant-function embedding, as an additive monoid hom."]
 def constMonoidHom [MulOneClass Y] : Y →* LocallyConstant X Y where
   toFun := const X
   map_one' := rfl
feat: port Topology.LocallyConstant.Algebra (#2592)

Dependencies 9 + 400

401 files ported (97.8%)
173499 lines ported (97.2%)
Show graph

The unported dependencies are