-- Module: Mathlib.Topology.Sheaves.Flasque
Goal:
X : TopCat
U : Opens (↑X : Type u)
S : ShortComplex (Sheaf AddCommGrpCat X)
hS : S.ShortExact
inst : S.X₁.IsFlasque
s : (↑(S.X₃.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op U)) : Type u)
t : Under S.g s
ht : ∀ (a : Under S.g s), Nonempty.{u + 1} (a ⟶ t) → Nonempty.{u + 1} (t ⟶ a)
tle :
  unop
      ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
        (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
              CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
          c)) ≤
    U
tcomp :
  Eq (α :=
    ToType (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)
      (S.X₃.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj
        (op
          (unop
            ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
              (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                    CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                      (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                c))))))
    (restrictOpen (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
      AddCommGrpCat.carrier) s
      (unop
        ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
          (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                  (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
            c)))
      tle)
    ((ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
          AddCommGrpCat.carrier) (X :=
          S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj
            ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
              (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                    CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                      (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                c)))
          (S.g.hom.app
            ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
              (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                    CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                      (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                c))) :
        (a : (↑(S.X₂.obj.obj (StructuredArrow.right t).fst) : Type u)) →
          (↑(S.X₃.obj.obj (StructuredArrow.right t).fst) : Type u))
      ((StructuredArrow.right t).snd (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
        (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
              CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
          c)))
x : (↑X : Type u)
hx : x ∈ U
this_1 :
  Presheaf.IsLocallySurjective (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
    AddCommGrpCat.carrier) S.g.hom
W : Opens (↑X : Type u)
Wle : W ≤ U
hW : x ∈ W
t₁ : (↑(S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W)) : Type u)
ht₁ :
  Eq (α :=
    (↑(S.X₃.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W)) : Type u))
    ((ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
            AddCommGrpCat.carrier) (X :=
            S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W))
            (S.g.hom.app (op W)) :
          (a : (↑(S.X₂.obj.obj (op W)) : Type u)) → (↑(S.X₃.obj.obj (op W)) : Type u))
        t₁ :
      (↑(S.X₃.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W)) :
        Type u))
    (restrictOpen (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
        AddCommGrpCat.carrier) s W Wle :
      ToType (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)
        (S.X₃.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W)))
t₂ : ToType (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)
  (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj
    (op
      (unop
          ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
            (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                  CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                    (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
              c)) ⊓
        W))) :=
  HSub.hSub (α :=
    ToType (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)
      (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj
        (op
          (unop
              ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
                (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                      CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                        (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                  c)) ⊓
            W))))
    (restrictOpen (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
      AddCommGrpCat.carrier)
      ((StructuredArrow.right t).snd (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
        (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
              CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
          c))
      (unop
          ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
            (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                  CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                    (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
              c)) ⊓
        W)
      ⋯)
    (restrictOpen (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
      AddCommGrpCat.carrier) t₁
      (unop
          ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
            (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                  CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                    (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
              c)) ⊓
        W)
      ⋯)
this :
  Eq (α :=
    (↑(S.X₃.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj
          (op
            (unop
                ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
                  (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                        CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                          (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                    c)) ⊓
              W))) :
      Type u))
    ((ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
            AddCommGrpCat.carrier) (X :=
            S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj
              (op
                (unop
                    ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
                      (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                            CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                              (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                        c)) ⊓
                  W)))
            (S.g.hom.app
              (op
                (unop
                    ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
                      (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                            CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                              (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                        c)) ⊓
                  W))) :
          (a : (↑(S.X₂.obj.obj (op (unop (StructuredArrow.right t).fst ⊓ W))) : Type u)) →
            (↑(S.X₃.obj.obj (op (unop (StructuredArrow.right t).fst ⊓ W))) : Type u))
        t₂ :
      (↑(S.X₃.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj
            (op
              (unop
                  ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
                    (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                          CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                            (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                      c)) ⊓
                W))) :
        Type u))
    (0 :
      (↑(S.X₃.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj
            (op
              (unop
                  ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
                    (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                          CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                            (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                      c)) ⊓
                W))) :
        Type u))
t₃ :
  (↑(S.X₁.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj
        (op
          (unop
              ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
                (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                      CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                        (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                  c)) ⊓
            W))) :
    Type u)
ht₃ :
  (ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
          AddCommGrpCat.carrier) (X :=
          S.X₁.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj
            (op
              (unop
                  ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
                    (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                          CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                            (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                      c)) ⊓
                W)))
          (S.f.hom.app
            (op
              (unop
                  ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
                    (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                          CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                            (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
                      c)) ⊓
                W))) :
        (a : (↑(S.X₁.obj.obj (op (unop (StructuredArrow.right t).fst ⊓ W))) : Type u)) →
          (↑(S.X₂.obj.obj (op (unop (StructuredArrow.right t).fst ⊓ W))) : Type u))
      t₃ =
    t₂
t₄ : (↑(S.X₁.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W)) : Type u)
ht₄ :
  restrictOpen (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)
      t₄
      (unop
          ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
            (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
                  CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                    (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
              c)) ⊓
        W)
      ⋯ =
    t₃
f : Fin 2 → Opens (↑X : Type u) :=
  ![unop
      ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
        (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
              CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
          c)),
    W]
sf : (i : Fin 2) →
  (↑(S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op (f i))) :
    Type u) :=
  fun (x : Fin 2) ↦
    match (motive :=
      (x : Fin 2) →
        (↑(S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op (f x))) :
          Type u))
      x with
    | 0 =>
      (StructuredArrow.right t).snd (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
        (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))) ⋙
              CategoryTheory.forget AddCommGrpCat (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦
                (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)).obj
          c)
    | 1 =>
      HAdd.hAdd (β :=
        (↑(S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W)) :
          Type u))
        t₁
        ((ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
                AddCommGrpCat.carrier) (X :=
                S.X₁.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W))
                (S.f.hom.app (op W)) :
              (a : (↑(S.X₁.obj.obj (op W)) : Type u)) → (↑(S.X₂.obj.obj (op W)) : Type u))
            t₄ :
          (↑(S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W)) :
            Type u))
⊢ restrictOpen (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)
      ((StructuredArrow.right t).snd (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
        ToType (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC := AddCommGrpCat.carrier)
          (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj c)))
      (unop
          ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
            ToType (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
              AddCommGrpCat.carrier)
              (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj c))) ⊓
        W)
      ⋯ =
    restrictOpen (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
      AddCommGrpCat.carrier)
      (HAdd.hAdd (β :=
        (↑(S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W)) :
          Type u))
        t₁
        ((ConcreteCategory.hom (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
                AddCommGrpCat.carrier) (X :=
                S.X₁.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W))
                (S.f.hom.app (op W)) :
              (a : (↑(S.X₁.obj.obj (op W)) : Type u)) → (↑(S.X₂.obj.obj (op W)) : Type u))
            t₄ :
          (↑(S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj (op W)) :
            Type u)))
      (unop
          ((StructuredArrow.right t).fst (β := fun (c : (Opens (↑X : Type u))ᵒᵖ) ↦
            ToType (FC := fun (x1 x2 : AddCommGrpCat.{u}) ↦ (↑x1 : Type u) →+ (↑x2 : Type u)) (CC :=
              AddCommGrpCat.carrier)
              (S.X₂.obj (P := CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology (↑X : Type u))).obj c))) ⊓
        W)
      ⋯

Tactic:
simp only [restrict_sum, ← map_restrict, ht₄, ht₃, t₂, add_sub_cancel]

Premises used: add_sub_cancel, TopCat.Presheaf.map_restrict, TopCat.Presheaf.restrict_sum