/-- An auxiliary definition to be used in the proof of `exists_of_sep` below.
  Given a compatible family of local sections for `P⁺`, and representatives of said sections,
  construct a compatible family of local sections of `P` over the combination of the covers
  associated to the representatives.
  The separatedness condition is used to prove compatibility among these local sections of `P`. -/
def meqOfSep (P : Cᵒᵖ ⥤ D)
    (hsep :
      ∀ (X : C) (S : J.Cover X) (x y : P.obj (op X)),
        (∀ I : S.Arrow, P.map I.f.op x = P.map I.f.op y) → x = y)
    (X : C) (S : J.Cover X) (s : Meq (J.plusObj P) S) (T : ∀ I : S.Arrow, J.Cover I.Y)
    (t : ∀ I : S.Arrow, Meq P (T I)) (ht : ∀ I : S.Arrow, s I = mk (t I)) : Meq P (S.bind T) where
  val I := t I.fromMiddle I.toMiddle
  property := by
    intro II
    apply inj_of_sep P hsep
    rw [← comp_apply, ← comp_apply, (J.toPlus P).naturality, (J.toPlus P).naturality, comp_apply,
      comp_apply]
    erw [toPlus_apply (T II.fst.fromMiddle) (t II.fst.fromMiddle) II.fst.toMiddle,
      toPlus_apply (T II.snd.fromMiddle) (t II.snd.fromMiddle) II.snd.toMiddle, ← ht, ← ht, ←
      comp_apply, ← comp_apply, ← (J.plusObj P).map_comp, ← (J.plusObj P).map_comp]
    rw [← op_comp, ← op_comp]
    let IR : S.Relation :=
      ⟨_, _, _, II.g₁ ≫ II.fst.toMiddleHom, II.g₂ ≫ II.snd.toMiddleHom, II.fst.fromMiddleHom,
        II.snd.fromMiddleHom, II.fst.from_middle_condition, II.snd.from_middle_condition, by
          simpa only [Category.assoc, II.fst.middle_spec, II.snd.middle_spec] using II.w⟩
    

Proof state:
case a
C : Type u
inst✝⁶ : Category.{v, u} C
J : GrothendieckTopology C
D : Type w
inst✝⁵ : Category.{max v u, w} D
inst✝⁴ : ConcreteCategory D
inst✝³ : PreservesLimits (forget D)
inst✝² : ∀ (X : C), HasColimitsOfShape (Cover J X)ᵒᵖ D
inst✝¹ : ∀ (P : Cᵒᵖ ⥤ D) (X : C) (S : Cover J X), HasMultiequalizer (Cover.index S P)
inst✝ : (X : C) → PreservesColimitsOfShape (Cover J X)ᵒᵖ (forget D)
P : Cᵒᵖ ⥤ D
hsep :
  ∀ (X : C) (S : Cover J X) (x y : (forget D).obj (P.obj (op X))),
    (∀ (I : Cover.Arrow S), (P.map I.f.op) x = (P.map I.f.op) y) → x = y
X : C
S : Cover J X
s : Meq (plusObj J P) S
T : (I : Cover.Arrow S) → Cover J I.Y
t : (I : Cover.Arrow S) → Meq P (T I)
ht : ∀ (I : Cover.Arrow S), ↑s I = mk (t I)
II : Cover.Relation (Cover.bind S T)
IR : Cover.Relation S :=
  { Y₁ := Cover.Arrow.middle (Cover.Relation.fst II), Y₂ := Cover.Arrow.middle (Cover.Relation.snd II), Z := II.Z,
    g₁ := II.g₁ ≫ Cover.Arrow.toMiddleHom (Cover.Relation.fst II),
    g₂ := II.g₂ ≫ Cover.Arrow.toMiddleHom (Cover.Relation.snd II),
    f₁ := Cover.Arrow.fromMiddleHom (Cover.Relation.fst II), f₂ := Cover.Arrow.fromMiddleHom (Cover.Relation.snd II),
    h₁ := (_ : (Cover.sieve S).arrows (Cover.Arrow.fromMiddleHom (Cover.Relation.fst II))),
    h₂ := (_ : (Cover.sieve S).arrows (Cover.Arrow.fromMiddleHom (Cover.Relation.snd II))),
    w :=
      (_ :
        (II.g₁ ≫ Cover.Arrow.toMiddleHom (Cover.Relation.fst II)) ≫ Cover.Arrow.fromMiddleHom (Cover.Relation.fst II) =
          (II.g₂ ≫ Cover.Arrow.toMiddleHom (Cover.Relation.snd II)) ≫
            Cover.Arrow.fromMiddleHom (Cover.Relation.snd II)) }
⊢ ((plusObj J P).map (II.g₁ ≫ (Cover.Arrow.toMiddle (Cover.Relation.fst II)).f).op)
      (↑s (Cover.Arrow.fromMiddle (Cover.Relation.fst II))) =
    ((plusObj J P).map (II.g₂ ≫ (Cover.Arrow.toMiddle (Cover.Relation.snd II)).f).op)
      (↑s (Cover.Arrow.fromMiddle (Cover.Relation.snd II)))

Next tactic:
exact s.condition IR