Lemma MappyngCylinderIsoHomot_eq2 {C1 C2 : Complex A} (f : (ComplexPreCat_Additive A)⟦C1, C2⟧) (i : hz) : (transportf (precategory_morphisms (to_BinDirectSums A (C1 i) (to_BinDirectSums A (C1 (i + 1)) (C2 i)))) (maponpaths (λ (i0 : pr1 hz), BinDirectSumOb (to_BinDirectSums A (C1 i0) (to_BinDirectSums A (C1 (i0 + 1)) (C2 i0)))) (hzrplusminus i 1)) (MappingCylinderDiff A f i · MappingCylinderIsoHomot f (i + 1))) = MappingCylinderIsoHomot_mor2 f i. Proof. cbn. unfold MappingCylinderIsoHomot. unfold MappingCylinderIsoHomot_mor2. cbn. set (DS1 := to_BinDirectSums A (C1 (i + 1)) (C2 i)). set (DS2 := to_BinDirectSums A (C1 i) DS1). set (DS3 := to_BinDirectSums A (C1 (i + 1 + 1)) (C2 (i + 1))). set (DS4 := to_BinDirectSums A (C1 (i + 1)) DS3). set (DS5 := to_BinDirectSums A (C1 (i + 1 - 1 + 1)) (C2 (i + 1 - 1))). set (DS6 := to_BinDirectSums A (C1 (i + 1 - 1)) DS5). cbn. unfold MappingCylinderDiff. unfold MappingCylinderDiff1. unfold MappingCylinderDiff2. unfold MappingCylinderDiff3. cbn. fold DS1 DS2 DS3 DS4 DS5 DS6. cbn. rewrite to_postmor_linear'. rewrite to_postmor_linear'. rewrite <- transport_target_to_binop. rewrite assoc. rewrite assoc. rewrite assoc. rewrite assoc. rewrite assoc. rewrite assoc. rewrite assoc. rewrite assoc. rewrite assoc. rewrite assoc. rewrite assoc. rewrite assoc. rewrite assoc. rewrite <- (assoc _ _ (to_Pr1 DS4)). rewrite (to_IdIn1 DS4). rewrite id_right. rewrite <- (assoc _ _ (to_Pr1 DS4)). rewrite (to_IdIn1 DS4). rewrite id_right. rewrite <- (assoc _ _ (to_Pr1 DS4)). rewrite (to_Unel2' DS4). rewrite ZeroArrow_comp_right. rewrite ZeroArrow_comp_left. rewrite ZeroArrow_comp_left. rewrite to_runax''. assert (e1 : (transportf (precategory_morphisms DS2) (maponpaths (λ (i0 : pr1 hz), BinDirectSumOb (to_BinDirectSums A (C1 i0) (to_BinDirectSums A (C1 (i0 + 1)) (C2 i0)))) (hzrplusminus i 1)) (to_Pr1 DS2 · Diff C1 i · transportf (λ x' : A, A ⟦ x', DS5 ⟧) (maponpaths C1 (hzrminusplus (i + 1) 1)) (to_In1 DS5) · to_inv (to_In2 DS6))) = ((to_Pr1 DS2) · (to_inv (Diff C1 i)) · (to_In1 DS1) · (to_In2 DS2))). { rewrite transport_target_postcompose. rewrite <- assoc. rewrite <- assoc. rewrite <- assoc. rewrite <- assoc. apply cancel_precomposition. rewrite <- PreAdditive_invlcomp. rewrite PreAdditive_invrcomp. apply cancel_precomposition. rewrite <- transport_target_postcompose. rewrite <- transport_source_precompose. rewrite <- PreAdditive_invrcomp. unfold DS2, DS1, DS6, DS5. set (tmp := λ i0 : hz, BinDirectSumOb (to_BinDirectSums A (C1 i0) (to_BinDirectSums A (C1 (i0 + 1)) (C2 i0)))). set (tmp'' := (λ i0 : hz, (to_inv ((to_In1 (to_BinDirectSums A (C1 (i0 + 1)) (C2 i0))) · (to_In2 (to_BinDirectSums A (C1 i0) (to_BinDirectSums A (C1 (i0 + 1)) (C2 i0)))))))). set (tmp' := @transport_hz_double_section_source_target A (λ i0 : hz, C1 (i0 + 1)) tmp tmp'' _ _ (hzrplusminus i 1)). unfold tmp'' in tmp'. rewrite tmp'. clear tmp'. unfold tmp. clear tmp. clear tmp''. apply maponpaths. rewrite <- transport_source_to_inv. rewrite <- transport_source_to_inv. apply maponpaths. rewrite transport_source_precompose. rewrite transport_source_precompose. apply cancel_postcomposition. assert (e2 : maponpaths C1 (hzrminusplus (i + 1) 1) = maponpaths (λ i0 : hz, C1 (i0 + 1)) (hzrplusminus i 1)). { assert (e3 : maponpaths (λ i0 : hz, C1 (i0 + 1)) (hzrplusminus i 1) = maponpaths C1 (maponpaths (λ i0 : hz, i0 + 1) (hzrplusminus i 1))). { induction (hzrplusminus i 1). apply idpath. } rewrite e3. clear e3. apply maponpaths. apply isasethz. } rewrite <- e2. apply idpath. } cbn in e1. cbn. rewrite <- e1. clear e1. apply maponpaths. rewrite transport_target_postcompose. rewrite <- assoc. rewrite <- assoc. rewrite <- assoc. rewrite <- assoc. apply cancel_precomposition. rewrite <- PreAdditive_invlcomp. rewrite PreAdditive_invrcomp. apply cancel_precomposition. rewrite <- transport_target_postcompose. rewrite <- transport_source_precompose. rewrite <- PreAdditive_invrcomp. unfold DS2, DS1, DS6, DS5. rewrite transport_target_to_inv. rewrite transport_source_to_inv. rewrite inv_inv_eq. set (tmp := λ i0 : hz, BinDirectSumOb (to_BinDirectSums A (C1 i0) (to_BinDirectSums A (C1 (i0 + 1)) (C2 i0)))). set (tmp'' := (λ i0 : hz, (to_In1 (to_BinDirectSums A (C1 (i0 + 1)) (C2 i0))) · (to_In2 (to_BinDirectSums A (C1 i0) (to_BinDirectSums A (C1 (i0 + 1)) (C2 i0)))))). set (tmp' := @transport_hz_double_section_source_target A (λ i0 : hz, C1 (i0 + 1)) tmp tmp'' _ _ (hzrplusminus i 1)). unfold tmp'' in tmp'. rewrite tmp'. clear tmp'. unfold tmp. clear tmp. clear tmp''. apply maponpaths. rewrite transport_source_precompose. rewrite transport_source_precompose. apply cancel_postcomposition. assert (e2 : maponpaths C1 (hzrminusplus (i + 1) 1) = maponpaths (λ i0 : hz, C1 (i0 + 1)) (hzrplusminus i 1)). { assert (e3 : maponpaths (λ i0 : hz, C1 (i0 + 1)) (hzrplusminus i 1) = maponpaths C1 (maponpaths (λ i0 : hz, i0 + 1) (hzrplusminus i 1))). { induction (hzrplusminus i 1). apply idpath. } rewrite e3. clear e3. apply maponpaths. apply isasethz. } rewrite <- e2. apply idpath. Qed.
Require Import UniMath.Foundations.UnivalenceAxiom. Require Import UniMath.Foundations.PartD. Require Import UniMath.Foundations.Propositions. Require Import UniMath.Foundations.Sets. Require Import UniMath.Foundations.NaturalNumbers. Require Import UniMath.Algebra.BinaryOperations. Require Import UniMath.Algebra.Monoids. Require Import UniMath.NumberSystems.Integers. Require Import UniMath.CategoryTheory.Core.Categories. Require Import UniMath.CategoryTheory.Core.Isos. Require Import UniMath.CategoryTheory.Core.TransportMorphisms. Require Import UniMath.CategoryTheory.Limits.Zero. Require Import UniMath.CategoryTheory.Limits.BinProducts. Require Import UniMath.CategoryTheory.Limits.BinCoproducts. Require Import UniMath.CategoryTheory.Limits.Equalizers. Require Import UniMath.CategoryTheory.Limits.Coequalizers. Require Import UniMath.CategoryTheory.Limits.Kernels. Require Import UniMath.CategoryTheory.Limits.Cokernels. Require Import UniMath.CategoryTheory.Limits.Pushouts. Require Import UniMath.CategoryTheory.Limits.Pullbacks. Require Import UniMath.CategoryTheory.Limits.BinDirectSums. Require Import UniMath.CategoryTheory.Monics. Require Import UniMath.CategoryTheory.Epis. Require Import UniMath.CategoryTheory.Core.Functors. Require Import UniMath.CategoryTheory.Adjunctions.Core. Require Import UniMath.CategoryTheory.Equivalences.Core. Require Import UniMath.CategoryTheory.CategoriesWithBinOps. Require Import UniMath.CategoryTheory.PrecategoriesWithAbgrops. Require Import UniMath.CategoryTheory.PreAdditive. Require Import UniMath.CategoryTheory.Additive. Require Import UniMath.CategoryTheory.Abelian. Require Import UniMath.CategoryTheory.AbelianToAdditive. Require Import UniMath.CategoryTheory.AdditiveFunctors. Require Import UniMath.HomologicalAlgebra.Complexes. Require Import UniMath.HomologicalAlgebra.KA. Require Import UniMath.HomologicalAlgebra.TranslationFunctors. Require Import UniMath.HomologicalAlgebra.MappingCone.