This manual presents the comparator view of the formalization.
It was generated mechanically from the trusted formalization base walk rooted at the comparator target theorem in BridgelandStability.NumericalStabilityManifold.
The formalization covers 57 declarations across 10 modules.
Theorem | BridgelandStability.EulerForm.Basic | Source | Open Issue
theoremeulerFormObj_contravariant_triangleAdditive(E:C):IsTriangleAdditive(funF↦eulerFormObjkCEF)Show proofwhereadditive:=funThT↦byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃simponly[eulerFormObj]k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ ∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))letF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)⊢ ∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))Try this: letI̵The goal is a proposition, so `let` is preferred over `letI`.The difference between `let` and `letI` is that `letI` inlines the value.But this is not relevant for proofs because of proof irrelevance.Note: This linter can be disabled with `set_option linter.style.haveILetI false`letI:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤ⊢ ∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))Try this: letI̵The goal is a proposition, so `let` is preferred over `letI`.The difference between `let` and `letI` is that `letI` inlines the value.But this is not relevant for proofs because of proof irrelevance.Note: This linter can be disabled with `set_option linter.style.haveILetI false`letI:F.IsHomological:=linearCoyonedaObjIsHomological(k:=k)(C:=C)Ek:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···⊢ ∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))letδ_lin:(n:ℤ)→((E⟶T.obj₃⟦n⟧)→ₗ[k](E⟶T.obj₁⟦(n+1)⟧)):=funn↦Linear.rightCompkE(T.mor₃⟦n⟧'≫(shiftFunctorAdd'C1n(n+1)(byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···n:ℤ⊢ 1+n=n+1liaAll goals completed! 🐙)).inv.appT.obj₁)k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)⊢ ∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))letr:ℤ→ℤ:=funn↦Module.finrankk(LinearMap.range(δ_linn))k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)⊢ ∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))havehδ_eq:∀n:ℤ,((F.homologySequenceδTn(n+1)rfl).hom)=δ_linn:=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃intronk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)n:ℤ⊢ ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnextxk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)n:ℤx:↑((F.shiftn).objT.obj₃)⊢ (ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯))x=(δ_linn)xexact(CategoryTheory.Pretriangulated.preadditiveCoyoneda_homologySequenceδ_apply(C:=C)(T:=T)(n₀:=n)(n₁:=n+1)(h:=rfl)(A:=Opposite.opE)x)k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linn⊢ ∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))haveh_ker_f_aux:∀m:ℤ,Module.finrankk(LinearMap.ker(((F.shift(m+1)).mapT.mor₁).hom))=rm:=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃intromk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnm:ℤ⊢ ↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmletf_succ:(E⟶T.obj₁⟦m+1⟧)→ₗ[k](E⟶T.obj₂⟦m+1⟧):=((F.shift(m+1)).mapT.mor₁).homk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnm:ℤf_succ:(E⟶(shiftFunctorC(m+1)).objT.obj₁)→ₗ[k]E⟶(shiftFunctorC(m+1)).objT.obj₂:=ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)⊢ ↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhaveh_exact₁:LinearMap.range(δ_linm)=LinearMap.kerf_succ:=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃rw[←hδ_eqmk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnm:ℤf_succ:(E⟶(shiftFunctorC(m+1)).objT.obj₁)→ₗ[k]E⟶(shiftFunctorC(m+1)).objT.obj₂:=ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)⊢ (ModuleCat.Hom.hom(F.homologySequenceδTm(m+1)⋯)).range=f_succ.ker]k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnm:ℤf_succ:(E⟶(shiftFunctorC(m+1)).objT.obj₁)→ₗ[k]E⟶(shiftFunctorC(m+1)).objT.obj₂:=ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)⊢ (ModuleCat.Hom.hom(F.homologySequenceδTm(m+1)⋯)).range=f_succ.kerexactShortComplex.Exact.moduleCat_range_eq_ker(F.homologySequence_exact₁ThTm(m+1)rfl)k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnm:ℤf_succ:(E⟶(shiftFunctorC(m+1)).objT.obj₁)→ₗ[k]E⟶(shiftFunctorC(m+1)).objT.obj₂:=ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)h_exact₁:(δ_linm).range=f_succ.ker⊢ ↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmsimponly[r]k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnm:ℤf_succ:(E⟶(shiftFunctorC(m+1)).objT.obj₁)→ₗ[k]E⟶(shiftFunctorC(m+1)).objT.obj₂:=ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)h_exact₁:(δ_linm).range=f_succ.ker⊢ ↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=↑(Module.finrankk↥(δ_linm).range)exact_mod_castcongrArg(funV:Submodulek(E⟶T.obj₁⟦m+1⟧)=>Module.finrankkV)h_exact₁.symmk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rm⊢ ∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))havehrank:∀n:ℤ,(Module.finrankk(E⟶T.obj₂⟦n⟧):ℤ)=Module.finrankk(E⟶T.obj₁⟦n⟧)+Module.finrankk(E⟶T.obj₃⟦n⟧)-r(n-1)-rn:=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃intronk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤ⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnletf_n:(E⟶T.obj₁⟦n⟧)→ₗ[k](E⟶T.obj₂⟦n⟧):=((F.shiftn).mapT.mor₁).homk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnletg_n:(E⟶T.obj₂⟦n⟧)→ₗ[k](E⟶T.obj₃⟦n⟧):=((F.shiftn).mapT.mor₂).homk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnhavehexact_B:LinearMap.rangef_n=LinearMap.kerg_n:=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃exact(ShortComplex.Exact.moduleCat_range_eq_ker(F.homologySequence_exact₂ThTn))k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.ker⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnTry this: haveI̵The goal is a proposition, so `have` is preferred over `haveI`.The difference between `have` and `haveI` is that `haveI` inlines the value.But this is not relevant for proofs because of proof irrelevance.Note: This linter can be disabled with `set_option linter.style.haveILetI false`haveI:Module.Finitek(E⟶T.obj₂⟦n⟧):=IsFiniteType.finite_dim(k:=k)E(T.obj₂⟦n⟧)k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝¹:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnhaveh_mid:=finrank_mid_of_exactkf_ng_nhexact_Bk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝¹:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnTry this: haveI̵The goal is a proposition, so `have` is preferred over `haveI`.The difference between `have` and `haveI` is that `haveI` inlines the value.But this is not relevant for proofs because of proof irrelevance.Note: This linter can be disabled with `set_option linter.style.haveILetI false`haveI:Module.Finitek(E⟶T.obj₁⟦n⟧):=IsFiniteType.finite_dim(k:=k)E(T.obj₁⟦n⟧)k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝²:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝¹:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnTry this: haveI̵The goal is a proposition, so `have` is preferred over `haveI`.The difference between `have` and `haveI` is that `haveI` inlines the value.But this is not relevant for proofs because of proof irrelevance.Note: This linter can be disabled with `set_option linter.style.haveILetI false`haveI:Module.Finitek(E⟶T.obj₃⟦n⟧):=IsFiniteType.finite_dim(k:=k)E(T.obj₃⟦n⟧)k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnhaveh_ker_f:Module.finrankk(LinearMap.kerf_n)=r(n-1):=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃changeModule.finrankk(LinearMap.ker(((F.shiftn).mapT.mor₁).hom))=r(n-1)k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)⊢ ↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)).ker)=r(n-1)havehn:n=(n-1)+1:=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃liak:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)hn:n=n-1+1⊢ ↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)).ker)=r(n-1)rw[hnk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)hn:n=n-1+1⊢ ↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(n-1+1)).mapT.mor₁)).ker)=r(n-1+1-1)]k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)hn:n=n-1+1⊢ ↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(n-1+1)).mapT.mor₁)).ker)=r(n-1+1-1)simpausingh_ker_f_aux(n-1)k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)h_ker_f:↑(Module.finrankk↥f_n.ker)=r(n-1)⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnhaveh_ker_δ:Module.finrankk(LinearMap.ker(δ_linn))=Module.finrankk(LinearMap.rangeg_n):=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃haveh_exact₃:LinearMap.rangeg_n=LinearMap.ker(δ_linn):=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃rw[←hδ_eqnk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)h_ker_f:↑(Module.finrankk↥f_n.ker)=r(n-1)⊢ g_n.range=(ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)).ker]k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)h_ker_f:↑(Module.finrankk↥f_n.ker)=r(n-1)⊢ g_n.range=(ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)).kerexactShortComplex.Exact.moduleCat_range_eq_ker(F.homologySequence_exact₃ThTn(n+1)rfl)k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)h_ker_f:↑(Module.finrankk↥f_n.ker)=r(n-1)h_exact₃:g_n.range=(δ_linn).ker⊢ Module.finrankk↥(δ_linn).ker=Module.finrankk↥g_n.rangesimpausingcongrArg(funV:Submodulek(E⟶T.obj₃⟦n⟧)=>Module.finrankkV)h_exact₃.symmk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)h_ker_f:↑(Module.finrankk↥f_n.ker)=r(n-1)h_ker_δ:Module.finrankk↥(δ_linn).ker=Module.finrankk↥g_n.range⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnhaveh_f:(Module.finrankk(LinearMap.rangef_n):ℤ)=Module.finrankk(E⟶T.obj₁⟦n⟧)-r(n-1):=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃have:=f_n.finrank_range_add_finrank_kerk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝⁴:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝³:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝²:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)h_ker_f:↑(Module.finrankk↥f_n.ker)=r(n-1)h_ker_δ:Module.finrankk↥(δ_linn).ker=Module.finrankk↥g_n.rangethis:Module.finrankk↥f_n.range+Module.finrankk↥f_n.ker=Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁)⊢ ↑(Module.finrankk↥f_n.range)=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))-r(n-1)liak:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)h_ker_f:↑(Module.finrankk↥f_n.ker)=r(n-1)h_ker_δ:Module.finrankk↥(δ_linn).ker=Module.finrankk↥g_n.rangeh_f:↑(Module.finrankk↥f_n.range)=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))-r(n-1)⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnhaveh_g:(Module.finrankk(LinearMap.rangeg_n):ℤ)=Module.finrankk(E⟶T.obj₃⟦n⟧)-rn:=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃haveh1:=(δ_linn).finrank_range_add_finrank_kerk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)h_ker_f:↑(Module.finrankk↥f_n.ker)=r(n-1)h_ker_δ:Module.finrankk↥(δ_linn).ker=Module.finrankk↥g_n.rangeh_f:↑(Module.finrankk↥f_n.range)=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))-r(n-1)h1:Module.finrankk↥(δ_linn).range+Module.finrankk↥(δ_linn).ker=Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃)⊢ ↑(Module.finrankk↥g_n.range)=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-rnhaveh2:=h_ker_δk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)h_ker_f:↑(Module.finrankk↥f_n.ker)=r(n-1)h_ker_δ:Module.finrankk↥(δ_linn).ker=Module.finrankk↥g_n.rangeh_f:↑(Module.finrankk↥f_n.range)=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))-r(n-1)h1:Module.finrankk↥(δ_linn).range+Module.finrankk↥(δ_linn).ker=Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃)h2:Module.finrankk↥(δ_linn).ker=Module.finrankk↥g_n.range⊢ ↑(Module.finrankk↥g_n.range)=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-rnsimponly[r]ath2⊢k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)h_ker_f:↑(Module.finrankk↥f_n.ker)=r(n-1)h_ker_δ:Module.finrankk↥(δ_linn).ker=Module.finrankk↥g_n.rangeh_f:↑(Module.finrankk↥f_n.range)=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))-r(n-1)h1:Module.finrankk↥(δ_linn).range+Module.finrankk↥(δ_linn).ker=Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃)h2:Module.finrankk↥(δ_linn).ker=Module.finrankk↥g_n.range⊢ ↑(Module.finrankk↥g_n.range)=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-↑(Module.finrankk↥(δ_linn).range)liak:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝³:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝²:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmn:ℤf_n:(E⟶(shiftFunctorCn).objT.obj₁)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₂:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₁)g_n:(E⟶(shiftFunctorCn).objT.obj₂)→ₗ[k]E⟶(shiftFunctorCn).objT.obj₃:=ModuleCat.Hom.hom((F.shiftn).mapT.mor₂)hexact_B:f_n.range=g_n.kerthis✝¹:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₂)h_mid:↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk↥f_n.range)+↑(Module.finrankk↥g_n.range)this✝:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₁)this:Module.Finitek(E⟶(shiftFunctorCn).objT.obj₃)h_ker_f:↑(Module.finrankk↥f_n.ker)=r(n-1)h_ker_δ:Module.finrankk↥(δ_linn).ker=Module.finrankk↥g_n.rangeh_f:↑(Module.finrankk↥f_n.range)=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))-r(n-1)h_g:↑(Module.finrankk↥g_n.range)=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-rn⊢ ↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnlinarithk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rn⊢ ∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))havehr:(Function.supportr).Finite:=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃refineSet.Finite.subset((IsFiniteType.finite_support(k:=k)ET.obj₁).imagefunm:ℤ↦m-1)?_k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rn⊢ Function.supportr⊆(funm=>m-1)''{n|Nontrivial(E⟶(shiftFunctorCn).objT.obj₁)}intronhnk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnn:ℤhn:n∈Function.supportr⊢ n∈(funm=>m-1)''{n|Nontrivial(E⟶(shiftFunctorCn).objT.obj₁)}havehnonzero:(rn:ℤ)≠0:=hnk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnn:ℤhn:n∈Function.supportrhnonzero:rn≠0⊢ n∈(funm=>m-1)''{n|Nontrivial(E⟶(shiftFunctorCn).objT.obj₁)}havehnontrivial:Nontrivial(E⟶T.obj₁⟦n+1⟧):=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃by_contrahtrivk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnn:ℤhn:n∈Function.supportrhnonzero:rn≠0htriv:¬Nontrivial(E⟶(shiftFunctorC(n+1)).objT.obj₁)⊢ FalseTry this: haveI̵The goal is a proposition, so `have` is preferred over `haveI`.The difference between `have` and `haveI` is that `haveI` inlines the value.But this is not relevant for proofs because of proof irrelevance.Note: This linter can be disabled with `set_option linter.style.haveILetI false`haveI:Subsingleton(E⟶T.obj₁⟦n+1⟧):=not_nontrivial_iff_subsingleton.mphtrivk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝¹:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnn:ℤhn:n∈Function.supportrhnonzero:rn≠0htriv:¬Nontrivial(E⟶(shiftFunctorC(n+1)).objT.obj₁)this:Subsingleton(E⟶(shiftFunctorC(n+1)).objT.obj₁)⊢ Falsehavehδ:δ_linn=0:=byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTriangles⊢ eulerFormObjkCET.obj₂=eulerFormObjkCET.obj₁+eulerFormObjkCET.obj₃extxk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝¹:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnn:ℤhn:n∈Function.supportrhnonzero:rn≠0htriv:¬Nontrivial(E⟶(shiftFunctorC(n+1)).objT.obj₁)this:Subsingleton(E⟶(shiftFunctorC(n+1)).objT.obj₁)x:E⟶(shiftFunctorCn).objT.obj₃⊢ (δ_linn)x=0xexactSubsingleton.elim__k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝¹:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnn:ℤhn:n∈Function.supportrhnonzero:rn≠0htriv:¬Nontrivial(E⟶(shiftFunctorC(n+1)).objT.obj₁)this:Subsingleton(E⟶(shiftFunctorC(n+1)).objT.obj₁)hδ:δ_linn=0⊢ Falseapplyhnonzerok:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝¹:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis✝:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnn:ℤhn:n∈Function.supportrhnonzero:rn≠0htriv:¬Nontrivial(E⟶(shiftFunctorC(n+1)).objT.obj₁)this:Subsingleton(E⟶(shiftFunctorC(n+1)).objT.obj₁)hδ:δ_linn=0⊢ rn=0simp[r,hδ]k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnn:ℤhn:n∈Function.supportrhnonzero:rn≠0hnontrivial:Nontrivial(E⟶(shiftFunctorC(n+1)).objT.obj₁)⊢ n∈(funm=>m-1)''{n|Nontrivial(E⟶(shiftFunctorCn).objT.obj₁)}exact⟨n+1,hnontrivial,byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnn:ℤhn:n∈Function.supportrhnonzero:rn≠0hnontrivial:Nontrivial(E⟶(shiftFunctorC(n+1)).objT.obj₁)⊢ (funm=>m-1)(n+1)=nsimpAll goals completed! 🐙⟩k:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnhr:(Function.supportr).Finite⊢ ∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+∑ᶠ(n:ℤ),↑n.negOnePow*↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))exacteulerSum_of_rank_identity(k:=k)(C:=C)E(a:=funn↦T.obj₁⟦n⟧)(b:=funn↦T.obj₂⟦n⟧)(c:=funn↦T.obj₃⟦n⟧)(r:=r)hrank(byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnhr:(Function.supportr).Finite⊢ {n|Nontrivial(E⟶(shiftFunctorCn).objT.obj₁)}.FinitesimpausingIsFiniteType.finite_support(k:=k)ET.obj₁All goals completed! 🐙)(byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnhr:(Function.supportr).Finite⊢ {n|Nontrivial(E⟶(shiftFunctorCn).objT.obj₂)}.FinitesimpausingIsFiniteType.finite_support(k:=k)ET.obj₂All goals completed! 🐙)(byk:Type winst✝⁸:FieldkC:Type uinst✝⁷:Category.{v, u}Cinst✝⁶:HasZeroObjectCinst✝⁵:HasShiftCℤinst✝⁴:PreadditiveCinst✝³:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝²:PretriangulatedCinst✝¹:LinearkCinst✝:IsFiniteTypekCE:CT:TriangleChT:T∈distinguishedTrianglesF:C⥤ModuleCatk:=(linearCoyonedakC).obj(Opposite.opE)this✝:F.ShiftSequenceℤ:=Functor.ShiftSequence.tautologicalFℤthis:F.IsHomological:=···δ_lin:(n:ℤ)→(E⟶(shiftFunctorCn).objT.obj₃)→ₗ[k]E⟶(shiftFunctorC(n+1)).objT.obj₁:=funn=>Linear.rightCompkE((shiftFunctorCn).mapT.mor₃≫(shiftFunctorAdd'C1n(n+1)⋯).inv.appT.obj₁)r:ℤ→ℤ:=funn=>↑(Module.finrankk↥(δ_linn).range)hδ_eq:∀(n:ℤ),ModuleCat.Hom.hom(F.homologySequenceδTn(n+1)⋯)=δ_linnh_ker_f_aux:∀(m:ℤ),↑(Module.finrankk↥(ModuleCat.Hom.hom((F.shift(m+1)).mapT.mor₁)).ker)=rmhrank:∀(n:ℤ),↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₂))=↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₁))+↑(Module.finrankk(E⟶(shiftFunctorCn).objT.obj₃))-r(n-1)-rnhr:(Function.supportr).Finite⊢ {n|Nontrivial(E⟶(shiftFunctorCn).objT.obj₃)}.FinitesimpausingIsFiniteType.finite_support(k:=k)ET.obj₃All goals completed! 🐙)hr
Theorem | BridgelandStability.EulerForm.Basic | Source | Open Issue
/-- The outer function `E ↦ eulerFormInner E` is triangle-additive, so the Euler
form descends to a bilinear form on `K₀`. -/@[instance]theoremeulerFormInner_isTriangleAdditive[(shiftFunctorC(1:ℤ)).Lineark]:IsTriangleAdditive(eulerFormInnerkC)Show proofwhereadditiveThT:=byk:Type winst✝⁹:FieldkC:Type uinst✝⁸:Category.{v, u}Cinst✝⁷:HasZeroObjectCinst✝⁶:HasShiftCℤinst✝⁵:PreadditiveCinst✝⁴:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝³:PretriangulatedCinst✝²:LinearkCinst✝¹:IsFiniteTypekCinst✝:Functor.Lineark(shiftFunctorC1)T:TriangleChT:T∈distinguishedTriangles⊢ eulerFormInnerkCT.obj₂=eulerFormInnerkCT.obj₁+eulerFormInnerkCT.obj₃applyK₀.hom_extk:Type winst✝⁹:FieldkC:Type uinst✝⁸:Category.{v, u}Cinst✝⁷:HasZeroObjectCinst✝⁶:HasShiftCℤinst✝⁵:PreadditiveCinst✝⁴:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝³:PretriangulatedCinst✝²:LinearkCinst✝¹:IsFiniteTypekCinst✝:Functor.Lineark(shiftFunctorC1)T:TriangleChT:T∈distinguishedTriangles⊢ ∀(X:C),(eulerFormInnerkCT.obj₂)(K₀.ofCX)=(eulerFormInnerkCT.obj₁+eulerFormInnerkCT.obj₃)(K₀.ofCX);introFk:Type winst✝⁹:FieldkC:Type uinst✝⁸:Category.{v, u}Cinst✝⁷:HasZeroObjectCinst✝⁶:HasShiftCℤinst✝⁵:PreadditiveCinst✝⁴:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝³:PretriangulatedCinst✝²:LinearkCinst✝¹:IsFiniteTypekCinst✝:Functor.Lineark(shiftFunctorC1)T:TriangleChT:T∈distinguishedTrianglesF:C⊢ (eulerFormInnerkCT.obj₂)(K₀.ofCF)=(eulerFormInnerkCT.obj₁+eulerFormInnerkCT.obj₃)(K₀.ofCF)simponly[AddMonoidHom.add_apply,eulerFormInner,K₀.lift_of]k:Type winst✝⁹:FieldkC:Type uinst✝⁸:Category.{v, u}Cinst✝⁷:HasZeroObjectCinst✝⁶:HasShiftCℤinst✝⁵:PreadditiveCinst✝⁴:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝³:PretriangulatedCinst✝²:LinearkCinst✝¹:IsFiniteTypekCinst✝:Functor.Lineark(shiftFunctorC1)T:TriangleChT:T∈distinguishedTrianglesF:C⊢ eulerFormObjkCT.obj₂F=eulerFormObjkCT.obj₁F+eulerFormObjkCT.obj₃FTry this: letI̵The goal is a proposition, so `let` is preferred over `letI`.The difference between `let` and `letI` is that `letI` inlines the value.But this is not relevant for proofs because of proof irrelevance.Note: This linter can be disabled with `set_option linter.style.haveILetI false`letI:=eulerFormObj_covariant_triangleAdditive(k:=k)(C:=C)Fk:Type winst✝⁹:FieldkC:Type uinst✝⁸:Category.{v, u}Cinst✝⁷:HasZeroObjectCinst✝⁶:HasShiftCℤinst✝⁵:PreadditiveCinst✝⁴:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝³:PretriangulatedCinst✝²:LinearkCinst✝¹:IsFiniteTypekCinst✝:Functor.Lineark(shiftFunctorC1)T:TriangleChT:T∈distinguishedTrianglesF:Cthis:IsTriangleAdditivefunE=>eulerFormObjkCEF:=···⊢ eulerFormObjkCT.obj₂F=eulerFormObjkCT.obj₁F+eulerFormObjkCT.obj₃FexactIsTriangleAdditive.additive(f:=funE↦eulerFormObjkCEF)ThTAll goals completed! 🐙
Theorem | BridgelandStability.NumericalStabilityManifold | Source | Open Issue
/-- **Bridgeland's Corollary 1.3** for numerical stability conditions. Each connected
component of `Stab_N(D)` is a complex manifold of dimension `rk(N(D))`.
This is a specialization of the generic class-map theorem to
`v = numericalQuotientMap k C`, which is surjective by definition. -/@[informal"Corollary 1.3""complex manifold conclusion only; local homeomorphism is in componentTopologicalLinearLocalModel"complete]theoremNumericalStabilityCondition.existsComplexManifoldOnConnectedComponent(k:Typew)[Fieldk][LinearkC][IsFiniteTypekC][(shiftFunctorC(1:ℤ)).Lineark][NumericallyFinitekC](cc:StabilityCondition.WithClassMap.ComponentIndexC(numericalQuotientMapkC)):∃(E:Typeu)(_:NormedAddCommGroupE)(_:NormedSpaceℂE)(_:FiniteDimensionalℂE)(_:ChartedSpaceE(NumericalComponent(k:=k)Ccc)),IsManifold(𝓘(ℂ,E))(⊤:WithTopℕ∞)(NumericalComponent(k:=k)Ccc)Show proof:=byC:Type uinst✝¹¹:Category.{v, u}Cinst✝¹⁰:HasZeroObjectCinst✝⁹:HasShiftCℤinst✝⁸:PreadditiveCinst✝⁷:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝⁶:PretriangulatedCinst✝⁵:IsTriangulatedCk:Type winst✝⁴:Fieldkinst✝³:LinearkCinst✝²:IsFiniteTypekCinst✝¹:Functor.Lineark(shiftFunctorC1)inst✝:NumericallyFinitekCcc:StabilityCondition.WithClassMap.ComponentIndexC(numericalQuotientMapkC)⊢ ∃Exx_1,∃(_:FiniteDimensionalℂE),∃x_3,IsManifold𝓘(ℂ,E)⊤(NumericalComponentkCcc)Try this: haveI̵The goal is a proposition, so `have` is preferred over `haveI`.The difference between `have` and `haveI` is that `haveI` inlines the value.But this is not relevant for proofs because of proof irrelevance.Note: This linter can be disabled with `set_option linter.style.haveILetI false`haveI:Fact(Function.Surjective(numericalQuotientMapkC)):=⟨QuotientAddGroup.mk'_surjective(eulerFormRadkC)⟩C:Type uinst✝¹¹:Category.{v, u}Cinst✝¹⁰:HasZeroObjectCinst✝⁹:HasShiftCℤinst✝⁸:PreadditiveCinst✝⁷:∀(n:ℤ),(shiftFunctorCn).Additiveinst✝⁶:PretriangulatedCinst✝⁵:IsTriangulatedCk:Type winst✝⁴:Fieldkinst✝³:LinearkCinst✝²:IsFiniteTypekCinst✝¹:Functor.Lineark(shiftFunctorC1)inst✝:NumericallyFinitekCcc:StabilityCondition.WithClassMap.ComponentIndexC(numericalQuotientMapkC)this:Fact(Function.Surjective⇑(numericalQuotientMapkC))⊢ ∃Exx_1,∃(_:FiniteDimensionalℂE),∃x_3,IsManifold𝓘(ℂ,E)⊤(NumericalComponentkCcc)simpa[NumericalComponent]usingStabilityCondition.WithClassMap.existsComplexManifoldOnConnectedComponentCccAll goals completed! 🐙