/- Copyright (c) 2019 Kenny Lau. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Kenny Lau ! This file was ported from Lean 3 source module algebra.direct_sum.basic ! leanprover-community/mathlib commit f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c ! Please do not edit these lines, except to modify the commit id ! if you have ported upstream changes. -/ import Mathlib.Data.Dfinsupp.Basic import Mathlib.GroupTheory.Submonoid.Operations /-! # Direct sum This file defines the direct sum of abelian groups, indexed by a discrete type. ## Notation `⨁ i, β i` is the n-ary direct sum `DirectSum`. This notation is in the `DirectSum` locale, accessible after `open DirectSum`. ## References * https://en.wikipedia.org/wiki/Direct_sum -/ open BigOperators universe u v w u₁ variable (ι :ι: Type vType v) [Type v: Type (v+1)dec_ι : DecidableEqdec_ι: DecidableEq ιι] (ι: Type vβ :β: ι → Type wι →ι: Type vType w) /-- `DirectSum β` is the direct sum of a family of additive commutative monoids `β i`. Note: `open DirectSum` will enable the notation `⨁ i, β i` for `DirectSum β`. -/ defType w: Type (w+1)DirectSum [∀DirectSum: (ι : Type v) → (β : ι → Type w) → [inst : (i : ι) → AddCommMonoid (β i)] → Type (maxwv)i, AddCommMonoid (i: ?m.33ββ: ι → Type wi)] :i: ?m.33Type _ := -- Porting note: Failed to synthesize -- Π₀ i, β i deriving AddCommMonoid, Inhabited Π₀Type _: Type (?u.40+1)i,i: ?m.47ββ: ι → Type wi #align direct_sumi: ?m.47DirectSum -- Porting note: Added inhabited instance manuallyDirectSum: (ι : Type v) → (β : ι → Type w) → [inst : (i : ι) → AddCommMonoid (β i)] → Type (maxwv)instance [∀instance: (ι : Type v) → (β : ι → Type w) → [inst : (i : ι) → AddCommMonoid (β i)] → Inhabited (DirectSum ι β)i, AddCommMonoid (i: ?m.1313ββ: ι → Type wi)] : Inhabited (i: ?m.1313DirectSumDirectSum: (ι : Type ?u.1322) → (β : ι → Type ?u.1321) → [inst : (i : ι) → AddCommMonoid (β i)] → Type (max?u.1321?u.1322)ιι: Type vβ) :=β: ι → Type winferInstanceAs (Inhabited (Π₀inferInstanceAs: (α : Sort ?u.1356) → [i : α] → αi,i: ?m.1362ββ: ι → Type wi)) -- Porting note: Added addCommMonoid instance manuallyi: ?m.1362instance [∀instance: (ι : Type v) → (β : ι → Type w) → [inst : (i : ι) → AddCommMonoid (β i)] → AddCommMonoid (DirectSum ι β)i, AddCommMonoid (i: ?m.2864ββ: ι → Type wi)] : AddCommMonoid (i: ?m.2864DirectSumDirectSum: (ι : Type ?u.2873) → (β : ι → Type ?u.2872) → [inst : (i : ι) → AddCommMonoid (β i)] → Type (max?u.2872?u.2873)ιι: Type vβ) :=β: ι → Type winferInstanceAs (AddCommMonoid (Π₀inferInstanceAs: (α : Sort ?u.2907) → [i : α] → αi,i: ?m.2913ββ: ι → Type wi))i: ?m.2913instance [∀instance: (ι : Type v) → (β : ι → Type w) → [inst : (i : ι) → AddCommMonoid (β i)] → CoeFun (DirectSum ι β) fun x => (i : ι) → β ii, AddCommMonoid (i: ?m.4297ββ: ι → Type wi)] : CoeFun (i: ?m.4297DirectSumDirectSum: (ι : Type ?u.4307) → (β : ι → Type ?u.4306) → [inst : (i : ι) → AddCommMonoid (β i)] → Type (max?u.4306?u.4307)ιι: Type vβ) funβ: ι → Type w_ => ∀_: ?m.4340i :i: ιι,ι: Type vββ: ι → Type wi :=i: ιinferInstanceAs (CoeFun (Π₀inferInstanceAs: (α : Sort ?u.4358) → [i : α] → αi,i: ?m.4365ββ: ι → Type wi) funi: ?m.4365_ => ∀_: ?m.5597i :i: ιι,ι: Type vββ: ι → Type wi) -- Porting note: scoped does not work with notation3; TODO rewrite as lean4 notation? -- scoped[DirectSum] /-- `⨁ i, f i` is notation for `DirectSum _ f` and equals the direct sum of `fun i ↦ f i`. Taking the direct sum over multiple arguments is possible, e.g. `⨁ (i) (j), f i j`. -/ notation3"⨁ "(...)", "i: ιr:(scoped f => DirectSum _ f) => r -- Porting note: The below recreates some of the lean3 notation, not fully yet -- section -- open Std.ExtendedBinder -- syntax (name := bigdirectsum) "⨁ " extBinders ", " term : term -- macro_rules (kind := bigdirectsum) -- | `(⨁ $_:ident, $y:ident → $z:ident) => `(DirectSum _ (fun $y ↦ $z)) -- | `(⨁ $x:ident, $p) => `(DirectSum _ (fun $x ↦ $p)) -- | `(⨁ $_:ident : $t:ident, $p) => `(DirectSum _ (fun $t ↦ $p)) -- | `(⨁ ($x:ident) ($y:ident), $p) => `(DirectSum _ (fun $x ↦ fun $y ↦ $p)) -- end namespace DirectSum variable {r: ?m.5920ι} section AddCommGroup variable [∀ι: ?m.8747i, AddCommGroup (i: ?m.8766ββ: ι → Type wi)]i: ?m.8789instance : AddCommGroup (instance: {ι : Type v} → (β : ι → Type w) → [inst : (i : ι) → AddCommGroup (β i)] → AddCommGroup (DirectSum ι β)DirectSumDirectSum: (ι : Type ?u.8798) → (β : ι → Type ?u.8797) → [inst : (i : ι) → AddCommMonoid (β i)] → Type (max?u.8797?u.8798)ιι: Type vβ) :=β: ι → Type winferInstanceAs (AddCommGroup (Π₀inferInstanceAs: (α : Sort ?u.9613) → [i : α] → αi,i: ?m.9619ββ: ι → Type wi)) variable {i: ?m.9619β} @[simp] theoremβ: ?m.10604sub_apply (g₁g₁: DirectSum ι fun i => β ig₂ : ⨁g₂: DirectSum ?m.11453 fun i => β ii,i: ?m.10634ββ: ι → Type wi) (i: ?m.10634i :i: ιι) : (ι: Type vg₁ -g₁: DirectSum ?m.10632 fun i => β ig₂)g₂: DirectSum ?m.11453 fun i => β ii =i: ιg₁g₁: DirectSum ?m.10632 fun i => β ii -i: ιg₂g₂: DirectSum ?m.11453 fun i => β ii := rfl #align direct_sum.sub_apply DirectSum.sub_apply end AddCommGroup variable [∀i: ιi, AddCommMonoid (i: ?m.36167ββ: ι → Type wi)] @[simp] theoremi: ?m.12254zero_apply (zero_apply: ∀ {ι : Type v} (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] (i : ι), ↑0 i = 0i :i: ιι) : (ι: Type v0 : ⨁0: ?m.12325i,i: ?m.12292ββ: ι → Type wi)i: ?m.12292i =i: ι0 := rfl #align direct_sum.zero_apply0: ?m.13282DirectSum.zero_apply variable {DirectSum.zero_apply: ∀ {ι : Type v} (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] (i : ι), ↑0 i = 0β} @[simp] theorem add_apply (β: ?m.13927g₁g₁: DirectSum ?m.13955 fun i => β ig₂ : ⨁g₂: DirectSum ι fun i => β ii,i: ?m.13995ββ: ι → Type wi) (i: ?m.13957i :i: ιι) : (ι: Type vg₁ +g₁: DirectSum ?m.13955 fun i => β ig₂)g₂: DirectSum ?m.13993 fun i => β ii =i: ιg₁g₁: DirectSum ?m.13955 fun i => β ii +i: ιg₂g₂: DirectSum ?m.13993 fun i => β ii := rfl #align direct_sum.add_apply DirectSum.add_apply variable (i: ιβ) -- Porting note: commented out -- include dec_ι /-- `mk β s x` is the element of `⨁ i, β i` that is zero outside `s` and has coefficient `x i` for `i` in `s`. -/ def mk (β: ?m.16213s : Finsets: Finset ιι) : (∀ι: Type vi : (↑i: ↑↑ss : Sets: Finset ιι),ι: Type vββ: ι → Type wi.1) →+ ⨁i: ↑↑si,i: ?m.16380ββ: ι → Type wi where toFun := Dfinsupp.mki: ?m.16380s map_add's: Finset ι__: ?m.22295_ :=_: ?m.22298Dfinsupp.mk_add map_zero' :=Dfinsupp.mk_add: ∀ {ι : Type ?u.22301} {β : ι → Type ?u.22300} [dec : DecidableEq ι] [inst : (i : ι) → AddZeroClass (β i)] {s : Finset ι} {x y : (i : ↑↑s) → β ↑i}, Dfinsupp.mk s (x + y) = Dfinsupp.mk s x + Dfinsupp.mk s yDfinsupp.mk_zero #align direct_sum.mkDfinsupp.mk_zero: ∀ {ι : Type ?u.22058} {β : ι → Type ?u.22057} [dec : DecidableEq ι] [inst : (i : ι) → Zero (β i)] {s : Finset ι}, Dfinsupp.mk s 0 = 0DirectSum.mk /-- `of i` is the natural inclusion map from `β i` to `⨁ i, β i`. -/ def of (DirectSum.mk: {ι : Type v} → [dec_ι : DecidableEq ι] → (β : ι → Type w) → [inst : (i : ι) → AddCommMonoid (β i)] → (s : Finset ι) → ((i : ↑↑s) → β ↑i) →+ DirectSum ι fun i => β ii :i: ιι) :ι: Type vββ: ι → Type wi →+ ⨁i: ιi,i: ?m.23720ββ: ι → Type wi :=i: ?m.23720Dfinsupp.singleAddHomDfinsupp.singleAddHom: {ι : Type ?u.24863} → (β : ι → Type ?u.24862) → [dec : DecidableEq ι] → [inst : (i : ι) → AddZeroClass (β i)] → (i : ι) → β i →+ Dfinsupp fun i => β iββ: ι → Type wi #align direct_sum.ofi: ιDirectSum.of @[simp] theoremDirectSum.of: {ι : Type v} → [dec_ι : DecidableEq ι] → (β : ι → Type w) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β iof_eq_same (of_eq_same: ∀ {ι : Type v} [dec_ι : DecidableEq ι] (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] (i : ι) (x : β i), ↑(↑(of β i) x) i = xi :i: ιι) (ι: Type vx :x: β iββ: ι → Type wi) : (i: ιofof: {ι : Type ?u.25964} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.25963) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.25965 → Type ?u.25963ii: ιx)x: β ii =i: ιx :=x: β iDfinsupp.single_eq_same #align direct_sum.of_eq_sameDfinsupp.single_eq_same: ∀ {ι : Type ?u.34582} {β : ι → Type ?u.34581} [dec : DecidableEq ι] [inst : (i : ι) → Zero (β i)] {i : ι} {b : β i}, ↑(Dfinsupp.single i b) i = bDirectSum.of_eq_same theorem of_eq_of_ne (DirectSum.of_eq_same: ∀ {ι : Type v} [dec_ι : DecidableEq ι] (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] (i : ι) (x : β i), ↑(↑(of β i) x) i = xii: ιj :j: ιι) (ι: Type vx :x: β iββ: ι → Type wi) (i: ιh :h: i ≠ ji ≠i: ιj) : (j: ιofof: {ι : Type ?u.36186} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.36185) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.36187 → Type ?u.36185ii: ιx)x: β ij =j: ι0 :=0: ?m.44798Dfinsupp.single_eq_of_neDfinsupp.single_eq_of_ne: ∀ {ι : Type ?u.45406} {β : ι → Type ?u.45405} [dec : DecidableEq ι] [inst : (i : ι) → Zero (β i)] {i i' : ι} {b : β i}, i ≠ i' → ↑(Dfinsupp.single i b) i' = 0h #align direct_sum.of_eq_of_neh: i ≠ jDirectSum.of_eq_of_ne @[simp] theoremDirectSum.of_eq_of_ne: ∀ {ι : Type v} [dec_ι : DecidableEq ι] (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] (i j : ι) (x : β i), i ≠ j → ↑(↑(of β i) x) j = 0support_zero [∀ (support_zero: ∀ {ι : Type v} [dec_ι : DecidableEq ι] (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] [inst_1 : (i : ι) → (x : β i) → Decidable (x ≠ 0)], Dfinsupp.support 0 = ∅i :i: ιι) (ι: Type vx :x: β iββ: ι → Type wi), Decidable (i: ιx ≠x: β i0)] : (0: ?m.468460 : ⨁0: ?m.47473i,i: ?m.47443ββ: ι → Type wi).i: ?m.47443support =∅ :=∅: ?m.49586Dfinsupp.support_zero #align direct_sum.support_zeroDfinsupp.support_zero: ∀ {ι : Type ?u.49671} {β : ι → Type ?u.49670} [dec : DecidableEq ι] [inst : (i : ι) → Zero (β i)] [inst_1 : (i : ι) → (x : β i) → Decidable (x ≠ 0)], Dfinsupp.support 0 = ∅DirectSum.support_zero @[simp] theoremDirectSum.support_zero: ∀ {ι : Type v} [dec_ι : DecidableEq ι] (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] [inst_1 : (i : ι) → (x : β i) → Decidable (x ≠ 0)], Dfinsupp.support 0 = ∅support_of [∀ (i :i: ιι) (ι: Type vx :x: β iββ: ι → Type wi), Decidable (i: ιx ≠x: β i0)] (0: ?m.51189i :i: ιι) (ι: Type vx :x: β iββ: ι → Type wi) (i: ιh :h: x ≠ 0x ≠x: β i0) : (0: ?m.51787ofof: {ι : Type ?u.52250} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.52249) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.52251 → Type ?u.52249ii: ιx).x: β isupport = {i} :=i: ιDfinsupp.support_single_ne_zeroDfinsupp.support_single_ne_zero: ∀ {ι : Type ?u.62084} {β : ι → Type ?u.62083} [dec : DecidableEq ι] [inst : (i : ι) → Zero (β i)] [inst_1 : (i : ι) → (x : β i) → Decidable (x ≠ 0)] {i : ι} {b : β i}, b ≠ 0 → Dfinsupp.support (Dfinsupp.single i b) = {i}h #align direct_sum.support_ofh: x ≠ 0DirectSum.support_of theoremDirectSum.support_of: ∀ {ι : Type v} [dec_ι : DecidableEq ι] (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] [inst_1 : (i : ι) → (x : β i) → Decidable (x ≠ 0)] (i : ι) (x : β i), x ≠ 0 → Dfinsupp.support (↑(of β i) x) = {i}support_of_subset [∀ (support_of_subset: ∀ {ι : Type v} [dec_ι : DecidableEq ι] (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] [inst_1 : (i : ι) → (x : β i) → Decidable (x ≠ 0)] {i : ι} {b : β i}, Dfinsupp.support (↑(of β i) b) ⊆ {i}i :i: ιι) (ι: Type vx :x: β iββ: ι → Type wi), Decidable (i: ιx ≠x: β i0)] {0: ?m.63736i :i: ιι} {ι: Type vb :b: β iββ: ι → Type wi} : (i: ιofof: {ι : Type ?u.64342} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.64341) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.64343 → Type ?u.64341ii: ιb).b: β isupport ⊆ {i} :=i: ιDfinsupp.support_single_subset #align direct_sum.support_of_subsetDfinsupp.support_single_subset: ∀ {ι : Type ?u.74134} {β : ι → Type ?u.74133} [dec : DecidableEq ι] [inst : (i : ι) → Zero (β i)] [inst_1 : (i : ι) → (x : β i) → Decidable (x ≠ 0)] {i : ι} {b : β i}, Dfinsupp.support (Dfinsupp.single i b) ⊆ {i}DirectSum.support_of_subset theoremDirectSum.support_of_subset: ∀ {ι : Type v} [dec_ι : DecidableEq ι] (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] [inst_1 : (i : ι) → (x : β i) → Decidable (x ≠ 0)] {i : ι} {b : β i}, Dfinsupp.support (↑(of β i) b) ⊆ {i}sum_support_of [∀ (sum_support_of: ∀ {ι : Type v} [dec_ι : DecidableEq ι] (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] [inst_1 : (i : ι) → (x : β i) → Decidable (x ≠ 0)] (x : DirectSum ι fun i => β i), ∑ i in Dfinsupp.support x, ↑(of β i) (↑x i) = xi :i: ιι) (ι: Type vx :x: β iββ: ι → Type wi), Decidable (i: ιx ≠x: β i0)] (0: ?m.75694x : ⨁x: DirectSum ι fun i => β ii,i: ?m.76289ββ: ι → Type wi) : (∑i: ?m.76289i ini: ?m.77564x.support,x: DirectSum ?m.76287 fun i => β iofof: {ι : Type ?u.77567} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.77566) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β iββ: ι → Type wi (i: ?m.77564xx: DirectSum ?m.76287 fun i => β ii)) =i: ?m.77564x :=x: DirectSum ?m.76287 fun i => β iDfinsupp.sum_single #align direct_sum.sum_support_ofDfinsupp.sum_single: ∀ {ι : Type ?u.86128} {β : ι → Type ?u.86127} [dec : DecidableEq ι] [inst : (i : ι) → AddCommMonoid (β i)] [inst_1 : (i : ι) → (x : β i) → Decidable (x ≠ 0)] {f : Dfinsupp fun i => β i}, Dfinsupp.sum f Dfinsupp.single = fDirectSum.sum_support_of variable {DirectSum.sum_support_of: ∀ {ι : Type v} [dec_ι : DecidableEq ι] (β : ι → Type w) [inst : (i : ι) → AddCommMonoid (β i)] [inst_1 : (i : ι) → (x : β i) → Decidable (x ≠ 0)] (x : DirectSum ι fun i => β i), ∑ i in Dfinsupp.support x, ↑(of β i) (↑x i) = xβ} theoremβ: ?m.86822mk_injective (mk_injective: ∀ (s : Finset ι), Function.Injective ↑(mk β s)s : Finsets: Finset ιι) : Function.Injective (ι: Type vmkmk: {ι : Type ?u.86856} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.86855) → [inst : (i : ι) → AddCommMonoid (β i)] → (s : Finset ι) → ((i : ↑↑s) → β ↑i) →+ DirectSum ι fun i => β iββ: ι → Type ws) :=s: Finset ιDfinsupp.mk_injectiveDfinsupp.mk_injective: ∀ {ι : Type ?u.95385} {β : ι → Type ?u.95384} [dec : DecidableEq ι] [inst : (i : ι) → Zero (β i)] (s : Finset ι), Function.Injective (Dfinsupp.mk s)s #align direct_sum.mk_injectives: Finset ιDirectSum.mk_injective theoremDirectSum.mk_injective: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] (s : Finset ι), Function.Injective ↑(mk β s)of_injective (of_injective: ∀ (i : ι), Function.Injective ↑(of β i)i :i: ιι) : Function.Injective (ι: Type vofof: {ι : Type ?u.96833} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.96832) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β iββ: ι → Type wi) :=i: ιDfinsupp.single_injective #align direct_sum.of_injectiveDfinsupp.single_injective: ∀ {ι : Type ?u.105350} {β : ι → Type ?u.105349} [dec : DecidableEq ι] [inst : (i : ι) → Zero (β i)] {i : ι}, Function.Injective (Dfinsupp.single i)DirectSum.of_injective @[elab_as_elim] protected theoremDirectSum.of_injective: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] (i : ι), Function.Injective ↑(of β i)induction_on {C : (⨁induction_on: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {C : (DirectSum ι fun i => β i) → Prop} (x : DirectSum ι fun i => β i), C 0 → (∀ (i : ι) (x : β i), C (↑(of β i) x)) → (∀ (x y : DirectSum ι fun i => β i), C x → C y → C (x + y)) → C xi,i: ?m.106874ββ: ι → Type wi) →i: ?m.106874Prop} (Prop: Typex : ⨁x: DirectSum ?m.106911 fun i => β ii,i: ?m.106913ββ: ι → Type wi) (i: ?m.106913H_zero : CH_zero: C 00) (0: ?m.106925H_basic : ∀ (H_basic: ∀ (i : ι) (x : β i), C (↑(of β i) x)i :i: ιι) (ι: Type vx :x: β iββ: ι → Type wi), C (i: ιofof: {ι : Type ?u.107841} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.107840) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β iββ: ι → Type wii: ιx)) (H_plus : ∀x: β ixx: ?m.116348y, Cy: ?m.116351x → Cx: ?m.116348y → C (y: ?m.116351x +x: ?m.116348y)) : Cy: ?m.116351x :=x: DirectSum ?m.106911 fun i => β iGoals accomplished! 🐙ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝: (i : ι) → AddCommMonoid (β i)
C: (DirectSum ι fun i => β i) → Prop
x: DirectSum ι fun i => β i
H_zero: C 0
H_basic: ∀ (i : ι) (x : β i), C (↑(of β i) x)
H_plus: ∀ (x y : DirectSum ι fun i => β i), C x → C y → C (x + y)C xι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝: (i : ι) → AddCommMonoid (β i)
C: (DirectSum ι fun i => β i) → Prop
x: DirectSum ι fun i => β i
H_zero: C 0
H_basic: ∀ (i : ι) (x : β i), C (↑(of β i) x)
H_plus: ∀ (x y : DirectSum ι fun i => β i), C x → C y → C (x + y)∀ (i : ι) (b : (fun i => β i) i) (f : Dfinsupp fun i => (fun i => β i) i), ↑f i = 0 → b ≠ 0 → C f → C (Dfinsupp.single i b + f)ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝: (i : ι) → AddCommMonoid (β i)
C: (DirectSum ι fun i => β i) → Prop
x: DirectSum ι fun i => β i
H_zero: C 0
H_basic: ∀ (i : ι) (x : β i), C (↑(of β i) x)
H_plus: ∀ (x y : DirectSum ι fun i => β i), C x → C y → C (x + y)C xι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝: (i : ι) → AddCommMonoid (β i)
C: (DirectSum ι fun i => β i) → Prop
x: DirectSum ι fun i => β i
H_zero: C 0
H_basic: ∀ (i : ι) (x : β i), C (↑(of β i) x)
H_plus: ∀ (x y : DirectSum ι fun i => β i), C x → C y → C (x + y)
i: ι
b: β i
f: Dfinsupp fun i => (fun i => β i) i
h1: ↑f i = 0
h2: b ≠ 0
ih: C fC (Dfinsupp.single i b + f)ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝: (i : ι) → AddCommMonoid (β i)
C: (DirectSum ι fun i => β i) → Prop
x: DirectSum ι fun i => β i
H_zero: C 0
H_basic: ∀ (i : ι) (x : β i), C (↑(of β i) x)
H_plus: ∀ (x y : DirectSum ι fun i => β i), C x → C y → C (x + y)C x#align direct_sum.induction_onGoals accomplished! 🐙DirectSum.induction_on /-- If two additive homomorphisms from `⨁ i, β i` are equal on each `of β i y`, then they are equal. -/ theoremDirectSum.induction_on: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {C : (DirectSum ι fun i => β i) → Prop} (x : DirectSum ι fun i => β i), C 0 → (∀ (i : ι) (x : β i), C (↑(of β i) x)) → (∀ (x y : DirectSum ι fun i => β i), C x → C y → C (x + y)) → C xaddHom_ext {γ :γ: Type u_1Type _} [AddMonoidType _: Type (?u.118528+1)γ] ⦃f g : (⨁γ: Type ?u.118528i,i: ?m.118540ββ: ι → Type wi) →+i: ?m.119329γ⦄ (H : ∀ (γ: Type ?u.118528i :i: ιι) (ι: Type vy :y: β iββ: ι → Type wi), f (i: ιofof: {ι : Type ?u.127784} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.127783) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.127785 → Type ?u.127783ii: ιy) = g (y: β iofof: {ι : Type ?u.144741} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.144740) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.144742 → Type ?u.144740ii: ιy)) : f = g :=y: β iDfinsupp.addHom_ext H #align direct_sum.add_hom_ext DirectSum.addHom_ext /-- If two additive homomorphisms from `⨁ i, β i` are equal on each `of β i y`, then they are equal. See note [partially-applied ext lemmas]. -/ @[ext high] theoremDfinsupp.addHom_ext: ∀ {ι : Type ?u.153254} {β : ι → Type ?u.153253} [dec : DecidableEq ι] [inst : (i : ι) → AddZeroClass (β i)] {γ : Type ?u.153252} [inst_1 : AddZeroClass γ] ⦃f g : (Dfinsupp fun i => β i) →+ γ⦄, (∀ (i : ι) (y : β i), ↑f (Dfinsupp.single i y) = ↑g (Dfinsupp.single i y)) → f = gaddHom_ext' {addHom_ext': ∀ {γ : Type u_1} [inst : AddMonoid γ] ⦃f g : (DirectSum ι fun i => β i) →+ γ⦄, (∀ (i : ι), AddMonoidHom.comp f (of (fun i => β i) i) = AddMonoidHom.comp g (of (fun i => β i) i)) → f = gγ :γ: Type ?u.154744Type _} [AddMonoidType _: Type (?u.154744+1)γ] ⦃f g : (⨁γ: Type ?u.154744i,i: ?m.154756ββ: ι → Type wi) →+i: ?m.154756γ⦄ (γ: Type ?u.154744H : ∀H: ∀ (i : ι), AddMonoidHom.comp f (of (fun i => β i) i) = AddMonoidHom.comp g (of (fun i => β i) i)i :i: ιι, f.ι: Type vcomp (comp: {M : Type ?u.155564} → {N : Type ?u.155563} → {P : Type ?u.155562} → [inst : AddZeroClass M] → [inst_1 : AddZeroClass N] → [inst_2 : AddZeroClass P] → (N →+ P) → (M →+ N) → M →+ Pofof: {ι : Type ?u.155585} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.155584) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.155586 → Type ?u.155584i) = g.i: ιcomp (comp: {M : Type ?u.156424} → {N : Type ?u.156423} → {P : Type ?u.156422} → [inst : AddZeroClass M] → [inst_1 : AddZeroClass N] → [inst_2 : AddZeroClass P] → (N →+ P) → (M →+ N) → M →+ Pofof: {ι : Type ?u.156440} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.156439) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.156441 → Type ?u.156439i)) : f = g := addHom_ext funi: ιi => FunLike.congr_fun <|i: ?m.156705HH: ∀ (i : ι), AddMonoidHom.comp f (of (fun i => β i) i) = AddMonoidHom.comp g (of (fun i => β i) i)i #align direct_sum.add_hom_ext'i: ?m.156705DirectSum.addHom_ext' variable {DirectSum.addHom_ext': ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {γ : Type u_1} [inst_1 : AddMonoid γ] ⦃f g : (DirectSum ι fun i => β i) →+ γ⦄, (∀ (i : ι), AddMonoidHom.comp f (of (fun i => β i) i) = AddMonoidHom.comp g (of (fun i => β i) i)) → f = gγ :γ: Type u₁Type u₁} [AddCommMonoidType u₁: Type (u₁+1)γ] section ToAddMonoid variable (γ: Type u₁φ : ∀φ: (i : ι) → β i →+ γi,i: ?m.171386ββ: ι → Type wi →+i: ?m.167171γ) (ψ : (⨁γ: Type u₁i,i: ?m.168008ββ: ι → Type wi) →+i: ?m.166411γ) -- Porting note: The elaborator is struggling with `liftAddHom`. Passing it `β` explicitly helps. -- This applies to roughly the remainder of the file. /-- `toAddMonoid φ` is the natural homomorphism from `⨁ i, β i` to `γ` induced by a family `φ` of homomorphisms `β i → γ`. -/ defγ: Type u₁toAddMonoid : (⨁toAddMonoid: {ι : Type v} → [dec_ι : DecidableEq ι] → {β : ι → Type w} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type u₁} → [inst_1 : AddCommMonoid γ] → ((i : ι) → β i →+ γ) → (DirectSum ι fun i => β i) →+ γi,i: ?m.168745ββ: ι → Type wi) →+i: ?m.168745γ :=γ: Type u₁Dfinsupp.liftAddHom (β :=Dfinsupp.liftAddHom: {ι : Type ?u.169926} → {γ : Type ?u.169924} → {β : ι → Type ?u.169925} → [dec : DecidableEq ι] → [inst : (i : ι) → AddZeroClass (β i)] → [inst_1 : AddCommMonoid γ] → ((i : ι) → β i →+ γ) ≃+ ((Dfinsupp fun i => β i) →+ γ)β)β: ι → Type wφ #align direct_sum.to_add_monoidφ: (i : ι) → β i →+ γDirectSum.toAddMonoid @[simp] theoremDirectSum.toAddMonoid: {ι : Type v} → [dec_ι : DecidableEq ι] → {β : ι → Type w} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type u₁} → [inst_1 : AddCommMonoid γ] → ((i : ι) → β i →+ γ) → (DirectSum ι fun i => β i) →+ γtoAddMonoid_of (toAddMonoid_of: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {γ : Type u₁} [inst_1 : AddCommMonoid γ] (φ : (i : ι) → β i →+ γ) (i : ι) (x : β i), ↑(toAddMonoid φ) (↑(of β i) x) = ↑(φ i) xi) (i: ιx :x: β iββ: ι → Type wi) :i: ?m.172954toAddMonoidtoAddMonoid: {ι : Type ?u.172962} → [dec_ι : DecidableEq ι] → {β : ι → Type ?u.172961} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type ?u.172960} → [inst_1 : AddCommMonoid γ] → ((i : ι) → β i →+ γ) → (DirectSum ι fun i => β i) →+ γφ (φ: (i : ι) → β i →+ γofof: {ι : Type ?u.181496} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.181495) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β iββ: ι → Type wii: ?m.172954x) =x: β iφφ: (i : ι) → β i →+ γii: ?m.172954x :=x: β iDfinsupp.liftAddHom_apply_singleDfinsupp.liftAddHom_apply_single: ∀ {ι : Type ?u.198348} {γ : Type ?u.198346} {β : ι → Type ?u.198347} [dec : DecidableEq ι] [inst : (i : ι) → AddZeroClass (β i)] [inst_1 : AddCommMonoid γ] (f : (i : ι) → β i →+ γ) (i : ι) (x : β i), ↑(↑Dfinsupp.liftAddHom f) (Dfinsupp.single i x) = ↑(f i) xφφ: (i : ι) → β i →+ γii: ιx #align direct_sum.to_add_monoid_ofx: β iDirectSum.toAddMonoid_of theoremDirectSum.toAddMonoid_of: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {γ : Type u₁} [inst_1 : AddCommMonoid γ] (φ : (i : ι) → β i →+ γ) (i : ι) (x : β i), ↑(toAddMonoid φ) (↑(of β i) x) = ↑(φ i) xtoAddMonoid.unique (toAddMonoid.unique: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {γ : Type u₁} [inst_1 : AddCommMonoid γ] (ψ : (DirectSum ι fun i => β i) →+ γ) (f : DirectSum ι fun i => β i), ↑ψ f = ↑(toAddMonoid fun i => AddMonoidHom.comp ψ (of β i)) ff : ⨁f: DirectSum ?m.201131 fun i => β ii,i: ?m.201133ββ: ι → Type wi) : ψi: ?m.201133f =f: DirectSum ?m.201131 fun i => β itoAddMonoid (funtoAddMonoid: {ι : Type ?u.209606} → [dec_ι : DecidableEq ι] → {β : ι → Type ?u.209605} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type ?u.209604} → [inst_1 : AddCommMonoid γ] → ((i : ι) → β i →+ γ) → (DirectSum ι fun i => β i) →+ γi => ψ.i: ?m.209614comp (comp: {M : Type ?u.209618} → {N : Type ?u.209617} → {P : Type ?u.209616} → [inst : AddZeroClass M] → [inst_1 : AddZeroClass N] → [inst_2 : AddZeroClass P] → (N →+ P) → (M →+ N) → M →+ Pofof: {ι : Type ?u.210815} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.210814) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β iββ: ι → Type wi))i: ?m.209614f :=f: DirectSum ?m.201131 fun i => β iGoals accomplished! 🐙ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
φ: (i : ι) → β i →+ γ
ψ: (DirectSum ι fun i => β i) →+ γ
f: DirectSum ι fun i => β i↑ψ f = ↑(toAddMonoid fun i => AddMonoidHom.comp ψ (of β i)) fι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
φ: (i : ι) → β i →+ γ
ψ: (DirectSum ι fun i => β i) →+ γ
f: DirectSum ι fun i => β i
e_aψ = toAddMonoid fun i => AddMonoidHom.comp ψ (of β i)ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
φ: (i : ι) → β i →+ γ
ψ: (DirectSum ι fun i => β i) →+ γ
f: DirectSum ι fun i => β i↑ψ f = ↑(toAddMonoid fun i => AddMonoidHom.comp ψ (of β i)) fι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
φ: (i : ι) → β i →+ γ
ψ: (DirectSum ι fun i => β i) →+ γ
f: DirectSum ι fun i => β i
e_a.H∀ (x : ι), AddMonoidHom.comp ψ (Dfinsupp.singleAddHom (fun i => (fun i => β i) i) x) = AddMonoidHom.comp (toAddMonoid fun i => AddMonoidHom.comp ψ (of β i)) (Dfinsupp.singleAddHom (fun i => (fun i => β i) i) x)ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
φ: (i : ι) → β i →+ γ
ψ: (DirectSum ι fun i => β i) →+ γ
f: DirectSum ι fun i => β i↑ψ f = ↑(toAddMonoid fun i => AddMonoidHom.comp ψ (of β i)) f#align direct_sum.to_add_monoid.uniqueGoals accomplished! 🐙DirectSum.toAddMonoid.unique end ToAddMonoid section FromAddMonoid /-- `fromAddMonoid φ` is the natural homomorphism from `γ` to `⨁ i, β i` induced by a family `φ` of homomorphisms `γ → β i`. Note that this is not an isomorphism. Not every homomorphism `γ →+ ⨁ i, β i` arises in this way. -/ def fromAddMonoid : (⨁DirectSum.toAddMonoid.unique: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {γ : Type u₁} [inst_1 : AddCommMonoid γ] (ψ : (DirectSum ι fun i => β i) →+ γ) (f : DirectSum ι fun i => β i), ↑ψ f = ↑(toAddMonoid fun i => AddMonoidHom.comp ψ (of β i)) fi,i: ?m.224425γ →+γ: Type u₁ββ: ι → Type wi) →+i: ?m.224425γ →+ ⨁γ: Type u₁i,i: ?m.225655ββ: ι → Type wi :=i: ?m.225655toAddMonoid funtoAddMonoid: {ι : Type ?u.227794} → [dec_ι : DecidableEq ι] → {β : ι → Type ?u.227793} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type ?u.227792} → [inst_1 : AddCommMonoid γ] → ((i : ι) → β i →+ γ) → (DirectSum ι fun i => β i) →+ γi =>i: ?m.228003AddMonoidHom.compHom (AddMonoidHom.compHom: {M : Type ?u.228007} → {N : Type ?u.228006} → {P : Type ?u.228005} → [inst : AddZeroClass M] → [inst_1 : AddCommMonoid N] → [inst_2 : AddCommMonoid P] → (N →+ P) →+ (M →+ N) →+ M →+ Pofof: {ι : Type ?u.236548} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.236547) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β iββ: ι → Type wi) #align direct_sum.from_add_monoidi: ?m.228003DirectSum.fromAddMonoid @[simp] theoremDirectSum.fromAddMonoid: {ι : Type v} → [dec_ι : DecidableEq ι] → {β : ι → Type w} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type u₁} → [inst_1 : AddCommMonoid γ] → (DirectSum ι fun i => γ →+ β i) →+ γ →+ DirectSum ι fun i => β ifromAddMonoid_of (fromAddMonoid_of: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {γ : Type u₁} [inst_1 : AddCommMonoid γ] (i : ι) (f : γ →+ β i), ↑fromAddMonoid (↑(of (fun i => γ →+ β i) i) f) = AddMonoidHom.comp (of β i) fi :i: ιι) (ι: Type vf :f: γ →+ β iγ →+γ: Type u₁ββ: ι → Type wi) :i: ιfromAddMonoid (fromAddMonoid: {ι : Type ?u.237818} → [dec_ι : DecidableEq ι] → {β : ι → Type ?u.237817} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type ?u.237816} → [inst_1 : AddCommMonoid γ] → (DirectSum ι fun i => γ →+ β i) →+ γ →+ DirectSum ι fun i => β iofof: {ι : Type ?u.246440} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.246439) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.246441 → Type ?u.246439ii: ιf) = (f: γ →+ β iofof: {ι : Type ?u.255391} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.255390) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.255392 → Type ?u.255390i).i: ιcompcomp: {M : Type ?u.255447} → {N : Type ?u.255446} → {P : Type ?u.255445} → [inst : AddZeroClass M] → [inst_1 : AddZeroClass N] → [inst_2 : AddZeroClass P] → (N →+ P) → (M →+ N) → M →+ Pf :=f: γ →+ β iGoals accomplished! 🐙ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i↑fromAddMonoid (↑(of (fun i => γ →+ β i) i) f) = AddMonoidHom.comp (of β i) fι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i↑fromAddMonoid (↑(of (fun i => γ →+ β i) i) f) = AddMonoidHom.comp (of β i) fι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i↑(toAddMonoid fun i => ↑AddMonoidHom.compHom (of β i)) (↑(of (fun i => γ →+ β i) i) f) = AddMonoidHom.comp (of β i) fι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i↑fromAddMonoid (↑(of (fun i => γ →+ β i) i) f) = AddMonoidHom.comp (of β i) fι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i↑(↑AddMonoidHom.compHom (of β i)) f = AddMonoidHom.comp (of β i) fι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i↑(↑AddMonoidHom.compHom (of β i)) f = AddMonoidHom.comp (of β i) fι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i↑fromAddMonoid (↑(of (fun i => γ →+ β i) i) f) = AddMonoidHom.comp (of β i) f#align direct_sum.from_add_monoid_ofGoals accomplished! 🐙DirectSum.fromAddMonoid_of theoremDirectSum.fromAddMonoid_of: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {γ : Type u₁} [inst_1 : AddCommMonoid γ] (i : ι) (f : γ →+ β i), ↑fromAddMonoid (↑(of (fun i => γ →+ β i) i) f) = AddMonoidHom.comp (of β i) ffromAddMonoid_of_apply (i :i: ιι) (ι: Type vf :f: γ →+ β iγ →+γ: Type u₁ββ: ι → Type wi) (i: ιx :x: γγ) :γ: Type u₁fromAddMonoid (fromAddMonoid: {ι : Type ?u.258825} → [dec_ι : DecidableEq ι] → {β : ι → Type ?u.258824} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type ?u.258823} → [inst_1 : AddCommMonoid γ] → (DirectSum ι fun i => γ →+ β i) →+ γ →+ DirectSum ι fun i => β iofof: {ι : Type ?u.267447} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.267446) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.267448 → Type ?u.267446ii: ιf)f: γ →+ β ix =x: γofof: {ι : Type ?u.284894} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.284893) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i__: ?m.284895 → Type ?u.284893i (i: ιff: γ →+ β ix) :=x: γGoals accomplished! 🐙ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i
x: γι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i
x: γι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i
x: γ↑(AddMonoidHom.comp (of β i) f) x = ↑(of β i) (↑f x)ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i
x: γι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i
x: γι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i
x: γι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
i: ι
f: γ →+ β i
x: γ#align direct_sum.from_add_monoid_of_applyGoals accomplished! 🐙DirectSum.fromAddMonoid_of_apply end FromAddMonoid variable (DirectSum.fromAddMonoid_of_apply: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {γ : Type u₁} [inst_1 : AddCommMonoid γ] (i : ι) (f : γ →+ β i) (x : γ), ↑(↑fromAddMonoid (↑(of (fun i => γ →+ β i) i) f)) x = ↑(of β i) (↑f x)β) -- TODO: generalize this to remove the assumption `S ⊆ T`. /-- `setToSet β S T h` is the natural homomorphism `⨁ (i : S), β i → ⨁ (i : T), β i`, where `h : S ⊆ T`. -/ def setToSet (β: ?m.303860SS: Set ιT : SetT: Set ιι) (ι: Type vH :H: S ⊆ TS ⊆S: Set ιT) : (⨁T: Set ιi :i: ↑SS,S: Set ιββ: ι → Type wi) →+ ⨁i: ↑Si :i: ↑TT,T: Set ιββ: ι → Type wi :=i: ↑TtoAddMonoid funtoAddMonoid: {ι : Type ?u.305499} → [dec_ι : DecidableEq ι] → {β : ι → Type ?u.305498} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type ?u.305497} → [inst_1 : AddCommMonoid γ] → ((i : ι) → β i →+ γ) → (DirectSum ι fun i => β i) →+ γi =>i: ?m.305712of (funof: {ι : Type ?u.305715} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.305714) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β ii : Subtypei: Subtype TT =>T: Set ιββ: ι → Type wi) ⟨↑i: Subtype Ti,i: ?m.305712HH: S ⊆ Ti.2⟩ #align direct_sum.set_to_seti: ?m.305712DirectSum.setToSet variable {DirectSum.setToSet: {ι : Type v} → [dec_ι : DecidableEq ι] → (β : ι → Type w) → [inst : (i : ι) → AddCommMonoid (β i)] → (S T : Set ι) → S ⊆ T → (DirectSum ↑S fun i => β ↑i) →+ DirectSum ↑T fun i => β ↑iβ} -- Porting note: commented out -- omit dec_ι instanceβ: ?m.306723unique [∀unique: [inst : ∀ (i : ι), Subsingleton (β i)] → Unique (DirectSum ι fun i => β i)i, Subsingleton (i: ?m.306755ββ: ι → Type wi)] : Unique (⨁i: ?m.306755i,i: ?m.306767ββ: ι → Type wi) := Dfinsupp.unique #align direct_sum.uniquei: ?m.306767DirectSum.unique /-- A direct sum over an empty type is trivial. -/ instance uniqueOfIsEmpty [IsEmptyDirectSum.unique: {ι : Type v} → {β : ι → Type w} → [inst : (i : ι) → AddCommMonoid (β i)] → [inst_1 : ∀ (i : ι), Subsingleton (β i)] → Unique (DirectSum ι fun i => β i)ι] : Unique (⨁ι: Type vi,i: ?m.308313ββ: ι → Type wi) := Dfinsupp.uniqueOfIsEmpty #align direct_sum.unique_of_is_empty DirectSum.uniqueOfIsEmpty /-- The natural equivalence between `⨁ _ : ι, M` and `M` when `Unique ι`. -/ protected defi: ?m.308313id (M :M: Type vType v) (ι :Type v: Type (v+1)Type _ :=Type _: Type (?u.309819+1)PUnit) [AddCommMonoidPUnit: Sort ?u.309820M] [Unique ι] : (⨁M: Type v_x : ι,_x: ιM) ≃+M: Type vM := {M: Type vDirectSum.toAddMonoid funDirectSum.toAddMonoid: {ι : Type ?u.310939} → [dec_ι : DecidableEq ι] → {β : ι → Type ?u.310938} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type ?u.310937} → [inst_1 : AddCommMonoid γ] → ((i : ι) → β i →+ γ) → (DirectSum ι fun i => β i) →+ γ_ =>_: ?m.311108AddMonoidHom.idAddMonoidHom.id: (M : Type ?u.311110) → [inst : AddZeroClass M] → M →+ MM with toFun :=M: Type vDirectSum.toAddMonoid funDirectSum.toAddMonoid: {ι : Type ?u.312502} → [dec_ι : DecidableEq ι] → {β : ι → Type ?u.312501} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type ?u.312500} → [inst_1 : AddCommMonoid γ] → ((i : ι) → β i →+ γ) → (DirectSum ι fun i => β i) →+ γ_ =>_: ?m.312671AddMonoidHom.idAddMonoidHom.id: (M : Type ?u.312673) → [inst : AddZeroClass M] → M →+ MM invFun :=M: Type vof (funof: {ι : Type ?u.321290} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.321289) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β i_ =>_: ?m.321294M) default left_inv := funM: Type vx =>x: ?m.330297DirectSum.induction_onDirectSum.induction_on: ∀ {ι : Type ?u.330300} [dec_ι : DecidableEq ι] {β : ι → Type ?u.330299} [inst : (i : ι) → AddCommMonoid (β i)] {C : (DirectSum ι fun i => β i) → Prop} (x : DirectSum ι fun i => β i), C 0 → (∀ (i : ι) (x : β i), C (↑(of β i) x)) → (∀ (x y : DirectSum ι fun i => β i), C x → C y → C (x + y)) → C xx (x: ?m.330297Goals accomplished! 🐙ι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x: DirectSum ι fun _x => M↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) 0) = 0ι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x: DirectSum ι fun _x => M↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) 0) = 0ι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x: DirectSum ι fun _x => Mι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x: DirectSum ι fun _x => M↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) 0) = 0ι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x: DirectSum ι fun _x => M0 = 0) (funGoals accomplished! 🐙pp: ?m.331687x =>x: ?m.331690Goals accomplished! 🐙ι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝: DirectSum ι fun _x => M
p: ι
x: M↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) (↑(of (fun i => M) p) x)) = ↑(of (fun i => M) p) xι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝: DirectSum ι fun _x => M
p: ι
x: M↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) (↑(of (fun i => M) p) x)) = ↑(of (fun i => M) p) xι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝: DirectSum ι fun _x => M
p: ι
x: M↑(of (fun x => M) p) (↑(toAddMonoid fun x => AddMonoidHom.id M) (↑(of (fun i => M) p) x)) = ↑(of (fun i => M) p) xι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝: DirectSum ι fun _x => M
p: ι
x: M↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) (↑(of (fun i => M) p) x)) = ↑(of (fun i => M) p) xι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝: DirectSum ι fun _x => M
p: ι
x: M↑(of (fun x => M) p) (↑(AddMonoidHom.id M) x) = ↑(of (fun i => M) p) xι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝: DirectSum ι fun _x => M
p: ι
x: M↑(of (fun x => M) p) (↑(AddMonoidHom.id M) x) = ↑(of (fun i => M) p) xι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝: DirectSum ι fun _x => M
p: ι
x: M↑(of (fun x => M) p) (↑(AddMonoidHom.id M) x) = ↑(of (fun i => M) p) xι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝: DirectSum ι fun _x => M
p: ι
x: M↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) (↑(of (fun i => M) p) x)) = ↑(of (fun i => M) p) x) funGoals accomplished! 🐙xx: ?m.331697yy: ?m.331700ihxihx: ?m.331703ihy =>ihy: ?m.331706Goals accomplished! 🐙ι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝, x, y: DirectSum ι fun i => M
ihx: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x) = x
ihy: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = y↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) (x + y)) = x + yι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝, x, y: DirectSum ι fun i => M
ihx: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x) = x
ihy: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = y↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) (x + y)) = x + yι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝, x, y: DirectSum ι fun i => M
ihx: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x) = x
ihy: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = y↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x + ↑(toAddMonoid fun x => AddMonoidHom.id M) y) = x + yι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝, x, y: DirectSum ι fun i => M
ihx: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x) = x
ihy: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = y↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) (x + y)) = x + yι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝, x, y: DirectSum ι fun i => M
ihx: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x) = x
ihy: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = y↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x) + ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = x + yι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝, x, y: DirectSum ι fun i => M
ihx: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x) = x
ihy: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = y↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) (x + y)) = x + yι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝, x, y: DirectSum ι fun i => M
ihx: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x) = x
ihy: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = yx + ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = x + yι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝, x, y: DirectSum ι fun i => M
ihx: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x) = x
ihy: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = y↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) (x + y)) = x + yι✝: Type v
dec_ι: DecidableEq ι✝
β: ι✝ → Type w
inst✝³: (i : ι✝) → AddCommMonoid (β i)
γ: Type u₁
inst✝²: AddCommMonoid γ
M: Type v
ι: optParam (Type ?u.309819) PUnit
inst✝¹: AddCommMonoid M
inst✝: Unique ι
src✝:= toAddMonoid fun x => AddMonoidHom.id M: (DirectSum ι fun i => M) →+ M
x✝, x, y: DirectSum ι fun i => M
ihx: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) x) = x
ihy: ↑(of (fun x => M) default) (↑(toAddMonoid fun x => AddMonoidHom.id M) y) = yright_inv := funGoals accomplished! 🐙x =>x: ?m.330583toAddMonoid_oftoAddMonoid_of: ∀ {ι : Type ?u.330587} [dec_ι : DecidableEq ι] {β : ι → Type ?u.330586} [inst : (i : ι) → AddCommMonoid (β i)] {γ : Type ?u.330585} [inst_1 : AddCommMonoid γ] (φ : (i : ι) → β i →+ γ) (i : ι) (x : β i), ↑(toAddMonoid φ) (↑(of β i) x) = ↑(φ i) x__: (i : ?m.330588) → ?m.330590 i →+ ?m.330592__: ?m.330588_ } #align direct_sum.id DirectSum.id section CongrLeft variable {_: ?m.330590 ?m.330595κ :κ: Type ?u.333815Type _} /-- Reindexing terms of a direct sum.-/ def equivCongrLeft (Type _: Type (?u.333784+1)h :h: ι ≃ κι ≃ι: Type vκ) : (⨁κ: Type ?u.333815i,i: ?m.333828ββ: ι → Type wi) ≃+ ⨁i: ?m.333828k,k: ?m.333865β (β: ι → Type wh.symmh: ι ≃ κk) := { Dfinsupp.equivCongrLeftk: ?m.333865h with map_add' :=h: ι ≃ κDfinsupp.comapDomain'_addDfinsupp.comapDomain'_add: ∀ {ι : Type ?u.336839} {β : ι → Type ?u.336838} {κ : Type ?u.336840} [inst : (i : ι) → AddZeroClass (β i)] (h : κ → ι) {h' : ι → κ} (hh' : Function.LeftInverse h' h) (f g : Dfinsupp fun i => β i), Dfinsupp.comapDomain' h hh' (f + g) = Dfinsupp.comapDomain' h hh' f + Dfinsupp.comapDomain' h hh' g__: ?m.336843 → ?m.336841h.h: ι ≃ κright_inv} #align direct_sum.equiv_congr_left DirectSum.equivCongrLeft @[simp] theoremright_inv: ∀ {α : Sort ?u.336848} {β : Sort ?u.336847} (self : α ≃ β), Function.RightInverse self.invFun self.toFunequivCongrLeft_apply (equivCongrLeft_apply: ∀ {ι : Type v} {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {κ : Type u_1} (h : ι ≃ κ) (f : DirectSum ι fun i => β i) (k : κ), ↑(↑(equivCongrLeft h) f) k = ↑f (↑h.symm k)h :h: ι ≃ κι ≃ι: Type vκ) (κ: Type ?u.339448f : ⨁f: DirectSum ?m.339457 fun i => β ii,i: ?m.339459ββ: ι → Type wi) (i: ?m.339459k :k: κκ) : equivCongrLeftκ: Type ?u.339448hh: ι ≃ κff: DirectSum ?m.339457 fun i => β ik =k: κf (f: DirectSum ?m.339457 fun i => β ih.symmh: ι ≃ κk) :=k: κGoals accomplished! 🐙ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝¹: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝: AddCommMonoid γ
κ: Type u_1
h: ι ≃ κ
f: DirectSum ι fun i => β i
k: κ↑(↑(equivCongrLeft h) f) k = ↑f (↑h.symm k)#align direct_sum.equiv_congr_left_applyGoals accomplished! 🐙DirectSum.equivCongrLeft_apply end CongrLeft section Option variable {α : OptionDirectSum.equivCongrLeft_apply: ∀ {ι : Type v} {β : ι → Type w} [inst : (i : ι) → AddCommMonoid (β i)] {κ : Type u_1} (h : ι ≃ κ) (f : DirectSum ι fun i => β i) (k : κ), ↑(↑(equivCongrLeft h) f) k = ↑f (↑h.symm k)ι →ι: Type vType w} [∀Type w: Type (w+1)i, AddCommMonoid (αi: ?m.341414i)] -- Porting note: commented out -- include dec_ι /-- Isomorphism obtained by separating the term of index `none` of a direct sum over `Option ι`.-/ @[i: ?m.341414simps] noncomputable defsimps: ∀ {ι : Type v} [dec_ι : DecidableEq ι] {α : Option ι → Type w} [inst : (i : Option ι) → AddCommMonoid (α i)] (a : (fun i => α i) none × Dfinsupp fun i => (fun i => α i) (some i)), ↑(AddEquiv.symm addEquivProdDirectSum) a = Equiv.invFun Dfinsupp.equivProdDfinsupp aaddEquivProdDirectSum : (⨁i, αi: ?m.341468i) ≃+ α none × ⨁i: ?m.341468i, α (somei: ?m.341510i) := { Dfinsupp.equivProdDfinsupp with map_add' :=i: ?m.341510Dfinsupp.equivProdDfinsupp_add } #align direct_sum.add_equiv_prod_direct_sum DirectSum.addEquivProdDirectSum end Option section Sigma variable {Dfinsupp.equivProdDfinsupp_add: ∀ {ι : Type ?u.344873} [dec : DecidableEq ι] {α : Option ι → Type ?u.344872} [inst : (i : Option ι) → AddZeroClass (α i)] (f g : Dfinsupp fun i => α i), ↑Dfinsupp.equivProdDfinsupp (f + g) = ↑Dfinsupp.equivProdDfinsupp f + ↑Dfinsupp.equivProdDfinsupp gα :α: ι → Type uι →ι: Type vType u} {Type u: Type (u+1)δ : ∀δ: (i : ι) → α i → Type wi,i: ?m.347670αα: ι → Type ui →i: ?m.347670Type w} [∀Type w: Type (w+1)ii: ?m.347678j, AddCommMonoid (j: ?m.347681δδ: (i : ι) → α i → Type wii: ?m.347730j)] /-- The natural map between `⨁ (i : Σ i, α i), δ i.1 i.2` and `⨁ i (j : α i), δ i j`.-/ noncomputable defj: ?m.347681sigmaCurry : (⨁i : Σi: (_i : ?m.347749) × ?m.347754 _i_i,_i: ?m.347751_,_: Type ?u.347747δδ: (i : ι) → α i → Type wi.1i: (_i : ?m.347749) × ?m.347754 _ii.2) →+ ⨁ (i: (_i : ?m.347749) × ?m.347754 _ii) (i: ?m.347827j),j: ?m.347833δδ: (i : ι) → α i → Type wii: ?m.347827j where toFun := @Dfinsupp.sigmaCurryj: ?m.347833__: Type ?u.351683__: ?m.351684 → Type ?u.351681δ _ map_zero' := Dfinsupp.sigmaCurry_zero map_add'δ: (i : ι) → α i → Type wff: ?m.354006g := @g: ?m.354009Dfinsupp.sigmaCurry_addDfinsupp.sigmaCurry_add: ∀ {ι : Type ?u.354012} {α : ι → Type ?u.354013} {δ : (i : ι) → α i → Type ?u.354011} [inst : (i : ι) → (j : α i) → AddZeroClass (δ i j)] (f g : Dfinsupp fun i => δ i.fst i.snd), Dfinsupp.sigmaCurry (f + g) = Dfinsupp.sigmaCurry f + Dfinsupp.sigmaCurry g__: Type ?u.354012__: ?m.354014 → Type ?u.354013δ _δ: (i : ι) → α i → Type wff: ?m.354006g #align direct_sum.sigma_curry DirectSum.sigmaCurry @[simp] theoremg: ?m.354009sigmaCurry_apply (f : ⨁f: DirectSum ((_i : ι) × α _i) fun i => δ i.fst i.sndi : Σi: (_i : ?m.357757) × ?m.357762 _i_i,_i: ?m.357759_,_: Type ?u.357755δδ: (i : ι) → α i → Type wi.1i: (_i : ?m.357757) × ?m.357762 _ii.2) (i: (_i : ?m.357757) × ?m.357762 _ii :i: ιι) (ι: Type vj :j: α iαα: ι → Type ui) : sigmaCurryi: ιff: DirectSum ?m.357753 fun i => δ i.fst i.sndii: ιj =j: α if ⟨f: DirectSum ?m.357753 fun i => δ i.fst i.sndi,i: ιj⟩ := @Dfinsupp.sigmaCurry_applyj: α i__: Type ?u.366676__: ?m.366678 → Type ?u.366677δ _δ: (i : ι) → α i → Type w__: Dfinsupp fun i => δ i.fst i.sndii: ιj #align direct_sum.sigma_curry_apply DirectSum.sigmaCurry_apply /-- The natural map between `⨁ i (j : α i), δ i j` and `Π₀ (i : Σ i, α i), δ i.1 i.2`, inverse of `curry`.-/ defj: α isigmaUncurry [∀sigmaUncurry: {ι : Type v} → {α : ι → Type u} → {δ : (i : ι) → α i → Type w} → [inst : (i : ι) → (j : α i) → AddCommMonoid (δ i j)] → [inst_1 : (i : ι) → DecidableEq (α i)] → [inst_2 : (i : ι) → (j : α i) → DecidableEq (δ i j)] → (DirectSum ι fun i => DirectSum (α i) fun j => δ i j) →+ DirectSum ((_i : ι) × α _i) fun i => δ i.fst i.sndi, DecidableEq (i: ?m.369399αα: ι → Type ui)] [∀i: ?m.369399ii: ?m.369415j, DecidableEq (j: ?m.369418δδ: (i : ι) → α i → Type wii: ?m.369415j)] : (⨁ (j: ?m.369418i) (i: ?m.369442j),j: ?m.369448δδ: (i : ι) → α i → Type wii: ?m.369442j) →+ ⨁j: ?m.369448i : Σi: (_i : ?m.369552) × ?m.369557 _i_i,_i: ?m.369554_,_: Type ?u.369550δδ: (i : ι) → α i → Type wi.1i: (_i : ?m.369552) × ?m.369557 _ii.2 where toFun :=i: (_i : ?m.369552) × ?m.369557 _iDfinsupp.sigmaUncurry map_zero' :=Dfinsupp.sigmaUncurry: {ι : Type ?u.374326} → {α : ι → Type ?u.374324} → {δ : (i : ι) → α i → Type ?u.374325} → [inst : (i : ι) → (j : α i) → Zero (δ i j)] → [inst_1 : (i : ι) → DecidableEq (α i)] → [inst_2 : (i : ι) → (j : α i) → (x : δ i j) → Decidable (x ≠ 0)] → (Dfinsupp fun i => Dfinsupp fun j => δ i j) → Dfinsupp fun i => δ i.fst i.sndDfinsupp.sigmaUncurry_zero map_add' :=Dfinsupp.sigmaUncurry_zero: ∀ {ι : Type ?u.376800} {α : ι → Type ?u.376801} {δ : (i : ι) → α i → Type ?u.376799} [inst : (i : ι) → (j : α i) → Zero (δ i j)] [inst_1 : (i : ι) → DecidableEq (α i)] [inst_2 : (i : ι) → (j : α i) → (x : δ i j) → Decidable (x ≠ 0)], Dfinsupp.sigmaUncurry 0 = 0Dfinsupp.sigmaUncurry_add #align direct_sum.sigma_uncurryDfinsupp.sigmaUncurry_add: ∀ {ι : Type ?u.377441} {α : ι → Type ?u.377442} {δ : (i : ι) → α i → Type ?u.377440} [inst : (i : ι) → (j : α i) → AddZeroClass (δ i j)] [inst_1 : (i : ι) → DecidableEq (α i)] [inst_2 : (i : ι) → (j : α i) → (x : δ i j) → Decidable (x ≠ 0)] (f g : Dfinsupp fun i => Dfinsupp fun j => δ i j), Dfinsupp.sigmaUncurry (f + g) = Dfinsupp.sigmaUncurry f + Dfinsupp.sigmaUncurry gDirectSum.sigmaUncurry @[simp] theoremDirectSum.sigmaUncurry: {ι : Type v} → {α : ι → Type u} → {δ : (i : ι) → α i → Type w} → [inst : (i : ι) → (j : α i) → AddCommMonoid (δ i j)] → [inst_1 : (i : ι) → DecidableEq (α i)] → [inst_2 : (i : ι) → (j : α i) → DecidableEq (δ i j)] → (DirectSum ι fun i => DirectSum (α i) fun j => δ i j) →+ DirectSum ((_i : ι) × α _i) fun i => δ i.fst i.sndsigmaUncurry_apply [∀sigmaUncurry_apply: ∀ {ι : Type v} {α : ι → Type u} {δ : (i : ι) → α i → Type w} [inst : (i : ι) → (j : α i) → AddCommMonoid (δ i j)] [inst_1 : (i : ι) → DecidableEq (α i)] [inst_2 : (i : ι) → (j : α i) → DecidableEq (δ i j)] (f : DirectSum ι fun i => DirectSum (α i) fun j => δ i j) (i : ι) (j : α i), ↑(↑sigmaUncurry f) { fst := i, snd := j } = ↑(↑f i) ji, DecidableEq (i: ?m.380546αα: ι → Type ui)] [∀i: ?m.380546ii: ?m.380562j, DecidableEq (j: ?m.380565δδ: (i : ι) → α i → Type wii: ?m.380562j)] (f : ⨁ (j: ?m.380565i) (i: ?m.380587j),j: ?m.380593δδ: (i : ι) → α i → Type wii: ?m.380587j) (j: ?m.380593i :i: ιι) (ι: Type vj :j: α iαα: ι → Type ui) :i: ιsigmaUncurry f ⟨sigmaUncurry: {ι : Type ?u.380699} → {α : ι → Type ?u.380700} → {δ : (i : ι) → α i → Type ?u.380698} → [inst : (i : ι) → (j : α i) → AddCommMonoid (δ i j)] → [inst_1 : (i : ι) → DecidableEq (α i)] → [inst_2 : (i : ι) → (j : α i) → DecidableEq (δ i j)] → (DirectSum ι fun i => DirectSum (α i) fun j => δ i j) →+ DirectSum ((_i : ι) × α _i) fun i => δ i.fst i.sndi,i: ιj⟩ = fj: α iii: ιj :=j: α iDfinsupp.sigmaUncurry_apply fDfinsupp.sigmaUncurry_apply: ∀ {ι : Type ?u.389915} {α : ι → Type ?u.389916} {δ : (i : ι) → α i → Type ?u.389914} [inst : (i : ι) → (j : α i) → Zero (δ i j)] [inst_1 : (i : ι) → DecidableEq (α i)] [inst_2 : (i : ι) → (j : α i) → (x : δ i j) → Decidable (x ≠ 0)] (f : Dfinsupp fun i => Dfinsupp fun j => δ i j) (i : ι) (j : α i), ↑(Dfinsupp.sigmaUncurry f) { fst := i, snd := j } = ↑(↑f i) jii: ιj #align direct_sum.sigma_uncurry_applyj: α iDirectSum.sigmaUncurry_apply /-- The natural map between `⨁ (i : Σ i, α i), δ i.1 i.2` and `⨁ i (j : α i), δ i j`.-/ noncomputable defDirectSum.sigmaUncurry_apply: ∀ {ι : Type v} {α : ι → Type u} {δ : (i : ι) → α i → Type w} [inst : (i : ι) → (j : α i) → AddCommMonoid (δ i j)] [inst_1 : (i : ι) → DecidableEq (α i)] [inst_2 : (i : ι) → (j : α i) → DecidableEq (δ i j)] (f : DirectSum ι fun i => DirectSum (α i) fun j => δ i j) (i : ι) (j : α i), ↑(↑sigmaUncurry f) { fst := i, snd := j } = ↑(↑f i) jsigmaCurryEquiv [∀sigmaCurryEquiv: {ι : Type v} → {α : ι → Type u} → {δ : (i : ι) → α i → Type w} → [inst : (i : ι) → (j : α i) → AddCommMonoid (δ i j)] → [inst_1 : (i : ι) → DecidableEq (α i)] → [inst_2 : (i : ι) → (j : α i) → DecidableEq (δ i j)] → (DirectSum ((_i : ι) × α _i) fun i => δ i.fst i.snd) ≃+ DirectSum ι fun i => DirectSum (α i) fun j => δ i ji, DecidableEq (i: ?m.392298αα: ι → Type ui)] [∀i: ?m.392298ii: ?m.392314j, DecidableEq (j: ?m.392317δδ: (i : ι) → α i → Type wii: ?m.392314j)] : (⨁j: ?m.392317i : Σi: (_i : ?m.392343) × ?m.392348 _i_i,_i: ?m.392345_,_: Type ?u.392341δδ: (i : ι) → α i → Type wi.1i: (_i : ?m.392343) × ?m.392348 _ii.2) ≃+ ⨁ (i: (_i : ?m.392343) × ?m.392348 _ii) (i: ?m.392421j),j: ?m.392427δδ: (i : ι) → α i → Type wii: ?m.392421j :=j: ?m.392427{ sigmaCurry{ sigmaCurry, Dfinsupp.sigmaCurryEquiv with }: ?m.395252 ≃+ ?m.395253,{ sigmaCurry, Dfinsupp.sigmaCurryEquiv with }: ?m.395252 ≃+ ?m.395253Dfinsupp.sigmaCurryEquivDfinsupp.sigmaCurryEquiv: {ι : Type ?u.394629} → {α : ι → Type ?u.394627} → {δ : (i : ι) → α i → Type ?u.394628} → [inst : (i : ι) → (j : α i) → Zero (δ i j)] → [inst_1 : (i : ι) → DecidableEq (α i)] → [inst_2 : (i : ι) → (j : α i) → (x : δ i j) → Decidable (x ≠ 0)] → (Dfinsupp fun i => δ i.fst i.snd) ≃ Dfinsupp fun i => Dfinsupp fun j => δ i j{ sigmaCurry, Dfinsupp.sigmaCurryEquiv with }: ?m.395252 ≃+ ?m.395253with{ sigmaCurry, Dfinsupp.sigmaCurryEquiv with }: ?m.395252 ≃+ ?m.395253} #align direct_sum.sigma_curry_equiv{ sigmaCurry, Dfinsupp.sigmaCurryEquiv with }: ?m.395252 ≃+ ?m.395253DirectSum.sigmaCurryEquiv end Sigma /-- The canonical embedding from `⨁ i, A i` to `M` where `A` is a collection of `AddSubmonoid M` indexed by `ι`. When `S = Submodule _ M`, this is available as a `LinearMap`, `DirectSum.coe_linearMap`. -/ protected defDirectSum.sigmaCurryEquiv: {ι : Type v} → {α : ι → Type u} → {δ : (i : ι) → α i → Type w} → [inst : (i : ι) → (j : α i) → AddCommMonoid (δ i j)] → [inst_1 : (i : ι) → DecidableEq (α i)] → [inst_2 : (i : ι) → (j : α i) → DecidableEq (δ i j)] → (DirectSum ((_i : ι) × α _i) fun i => δ i.fst i.snd) ≃+ DirectSum ι fun i => DirectSum (α i) fun j => δ i jcoeAddMonoidHom {coeAddMonoidHom: {ι : Type v} → {M : Type u_1} → {S : Type u_2} → [inst : DecidableEq ι] → [inst : AddCommMonoid M] → [inst_1 : SetLike S M] → [inst_2 : AddSubmonoidClass S M] → (A : ι → S) → (DirectSum ι fun i => { x // x ∈ A i }) →+ MMM: Type ?u.405588S :S: Type ?u.405591Type _} [DecidableEqType _: Type (?u.405588+1)ι] [AddCommMonoidι: Type vM] [SetLikeM: Type ?u.405588SS: Type ?u.405591M] [M: Type ?u.405588AddSubmonoidClassAddSubmonoidClass: (S : Type ?u.405611) → (M : Type ?u.405610) → [inst : AddZeroClass M] → [inst : SetLike S M] → PropSS: Type ?u.405591M] (M: Type ?u.405588A :A: ι → Sι →ι: Type vS) : (⨁S: Type ?u.405591i,i: ?m.406042AA: ι → Si) →+i: ?m.406042M :=M: Type ?u.405588toAddMonoid funtoAddMonoid: {ι : Type ?u.408698} → [dec_ι : DecidableEq ι] → {β : ι → Type ?u.408697} → [inst : (i : ι) → AddCommMonoid (β i)] → {γ : Type ?u.408696} → [inst_1 : AddCommMonoid γ] → ((i : ι) → β i →+ γ) → (DirectSum ι fun i => β i) →+ γi =>i: ?m.408896AddSubmonoidClass.Subtype (AddSubmonoidClass.Subtype: {M : Type ?u.408899} → [inst : AddZeroClass M] → {A : Type ?u.408898} → [inst_1 : SetLike A M] → [hA : AddSubmonoidClass A M] → (S' : A) → { x // x ∈ S' } →+ MAA: ι → Si) #align direct_sum.coe_add_monoid_homi: ?m.408896DirectSum.coeAddMonoidHom @[simp] theoremDirectSum.coeAddMonoidHom: {ι : Type v} → {M : Type u_1} → {S : Type u_2} → [inst : DecidableEq ι] → [inst : AddCommMonoid M] → [inst_1 : SetLike S M] → [inst_2 : AddSubmonoidClass S M] → (A : ι → S) → (DirectSum ι fun i => { x // x ∈ A i }) →+ McoeAddMonoidHom_of {coeAddMonoidHom_of: ∀ {ι : Type v} {M : Type u_1} {S : Type u_2} [inst : DecidableEq ι] [inst_1 : AddCommMonoid M] [inst_2 : SetLike S M] [inst_3 : AddSubmonoidClass S M] (A : ι → S) (i : ι) (x : { x // x ∈ A i }), ↑(DirectSum.coeAddMonoidHom A) (↑(of (fun i => { x // x ∈ A i }) i) x) = ↑xMM: Type ?u.410729S :S: Type ?u.410732Type _} [DecidableEqType _: Type (?u.410732+1)ι] [AddCommMonoidι: Type vM] [SetLikeM: Type ?u.410729SS: Type ?u.410732M] [M: Type ?u.410729AddSubmonoidClassAddSubmonoidClass: (S : Type ?u.410752) → (M : Type ?u.410751) → [inst : AddZeroClass M] → [inst : SetLike S M] → PropSS: Type ?u.410732M] (M: Type ?u.410729A :A: ι → Sι →ι: Type vS) (S: Type ?u.410732i :i: ιι) (ι: Type vx :x: { x // x ∈ A i }AA: ι → Si) :i: ιDirectSum.coeAddMonoidHomDirectSum.coeAddMonoidHom: {ι : Type ?u.411207} → {M : Type ?u.411206} → {S : Type ?u.411205} → [inst : DecidableEq ι] → [inst : AddCommMonoid M] → [inst_1 : SetLike S M] → [inst_2 : AddSubmonoidClass S M] → (A : ι → S) → (DirectSum ι fun i => { x // x ∈ A i }) →+ MA (A: ι → Sof (funof: {ι : Type ?u.419758} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.419757) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β ii =>i: ?m.419762AA: ι → Si)i: ?m.419762ii: ιx) =x: { x // x ∈ A i }x :=x: { x // x ∈ A i }toAddMonoid_oftoAddMonoid_of: ∀ {ι : Type ?u.429983} [dec_ι : DecidableEq ι] {β : ι → Type ?u.429982} [inst : (i : ι) → AddCommMonoid (β i)] {γ : Type ?u.429981} [inst_1 : AddCommMonoid γ] (φ : (i : ι) → β i →+ γ) (i : ι) (x : β i), ↑(toAddMonoid φ) (↑(of β i) x) = ↑(φ i) x__: (i : ?m.429984) → ?m.429986 i →+ ?m.429988__: ?m.429984_ #align direct_sum.coe_add_monoid_hom_of_: ?m.429986 ?m.429991DirectSum.coeAddMonoidHom_of theoremDirectSum.coeAddMonoidHom_of: ∀ {ι : Type v} {M : Type u_1} {S : Type u_2} [inst : DecidableEq ι] [inst_1 : AddCommMonoid M] [inst_2 : SetLike S M] [inst_3 : AddSubmonoidClass S M] (A : ι → S) (i : ι) (x : { x // x ∈ A i }), ↑(DirectSum.coeAddMonoidHom A) (↑(of (fun i => { x // x ∈ A i }) i) x) = ↑xcoe_of_apply {coe_of_apply: ∀ {ι : Type v} {M : Type u_1} {S : Type u_2} [inst : DecidableEq ι] [inst_1 : AddCommMonoid M] [inst_2 : SetLike S M] [inst_3 : AddSubmonoidClass S M] {A : ι → S} (i j : ι) (x : { x // x ∈ A i }), ↑(↑(↑(of (fun i => { x // x ∈ A i }) i) x) j) = ↑(if i = j then x else 0)MM: Type u_1S :S: Type u_2Type _} [DecidableEqType _: Type (?u.431776+1)ι] [AddCommMonoidι: Type vM] [SetLikeM: Type ?u.431773SS: Type ?u.431776M] [M: Type ?u.431773AddSubmonoidClassAddSubmonoidClass: (S : Type ?u.431796) → (M : Type ?u.431795) → [inst : AddZeroClass M] → [inst : SetLike S M] → PropSS: Type ?u.431776M] {M: Type ?u.431773A :A: ι → Sι →ι: Type vS} (S: Type ?u.431776ii: ιj :j: ιι) (ι: Type vx :x: { x // x ∈ A i }AA: ι → Si) : (i: ιof (funof: {ι : Type ?u.432253} → [dec_ι : DecidableEq ι] → (β : ι → Type ?u.432252) → [inst : (i : ι) → AddCommMonoid (β i)] → (i : ι) → β i →+ DirectSum ι fun i => β ii ↦ {i: ?m.432257x //x: ?m.432262x ∈x: ?m.432262AA: ι → Si})i: ?m.432257ii: ιxx: { x // x ∈ A i }j :j: ιM) = ifM: Type ?u.431773i =i: ιj thenj: ιx elsex: { x // x ∈ A i }0 :=0: ?m.442473Goals accomplished! 🐙ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝⁵: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝⁴: AddCommMonoid γ
M: Type u_1
S: Type u_2
inst✝³: DecidableEq ι
inst✝²: AddCommMonoid M
inst✝¹: SetLike S M
inst✝: AddSubmonoidClass S M
A: ι → S
i, j: ι
x: { x // x ∈ A i }ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝⁵: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝⁴: AddCommMonoid γ
M: Type u_1
S: Type u_2
inst✝³: DecidableEq ι
inst✝²: AddCommMonoid M
inst✝¹: SetLike S M
inst✝: AddSubmonoidClass S M
A: ι → S
i: ι
x: { x // x ∈ A i }
inlι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝⁵: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝⁴: AddCommMonoid γ
M: Type u_1
S: Type u_2
inst✝³: DecidableEq ι
inst✝²: AddCommMonoid M
inst✝¹: SetLike S M
inst✝: AddSubmonoidClass S M
A: ι → S
i, j: ι
x: { x // x ∈ A i }
h: i ≠ j
inrι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝⁵: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝⁴: AddCommMonoid γ
M: Type u_1
S: Type u_2
inst✝³: DecidableEq ι
inst✝²: AddCommMonoid M
inst✝¹: SetLike S M
inst✝: AddSubmonoidClass S M
A: ι → S
i, j: ι
x: { x // x ∈ A i }ι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝⁵: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝⁴: AddCommMonoid γ
M: Type u_1
S: Type u_2
inst✝³: DecidableEq ι
inst✝²: AddCommMonoid M
inst✝¹: SetLike S M
inst✝: AddSubmonoidClass S M
A: ι → S
i: ι
x: { x // x ∈ A i }
inlι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝⁵: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝⁴: AddCommMonoid γ
M: Type u_1
S: Type u_2
inst✝³: DecidableEq ι
inst✝²: AddCommMonoid M
inst✝¹: SetLike S M
inst✝: AddSubmonoidClass S M
A: ι → S
i: ι
x: { x // x ∈ A i }
inlι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝⁵: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝⁴: AddCommMonoid γ
M: Type u_1
S: Type u_2
inst✝³: DecidableEq ι
inst✝²: AddCommMonoid M
inst✝¹: SetLike S M
inst✝: AddSubmonoidClass S M
A: ι → S
i, j: ι
x: { x // x ∈ A i }
h: i ≠ j
inrι: Type v
dec_ι: DecidableEq ι
β: ι → Type w
inst✝⁵: (i : ι) → AddCommMonoid (β i)
γ: Type u₁
inst✝⁴: AddCommMonoid γ
M: Type u_1
S: Type u_2
inst✝³: DecidableEq ι
inst✝²: