Documentation

Mathlib.Algebra.Homology.Embedding.AreComplementary

Complementary embeddings #

Given two embeddings e₁ : c₁.Embedding c and e₂ : c₂.Embedding c of complex shapes, we introduce a property e₁.AreComplementary e₂ saying that the image subsets of the indices of c₁ and c₂ form a partition of the indices of c.

If e₁.IsTruncLE and e₂.IsTruncGE, and K : HomologicalComplex C c, we construct a quasi-isomorphism shortComplexTruncLEX₃ToTruncGE between the cokernel of K.ιTruncLE e₁ : K.truncLE e₁ ⟶ K and K.truncGE e₂.

structure ComplexShape.Embedding.AreComplementary {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} (e₁ : c₁.Embedding c) (e₂ : c₂.Embedding c) :

Two embedding e₁ and e₂ into a complex shape c : ComplexShape ι are complementary when the range of e₁.f and e₂.f form a partition of ι.

  • disjoint (i₁ : ι₁) (i₂ : ι₂) : e₁.f i₁ e₂.f i₂
  • union (i : ι) : (∃ (i₁ : ι₁), e₁.f i₁ = i) ∃ (i₂ : ι₂), e₂.f i₂ = i
Instances For
    theorem ComplexShape.Embedding.AreComplementary.symm {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) :
    theorem ComplexShape.Embedding.AreComplementary.exists_i₁ {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) (i : ι) (hi : ∀ (i₂ : ι₂), e₂.f i₂ i) :
    ∃ (i₁ : ι₁), i = e₁.f i₁
    theorem ComplexShape.Embedding.AreComplementary.exists_i₂ {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) (i : ι) (hi : ∀ (i₁ : ι₁), e₁.f i₁ i) :
    ∃ (i₂ : ι₂), i = e₂.f i₂
    def ComplexShape.Embedding.AreComplementary.fromSum {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} (e₁ : c₁.Embedding c) (e₂ : c₂.Embedding c) :
    ι₁ ι₂ι

    Given complementary embeddings of complex shapes e₁ : Embedding c₁ c and e₂ : Embedding c₂ c, this is the obvious map ι₁ ⊕ ι₂ → ι from the sum of the index types of c₁ and c₂ to the index type of c.

    Equations
      Instances For
        theorem ComplexShape.Embedding.AreComplementary.fromSum_bijective {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) :
        noncomputable def ComplexShape.Embedding.AreComplementary.equiv {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) :
        ι₁ ι₂ ι

        Given complementary embeddings of complex shapes e₁ : Embedding c₁ c and e₂ : Embedding c₂ c, this is the obvious bijection ι₁ ⊕ ι₂ ≃ ι from the sum of the index types of c₁ and c₂ to the index type of c.

        Equations
          Instances For
            @[simp]
            theorem ComplexShape.Embedding.AreComplementary.equiv_inl {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) (i₁ : ι₁) :
            ac.equiv (Sum.inl i₁) = e₁.f i₁
            @[simp]
            theorem ComplexShape.Embedding.AreComplementary.equiv_inr {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) (i₂ : ι₂) :
            ac.equiv (Sum.inr i₂) = e₂.f i₂
            def ComplexShape.Embedding.AreComplementary.desc.aux {ι : Type u_1} (X : ιType u_5) (i j : ι) (hij : i = j) :
            X i X j

            Auxiliary definition for desc.

            Equations
              Instances For
                @[simp]
                theorem ComplexShape.Embedding.AreComplementary.desc.aux_trans {ι : Type u_1} {X : ιType u_5} {i j k : ι} (hij : i = j) (hjk : j = k) (x : X i) :
                (aux X j k hjk) ((aux X i j hij) x) = (aux X i k ) x
                def ComplexShape.Embedding.AreComplementary.desc' {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {X : ιType u_5} (x₁ : (i₁ : ι₁) → X (e₁.f i₁)) (x₂ : (i₂ : ι₂) → X (e₂.f i₂)) (i : ι₁ ι₂) :
                X (ac.equiv i)

                Auxiliary definition for desc.

                Equations
                  Instances For
                    theorem ComplexShape.Embedding.AreComplementary.desc'_inl {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {X : ιType u_5} (x₁ : (i₁ : ι₁) → X (e₁.f i₁)) (x₂ : (i₂ : ι₂) → X (e₂.f i₂)) (i : ι₁ ι₂) (i₁ : ι₁) (h : Sum.inl i₁ = i) :
                    ac.desc' x₁ x₂ i = (desc.aux X (e₁.f i₁) (ac.equiv i) ) (x₁ i₁)
                    theorem ComplexShape.Embedding.AreComplementary.desc'_inr {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {X : ιType u_5} (x₁ : (i₁ : ι₁) → X (e₁.f i₁)) (x₂ : (i₂ : ι₂) → X (e₂.f i₂)) (i : ι₁ ι₂) (i₂ : ι₂) (h : Sum.inr i₂ = i) :
                    ac.desc' x₁ x₂ i = (desc.aux X (e₂.f i₂) (ac.equiv i) ) (x₂ i₂)
                    noncomputable def ComplexShape.Embedding.AreComplementary.desc {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {X : ιType u_5} (x₁ : (i₁ : ι₁) → X (e₁.f i₁)) (x₂ : (i₂ : ι₂) → X (e₂.f i₂)) (i : ι) :
                    X i

                    If ι₁ and ι₂ are the index types of complementary embeddings into a complex shape of index type ι, this is a constructor for (dependent) maps from ι, which takes as inputs the "restrictions" to ι₁ and ι₂.

                    Equations
                      Instances For
                        theorem ComplexShape.Embedding.AreComplementary.desc_inl {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {X : ιType u_5} (x₁ : (i₁ : ι₁) → X (e₁.f i₁)) (x₂ : (i₂ : ι₂) → X (e₂.f i₂)) (i₁ : ι₁) :
                        ac.desc x₁ x₂ (e₁.f i₁) = x₁ i₁
                        theorem ComplexShape.Embedding.AreComplementary.desc_inr {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {X : ιType u_5} (x₁ : (i₁ : ι₁) → X (e₁.f i₁)) (x₂ : (i₂ : ι₂) → X (e₂.f i₂)) (i₂ : ι₂) :
                        ac.desc x₁ x₂ (e₂.f i₂) = x₂ i₂
                        theorem ComplexShape.Embedding.AreComplementary.isSupportedOutside₁_iff {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {C : Type u_4} [CategoryTheory.Category.{u_5, u_4} C] [CategoryTheory.Limits.HasZeroMorphisms C] {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) (K : HomologicalComplex C c) :
                        theorem ComplexShape.Embedding.AreComplementary.isSupportedOutside₂_iff {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {C : Type u_4} [CategoryTheory.Category.{u_5, u_4} C] [CategoryTheory.Limits.HasZeroMorphisms C] {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) (K : HomologicalComplex C c) :
                        theorem ComplexShape.Embedding.AreComplementary.hom_ext' {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {C : Type u_4} [CategoryTheory.Category.{u_5, u_4} C] [CategoryTheory.Limits.HasZeroMorphisms C] {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {K L : HomologicalComplex C c} (φ : K L) (hK : K.IsStrictlySupportedOutside e₂) (hL : L.IsStrictlySupportedOutside e₁) :
                        φ = 0

                        Variant of hom_ext.

                        theorem ComplexShape.Embedding.AreComplementary.hom_ext {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {C : Type u_4} [CategoryTheory.Category.{u_5, u_4} C] [CategoryTheory.Limits.HasZeroMorphisms C] {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {K L : HomologicalComplex C c} [K.IsStrictlySupported e₁] [L.IsStrictlySupported e₂] (φ : K L) :
                        φ = 0
                        def ComplexShape.Embedding.AreComplementary.Boundary {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} :
                        e₁.AreComplementary e₂(i₁ : ι₁) → (i₂ : ι₂) → Prop

                        If e₁ and e₂ are complementary embeddings into a complex shape c, indices i₁ and i₂ are at the boundary if c.Rel (e₁.f i₁) (e₂.f i₂).

                        Equations
                          Instances For
                            theorem ComplexShape.Embedding.AreComplementary.Boundary.fst {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} {ac : e₁.AreComplementary e₂} {i₁ : ι₁} {i₂ : ι₂} (h : ac.Boundary i₁ i₂) :
                            e₁.BoundaryLE i₁
                            theorem ComplexShape.Embedding.AreComplementary.Boundary.snd {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} {ac : e₁.AreComplementary e₂} {i₁ : ι₁} {i₂ : ι₂} (h : ac.Boundary i₁ i₂) :
                            e₂.BoundaryGE i₂
                            theorem ComplexShape.Embedding.AreComplementary.Boundary.fst_inj {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} {ac : e₁.AreComplementary e₂} {i₁ i₁' : ι₁} {i₂ : ι₂} (h : ac.Boundary i₁ i₂) (h' : ac.Boundary i₁' i₂) :
                            i₁ = i₁'
                            theorem ComplexShape.Embedding.AreComplementary.Boundary.snd_inj {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} {ac : e₁.AreComplementary e₂} {i₁ : ι₁} {i₂ i₂' : ι₂} (h : ac.Boundary i₁ i₂) (h' : ac.Boundary i₁ i₂') :
                            i₂ = i₂'
                            theorem ComplexShape.Embedding.AreComplementary.Boundary.exists₁ {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {i₁ : ι₁} (h : e₁.BoundaryLE i₁) :
                            ∃ (i₂ : ι₂), ac.Boundary i₁ i₂
                            theorem ComplexShape.Embedding.AreComplementary.Boundary.exists₂ {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {i₂ : ι₂} (h : e₂.BoundaryGE i₂) :
                            ∃ (i₁ : ι₁), ac.Boundary i₁ i₂
                            noncomputable def ComplexShape.Embedding.AreComplementary.Boundary.indexOfBoundaryLE {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {i₁ : ι₁} (h : e₁.BoundaryLE i₁) :
                            ι₂

                            If ac : AreComplementary e₁ e₂ (with e₁ : ComplexShape.Embedding c₁ c and e₂ : ComplexShape.Embedding c₂ c), and i₁ belongs to e₁.BoundaryLE, then this is the (unique) index i₂ of c₂ such that ac.Boundary i₁ i₂.

                            Equations
                              Instances For
                                theorem ComplexShape.Embedding.AreComplementary.Boundary.of_boundaryLE {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {i₁ : ι₁} (h : e₁.BoundaryLE i₁) :
                                noncomputable def ComplexShape.Embedding.AreComplementary.Boundary.indexOfBoundaryGE {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {i₂ : ι₂} (h : e₂.BoundaryGE i₂) :
                                ι₁

                                If ac : AreComplementary e₁ e₂ (with e₁ : ComplexShape.Embedding c₁ c and e₂ : ComplexShape.Embedding c₂ c), and i₂ belongs to e₂.BoundaryGE, then this is the (unique) index i₁ of c₁ such that ac.Boundary i₁ i₂.

                                Equations
                                  Instances For
                                    theorem ComplexShape.Embedding.AreComplementary.Boundary.of_boundaryGE {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) {i₂ : ι₂} (h : e₂.BoundaryGE i₂) :
                                    noncomputable def ComplexShape.Embedding.AreComplementary.Boundary.equiv {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} (ac : e₁.AreComplementary e₂) :

                                    The bijection Subtype e₁.BoundaryLE ≃ Subtype e₂.BoundaryGE when e₁ and e₂ are complementary embeddings of complex shapes.

                                    Equations
                                      Instances For
                                        noncomputable def HomologicalComplex.shortComplexTruncLEX₃ToTruncGE {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {C : Type u_4} [CategoryTheory.Category.{u_5, u_4} C] [CategoryTheory.Abelian C] (K : HomologicalComplex C c) {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} [e₁.IsTruncLE] [e₂.IsTruncGE] (ac : e₁.AreComplementary e₂) :

                                        When e₁ and e₂ are complementary embeddings of complex shapes, with e₁.IsTruncLE and e₂.IsTruncGE, then this is the canonical quasi-isomorphism (K.shortComplexTruncLE e₁).X₃ ⟶ K.truncGE e₂ where (K.shortComplexTruncLE e₁).X₃ is the cokernel of K.ιTruncLE e₁ : K.truncLE e₁ ⟶ K.

                                        Equations
                                          Instances For
                                            @[simp]
                                            theorem HomologicalComplex.g_shortComplexTruncLEX₃ToTruncGE {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {C : Type u_4} [CategoryTheory.Category.{u_5, u_4} C] [CategoryTheory.Abelian C] (K : HomologicalComplex C c) {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} [e₁.IsTruncLE] [e₂.IsTruncGE] (ac : e₁.AreComplementary e₂) :
                                            instance HomologicalComplex.instQuasiIsoShortComplexTruncLEX₃ToTruncGE {ι : Type u_1} {ι₁ : Type u_2} {ι₂ : Type u_3} {c : ComplexShape ι} {c₁ : ComplexShape ι₁} {c₂ : ComplexShape ι₂} {C : Type u_4} [CategoryTheory.Category.{u_5, u_4} C] [CategoryTheory.Abelian C] (K : HomologicalComplex C c) {e₁ : c₁.Embedding c} {e₂ : c₂.Embedding c} [e₁.IsTruncLE] [e₂.IsTruncGE] (ac : e₁.AreComplementary e₂) :