Documentation

Mathlib.Algebra.Homology.Embedding.Basic

Embeddings of complex shapes #

Given two complex shapes c : ComplexShape ι and c' : ComplexShape ι', an embedding from c to c' (e : c.Embedding c') consists of the data of an injective map f : ι → ι' such that for all i₁ i₂ : ι, c.Rel i₁ i₂ implies c'.Rel (e.f i₁) (e.f i₂). We define a type class e.IsRelIff to express that this implication is an equivalence. Other type classes e.IsTruncLE and e.IsTruncGE are introduced in order to formalize truncation functors.

This notion first appeared in the Liquid Tensor Experiment, and was developed there mostly by Johan Commelin, Adam Topaz and Joël Riou. It shall be used in order to relate the categories CochainComplex C ℕ and ChainComplex C ℕ to CochainComplex C ℤ. It shall also be used in the construction of the canonical t-structure on the derived category of an abelian category (TODO).

Description of the API #

structure ComplexShape.Embedding {ι : Type u_1} {ι' : Type u_2} (c : ComplexShape ι) (c' : ComplexShape ι') :
Type (max u_1 u_2)

An embedding of a complex shape c : ComplexShape ι into a complex shape c' : ComplexShape ι' consists of an injective map f : ι → ι' which satisfies a compatibility with respect to the relations c.Rel and c'.Rel.

  • f : ιι'

    the map between the underlying types of indices

  • injective_f : Function.Injective self.f
  • rel {i₁ i₂ : ι} (h : c.Rel i₁ i₂) : c'.Rel (self.f i₁) (self.f i₂)
Instances For
    def ComplexShape.Embedding.op {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') :

    The opposite embedding in Embedding c.symm c'.symm of e : Embedding c c'.

    Instances For
      @[simp]
      theorem ComplexShape.Embedding.op_f {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') (a✝ : ι) :
      e.op.f a✝ = e.f a✝
      class ComplexShape.Embedding.IsRelIff {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') :

      An embedding of complex shapes e satisfies e.IsRelIff if the implication e.rel is an equivalence.

      • rel' (i₁ i₂ : ι) (h : c'.Rel (e.f i₁) (e.f i₂)) : c.Rel i₁ i₂
      Instances
        theorem ComplexShape.Embedding.rel_iff {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') [e.IsRelIff] (i₁ i₂ : ι) :
        c'.Rel (e.f i₁) (e.f i₂) c.Rel i₁ i₂
        instance ComplexShape.Embedding.instIsRelIffOp {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') [e.IsRelIff] :
        def ComplexShape.Embedding.mk' {ι : Type u_1} {ι' : Type u_2} (c : ComplexShape ι) (c' : ComplexShape ι') (f : ιι') (hf : Function.Injective f) (iff : ∀ (i₁ i₂ : ι), c.Rel i₁ i₂ c'.Rel (f i₁) (f i₂)) :

        Constructor for embeddings between complex shapes when we have an equivalence ∀ (i₁ i₂ : ι), c.Rel i₁ i₂ ↔ c'.Rel (f i₁) (f i₂).

        Instances For
          @[simp]
          theorem ComplexShape.Embedding.mk'_f {ι : Type u_1} {ι' : Type u_2} (c : ComplexShape ι) (c' : ComplexShape ι') (f : ιι') (hf : Function.Injective f) (iff : ∀ (i₁ i₂ : ι), c.Rel i₁ i₂ c'.Rel (f i₁) (f i₂)) (a✝ : ι) :
          (mk' c c' f hf iff).f a✝ = f a✝
          instance ComplexShape.Embedding.instIsRelIffMk' {ι : Type u_1} {ι' : Type u_2} (c : ComplexShape ι) (c' : ComplexShape ι') (f : ιι') (hf : Function.Injective f) (iff : ∀ (i₁ i₂ : ι), c.Rel i₁ i₂ c'.Rel (f i₁) (f i₂)) :
          (mk' c c' f hf iff).IsRelIff
          class ComplexShape.Embedding.IsTruncGE {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') extends e.IsRelIff :

          The condition that the image of the map e.f of an embedding of complex shapes e : Embedding c c' is stable by c'.next.

          • rel' (i₁ i₂ : ι) (h : c'.Rel (e.f i₁) (e.f i₂)) : c.Rel i₁ i₂
          • mem_next {j : ι} {k' : ι'} (h : c'.Rel (e.f j) k') : ∃ (k : ι), e.f k = k'
          Instances
            theorem ComplexShape.Embedding.mem_next {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') [e.IsTruncGE] {j : ι} {k' : ι'} (h : c'.Rel (e.f j) k') :
            ∃ (k : ι), e.f k = k'
            class ComplexShape.Embedding.IsTruncLE {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') extends e.IsRelIff :

            The condition that the image of the map e.f of an embedding of complex shapes e : Embedding c c' is stable by c'.prev.

            • rel' (i₁ i₂ : ι) (h : c'.Rel (e.f i₁) (e.f i₂)) : c.Rel i₁ i₂
            • mem_prev {i' : ι'} {j : ι} (h : c'.Rel i' (e.f j)) : ∃ (i : ι), e.f i = i'
            Instances
              theorem ComplexShape.Embedding.mem_prev {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') [e.IsTruncLE] {i' : ι'} {j : ι} (h : c'.Rel i' (e.f j)) :
              ∃ (i : ι), e.f i = i'
              noncomputable def ComplexShape.Embedding.r {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') (i' : ι') :
              Option ι

              The map ι' → Option ι which sends e.f i to some i and the other elements to none.

              Instances For
                theorem ComplexShape.Embedding.r_eq_some {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') {i : ι} {i' : ι'} (hi : e.f i = i') :
                e.r i' = some i
                theorem ComplexShape.Embedding.r_eq_none {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') (i' : ι') (hi : ∀ (i : ι), e.f i i') :
                e.r i' = none
                @[simp]
                theorem ComplexShape.Embedding.r_f {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') (i : ι) :
                e.r (e.f i) = some i
                theorem ComplexShape.Embedding.f_eq_of_r_eq_some {ι : Type u_1} {ι' : Type u_2} {c : ComplexShape ι} {c' : ComplexShape ι'} (e : c.Embedding c') {i : ι} {i' : ι'} (hi : e.r i' = some i) :
                e.f i = i'

                The embedding from up' a to itself via (· + b).

                Instances For
                  @[simp]
                  theorem ComplexShape.embeddingUp'Add_f {A : Type u_3} [AddCommSemigroup A] [IsRightCancelAdd A] (a b x✝ : A) :
                  (embeddingUp'Add a b).f x✝ = x✝ + b

                  The embedding from down' a to itself via (· + b).

                  Instances For
                    @[simp]
                    theorem ComplexShape.embeddingDown'Add_f {A : Type u_3} [AddCommSemigroup A] [IsRightCancelAdd A] (a b x✝ : A) :
                    (embeddingDown'Add a b).f x✝ = x✝ + b

                    The obvious embedding from up ℕ to up ℤ.

                    Instances For

                      The embedding from down ℕ to up ℤ with sends n to -n.

                      Instances For
                        def ComplexShape.embeddingUpIntGE (p : ) :
                        (up ).Embedding (up )

                        The embedding from up ℕ to up ℤ which sends n : ℕ to p + n.

                        Instances For
                          @[simp]
                          theorem ComplexShape.embeddingUpIntGE_f (p : ) (n : ) :
                          (embeddingUpIntGE p).f n = p + n
                          def ComplexShape.embeddingUpIntLE (p : ) :
                          (down ).Embedding (up )

                          The embedding from down ℕ to up ℤ which sends n : ℕ to p - n.

                          Instances For
                            @[simp]
                            theorem ComplexShape.embeddingUpIntLE_f (p : ) (n : ) :
                            (embeddingUpIntLE p).f n = p - n
                            theorem ComplexShape.notMem_range_embeddingUpIntLE_iff (p n : ) :
                            (∀ (i : ), (embeddingUpIntLE p).f i n) p < n
                            theorem ComplexShape.notMem_range_embeddingUpIntGE_iff (p n : ) :
                            (∀ (i : ), (embeddingUpIntGE p).f i n) n < p