Full dg subcategories #
dg-enhancements-e8, part one. Given a dg category C and a predicate P on
its objects, the objects satisfying P form a dg category whose Hom-complexes
are the ambient ones, unchanged.
Why this is a root rather than a one-off #
The derived dg enhancement is the full dg subcategory of C^dg A on the
K-injective complexes, and its dual is the one on the K-projective complexes.
Neither is a new dg category: both are C^dg A with its objects cut down, and
writing either one directly would duplicate five axiom proofs that have nothing
to do with resolutions. HomotopyCategory/DGEnhancement/KInjective.lean and
HomotopyCategory/DGEnhancement/KProjective.lean are the two consumers, and
they supply only the predicate.
The construction is definitional, and that is the point #
dgHom X Y is dgHom X.obj Y.obj by definition, not up to an isomorphism
that later files would have to transport along. So is dgId, and so is
dgComp. Every field of DGCategory is therefore the ambient field applied,
and every axiom is the ambient axiom applied -- there is no sign, no
re-association, and no AddMonoidHom to rebuild. Contrast Product.lean,
where the Hom-complex is a genuinely new complex and the file is four times
this length.
Two consequences worth stating, because later files rely on both:
- the inclusion
iotahasAddMonoidHom.idfor its action on Hom-complexes, so it is faithful and full in every degree on the nose (iota_map_apply, which is deliberately not@[simp]-- see its docstring); DGLineartransfers with no new module structure, because the graded pieces are literally the same abelian groups (homModule,linear, andiota_map_smulas the test).
Why there are no @[simp] lemmas for the identifications #
The obvious candidates -- dgHom X Y = dgHom X.obj Y.obj and its siblings --
have the same head symbol on both sides and differ only in the
DGCategoryStruct instance. simp's discrimination tree does not separate
those reliably, so tagging them invites a loop for no gain: every one of them
is rfl, and a goal that needs one is discharged by rfl, exact, or show.
The lemmas are stated anyway, named, so that a reader can see the
identification and cite it.
The objects #
These five need no dg structure at all, so they are stated before C acquires
one. Keeping them outside the [DGCategory C] scope is not cosmetic: the
unusedSectionVars linter runs library-wide in CI and fails on an
automatically included instance a declaration does not use.
The underlying ambient object.
Instances For
The underlying object satisfies the defining predicate.
An ambient object satisfying P, as an object of the full dg
subcategory.
Equations
- CategoryTheory.DGFullSubcategory.mk X hX = ⟨X, hX⟩
Instances For
Two objects of the full dg subcategory agree as soon as their ambient
objects do; P is a Prop, so there is nothing else to check.
The Hom-complexes, identity and composition are the ambient ones.
Equations
- One or more equations did not get rendered due to their size.
The Hom-complex is the ambient one.
The identity is the ambient one.
Graded composition is the ambient one.
The full dg subcategory is a dg category. Every axiom is the ambient axiom applied to the ambient objects; nothing is reproved.
Equations
- One or more equations did not get rendered due to their size.
The identity and composition tests #
The two laws that would be wrong if the instance above had transported
anything rather than reusing it. Both are rfl, and that they are rfl is the
claim.
The identity test. dgId is a left unit for dgComp, by the ambient
unit law rather than a transported one.
The composition test. dgId is a right unit for dgComp, likewise.
The inclusion #
The inclusion of a full dg subcategory into its ambient dg category. Its action on Hom-complexes is the identity.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The inclusion sends an object to its ambient object.
The inclusion acts as the identity on every graded piece of every
Hom-complex. This is the precise form of "full and faithful" available here:
DGFunctor has no fullness or faithfulness class, and for this functor the
statement is stronger than either would be.
Not @[simp], and the reason is iota_obj above. That lemma rewrites
(iota P).obj X to X.obj -- including inside the type of this one's
left-hand side, which mentions dgHom ((iota P).obj X) ((iota P).obj Y). The
left-hand side is therefore never in simp-normal form and simpNF rejects the
attribute. Keep the attribute on the obj lemma, drop it on the map one,
and name this lemma explicitly in the simp only sets that need it.
Linearity #
No module structure is introduced. The graded pieces of the Hom-complexes are
the ambient ones, so the ambient Module k instances are the instances, and
each DGLinear axiom is the ambient axiom applied.
The ambient module structure, seen through the subtype.
Equations
- CategoryTheory.DGFullSubcategory.homModule k X Y p = inst✝ X.obj Y.obj p
The scalar-compatibility test, and why it is not a lemma.
The statement one reaches for first -- that the subcategory's action on
(dgHom X Y).X p is the ambient action on (dgHom X.obj Y.obj).X p -- cannot
be written down usefully. Both sides elaborate to the same term, so the
simpNF linter rejects it with "LHS equals RHS syntactically", and it is
right to: a lemma that is rfl with no change of spelling records nothing.
That there is nothing to record is the claim. A transported module structure
would need such a lemma; this one does not, because it is the ambient
structure. What does carry content is that the inclusion preserves scalars,
and that is iota_linear below with iota_map_smul reading it back.
A full dg subcategory of a k-linear dg category is k-linear.
Each field names the ambient dg category explicitly with (C := C). Without
it, Lean reads the dg category off the type of f, which is the subcategory,
and then tries to synthesize the very instance being defined.
The inclusion is k-linear.
The scalar-compatibility test. The inclusion preserves scalar
multiplication in every degree. Unlike the identity that the section comment
above declines to state, this one is not rfl on the nose: the two sides
differ by where the identity AddMonoidHom sits.