Zulip Chat Archive
Stream: condensed mathematics
Topic: 2-step proj resolution (PID)
Fabian Glöckle (Feb 26 2022 at 09:52):
I am trying to prove the existence of 2-step projective resolutions of modules over PIDs using the "submodules of free modules are free" statement.
I could produce P : chain_complex (Module.{v} R) ℕ
and π : P ⟶ ((chain_complex.single₀ (Module.{v} R)).obj (of R M))
and prove projectivity of all elements of P
, but am currently stuck proving exactness.
My problem is mainly that P
is defined using two nested ite
. Therefore, when proving exactness at high degrees, the goal has the perfectly innocent form category_theory.exact 0 0
(with zero morphisms between zero objects) and could math-wise be closed using category_theory.exact_of_zero (f : A ⟶ 0) (g : 0 ⟶ C) : category_theory.exact f g
. However, the middle element is
ite (n + 2 = 0) (of R (M →₀ R)) (ite (n + 2 = 1) (of R ↥((free_module_natural_map R M).ker)) 0)
in the presence of hn : n = 1
, and not defeq to the zero required by category_theory.exact_of_zero
.
Would you recommend proving propositionally that the term above equals zero, and rewriting / casting along that proof, or give up on equality rewriting and instead use category_theory.preadditive.exact_of_iso_of_exact
and prove that there exists an iso to 0 -> 0 -> 0
using the same proofs?
I am asking because I assume you have had to deal with lots of such defeq / propeq problems in the homological algebra library. Otherwise, I will just try out both approaches and see which one succeeds first :)
Fabian Glöckle (Feb 26 2022 at 10:01):
does is_zero_object
help here?
Fabian Glöckle (Feb 26 2022 at 10:03):
replacement_nat
?
Riccardo Brasca (Feb 26 2022 at 10:31):
We have preadditive.exact_of_iso_of_exact'
somewhere in the LTE, that is slightly more usable than the version in mathlib. I would use that.
Fabian Glöckle (Feb 26 2022 at 12:45):
Yes!
This works for the high degrees, but I cannot get exactness at degree 1 (the only interesting one) with the same approach:
The sequences look like
0 -> ker -> RM
and
0 -> ker' -> (RM)'
,
where the primed versions are the ones with ite
inside.
When applying preadditive.exact_of_iso_of_exact'
, I prove ker ≅ ker'
and RM ≅ (RM)'
by rewriting iso.refl
which gives the commutative square ker -> RM -> (RM)' = ker -> ker' -> (RM)'
which cannot be shown to commute because three of its four edges are cast
s.
Fabian Glöckle (Feb 26 2022 at 12:50):
I could replace the module ker
by the category theoretical kernel
, then exactness should be for free.
But I fear this shifts the problem over to proving projectivity of kernel
...
Johan Commelin (Feb 26 2022 at 13:25):
@Fabian Glöckle Isn't it easier to use the equation compiler instead of ite
?
Johan Commelin (Feb 26 2022 at 13:26):
def X (M : AddCommGroup) : ℕ → AddCommGroup
| 0 := free_abelian_group M
| 1 := ker blabla
| (n+2) := 0
Johan Commelin (Feb 26 2022 at 13:27):
There is AddCommGroup.exact_iff
somewhere in LTE. That would reduce you to the "normal" range
and ker
for additive group homs.
Johan Commelin (Feb 26 2022 at 13:28):
src/for_mathlib/AddCommGroup/exact.lean
12:theorem exact_iff : exact f g ↔ f.range = g.ker :=
Kevin Buzzard (Feb 26 2022 at 14:27):
Yes, Amelia taught me this trick when making small complexes -- the defeqs are much better if you use the equation compiler. But of course at some point we're going to have to figure out how to do this.
Last updated: Dec 20 2023 at 11:08 UTC