Theorem: CategoryTheory.Presieve.isSheaf_sup
File: Mathlib/CategoryTheory/Sites/Coverage.lean

Proof steps:
state_before: C : Type u_2
D : Type ?u.77901
inst✝¹ : Category.{u_3, u_2} C
inst✝ : Category.{?u.77909, ?u.77901} D
K L : Coverage C
P : Cᵒᵖ ⥤ Type u_1
⊢ IsSheaf (toGrothendieck C (K ⊔ L)) P ↔ IsSheaf (toGrothendieck C K) P ∧ IsSheaf (toGrothendieck C L) P
state_after: C : Type u_2
D : Type ?u.77901
inst✝¹ : Category.{u_3, u_2} C
inst✝ : Category.{?u.77909, ?u.77901} D
K L : Coverage C
P : Cᵒᵖ ⥤ Type u_1
h : IsSheaf (toGrothendieck C K) P ∧ IsSheaf (toGrothendieck C L) P
⊢ IsSheaf (toGrothendieck C (K ⊔ L)) P
tactic: refine ⟨fun h ↦ ⟨Presieve.isSheaf_of_le _ ((gi C).gc.monotone_l le_sup_left) h,
      Presieve.isSheaf_of_le _ ((gi C).gc.monotone_l le_sup_right) h⟩, fun h ↦ ?_⟩
state_before: C : Type u_2
D : Type ?u.77901
inst✝¹ : Category.{u_3, u_2} C
inst✝ : Category.{?u.77909, ?u.77901} D
K L : Coverage C
P : Cᵒᵖ ⥤ Type u_1
h : IsSheaf (toGrothendieck C K) P ∧ IsSheaf (toGrothendieck C L) P
⊢ IsSheaf (toGrothendieck C (K ⊔ L)) P
state_after: C : Type u_2
D : Type ?u.77901
inst✝¹ : Category.{u_3, u_2} C
inst✝ : Category.{?u.77909, ?u.77901} D
K L : Coverage C
P : Cᵒᵖ ⥤ Type u_1
h : (∀ {X : C}, ∀ R ∈ K.covering X, IsSheafFor P R) ∧ ∀ {X : C}, ∀ R ∈ L.covering X, IsSheafFor P R
⊢ IsSheaf (toGrothendieck C (K ⊔ L)) P
tactic: rw [isSheaf_coverage, isSheaf_coverage] at h
state_before: C : Type u_2
D : Type ?u.77901
inst✝¹ : Category.{u_3, u_2} C
inst✝ : Category.{?u.77909, ?u.77901} D
K L : Coverage C
P : Cᵒᵖ ⥤ Type u_1
h : (∀ {X : C}, ∀ R ∈ K.covering X, IsSheafFor P R) ∧ ∀ {X : C}, ∀ R ∈ L.covering X, IsSheafFor P R
⊢ IsSheaf (toGrothendieck C (K ⊔ L)) P
state_after: C : Type u_2
D : Type ?u.77901
inst✝¹ : Category.{u_3, u_2} C
inst✝ : Category.{?u.77909, ?u.77901} D
K L : Coverage C
P : Cᵒᵖ ⥤ Type u_1
h : (∀ {X : C}, ∀ R ∈ K.covering X, IsSheafFor P R) ∧ ∀ {X : C}, ∀ R ∈ L.covering X, IsSheafFor P R
⊢ ∀ {X : C}, ∀ R ∈ (K ⊔ L).covering X, IsSheafFor P R
tactic: rw [isSheaf_coverage]
state_before: C : Type u_2
D : Type ?u.77901
inst✝¹ : Category.{u_3, u_2} C
inst✝ : Category.{?u.77909, ?u.77901} D
K L : Coverage C
P : Cᵒᵖ ⥤ Type u_1
h : (∀ {X : C}, ∀ R ∈ K.covering X, IsSheafFor P R) ∧ ∀ {X : C}, ∀ R ∈ L.covering X, IsSheafFor P R
⊢ ∀ {X : C}, ∀ R ∈ (K ⊔ L).covering X, IsSheafFor P R
state_after: C : Type u_2
D : Type ?u.77901
inst✝¹ : Category.{u_3, u_2} C
inst✝ : Category.{?u.77909, ?u.77901} D
K L : Coverage C
P : Cᵒᵖ ⥤ Type u_1
h : (∀ {X : C}, ∀ R ∈ K.covering X, IsSheafFor P R) ∧ ∀ {X : C}, ∀ R ∈ L.covering X, IsSheafFor P R
X : C
R : Presieve X
hR : R ∈ (K ⊔ L).covering X
⊢ IsSheafFor P R
tactic: intro X R hR
state_before: C : Type u_2
D : Type ?u.77901
inst✝¹ : Category.{u_3, u_2} C
inst✝ : Category.{?u.77909, ?u.77901} D
K L : Coverage C
P : Cᵒᵖ ⥤ Type u_1
h : (∀ {X : C}, ∀ R ∈ K.covering X, IsSheafFor P R) ∧ ∀ {X : C}, ∀ R ∈ L.covering X, IsSheafFor P R
X : C
R : Presieve X
hR : R ∈ (K ⊔ L).covering X
⊢ IsSheafFor P R
state_after: case inl
C : Type u_2
D : Type ?u.77901
inst✝¹ : Category.{u_3, u_2} C
inst✝ : Category.{?u.77909, ?u.77901} D
K L : Coverage C
P : Cᵒᵖ ⥤ Type u_1
h : (∀ {X : C}, ∀ R ∈ K.covering X, IsSheafFor P R) ∧ ∀ {X : C}, ∀ R ∈ L.covering X, IsSheafFor P R
X : C
R : Presieve X
hR : R ∈ K.covering X
⊢ IsSheafFor P R

case inr
C : Type u_2
D : Type ?u.77901
inst✝¹ : Category.{u_3, u_2} C
inst✝ : Category.{?u.77909, ?u.77901} D
K L : Coverage C
P : Cᵒᵖ ⥤ Type u_1
h : (∀ {X : C}, ∀ R ∈ K.covering X, IsSheafFor P R) ∧ ∀ {X : C}, ∀ R ∈ L.covering X, IsSheafFor P R
X : C
R : Presieve X
hR : R ∈ L.covering X
⊢ IsSheafFor P R
tactic: cases' hR with hR hR