/- Copyright (c) 2020 Anne Baanen. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Nathaniel Thomas, Jeremy Avigad, Johannes Hölzl, Mario Carneiro, Anne Baanen, Frédéric Dupuis, Heather Macbeth ! This file was ported from Lean 3 source module algebra.module.linear_map ! leanprover-community/mathlib commit cc8e88c7c8c7bc80f91f84d11adb584bf9bd658f ! Please do not edit these lines, except to modify the commit id ! if you have ported upstream changes. -/ import Mathlib.Algebra.Hom.GroupAction import Mathlib.Algebra.Module.Pi import Mathlib.Algebra.Star.Basic import Mathlib.Data.Set.Pointwise.SMul import Mathlib.Algebra.Ring.CompTypeclasses /-! # (Semi)linear maps In this file we define * `LinearMap σ M M₂`, `M →ₛₗ[σ] M₂` : a semilinear map between two `Module`s. Here, `σ` is a `RingHom` from `R` to `R₂` and an `f : M →ₛₗ[σ] M₂` satisfies `f (c • x) = (σ c) • (f x)`. We recover plain linear maps by choosing `σ` to be `RingHom.id R`. This is denoted by `M →ₗ[R] M₂`. We also add the notation `M →ₗ⋆[R] M₂` for star-linear maps. * `IsLinearMap R f` : predicate saying that `f : M → M₂` is a linear map. (Note that this was not generalized to semilinear maps.) We then provide `LinearMap` with the following instances: * `LinearMap.addCommMonoid` and `LinearMap.AddCommGroup`: the elementwise addition structures corresponding to addition in the codomain * `LinearMap.distribMulAction` and `LinearMap.module`: the elementwise scalar action structures corresponding to applying the action in the codomain. * `Module.End.semiring` and `Module.End.ring`: the (semi)ring of endomorphisms formed by taking the additive structure above with composition as multiplication. ## Implementation notes To ensure that composition works smoothly for semilinear maps, we use the typeclasses `RingHomCompTriple`, `RingHomInvPair` and `RingHomSurjective` from `Mathlib.Algebra.Ring.CompTypeclasses`. ## Notation * Throughout the file, we denote regular linear maps by `fₗ`, `gₗ`, etc, and semilinear maps by `f`, `g`, etc. ## TODO * Parts of this file have not yet been generalized to semilinear maps (i.e. `CompatibleSMul`) ## Tags linear map -/ assert_not_exists Submonoid assert_not_exists Finset open Function universe u u' v w x y z variable {R :R: Type ?u.263916Type _} {Type _: Type (?u.264788+1)R₁ :R₁: Type ?u.17Type _} {Type _: Type (?u.205902+1)R₂ :R₂: Type ?u.20Type _} {Type _: Type (?u.266336+1)R₃ :R₃: Type ?u.23Type _} variable {Type _: Type (?u.263925+1)k :k: Type ?u.26Type _} {Type _: Type (?u.733631+1)S :S: Type ?u.263931Type _} {Type _: Type (?u.708857+1)S₃ :S₃: Type ?u.266348Type _} {Type _: Type (?u.251139+1)T :T: Type ?u.264809Type _} variable {Type _: Type (?u.248973+1)M :M: Type ?u.62Type _} {Type _: Type (?u.719274+1)M₁ :M₁: Type ?u.65Type _} {Type _: Type (?u.263943+1)M₂ :M₂: Type ?u.266360Type _} {Type _: Type (?u.526709+1)M₃ :M₃: Type ?u.107Type _} variable {Type _: Type (?u.264821+1)N₁ :N₁: Type ?u.413026Type _} {Type _: Type (?u.423584+1)N₂ :N₂: Type ?u.3585Type _} {Type _: Type (?u.423587+1)N₃ :N₃: Type ?u.3588Type _} {Type _: Type (?u.684264+1)ι :ι: Type ?u.246833Type _} /-- A map `f` between modules over a semiring is linear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = c • f x`. The predicate `IsLinearMap R f` asserts this property. A bundled version is available with `LinearMap`, and should be favored over `IsLinearMap` most of the time. -/ structureType _: Type (?u.16195+1)IsLinearMap (IsLinearMap: (R : Type u) → {M : Type v} → {M₂ : Type w} → [inst : Semiring R] → [inst_1 : AddCommMonoid M] → [inst_2 : AddCommMonoid M₂] → [inst_3 : Module R M] → [inst : Module R M₂] → (M → M₂) → PropR :R: Type uType u) {Type u: Type (u+1)M :M: Type vType v} {Type v: Type (v+1)M₂ :M₂: Type wType w} [SemiringType w: Type (w+1)R] [AddCommMonoidR: Type uM] [AddCommMonoidM: Type vM₂] [M₂: Type wModuleModule: (R : Type ?u.186) → (M : Type ?u.185) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.186?u.185)RR: Type uM] [M: Type vModuleModule: (R : Type ?u.212) → (M : Type ?u.211) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.212?u.211)RR: Type uM₂] (M₂: Type wf :f: M → M₂M →M: Type vM₂) :M₂: Type wProp where /-- A linear map preserves addition. -/Prop: Typemap_add : ∀map_add: ∀ {R : Type u} {M : Type v} {M₂ : Type w} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : AddCommMonoid M₂] [inst_3 : Module R M] [inst_4 : Module R M₂] {f : M → M₂}, IsLinearMap R f → ∀ (x y : M), f (x + y) = f x + f yxx: ?m.241y,y: ?m.244f (f: M → M₂x +x: ?m.241y) =y: ?m.244ff: M → M₂x +x: ?m.241ff: M → M₂y /-- A linear map preserves scalar multiplication. -/y: ?m.244map_smul : ∀ (map_smul: ∀ {R : Type u} {M : Type v} {M₂ : Type w} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : AddCommMonoid M₂] [inst_3 : Module R M] [inst_4 : Module R M₂] {f : M → M₂}, IsLinearMap R f → ∀ (c : R) (x : M), f (c • x) = c • f xc :c: RR) (R: Type ux),x: ?m.1916f (f: M → M₂c •c: Rx) =x: ?m.1916c •c: Rff: M → M₂x #align is_linear_mapx: ?m.1916IsLinearMap section /-- A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time. -/ structureIsLinearMap: (R : Type u) → {M : Type v} → {M₂ : Type w} → [inst : Semiring R] → [inst_1 : AddCommMonoid M] → [inst_2 : AddCommMonoid M₂] → [inst_3 : Module R M] → [inst : Module R M₂] → (M → M₂) → PropLinearMap {LinearMap: {R : Type u_1} → {S : Type u_2} → [inst : Semiring R] → [inst_1 : Semiring S] → {σ : R →+* S} → {M : Type u_3} → {M₂ : Type u_4} → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst_4 : Module R M] → [inst_5 : Module S M₂] → (toAddHom : AddHom M M₂) → (∀ (r : R) (x : M), AddHom.toFun toAddHom (r • x) = ↑σ r • AddHom.toFun toAddHom x) → LinearMap σ M M₂R :R: Type ?u.3642Type _} {Type _: Type (?u.3642+1)S :S: Type ?u.3645Type _} [SemiringType _: Type (?u.3645+1)R] [SemiringR: Type ?u.3642S] (S: Type ?u.3645σ :σ: R →+* SR →+*R: Type ?u.3642S) (S: Type ?u.3645M :M: Type ?u.3692Type _) (Type _: Type (?u.3692+1)M₂ :M₂: Type ?u.3695Type _) [AddCommMonoidType _: Type (?u.3695+1)M] [AddCommMonoidM: Type ?u.3692M₂] [M₂: Type ?u.3695ModuleModule: (R : Type ?u.3705) → (M : Type ?u.3704) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.3705?u.3704)RR: Type ?u.3642M] [M: Type ?u.3692ModuleModule: (R : Type ?u.3729) → (M : Type ?u.3728) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.3729?u.3728)SS: Type ?u.3645M₂] extends AddHomM₂: Type ?u.3695MM: Type ?u.3692M₂ where /-- A linear map preserves scalar multiplication. We prefer the spelling `_root_.map_smul` instead. -/M₂: Type ?u.3695map_smul' : ∀ (map_smul': ∀ {R : Type u_1} {S : Type u_2} [inst : Semiring R] [inst_1 : Semiring S] {σ : R →+* S} {M : Type u_3} {M₂ : Type u_4} [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₂] [inst_4 : Module R M] [inst_5 : Module S M₂] (self : LinearMap σ M M₂) (r : R) (x : M), AddHom.toFun self.toAddHom (r • x) = ↑σ r • AddHom.toFun self.toAddHom xr :r: RR) (R: Type ?u.3642x :x: MM),M: Type ?u.3692toFun (toFun: M → M₂r •r: Rx) =x: Mσσ: R →+* Sr •r: RtoFuntoFun: M → M₂x #align linear_map LinearMap /-- The `AddHom` underlying a `LinearMap`. -/ add_decl_doc LinearMap.toAddHom #align linear_map.to_add_hom LinearMap.toAddHom -- mathport name: «expr →ₛₗ[ ] » /-- `M →ₛₗ[σ] N` is the type of `σ`-semilinear maps from `M` to `N`. -/ notation:25x: MM " →ₛₗ["M: ?m.10079σ:25 "] "σ: ?m.10086M₂:0 => LinearMapM₂: ?m.10070σσ: ?m.10828MM: ?m.10821M₂ /-- `M →ₗ[R] N` is the type of `R`-linear maps from `M` to `N`. -/ -- mathport name: «expr →ₗ[ ] » notation:25M₂: ?m.10070M " →ₗ["M: ?m.18954R:25 "] "R: ?m.18961M₂:0 => LinearMap (M₂: ?m.16408RingHom.idRingHom.id: (α : Type u_1) → [inst : NonAssocSemiring α] → α →+* αR)R: ?m.16417MM: ?m.20126M₂ /-- `M →ₗ⋆[R] N` is the type of `R`-conjugate-linear maps from `M` to `N`. -/ -- mathport name: «expr →ₗ⋆[ ] » notation:25M₂: ?m.20803M " →ₗ⋆["M: ?m.34342R:25 "] "R: ?m.34349M₂:0 => LinearMap (M₂: ?m.34333starRingEndstarRingEnd: (R : Type u) → [inst : CommSemiring R] → [inst_1 : StarRing R] → R →+* RR)R: ?m.31843MM: ?m.36198M₂ /-- `SemilinearMapClass F σ M M₂` asserts `F` is a type of bundled `σ`-semilinear maps `M → M₂`. See also `LinearMapClass F R M M₂` for the case where `σ` is the identity map on `R`. A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. -/ classM₂: ?m.36191SemilinearMapClass (SemilinearMapClass: {F : Type u_1} → {R : outParam (Type u_2)} → {S : outParam (Type u_3)} → [inst : Semiring R] → [inst_1 : Semiring S] → {σ : outParam (R →+* S)} → {M : outParam (Type u_4)} → {M₂ : outParam (Type u_5)} → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst_4 : Module R M] → [inst_5 : Module S M₂] → [toAddHomClass : AddHomClass F M M₂] → (∀ (f : F) (r : R) (x : M), ↑f (r • x) = ↑σ r • ↑f x) → SemilinearMapClass F σ M M₂F :F: Type ?u.46983Type _) {R S : outParam (Type _: Type (?u.46983+1)Type _)} [Semiring R] [Semiring S] (σ : outParam (R →+* S)) (M M₂ : outParam (Type _: Type (?u.46987+1)Type _)) [AddCommMonoid M] [AddCommMonoid M₂] [Type _: Type (?u.47040+1)Module R M] [Module: (R : Type ?u.47054) → (M : Type ?u.47053) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.47054?u.47053)Module S M₂] extends AddHomClassModule: (R : Type ?u.47078) → (M : Type ?u.47077) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.47078?u.47077)F M M₂ where /-- A semilinear map preserves scalar multiplication up to some ring homomorphism `σ`. See also `_root_.map_smul` for the case where `σ` is the identity. -/F: Type ?u.46983map_smulₛₗ : ∀ (map_smulₛₗ: ∀ {F : Type u_1} {R : outParam (Type u_2)} {S : outParam (Type u_3)} [inst : Semiring R] [inst_1 : Semiring S] {σ : outParam (R →+* S)} {M : outParam (Type u_4)} {M₂ : outParam (Type u_5)} [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₂] [inst_4 : Module R M] [inst_5 : Module S M₂] [self : SemilinearMapClass F σ M M₂] (f : F) (r : R) (x : M), ↑f (r • x) = ↑σ r • ↑f xf :f: FF) (F: Type ?u.46983r : R) (r: Rx : M),x: Mf (f: Fr •r: Rx) = σx: Mr •r: Rff: Fx #align semilinear_map_classx: MSemilinearMapClass end -- Porting note: `dangerousInstance` linter has become smarter about `outParam`s -- `σ` becomes a metavariable but that's fine because it's an `outParam` -- attribute [nolint dangerousInstance] SemilinearMapClass.toAddHomClass export SemilinearMapClass (map_smulₛₗ) attribute [simp]SemilinearMapClass: Type u_1 → {R : outParam (Type u_2)} → {S : outParam (Type u_3)} → [inst : Semiring R] → [inst_1 : Semiring S] → outParam (R →+* S) → (M : outParam (Type u_4)) → (M₂ : outParam (Type u_5)) → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst : Module R M] → [inst : Module S M₂] → Type (max(maxu_1u_4)u_5)map_smulₛₗ /-- `LinearMapClass F R M M₂` asserts `F` is a type of bundled `R`-linear maps `M → M₂`. This is an abbreviation for `SemilinearMapClass F (RingHom.id R) M M₂`. -/ abbrevmap_smulₛₗ: ∀ {F : Type u_1} {R : outParam (Type u_2)} {S : outParam (Type u_3)} [inst : Semiring R] [inst_1 : Semiring S] {σ : outParam (R →+* S)} {M : outParam (Type u_4)} {M₂ : outParam (Type u_5)} [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₂] [inst_4 : Module R M] [inst_5 : Module S M₂] [self : SemilinearMapClass F σ M M₂] (f : F) (r : R) (x : M), ↑f (r • x) = ↑σ r • ↑f xLinearMapClass (F :F: Type ?u.50736Type _) (R M M₂ : outParam (Type _: Type (?u.50736+1)Type _)) [Semiring R] [AddCommMonoid M] [AddCommMonoid M₂] [Type _: Type (?u.50748+1)Module R M] [Module: (R : Type ?u.50761) → (M : Type ?u.50760) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.50761?u.50760)Module R M₂] :=Module: (R : Type ?u.50787) → (M : Type ?u.50786) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.50787?u.50786)SemilinearMapClassSemilinearMapClass: Type ?u.50826 → {R : outParam (Type ?u.50825)} → {S : outParam (Type ?u.50824)} → [inst : Semiring R] → [inst_1 : Semiring S] → outParam (R →+* S) → (M : outParam (Type ?u.50823)) → (M₂ : outParam (Type ?u.50822)) → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst : Module R M] → [inst : Module S M₂] → Type (max(max?u.50826?u.50823)?u.50822)F (F: Type ?u.50736RingHom.id R) M M₂ #align linear_map_class LinearMapClass namespace SemilinearMapClass variable (RingHom.id: (α : Type ?u.50860) → [inst : NonAssocSemiring α] → α →+* αF :F: Type ?u.51588Type _) variable [SemiringType _: Type (?u.51168+1)R] [SemiringR: Type ?u.50994S] variable [AddCommMonoidS: Type ?u.51009M] [AddCommMonoidM: Type ?u.51376M₁] [AddCommMonoidM₁: Type ?u.51078M₂] [AddCommMonoidM₂: Type ?u.51081M₃] variable [AddCommMonoidM₃: Type ?u.72086N₁] [AddCommMonoidN₁: Type ?u.51156N₂] [AddCommMonoidN₂: Type ?u.51159N₃] variable [N₃: Type ?u.51162ModuleModule: (R : Type ?u.64878) → (M : Type ?u.64877) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.64878?u.64877)RR: Type ?u.51352M] [M: Type ?u.51376ModuleModule: (R : Type ?u.64904) → (M : Type ?u.64903) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.64904?u.64903)RR: Type ?u.51352M₂] [M₂: Type ?u.51382ModuleModule: (R : Type ?u.51327) → (M : Type ?u.51326) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.51327?u.51326)SS: Type ?u.51213M₃] variable {M₃: Type ?u.51231σ :σ: R →+* SR →+*R: Type ?u.51540S} -- Porting note: the `dangerousInstance` linter has become smarter about `outParam`s instance (priority := 100)S: Type ?u.51367addMonoidHomClass [addMonoidHomClass: {R : Type u_1} → {S : Type u_2} → {M : Type u_3} → {M₃ : Type u_4} → (F : Type u_5) → [inst : Semiring R] → [inst_1 : Semiring S] → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₃] → [inst_4 : Module R M] → [inst_5 : Module S M₃] → {σ : R →+* S} → [inst : SemilinearMapClass F σ M M₃] → AddMonoidHomClass F M M₃SemilinearMapClassSemilinearMapClass: Type ?u.51732 → {R : outParam (Type ?u.51731)} → {S : outParam (Type ?u.51730)} → [inst : Semiring R] → [inst_1 : Semiring S] → outParam (R →+* S) → (M : outParam (Type ?u.51729)) → (M₂ : outParam (Type ?u.51728)) → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst : Module R M] → [inst : Module S M₂] → Type (max(max?u.51732?u.51729)?u.51728)FF: Type ?u.51588σσ: R →+* SMM: Type ?u.51564M₃] :M₃: Type ?u.51573AddMonoidHomClassAddMonoidHomClass: Type ?u.51817 → (M : outParam (Type ?u.51816)) → (N : outParam (Type ?u.51815)) → [inst : AddZeroClass M] → [inst : AddZeroClass N] → Type (max(max?u.51817?u.51816)?u.51815)FF: Type ?u.51588MM: Type ?u.51564M₃ := {M₃: Type ?u.51573SemilinearMapClass.toAddHomClass with coe := funSemilinearMapClass.toAddHomClass: {F : Type ?u.52642} → {R : outParam (Type ?u.52641)} → {S : outParam (Type ?u.52640)} → [inst : Semiring R] → [inst_1 : Semiring S] → {σ : outParam (R →+* S)} → {M : outParam (Type ?u.52639)} → {M₂ : outParam (Type ?u.52638)} → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst_4 : Module R M] → [inst_5 : Module S M₂] → [self : SemilinearMapClass F σ M M₂] → AddHomClass F M M₂f ↦ (f: ?m.54293f :f: ?m.54293M →M: Type ?u.51564M₃) map_zero := funM₃: Type ?u.51573f ↦ showf: ?m.57005ff: ?m.570050 =0: ?m.580890 by0: ?m.58575R: Type ?u.51540
R₁: Type ?u.51543
R₂: Type ?u.51546
R₃: Type ?u.51549
k: Type ?u.51552
S: Type ?u.51555
S₃: Type ?u.51558
T: Type ?u.51561
M: Type ?u.51564
M₁: Type ?u.51567
M₂: Type ?u.51570
M₃: Type ?u.51573
N₁: Type ?u.51576
N₂: Type ?u.51579
N₃: Type ?u.51582
ι: Type ?u.51585
F: Type ?u.51588
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
inst✝: SemilinearMapClass F σ M M₃
src✝:= toAddHomClass: AddHomClass F M M₃
f: F↑f 0 = 0R: Type ?u.51540
R₁: Type ?u.51543
R₂: Type ?u.51546
R₃: Type ?u.51549
k: Type ?u.51552
S: Type ?u.51555
S₃: Type ?u.51558
T: Type ?u.51561
M: Type ?u.51564
M₁: Type ?u.51567
M₂: Type ?u.51570
M₃: Type ?u.51573
N₁: Type ?u.51576
N₂: Type ?u.51579
N₃: Type ?u.51582
ι: Type ?u.51585
F: Type ?u.51588
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
inst✝: SemilinearMapClass F σ M M₃
src✝:= toAddHomClass: AddHomClass F M M₃
f: FR: Type ?u.51540
R₁: Type ?u.51543
R₂: Type ?u.51546
R₃: Type ?u.51549
k: Type ?u.51552
S: Type ?u.51555
S₃: Type ?u.51558
T: Type ?u.51561
M: Type ?u.51564
M₁: Type ?u.51567
M₂: Type ?u.51570
M₃: Type ?u.51573
N₁: Type ?u.51576
N₂: Type ?u.51579
N₃: Type ?u.51582
ι: Type ?u.51585
F: Type ?u.51588
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
inst✝: SemilinearMapClass F σ M M₃
src✝:= toAddHomClass: AddHomClass F M M₃
f: F↑f 0 = 0R: Type ?u.51540
R₁: Type ?u.51543
R₂: Type ?u.51546
R₃: Type ?u.51549
k: Type ?u.51552
S: Type ?u.51555
S₃: Type ?u.51558
T: Type ?u.51561
M: Type ?u.51564
M₁: Type ?u.51567
M₂: Type ?u.51570
M₃: Type ?u.51573
N₁: Type ?u.51576
N₂: Type ?u.51579
N₃: Type ?u.51582
ι: Type ?u.51585
F: Type ?u.51588
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
inst✝: SemilinearMapClass F σ M M₃
src✝:= toAddHomClass: AddHomClass F M M₃
f: FR: Type ?u.51540
R₁: Type ?u.51543
R₂: Type ?u.51546
R₃: Type ?u.51549
k: Type ?u.51552
S: Type ?u.51555
S₃: Type ?u.51558
T: Type ?u.51561
M: Type ?u.51564
M₁: Type ?u.51567
M₂: Type ?u.51570
M₃: Type ?u.51573
N₁: Type ?u.51576
N₂: Type ?u.51579
N₃: Type ?u.51582
ι: Type ?u.51585
F: Type ?u.51588
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
inst✝: SemilinearMapClass F σ M M₃
src✝:= toAddHomClass: AddHomClass F M M₃
f: FR: Type ?u.51540
R₁: Type ?u.51543
R₂: Type ?u.51546
R₃: Type ?u.51549
k: Type ?u.51552
S: Type ?u.51555
S₃: Type ?u.51558
T: Type ?u.51561
M: Type ?u.51564
M₁: Type ?u.51567
M₂: Type ?u.51570
M₃: Type ?u.51573
N₁: Type ?u.51576
N₂: Type ?u.51579
N₃: Type ?u.51582
ι: Type ?u.51585
F: Type ?u.51588
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
inst✝: SemilinearMapClass F σ M M₃
src✝:= toAddHomClass: AddHomClass F M M₃
f: F↑f 0 = 0} instance (priority := 100)Goals accomplished! 🐙distribMulActionHomClass [LinearMapClassdistribMulActionHomClass: {R : Type u_1} → {M : Type u_2} → {M₂ : Type u_3} → (F : Type u_4) → [inst : Semiring R] → [inst_1 : AddCommMonoid M] → [inst_2 : AddCommMonoid M₂] → [inst_3 : Module R M] → [inst_4 : Module R M₂] → [inst_5 : LinearMapClass F R M M₂] → DistribMulActionHomClass F R M M₂FF: Type ?u.64847RR: Type ?u.64799MM: Type ?u.64823M₂] :M₂: Type ?u.64829DistribMulActionHomClassDistribMulActionHomClass: Type ?u.65052 → (M : outParam (Type ?u.65051)) → (A : outParam (Type ?u.65050)) → (B : outParam (Type ?u.65049)) → [inst : Monoid M] → [inst_1 : AddMonoid A] → [inst_2 : AddMonoid B] → [inst_3 : DistribMulAction M A] → [inst : DistribMulAction M B] → Type (max(max?u.65052?u.65050)?u.65049)FF: Type ?u.64847RR: Type ?u.64799MM: Type ?u.64823M₂ := {M₂: Type ?u.64829SemilinearMapClass.addMonoidHomClassSemilinearMapClass.addMonoidHomClass: {R : Type ?u.65967} → {S : Type ?u.65966} → {M : Type ?u.65965} → {M₃ : Type ?u.65964} → (F : Type ?u.65963) → [inst : Semiring R] → [inst_1 : Semiring S] → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₃] → [inst_4 : Module R M] → [inst_5 : Module S M₃] → {σ : R →+* S} → [inst : SemilinearMapClass F σ M M₃] → AddMonoidHomClass F M M₃F with coe := funF: Type ?u.64847f ↦ (f: ?m.68292f :f: ?m.68292M →M: Type ?u.64823M₂) map_smul := funM₂: Type ?u.64829ff: ?m.70805cc: ?m.70808x ↦x: ?m.70811Goals accomplished! 🐙R: Type ?u.64799
R₁: Type ?u.64802
R₂: Type ?u.64805
R₃: Type ?u.64808
k: Type ?u.64811
S: Type ?u.64814
S₃: Type ?u.64817
T: Type ?u.64820
M: Type ?u.64823
M₁: Type ?u.64826
M₂: Type ?u.64829
M₃: Type ?u.64832
N₁: Type ?u.64835
N₂: Type ?u.64838
N₃: Type ?u.64841
ι: Type ?u.64844
F: Type ?u.64847
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
inst✝: LinearMapClass F R M M₂
src✝:= addMonoidHomClass F: AddMonoidHomClass F M M₂
f: F
c: R
x: MR: Type ?u.64799
R₁: Type ?u.64802
R₂: Type ?u.64805
R₃: Type ?u.64808
k: Type ?u.64811
S: Type ?u.64814
S₃: Type ?u.64817
T: Type ?u.64820
M: Type ?u.64823
M₁: Type ?u.64826
M₂: Type ?u.64829
M₃: Type ?u.64832
N₁: Type ?u.64835
N₂: Type ?u.64838
N₃: Type ?u.64841
ι: Type ?u.64844
F: Type ?u.64847
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
inst✝: LinearMapClass F R M M₂
src✝:= addMonoidHomClass F: AddMonoidHomClass F M M₂
f: F
c: R
x: MR: Type ?u.64799
R₁: Type ?u.64802
R₂: Type ?u.64805
R₃: Type ?u.64808
k: Type ?u.64811
S: Type ?u.64814
S₃: Type ?u.64817
T: Type ?u.64820
M: Type ?u.64823
M₁: Type ?u.64826
M₂: Type ?u.64829
M₃: Type ?u.64832
N₁: Type ?u.64835
N₂: Type ?u.64838
N₃: Type ?u.64841
ι: Type ?u.64844
F: Type ?u.64847
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
inst✝: LinearMapClass F R M M₂
src✝:= addMonoidHomClass F: AddMonoidHomClass F M M₂
f: F
c: R
x: M↑(RingHom.id R) c • ↑f x = c • ↑f xR: Type ?u.64799
R₁: Type ?u.64802
R₂: Type ?u.64805
R₃: Type ?u.64808
k: Type ?u.64811
S: Type ?u.64814
S₃: Type ?u.64817
T: Type ?u.64820
M: Type ?u.64823
M₁: Type ?u.64826
M₂: Type ?u.64829
M₃: Type ?u.64832
N₁: Type ?u.64835
N₂: Type ?u.64838
N₃: Type ?u.64841
ι: Type ?u.64844
F: Type ?u.64847
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
inst✝: LinearMapClass F R M M₂
src✝:= addMonoidHomClass F: AddMonoidHomClass F M M₂
f: F
c: R
x: MR: Type ?u.64799
R₁: Type ?u.64802
R₂: Type ?u.64805
R₃: Type ?u.64808
k: Type ?u.64811
S: Type ?u.64814
S₃: Type ?u.64817
T: Type ?u.64820
M: Type ?u.64823
M₁: Type ?u.64826
M₂: Type ?u.64829
M₃: Type ?u.64832
N₁: Type ?u.64835
N₂: Type ?u.64838
N₃: Type ?u.64841
ι: Type ?u.64844
F: Type ?u.64847
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
inst✝: LinearMapClass F R M M₂
src✝:= addMonoidHomClass F: AddMonoidHomClass F M M₂
f: F
c: R
x: M} variable {Goals accomplished! 🐙F} (F: ?m.71969f :f: FF) [F: ?m.71969i :i: SemilinearMapClass F σ M M₃SemilinearMapClassSemilinearMapClass: Type ?u.72247 → {R : outParam (Type ?u.72246)} → {S : outParam (Type ?u.72245)} → [inst : Semiring R] → [inst_1 : Semiring S] → outParam (R →+* S) → (M : outParam (Type ?u.72244)) → (M₂ : outParam (Type ?u.72243)) → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst : Module R M] → [inst : Module S M₂] → Type (max(max?u.72247?u.72244)?u.72243)FF: ?m.71969σσ: R →+* SMM: Type ?u.71805M₃] theoremM₃: Type ?u.71814map_smul_inv {map_smul_inv: ∀ {R : Type u_2} {S : Type u_1} {M : Type u_5} {M₃ : Type u_3} {F : Type u_4} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : F) [i : SemilinearMapClass F σ M M₃] {σ' : S →+* R} [inst_6 : RingHomInvPair σ σ'] (c : S) (x : M), c • ↑f x = ↑f (↑σ' c • x)σ' :σ': S →+* RS →+*S: Type ?u.72068R} [RingHomInvPairR: Type ?u.72053σσ: R →+* Sσ'] (σ': S →+* Rc :c: SS) (S: Type ?u.72068x :x: MM) :M: Type ?u.72077c •c: Sff: Fx =x: Mf (f: Fσ'σ': S →+* Rc •c: Sx) :=x: MGoals accomplished! 🐙R: Type u_2
R₁: Type ?u.72056
R₂: Type ?u.72059
R₃: Type ?u.72062
k: Type ?u.72065
S: Type u_1
S₃: Type ?u.72071
T: Type ?u.72074
M: Type u_5
M₁: Type ?u.72080
M₂: Type ?u.72083
M₃: Type u_3
N₁: Type ?u.72089
N₂: Type ?u.72092
N₃: Type ?u.72095
ι: Type ?u.72098
F: Type u_4
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
f: F
i: SemilinearMapClass F σ M M₃
σ': S →+* R
inst✝: RingHomInvPair σ σ'
c: S
x: M#align semilinear_map_class.map_smul_invGoals accomplished! 🐙SemilinearMapClass.map_smul_inv end SemilinearMapClass namespace LinearMap section AddCommMonoid variable [SemiringSemilinearMapClass.map_smul_inv: ∀ {R : Type u_2} {S : Type u_1} {M : Type u_5} {M₃ : Type u_3} {F : Type u_4} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : F) [i : SemilinearMapClass F σ M M₃] {σ' : S →+* R} [inst_6 : RingHomInvPair σ σ'] (c : S) (x : M), c • ↑f x = ↑f (↑σ' c • x)R] [SemiringR: Type ?u.116234S] section variable [AddCommMonoidS: Type ?u.79682M] [AddCommMonoidM: Type ?u.79745M₁] [AddCommMonoidM₁: Type ?u.79748M₂] [AddCommMonoidM₂: Type ?u.79817M₃] variable [AddCommMonoidM₃: Type ?u.79754N₁] [AddCommMonoidN₁: Type ?u.79898N₂] [AddCommMonoidN₂: Type ?u.96539N₃] variable [N₃: Type ?u.79829ModuleModule: (R : Type ?u.92262) → (M : Type ?u.92261) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.92262?u.92261)RR: Type ?u.79862M] [M: Type ?u.98999ModuleModule: (R : Type ?u.79964) → (M : Type ?u.79963) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.79964?u.79963)RR: Type ?u.79862M₂] [M₂: Type ?u.79892ModuleModule: (R : Type ?u.80139) → (M : Type ?u.80138) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.80139?u.80138)SS: Type ?u.79877M₃] variable {M₃: Type ?u.79895σ :σ: R →+* SR →+*R: Type ?u.80013S} instanceS: Type ?u.80028semilinearMapClass :semilinearMapClass: SemilinearMapClass (M →ₛₗ[σ] M₃) σ M M₃SemilinearMapClass (SemilinearMapClass: Type ?u.80387 → {R : outParam (Type ?u.80386)} → {S : outParam (Type ?u.80385)} → [inst : Semiring R] → [inst_1 : Semiring S] → outParam (R →+* S) → (M : outParam (Type ?u.80384)) → (M₂ : outParam (Type ?u.80383)) → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst : Module R M] → [inst : Module S M₂] → Type (max(max?u.80387?u.80384)?u.80383)M →ₛₗ[M: Type ?u.80222σ]σ: R →+* SM₃)M₃: Type ?u.80231σσ: R →+* SMM: Type ?u.80222M₃ where coeM₃: Type ?u.80231f :=f: ?m.81471f.toFun coe_injective'f: ?m.81471ff: ?m.81516gg: ?m.81519h :=h: ?m.81522Goals accomplished! 🐙R: Type ?u.80198
R₁: Type ?u.80201
R₂: Type ?u.80204
R₃: Type ?u.80207
k: Type ?u.80210
S: Type ?u.80213
S₃: Type ?u.80216
T: Type ?u.80219
M: Type ?u.80222
M₁: Type ?u.80225
M₂: Type ?u.80228
M₃: Type ?u.80231
N₁: Type ?u.80234
N₂: Type ?u.80237
N₃: Type ?u.80240
ι: Type ?u.80243
inst✝¹¹: Semiring R
inst✝¹⁰: Semiring S
inst✝⁹: AddCommMonoid M
inst✝⁸: AddCommMonoid M₁
inst✝⁷: AddCommMonoid M₂
inst✝⁶: AddCommMonoid M₃
inst✝⁵: AddCommMonoid N₁
inst✝⁴: AddCommMonoid N₂
inst✝³: AddCommMonoid N₃
inst✝²: Module R M
inst✝¹: Module R M₂
inst✝: Module S M₃
σ: R →+* S
f, g: M →ₛₗ[σ] M₃
h: (fun f => f.toFun) f = (fun f => f.toFun) gf = gR: Type ?u.80198
R₁: Type ?u.80201
R₂: Type ?u.80204
R₃: Type ?u.80207
k: Type ?u.80210
S: Type ?u.80213
S₃: Type ?u.80216
T: Type ?u.80219
M: Type ?u.80222
M₁: Type ?u.80225
M₂: Type ?u.80228
M₃: Type ?u.80231
N₁: Type ?u.80234
N₂: Type ?u.80237
N₃: Type ?u.80240
ι: Type ?u.80243
inst✝¹¹: Semiring R
inst✝¹⁰: Semiring S
inst✝⁹: AddCommMonoid M
inst✝⁸: AddCommMonoid M₁
inst✝⁷: AddCommMonoid M₂
inst✝⁶: AddCommMonoid M₃
inst✝⁵: AddCommMonoid N₁
inst✝⁴: AddCommMonoid N₂
inst✝³: AddCommMonoid N₃
inst✝²: Module R M
inst✝¹: Module R M₂
inst✝: Module S M₃
σ: R →+* S
g: M →ₛₗ[σ] M₃
toAddHom✝: AddHom M M₃
map_smul'✝: ∀ (r : R) (x : M), AddHom.toFun toAddHom✝ (r • x) = ↑σ r • AddHom.toFun toAddHom✝ x
h: (fun f => f.toFun) { toAddHom := toAddHom✝, map_smul' := map_smul'✝ } = (fun f => f.toFun) g
mk{ toAddHom := toAddHom✝, map_smul' := map_smul'✝ } = gR: Type ?u.80198
R₁: Type ?u.80201
R₂: Type ?u.80204
R₃: Type ?u.80207
k: Type ?u.80210
S: Type ?u.80213
S₃: Type ?u.80216
T: Type ?u.80219
M: Type ?u.80222
M₁: Type ?u.80225
M₂: Type ?u.80228
M₃: Type ?u.80231
N₁: Type ?u.80234
N₂: Type ?u.80237
N₃: Type ?u.80240
ι: Type ?u.80243
inst✝¹¹: Semiring R
inst✝¹⁰: Semiring S
inst✝⁹: AddCommMonoid M
inst✝⁸: AddCommMonoid M₁
inst✝⁷: AddCommMonoid M₂
inst✝⁶: AddCommMonoid M₃
inst✝⁵: AddCommMonoid N₁
inst✝⁴: AddCommMonoid N₂
inst✝³: AddCommMonoid N₃
inst✝²: Module R M
inst✝¹: Module R M₂
inst✝: Module S M₃
σ: R →+* S
f, g: M →ₛₗ[σ] M₃
h: (fun f => f.toFun) f = (fun f => f.toFun) gf = gR: Type ?u.80198
R₁: Type ?u.80201
R₂: Type ?u.80204
R₃: Type ?u.80207
k: Type ?u.80210
S: Type ?u.80213
S₃: Type ?u.80216
T: Type ?u.80219
M: Type ?u.80222
M₁: Type ?u.80225
M₂: Type ?u.80228
M₃: Type ?u.80231
N₁: Type ?u.80234
N₂: Type ?u.80237
N₃: Type ?u.80240
ι: Type ?u.80243
inst✝¹¹: Semiring R
inst✝¹⁰: Semiring S
inst✝⁹: AddCommMonoid M
inst✝⁸: AddCommMonoid M₁
inst✝⁷: AddCommMonoid M₂
inst✝⁶: AddCommMonoid M₃
inst✝⁵: AddCommMonoid N₁
inst✝⁴: AddCommMonoid N₂
inst✝³: AddCommMonoid N₃
inst✝²: Module R M
inst✝¹: Module R M₂
inst✝: Module S M₃
σ: R →+* S
toAddHom✝¹: AddHom M M₃
map_smul'✝¹: ∀ (r : R) (x : M), AddHom.toFun toAddHom✝¹ (r • x) = ↑σ r • AddHom.toFun toAddHom✝¹ x
toAddHom✝: AddHom M M₃
map_smul'✝: ∀ (r : R) (x : M), AddHom.toFun toAddHom✝ (r • x) = ↑σ r • AddHom.toFun toAddHom✝ x
h: (fun f => f.toFun) { toAddHom := toAddHom✝¹, map_smul' := map_smul'✝¹ } = (fun f => f.toFun) { toAddHom := toAddHom✝, map_smul' := map_smul'✝ }
mk.mk{ toAddHom := toAddHom✝¹, map_smul' := map_smul'✝¹ } = { toAddHom := toAddHom✝, map_smul' := map_smul'✝ }R: Type ?u.80198
R₁: Type ?u.80201
R₂: Type ?u.80204
R₃: Type ?u.80207
k: Type ?u.80210
S: Type ?u.80213
S₃: Type ?u.80216
T: Type ?u.80219
M: Type ?u.80222
M₁: Type ?u.80225
M₂: Type ?u.80228
M₃: Type ?u.80231
N₁: Type ?u.80234
N₂: Type ?u.80237
N₃: Type ?u.80240
ι: Type ?u.80243
inst✝¹¹: Semiring R
inst✝¹⁰: Semiring S
inst✝⁹: AddCommMonoid M
inst✝⁸: AddCommMonoid M₁
inst✝⁷: AddCommMonoid M₂
inst✝⁶: AddCommMonoid M₃
inst✝⁵: AddCommMonoid N₁
inst✝⁴: AddCommMonoid N₂
inst✝³: AddCommMonoid N₃
inst✝²: Module R M
inst✝¹: Module R M₂
inst✝: Module S M₃
σ: R →+* S
f, g: M →ₛₗ[σ] M₃
h: (fun f => f.toFun) f = (fun f => f.toFun) gf = gR: Type ?u.80198
R₁: Type ?u.80201
R₂: Type ?u.80204
R₃: Type ?u.80207
k: Type ?u.80210
S: Type ?u.80213
S₃: Type ?u.80216
T: Type ?u.80219
M: Type ?u.80222
M₁: Type ?u.80225
M₂: Type ?u.80228
M₃: Type ?u.80231
N₁: Type ?u.80234
N₂: Type ?u.80237
N₃: Type ?u.80240
ι: Type ?u.80243
inst✝¹¹: Semiring R
inst✝¹⁰: Semiring S
inst✝⁹: AddCommMonoid M
inst✝⁸: AddCommMonoid M₁
inst✝⁷: AddCommMonoid M₂
inst✝⁶: AddCommMonoid M₃
inst✝⁵: AddCommMonoid N₁
inst✝⁴: AddCommMonoid N₂
inst✝³: AddCommMonoid N₃
inst✝²: Module R M
inst✝¹: Module R M₂
inst✝: Module S M₃
σ: R →+* S
toAddHom✝¹: AddHom M M₃
map_smul'✝¹: ∀ (r : R) (x : M), AddHom.toFun toAddHom✝¹ (r • x) = ↑σ r • AddHom.toFun toAddHom✝¹ x
toAddHom✝: AddHom M M₃
map_smul'✝: ∀ (r : R) (x : M), AddHom.toFun toAddHom✝ (r • x) = ↑σ r • AddHom.toFun toAddHom✝ x
h: (fun f => f.toFun) { toAddHom := toAddHom✝¹, map_smul' := map_smul'✝¹ } = (fun f => f.toFun) { toAddHom := toAddHom✝, map_smul' := map_smul'✝ }
mk.mk.e_toAddHomtoAddHom✝¹ = toAddHom✝R: Type ?u.80198
R₁: Type ?u.80201
R₂: Type ?u.80204
R₃: Type ?u.80207
k: Type ?u.80210
S: Type ?u.80213
S₃: Type ?u.80216
T: Type ?u.80219
M: Type ?u.80222
M₁: Type ?u.80225
M₂: Type ?u.80228
M₃: Type ?u.80231
N₁: Type ?u.80234
N₂: Type ?u.80237
N₃: Type ?u.80240
ι: Type ?u.80243
inst✝¹¹: Semiring R
inst✝¹⁰: Semiring S
inst✝⁹: AddCommMonoid M
inst✝⁸: AddCommMonoid M₁
inst✝⁷: AddCommMonoid M₂
inst✝⁶: AddCommMonoid M₃
inst✝⁵: AddCommMonoid N₁
inst✝⁴: AddCommMonoid N₂
inst✝³: AddCommMonoid N₃
inst✝²: Module R M
inst✝¹: Module R M₂
inst✝: Module S M₃
σ: R →+* S
f, g: M →ₛₗ[σ] M₃
h: (fun f => f.toFun) f = (fun f => f.toFun) gf = gR: Type ?u.80198
R₁: Type ?u.80201
R₂: Type ?u.80204
R₃: Type ?u.80207
k: Type ?u.80210
S: Type ?u.80213
S₃: Type ?u.80216
T: Type ?u.80219
M: Type ?u.80222
M₁: Type ?u.80225
M₂: Type ?u.80228
M₃: Type ?u.80231
N₁: Type ?u.80234
N₂: Type ?u.80237
N₃: Type ?u.80240
ι: Type ?u.80243
inst✝¹¹: Semiring R
inst✝¹⁰: Semiring S
inst✝⁹: AddCommMonoid M
inst✝⁸: AddCommMonoid M₁
inst✝⁷: AddCommMonoid M₂
inst✝⁶: AddCommMonoid M₃
inst✝⁵: AddCommMonoid N₁
inst✝⁴: AddCommMonoid N₂
inst✝³: AddCommMonoid N₃
inst✝²: Module R M
inst✝¹: Module R M₂
inst✝: Module S M₃
σ: R →+* S
toAddHom✝¹: AddHom M M₃
map_smul'✝¹: ∀ (r : R) (x : M), AddHom.toFun toAddHom✝¹ (r • x) = ↑σ r • AddHom.toFun toAddHom✝¹ x
toAddHom✝: AddHom M M₃
map_smul'✝: ∀ (r : R) (x : M), AddHom.toFun toAddHom✝ (r • x) = ↑σ r • AddHom.toFun toAddHom✝ x
h: (fun f => f.toFun) { toAddHom := toAddHom✝¹, map_smul' := map_smul'✝¹ } = (fun f => f.toFun) { toAddHom := toAddHom✝, map_smul' := map_smul'✝ }
mk.mk.e_toAddHom.a↑toAddHom✝¹ = ↑toAddHom✝R: Type ?u.80198
R₁: Type ?u.80201
R₂: Type ?u.80204
R₃: Type ?u.80207
k: Type ?u.80210
S: Type ?u.80213
S₃: Type ?u.80216
T: Type ?u.80219
M: Type ?u.80222
M₁: Type ?u.80225
M₂: Type ?u.80228
M₃: Type ?u.80231
N₁: Type ?u.80234
N₂: Type ?u.80237
N₃: Type ?u.80240
ι: Type ?u.80243
inst✝¹¹: Semiring R
inst✝¹⁰: Semiring S
inst✝⁹: AddCommMonoid M
inst✝⁸: AddCommMonoid M₁
inst✝⁷: AddCommMonoid M₂
inst✝⁶: AddCommMonoid M₃
inst✝⁵: AddCommMonoid N₁
inst✝⁴: AddCommMonoid N₂
inst✝³: AddCommMonoid N₃
inst✝²: Module R M
inst✝¹: Module R M₂
inst✝: Module S M₃
σ: R →+* S
f, g: M →ₛₗ[σ] M₃
h: (fun f => f.toFun) f = (fun f => f.toFun) gf = gmap_addGoals accomplished! 🐙f :=f: ?m.81535f.f: ?m.81535map_add' map_smulₛₗ :=map_add': ∀ {M : Type ?u.81553} {N : Type ?u.81552} [inst : Add M] [inst_1 : Add N] (self : AddHom M N) (x y : M), AddHom.toFun self (x + y) = AddHom.toFun self x + AddHom.toFun self yLinearMap.map_smul' #align linear_map.semilinear_map_classLinearMap.map_smul': ∀ {R : Type ?u.81582} {S : Type ?u.81581} [inst : Semiring R] [inst_1 : Semiring S] {σ : R →+* S} {M : Type ?u.81580} {M₂ : Type ?u.81579} [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₂] [inst_4 : Module R M] [inst_5 : Module S M₂] (self : M →ₛₗ[σ] M₂) (r : R) (x : M), AddHom.toFun self.toAddHom (r • x) = ↑σ r • AddHom.toFun self.toAddHom xLinearMap.semilinearMapClass -- Porting note: we don't port specialized `CoeFun` instances if there is `FunLike` instead #noalign LinearMap.has_coe_to_fun -- Porting note: adding this instance prevents a timeout in `ext_ring_op`LinearMap.semilinearMapClass: {R : Type u_1} → {S : Type u_2} → {M : Type u_3} → {M₃ : Type u_4} → [inst : Semiring R] → [inst_1 : Semiring S] → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₃] → [inst_4 : Module R M] → [inst_5 : Module S M₃] → {σ : R →+* S} → SemilinearMapClass (M →ₛₗ[σ] M₃) σ M M₃instance {σ :σ: R →+* SR →+*R: Type ?u.83905S} : FunLike (S: Type ?u.83920M →ₛₗ[M: Type ?u.83929σ]σ: R →+* SM₃)M₃: Type ?u.83938M (λM: Type ?u.83929_ ↦_: ?m.84240M₃) :=M₃: Type ?u.83938{ AddHomClass.toFunLike{ AddHomClass.toFunLike with }: FunLike ?m.84401 ?m.84402 ?m.84403{ AddHomClass.toFunLike with }: FunLike ?m.84401 ?m.84402 ?m.84403with{ AddHomClass.toFunLike with }: FunLike ?m.84401 ?m.84402 ?m.84403} /-- The `DistribMulActionHom` underlying a `LinearMap`. -/ def toDistribMulActionHom (f :{ AddHomClass.toFunLike with }: FunLike ?m.84401 ?m.84402 ?m.84403M →ₗ[M: Type ?u.85723R]R: Type ?u.85699M₂) :M₂: Type ?u.85729DistribMulActionHomDistribMulActionHom: (M : Type ?u.86005) → [inst : Monoid M] → (A : Type ?u.86004) → [inst_1 : AddMonoid A] → [inst_2 : DistribMulAction M A] → (B : Type ?u.86003) → [inst_3 : AddMonoid B] → [inst : DistribMulAction M B] → Type (max?u.86004?u.86003)RR: Type ?u.85699MM: Type ?u.85723M₂ := { f with map_zero' := show fM₂: Type ?u.857290 =0: ?m.892030 from map_zero f } #align linear_map.to_distrib_mul_action_hom LinearMap.toDistribMulActionHom @[simp] theorem0: ?m.89665coe_toAddHom (f :M →ₛₗ[M: Type ?u.92210σ]σ: R →+* SM₃) : ⇑f.toAddHom = f := rfl -- porting note: no longer a `simp` theoremM₃: Type ?u.92219toFun_eq_coe {f :M →ₛₗ[M: Type ?u.94384σ]σ: R →+* SM₃} : f.toFun = (f :M₃: Type ?u.94393M →M: Type ?u.94384M₃) := rfl #align linear_map.to_fun_eq_coe LinearMap.toFun_eq_coe @[ext] theoremM₃: Type ?u.94393ext {f g :M →ₛₗ[M: Type ?u.95778σ]σ: R →+* SM₃} (M₃: Type ?u.95787h : ∀h: ∀ (x : M), ↑f x = ↑g xx, fx: ?m.96100x = gx: ?m.96100x) : f = g := FunLike.ext f gx: ?m.96100h #align linear_map.ext LinearMap.ext /-- Copy of a `LinearMap` with a new `toFun` equal to the old one. Useful to fix definitional equalities. -/ protected def copy (f :h: ∀ (x : M), ↑f x = ↑g xM →ₛₗ[M: Type ?u.96524σ]σ: R →+* SM₃) (M₃: Type ?u.96533f' :f': M → M₃M →M: Type ?u.96524M₃) (M₃: Type ?u.96533h :h: f' = ↑ff' = ⇑f) :f': M → M₃M →ₛₗ[M: Type ?u.96524σ]σ: R →+* SM₃ where toFun :=M₃: Type ?u.96533f' map_add' :=f': M → M₃h.symm ▸ f.h: f' = ↑fmap_add' map_smul' :=map_add': ∀ {M : Type ?u.97952} {N : Type ?u.97951} [inst : Add M] [inst_1 : Add N] (self : AddHom M N) (x y : M), AddHom.toFun self (x + y) = AddHom.toFun self x + AddHom.toFun self yh.symm ▸ f.h: f' = ↑fmap_smul' #align linear_map.copymap_smul': ∀ {R : Type ?u.98009} {S : Type ?u.98008} [inst : Semiring R] [inst_1 : Semiring S] {σ : R →+* S} {M : Type ?u.98007} {M₂ : Type ?u.98006} [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₂] [inst_4 : Module R M] [inst_5 : Module S M₂] (self : M →ₛₗ[σ] M₂) (r : R) (x : M), AddHom.toFun self.toAddHom (r • x) = ↑σ r • AddHom.toFun self.toAddHom xLinearMap.copy @[simp] theoremLinearMap.copy: {R : Type u_1} → {S : Type u_2} → {M : Type u_3} → {M₃ : Type u_4} → [inst : Semiring R] → [inst_1 : Semiring S] → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₃] → [inst_4 : Module R M] → [inst_5 : Module S M₃] → {σ : R →+* S} → (f : M →ₛₗ[σ] M₃) → (f' : M → M₃) → f' = ↑f → M →ₛₗ[σ] M₃coe_copy (f :coe_copy: ∀ {R : Type u_1} {S : Type u_2} {M : Type u_3} {M₃ : Type u_4} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : M →ₛₗ[σ] M₃) (f' : M → M₃) (h : f' = ↑f), ↑(LinearMap.copy f f' h) = f'M →ₛₗ[M: Type ?u.98330σ]σ: R →+* SM₃) (M₃: Type ?u.98339f' :f': M → M₃M →M: Type ?u.98330M₃) (M₃: Type ?u.98339h :h: f' = ↑ff' = ⇑f) : ⇑(f.f': M → M₃copycopy: {R : Type ?u.98757} → {S : Type ?u.98756} → {M : Type ?u.98755} → {M₃ : Type ?u.98754} → [inst : Semiring R] → [inst_1 : Semiring S] → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₃] → [inst_4 : Module R M] → [inst_5 : Module S M₃] → {σ : R →+* S} → (f : M →ₛₗ[σ] M₃) → (f' : M → M₃) → f' = ↑f → M →ₛₗ[σ] M₃f'f': M → M₃h) =h: f' = ↑ff' := rfl #align linear_map.coe_copyf': M → M₃LinearMap.coe_copy theoremLinearMap.coe_copy: ∀ {R : Type u_1} {S : Type u_2} {M : Type u_3} {M₃ : Type u_4} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : M →ₛₗ[σ] M₃) (f' : M → M₃) (h : f' = ↑f), ↑(LinearMap.copy f f' h) = f'copy_eq (f :copy_eq: ∀ {R : Type u_1} {S : Type u_2} {M : Type u_3} {M₃ : Type u_4} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : M →ₛₗ[σ] M₃) (f' : M → M₃) (h : f' = ↑f), LinearMap.copy f f' h = fM →ₛₗ[M: Type ?u.98999σ]σ: R →+* SM₃) (M₃: Type ?u.99008f' :f': M → M₃M →M: Type ?u.98999M₃) (M₃: Type ?u.99008h :h: f' = ↑ff' = ⇑f) : f.f': M → M₃copycopy: {R : Type ?u.99426} → {S : Type ?u.99425} → {M : Type ?u.99424} → {M₃ : Type ?u.99423} → [inst : Semiring R] → [inst_1 : Semiring S] → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₃] → [inst_4 : Module R M] → [inst_5 : Module S M₃] → {σ : R →+* S} → (f : M →ₛₗ[σ] M₃) → (f' : M → M₃) → f' = ↑f → M →ₛₗ[σ] M₃f'f': M → M₃h = f := FunLike.ext'h: f' = ↑fh #align linear_map.copy_eqh: f' = ↑fLinearMap.copy_eq initialize_simps_projections LinearMap (toFun → apply) @[simp] theoremLinearMap.copy_eq: ∀ {R : Type u_1} {S : Type u_2} {M : Type u_3} {M₃ : Type u_4} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : M →ₛₗ[σ] M₃) (f' : M → M₃) (h : f' = ↑f), LinearMap.copy f f' h = fcoe_mk {coe_mk: ∀ {R : Type u_1} {S : Type u_2} {M : Type u_3} {M₃ : Type u_4} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : AddHom M M₃) (h : ∀ (r : R) (x : M), AddHom.toFun f (r • x) = ↑σ r • AddHom.toFun f x), ↑{ toAddHom := f, map_smul' := h } = ↑fσ :σ: R →+* SR →+*R: Type ?u.99904S} (S: Type ?u.99919f : AddHomf: AddHom M M₃MM: Type ?u.99928M₃) (M₃: Type ?u.99937h) : ((h: ∀ (r : R) (x : M), AddHom.toFun f (r • x) = ↑σ r • AddHom.toFun f xLinearMap.mkLinearMap.mk: {R : Type ?u.101154} → {S : Type ?u.101153} → [inst : Semiring R] → [inst_1 : Semiring S] → {σ : R →+* S} → {M : Type ?u.101152} → {M₂ : Type ?u.101151} → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst_4 : Module R M] → [inst_5 : Module S M₂] → (toAddHom : AddHom M M₂) → (∀ (r : R) (x : M), AddHom.toFun toAddHom (r • x) = ↑σ r • AddHom.toFun toAddHom x) → M →ₛₗ[σ] M₂ff: AddHom M M₃h :h: ?m.101039M →ₛₗ[M: Type ?u.99928σ]σ: R →+* SM₃) :M₃: Type ?u.99937M →M: Type ?u.99928M₃) =M₃: Type ?u.99937f := rfl #align linear_map.coe_mkf: AddHom M M₃LinearMap.coe_mk -- Porting note: This theorem is new. @[simp] theoremLinearMap.coe_mk: ∀ {R : Type u_1} {S : Type u_2} {M : Type u_3} {M₃ : Type u_4} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : AddHom M M₃) (h : ∀ (r : R) (x : M), AddHom.toFun f (r • x) = ↑σ r • AddHom.toFun f x), ↑{ toAddHom := f, map_smul' := h } = ↑fcoe_addHom_mk {coe_addHom_mk: ∀ {R : Type u_1} {S : Type u_2} {M : Type u_3} {M₃ : Type u_4} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : AddHom M M₃) (h : ∀ (r : R) (x : M), AddHom.toFun f (r • x) = ↑σ r • AddHom.toFun f x), ↑{ toAddHom := f, map_smul' := h } = fσ :σ: R →+* SR →+*R: Type ?u.104464S} (S: Type ?u.104479f : AddHomf: AddHom M M₃MM: Type ?u.104488M₃) (M₃: Type ?u.104497h) : ((h: ∀ (r : R) (x : M), AddHom.toFun f (r • x) = ↑σ r • AddHom.toFun f xLinearMap.mkLinearMap.mk: {R : Type ?u.105716} → {S : Type ?u.105715} → [inst : Semiring R] → [inst_1 : Semiring S] → {σ : R →+* S} → {M : Type ?u.105714} → {M₂ : Type ?u.105713} → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst_4 : Module R M] → [inst_5 : Module S M₂] → (toAddHom : AddHom M M₂) → (∀ (r : R) (x : M), AddHom.toFun toAddHom (r • x) = ↑σ r • AddHom.toFun toAddHom x) → M →ₛₗ[σ] M₂ff: AddHom M M₃h :h: ?m.105599M →ₛₗ[M: Type ?u.104488σ]σ: R →+* SM₃) : AddHomM₃: Type ?u.104497MM: Type ?u.104488M₃) =M₃: Type ?u.104497f := rfl /-- Identity map as a `LinearMap` -/ def id :f: AddHom M M₃M →ₗ[M: Type ?u.106198R]R: Type ?u.106174M := { DistribMulActionHom.idM: Type ?u.106198R with toFun :=R: Type ?u.106174_root_.id } #align linear_map.id LinearMap.id theorem_root_.id: {α : Sort ?u.107071} → α → αid_apply (id_apply: ∀ (x : M), ↑id x = xx :x: MM) : @idM: Type ?u.108407RR: Type ?u.108383M _ _ _M: Type ?u.108407x =x: Mx := rfl #align linear_map.id_apply LinearMap.id_apply @[simp, norm_cast] theoremx: Mid_coe : ((LinearMap.id :id_coe: ↑id = _root_.idM →ₗ[M: Type ?u.108774R]R: Type ?u.108750M) :M: Type ?u.108774M →M: Type ?u.108774M) =M: Type ?u.108774_root_.id := rfl #align linear_map.id_coe LinearMap.id_coe end section variable [AddCommMonoid_root_.id: {α : Sort ?u.109222} → α → αM] [AddCommMonoidM: Type ?u.109469M₁] [AddCommMonoidM₁: Type ?u.129654M₂] [AddCommMonoidM₂: Type ?u.169594M₃] variable [AddCommMonoidM₃: Type ?u.109478N₁] [AddCommMonoidN₁: Type ?u.109547N₂] [AddCommMonoidN₂: Type ?u.155459N₃] variable [N₃: Type ?u.109553ModuleModule: (R : Type ?u.134335) → (M : Type ?u.134334) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.134335?u.134334)RR: Type ?u.155420M] [M: Type ?u.109761ModuleModule: (R : Type ?u.144970) → (M : Type ?u.144969) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.144970?u.144969)RR: Type ?u.109586M₂] [M₂: Type ?u.109616ModuleModule: (R : Type ?u.109712) → (M : Type ?u.109711) → [inst : Semiring R] → [inst : AddCommMonoid M] → Type (max?u.109712?u.109711)SS: Type ?u.109601M₃] variable (M₃: Type ?u.109619σ :σ: R →+* SR →+*R: Type ?u.109922S) variable (fₗ gₗ :S: Type ?u.109752M →ₗ[M: Type ?u.109946R]R: Type ?u.109922M₂) (f g :M₂: Type ?u.194556M →ₛₗ[M: Type ?u.109946σ]σ: R →+* SM₃) theoremM₃: Type ?u.109955isLinear :isLinear: IsLinearMap R ↑fₗIsLinearMapIsLinearMap: (R : Type ?u.110836) → {M : Type ?u.110835} → {M₂ : Type ?u.110834} → [inst : Semiring R] → [inst_1 : AddCommMonoid M] → [inst_2 : AddCommMonoid M₂] → [inst_3 : Module R M] → [inst : Module R M₂] → (M → M₂) → PropR fₗ := ⟨fₗ.R: Type ?u.110378map_add', fₗ.map_add': ∀ {M : Type ?u.111248} {N : Type ?u.111247} [inst : Add M] [inst_1 : Add N] (self : AddHom M N) (x y : M), AddHom.toFun self (x + y) = AddHom.toFun self x + AddHom.toFun self ymap_smul'⟩ #align linear_map.is_linearmap_smul': ∀ {R : Type ?u.112173} {S : Type ?u.112172} [inst : Semiring R] [inst_1 : Semiring S] {σ : R →+* S} {M : Type ?u.112171} {M₂ : Type ?u.112170} [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₂] [inst_4 : Module R M] [inst_5 : Module S M₂] (self : M →ₛₗ[σ] M₂) (r : R) (x : M), AddHom.toFun self.toAddHom (r • x) = ↑σ r • AddHom.toFun self.toAddHom xLinearMap.isLinear variable {LinearMap.isLinear: ∀ {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : AddCommMonoid M₂] [inst_3 : Module R M] [inst_4 : Module R M₂] (fₗ : M →ₗ[R] M₂), IsLinearMap R ↑fₗfₗfₗ: ?m.112663gₗgₗ: ?m.112666ff: ?m.112669gg: ?m.112672σ} theoremσ: ?m.112675coe_injective : Injective (FunLike.coe : (coe_injective: Injective FunLike.coeM →ₛₗ[M: Type ?u.112702σ]σ: R →+* SM₃) →M₃: Type ?u.112711_) := FunLike.coe_injective #align linear_map.coe_injective LinearMap.coe_injective protected theorem_: Sort ?u.113252congr_arg {xx: Mx' :x': MM} :M: Type ?u.113632x =x: Mx' → fx': Mx = fx: Mx' := FunLike.congr_arg f #align linear_map.congr_arg LinearMap.congr_arg /-- If two linear maps are equal, they are equal at each point. -/ protected theorem congr_fun (x': Mh : f = g) (h: f = gx :x: MM) : fM: Type ?u.114488x = gx: Mx := FunLike.congr_funx: Mhh: f = gx #align linear_map.congr_fun LinearMap.congr_fun theorem ext_iff : f = g ↔ ∀x: Mx, fx: ?m.115791x = gx: ?m.115791x := FunLike.ext_iff #align linear_map.ext_iff LinearMap.ext_iff @[simp] theoremx: ?m.115791mk_coe (f :mk_coe: ∀ {R : Type u_1} {S : Type u_2} {M : Type u_3} {M₃ : Type u_4} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : M →ₛₗ[σ] M₃) (h : ∀ (r : R) (x : M), AddHom.toFun (↑f) (r • x) = ↑σ r • AddHom.toFun (↑f) x), { toAddHom := ↑f, map_smul' := h } = fM →ₛₗ[M: Type ?u.116258σ]σ: R →+* SM₃) (M₃: Type ?u.116267h) : (h: ∀ (r : R) (x : M), AddHom.toFun (↑f) (r • x) = ↑σ r • AddHom.toFun (↑f) xLinearMap.mk fLinearMap.mk: {R : Type ?u.116856} → {S : Type ?u.116855} → [inst : Semiring R] → [inst_1 : Semiring S] → {σ : R →+* S} → {M : Type ?u.116854} → {M₂ : Type ?u.116853} → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst_4 : Module R M] → [inst_5 : Module S M₂] → (toAddHom : AddHom M M₂) → (∀ (r : R) (x : M), AddHom.toFun toAddHom (r • x) = ↑σ r • AddHom.toFun toAddHom x) → M →ₛₗ[σ] M₂h :h: ?m.116804M →ₛₗ[M: Type ?u.116258σ]σ: R →+* SM₃) = f :=M₃: Type ?u.116267ext funext: ∀ {R : Type ?u.117243} {S : Type ?u.117244} {M : Type ?u.117245} {M₃ : Type ?u.117246} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} {f g : M →ₛₗ[σ] M₃}, (∀ (x : M), ↑f x = ↑g x) → f = g_ ↦ rfl #align linear_map.mk_coe_: ?m.117405LinearMap.mk_coe variable (LinearMap.mk_coe: ∀ {R : Type u_1} {S : Type u_2} {M : Type u_3} {M₃ : Type u_4} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : M →ₛₗ[σ] M₃) (h : ∀ (r : R) (x : M), AddHom.toFun (↑f) (r • x) = ↑σ r • AddHom.toFun (↑f) x), { toAddHom := ↑f, map_smul' := h } = ffₗfₗ: ?m.118000gₗgₗ: ?m.118003ff: ?m.118006g) protected theoremg: ?m.118009map_add (xx: My :y: MM) : f (M: Type ?u.118036x +x: My) = fy: Mx + fx: My := map_add fy: Mxx: My #align linear_map.map_add LinearMap.map_add protected theoremy: Mmap_zero : f0 =0: ?m.1224280 := map_zero f #align linear_map.map_zero LinearMap.map_zero -- Porting note: `simp` wasn't picking up `map_smulₛₗ` for `LinearMap`s without specifying -- `map_smulₛₗ f`, so we marked this as `@[simp]` in Mathlib3. -- For Mathlib4, let's try without the `@[simp]` attribute and hope it won't need to be re-enabled. protected theorem map_smulₛₗ (0: ?m.123011c :c: RR) (R: Type ?u.125890x :x: MM) : f (M: Type ?u.125914c •c: Rx) =x: Mσσ: R →+* Sc • fc: Rx :=x: Mmap_smulₛₗ fmap_smulₛₗ: ∀ {F : Type ?u.129371} {R : outParam (Type ?u.129370)} {S : outParam (Type ?u.129369)} [inst : Semiring R] [inst_1 : Semiring S] {σ : outParam (R →+* S)} {M : outParam (Type ?u.129368)} {M₂ : outParam (Type ?u.129367)} [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₂] [inst_4 : Module R M] [inst_5 : Module S M₂] [self : SemilinearMapClass F σ M M₂] (f : F) (r : R) (x : M), ↑f (r • x) = ↑σ r • ↑f xcc: Rx #align linear_map.map_smulₛₗx: MLinearMap.map_smulₛₗ protected theorem map_smul (LinearMap.map_smulₛₗ: ∀ {R : Type u_2} {S : Type u_4} {M : Type u_3} {M₃ : Type u_1} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : M →ₛₗ[σ] M₃) (c : R) (x : M), ↑f (c • x) = ↑σ c • ↑f xc :c: RR) (R: Type ?u.129627x :x: MM) : fₗ (M: Type ?u.129651c •c: Rx) =x: Mc • fₗc: Rx := map_smul fₗx: Mcc: Rx #align linear_map.map_smul LinearMap.map_smul protected theoremx: Mmap_smul_inv {map_smul_inv: ∀ {σ' : S →+* R} [inst : RingHomInvPair σ σ'] (c : S) (x : M), c • ↑f x = ↑f (↑σ' c • x)σ' :σ': S →+* RS →+*S: Type ?u.134274R} [RingHomInvPairR: Type ?u.134259σσ: R →+* Sσ'] (σ': S →+* Rc :c: SS) (S: Type ?u.134274x :x: MM) :M: Type ?u.134283c • fc: Sx = f (x: Mσ'σ': S →+* Rc •c: Sx) :=x: MGoals accomplished! 🐙R: Type u_2
R₁: Type ?u.134262
R₂: Type ?u.134265
R₃: Type ?u.134268
k: Type ?u.134271
S: Type u_1
S₃: Type ?u.134277
T: Type ?u.134280
M: Type u_4
M₁: Type ?u.134286
M₂: Type ?u.134289
M₃: Type u_3
N₁: Type ?u.134295
N₂: Type ?u.134298
N₃: Type ?u.134301
ι: Type ?u.134304
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
σ': S →+* R
inst✝: RingHomInvPair σ σ'
c: S
x: M#align linear_map.map_smul_invGoals accomplished! 🐙LinearMap.map_smul_inv @[simp] theorem map_eq_zero_iff (LinearMap.map_smul_inv: ∀ {R : Type u_2} {S : Type u_1} {M : Type u_4} {M₃ : Type u_3} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : M →ₛₗ[σ] M₃) {σ' : S →+* R} [inst_6 : RingHomInvPair σ σ'] (c : S) (x : M), c • ↑f x = ↑f (↑σ' c • x)h : Function.Injective f) {h: Injective ↑fx :x: MM} : fM: Type ?u.139950x =x: M0 ↔0: ?m.140632x =x: M0 := _root_.map_eq_zero_iff f0: ?m.141383h #align linear_map.map_eq_zero_iffh: Injective ↑fLinearMap.map_eq_zero_iff section Pointwise open Pointwise variable (LinearMap.map_eq_zero_iff: ∀ {R : Type u_3} {S : Type u_4} {M : Type u_1} {M₃ : Type u_2} [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] {σ : R →+* S} (f : M →ₛₗ[σ] M₃), Injective ↑f → ∀ {x : M}, ↑f x = 0 ↔ x = 0MM: ?m.145324M₃M₃: ?m.145327σ) {σ: ?m.145330F :F: Type ?u.145333Type _} (Type _: Type (?u.155876+1)h :h: FF) @[simp] theoremF: Type ?u.145333_root_.image_smul_setₛₗ [_root_.image_smul_setₛₗ: ∀ {R : Type u_2} {S : Type u_3} (M : Type u_4) (M₃ : Type u_5) [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] (σ : R →+* S) {F : Type u_1} (h : F) [inst_6 : SemilinearMapClass F σ M M₃] (c : R) (s : Set M), ↑h '' (c • s) = ↑σ c • ↑h '' sSemilinearMapClassSemilinearMapClass: Type ?u.145803 → {R : outParam (Type ?u.145802)} → {S : outParam (Type ?u.145801)} → [inst : Semiring R] → [inst_1 : Semiring S] → outParam (R →+* S) → (M : outParam (Type ?u.145800)) → (M₂ : outParam (Type ?u.145799)) → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst : Module R M] → [inst : Module S M₂] → Type (max(max?u.145803?u.145800)?u.145799)FF: Type ?u.145794σσ: R →+* SMM: Type ?u.145362M₃] (M₃: Type ?u.145371c :c: RR) (R: Type ?u.145338s : Sets: Set MM) :M: Type ?u.145362h '' (h: Fc •c: Rs) =s: Set Mσσ: R →+* Sc •c: Rh ''h: Fs :=s: Set MGoals accomplished! 🐙R: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set MR: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set M
h₁R: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set M
h₂R: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set MR: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set M
h₁R: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set M
h₁R: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set M
h₂R: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set M
z: M
zs: z ∈ s
h₁.intro.intro.intro.introR: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set M
h₁Goals accomplished! 🐙R: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set MR: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set M
h₂R: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set M
h₂R: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set M
z: M
hz: z ∈ s
h₂.intro.intro.intro.introR: Type u_2
R₁: Type ?u.145341
R₂: Type ?u.145344
R₃: Type ?u.145347
k: Type ?u.145350
S: Type u_3
S₃: Type ?u.145356
T: Type ?u.145359
M: Type u_4
M₁: Type ?u.145365
M₂: Type ?u.145368
M₃: Type u_5
N₁: Type ?u.145374
N₂: Type ?u.145377
N₃: Type ?u.145380
ι: Type ?u.145383
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
s: Set M
h₂#align image_smul_setₛₗGoals accomplished! 🐙image_smul_setₛₗ theoremimage_smul_setₛₗ: ∀ {R : Type u_2} {S : Type u_3} (M : Type u_4) (M₃ : Type u_5) [inst : Semiring R] [inst_1 : Semiring S] [inst_2 : AddCommMonoid M] [inst_3 : AddCommMonoid M₃] [inst_4 : Module R M] [inst_5 : Module S M₃] (σ : R →+* S) {F : Type u_1} (h : F) [inst_6 : SemilinearMapClass F σ M M₃] (c : R) (s : Set M), ↑h '' (c • s) = ↑σ c • ↑h '' s_root_.preimage_smul_setₛₗ [SemilinearMapClassSemilinearMapClass: Type ?u.155885 → {R : outParam (Type ?u.155884)} → {S : outParam (Type ?u.155883)} → [inst : Semiring R] → [inst_1 : Semiring S] → outParam (R →+* S) → (M : outParam (Type ?u.155882)) → (M₂ : outParam (Type ?u.155881)) → [inst_2 : AddCommMonoid M] → [inst_3 : AddCommMonoid M₂] → [inst : Module R M] → [inst : Module S M₂] → Type (max(max?u.155885?u.155882)?u.155881)FF: Type ?u.155876σσ: R →+* SMM: Type ?u.155444M₃] {M₃: Type ?u.155453c :c: RR} (R: Type ?u.155420hc : IsUnithc: IsUnit cc) (c: Rs : Sets: Set M₃M₃) :M₃: Type ?u.155453h ⁻¹' (h: Fσσ: R →+* Sc •c: Rs) =s: Set M₃c •c: Rh ⁻¹'h: Fs :=s: Set M₃Goals accomplished! 🐙R: Type u_2
R₁: Type ?u.155423
R₂: Type ?u.155426
R₃: Type ?u.155429
k: Type ?u.155432
S: Type u_3
S₃: Type ?u.155438
T: Type ?u.155441
M: Type u_4
M₁: Type ?u.155447
M₂: Type ?u.155450
M₃: Type u_5
N₁: Type ?u.155456
N₂: Type ?u.155459
N₃: Type ?u.155462
ι: Type ?u.155465
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
hc: IsUnit c
s: Set M₃R: Type u_2
R₁: Type ?u.155423
R₂: Type ?u.155426
R₃: Type ?u.155429
k: Type ?u.155432
S: Type u_3
S₃: Type ?u.155438
T: Type ?u.155441
M: Type u_4
M₁: Type ?u.155447
M₂: Type ?u.155450
M₃: Type u_5
N₁: Type ?u.155456
N₂: Type ?u.155459
N₃: Type ?u.155462
ι: Type ?u.155465
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
hc: IsUnit c
s: Set M₃
h₁R: Type u_2
R₁: Type ?u.155423
R₂: Type ?u.155426
R₃: Type ?u.155429
k: Type ?u.155432
S: Type u_3
S₃: Type ?u.155438
T: Type ?u.155441
M: Type u_4
M₁: Type ?u.155447
M₂: Type ?u.155450
M₃: Type u_5
N₁: Type ?u.155456
N₂: Type ?u.155459
N₃: Type ?u.155462
ι: Type ?u.155465
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R] M₂
f, g: M →ₛₗ[σ] M₃
F: Type u_1
h: F
inst✝: SemilinearMapClass F σ M M₃
c: R
hc: IsUnit c
s: Set M₃
h₂R: Type u_2
R₁: Type ?u.155423
R₂: Type ?u.155426
R₃: Type ?u.155429
k: Type ?u.155432
S: Type u_3
S₃: Type ?u.155438
T: Type ?u.155441
M: Type u_4
M₁: Type ?u.155447
M₂: Type ?u.155450
M₃: Type u_5
N₁: Type ?u.155456
N₂: Type ?u.155459
N₃: Type ?u.155462
ι: Type ?u.155465
inst✝¹²: Semiring R
inst✝¹¹: Semiring S
inst✝¹⁰: AddCommMonoid M
inst✝⁹: AddCommMonoid M₁
inst✝⁸: AddCommMonoid M₂
inst✝⁷: AddCommMonoid M₃
inst✝⁶: AddCommMonoid N₁
inst✝⁵: AddCommMonoid N₂
inst✝⁴: AddCommMonoid N₃
inst✝³: Module R M
inst✝²: Module R M₂
inst✝¹: Module S M₃
σ: R →+* S
fₗ, gₗ: M →ₗ[R