Theorem: CategoryTheory.Presieve.isSheaf_pretopology
File: Mathlib/CategoryTheory/Sites/SheafOfTypes.lean

tactic: constructor
state_before: C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
⊢ IsSheaf (Pretopology.toGrothendieck C K) P ↔
    ∀ {X : C} (R : Presieve X), R ∈ Pretopology.coverings K X → IsSheafFor P R

tactic: intro PJ X R hR
state_before: case mp
C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
⊢ IsSheaf (Pretopology.toGrothendieck C K) P →
    ∀ {X : C} (R : Presieve X), R ∈ Pretopology.coverings K X → IsSheafFor P R

tactic: rw [isSheafFor_iff_generate]
state_before: case mp
C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y : C
S : Sieve X✝
R✝ : Presieve X✝
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
PJ : IsSheaf (Pretopology.toGrothendieck C K) P
X : C
R : Presieve X
hR : R ∈ Pretopology.coverings K X
⊢ IsSheafFor P R

tactic: apply PJ (Sieve.generate R) ⟨_, hR, le_generate R⟩
state_before: case mp
C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y : C
S : Sieve X✝
R✝ : Presieve X✝
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
PJ : IsSheaf (Pretopology.toGrothendieck C K) P
X : C
R : Presieve X
hR : R ∈ Pretopology.coverings K X
⊢ IsSheafFor P (generate R).arrows

tactic: rintro PK X S ⟨R, hR, RS⟩
state_before: case mpr
C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
⊢ (∀ {X : C} (R : Presieve X), R ∈ Pretopology.coverings K X → IsSheafFor P R) →
    IsSheaf (Pretopology.toGrothendieck C K) P

tactic: have gRS : ⇑(generate R) ≤ S := by
  apply giGenerate.gc.monotone_u
  rwa [sets_iff_generate]
state_before: case mpr.intro.intro
C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y : C
S✝ : Sieve X✝
R✝ : Presieve X✝
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
PK : ∀ {X : C} (R : Presieve X), R ∈ Pretopology.coverings K X → IsSheafFor P R
X : C
S : Sieve X
R : Presieve X
hR : R ∈ Pretopology.coverings K X
RS : R ≤ S.arrows
⊢ IsSheafFor P S.arrows

tactic: apply isSheafFor_subsieve P gRS _
state_before: case mpr.intro.intro
C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y : C
S✝ : Sieve X✝
R✝ : Presieve X✝
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
PK : ∀ {X : C} (R : Presieve X), R ∈ Pretopology.coverings K X → IsSheafFor P R
X : C
S : Sieve X
R : Presieve X
hR : R ∈ Pretopology.coverings K X
RS : R ≤ S.arrows
gRS : (generate R).arrows ≤ S.arrows
⊢ IsSheafFor P S.arrows

tactic: intro Y f
state_before: C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y : C
S✝ : Sieve X✝
R✝ : Presieve X✝
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
PK : ∀ {X : C} (R : Presieve X), R ∈ Pretopology.coverings K X → IsSheafFor P R
X : C
S : Sieve X
R : Presieve X
hR : R ∈ Pretopology.coverings K X
RS : R ≤ S.arrows
gRS : (generate R).arrows ≤ S.arrows
⊢ ∀ ⦃Y : C⦄ (f : Y ⟶ X), IsSheafFor P (Sieve.pullback f (generate R)).arrows

tactic: rw [← pullbackArrows_comm, ← isSheafFor_iff_generate]
state_before: C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y✝ : C
S✝ : Sieve X✝
R✝ : Presieve X✝
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
PK : ∀ {X : C} (R : Presieve X), R ∈ Pretopology.coverings K X → IsSheafFor P R
X : C
S : Sieve X
R : Presieve X
hR : R ∈ Pretopology.coverings K X
RS : R ≤ S.arrows
gRS : (generate R).arrows ≤ S.arrows
Y : C
f : Y ⟶ X
⊢ IsSheafFor P (Sieve.pullback f (generate R)).arrows

tactic: exact PK (pullbackArrows f R) (K.pullbacks f R hR)
state_before: C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y✝ : C
S✝ : Sieve X✝
R✝ : Presieve X✝
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
PK : ∀ {X : C} (R : Presieve X), R ∈ Pretopology.coverings K X → IsSheafFor P R
X : C
S : Sieve X
R : Presieve X
hR : R ∈ Pretopology.coverings K X
RS : R ≤ S.arrows
gRS : (generate R).arrows ≤ S.arrows
Y : C
f : Y ⟶ X
⊢ IsSheafFor P (pullbackArrows f R)

tactic: apply giGenerate.gc.monotone_u
state_before: C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y : C
S✝ : Sieve X✝
R✝ : Presieve X✝
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
PK : ∀ {X : C} (R : Presieve X), R ∈ Pretopology.coverings K X → IsSheafFor P R
X : C
S : Sieve X
R : Presieve X
hR : R ∈ Pretopology.coverings K X
RS : R ≤ S.arrows
⊢ (generate R).arrows ≤ S.arrows

tactic: rwa [sets_iff_generate]
state_before: case a
C : Type u₁
inst✝¹ : Category C
P Q U : Cᵒᵖ ⥤ Type w
X✝ Y : C
S✝ : Sieve X✝
R✝ : Presieve X✝
J J₂ : GrothendieckTopology C
inst✝ : HasPullbacks C
K : Pretopology C
PK : ∀ {X : C} (R : Presieve X), R ∈ Pretopology.coverings K X → IsSheafFor P R
X : C
S : Sieve X
R : Presieve X
hR : R ∈ Pretopology.coverings K X
RS : R ≤ S.arrows
⊢ generate R ≤ S