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

tactic: intro h x hx
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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
⊢ IsSheafFor P R → IsSheafFor P' R

tactic: let x' := x.compPresheafMap i.inv
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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : FamilyOfElements.Compatible x
⊢ ∃! t, FamilyOfElements.IsAmalgamation x t

tactic: have : x'.Compatible := FamilyOfElements.Compatible.compPresheafMap i.inv hx
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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : FamilyOfElements.Compatible x
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
⊢ ∃! t, FamilyOfElements.IsAmalgamation x t

tactic: obtain ⟨t, ht1, ht2⟩ := h x' this
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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : FamilyOfElements.Compatible x
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : FamilyOfElements.Compatible x'
⊢ ∃! t, FamilyOfElements.IsAmalgamation x t

tactic: use i.hom.app _ t
state_before: case 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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : FamilyOfElements.Compatible x
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : FamilyOfElements.Compatible x'
t : P.obj X.op
ht1 : FamilyOfElements.IsAmalgamation x' t
ht2 : ∀ (y : P.obj X.op), (fun t => FamilyOfElements.IsAmalgamation x' t) y → y = t
⊢ ∃! t, FamilyOfElements.IsAmalgamation x t

tactic: fconstructor
state_before: case 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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : FamilyOfElements.Compatible x
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : FamilyOfElements.Compatible x'
t : P.obj X.op
ht1 : FamilyOfElements.IsAmalgamation x' t
ht2 : ∀ (y : P.obj X.op), (fun t => FamilyOfElements.IsAmalgamation x' t) y → y = t
⊢ (fun t => FamilyOfElements.IsAmalgamation x t) (i.hom.app X.op t) ∧
    ∀ (y : P'.obj X.op), (fun t => FamilyOfElements.IsAmalgamation x t) y → y = i.hom.app X.op t

tactic: convert FamilyOfElements.IsAmalgamation.compPresheafMap i.hom ht1
state_before: case intro.intro.left
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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : FamilyOfElements.Compatible x
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : FamilyOfElements.Compatible x'
t : P.obj X.op
ht1 : FamilyOfElements.IsAmalgamation x' t
ht2 : ∀ (y : P.obj X.op), (fun t => FamilyOfElements.IsAmalgamation x' t) y → y = t
⊢ (fun t => FamilyOfElements.IsAmalgamation x t) (i.hom.app X.op t)

tactic: simp
state_before: case h.e.h.e'_6.h.h.h
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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : FamilyOfElements.Compatible x
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : FamilyOfElements.Compatible x'
t : P.obj X.op
ht1 : FamilyOfElements.IsAmalgamation x' t
ht2 : ∀ (y : P.obj X.op), (fun t => FamilyOfElements.IsAmalgamation x' t) y → y = t
⊢ x = FamilyOfElements.compPresheafMap i.hom x'

tactic: intro y hy
state_before: case intro.intro.right
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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : FamilyOfElements.Compatible x
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : FamilyOfElements.Compatible x'
t : P.obj X.op
ht1 : FamilyOfElements.IsAmalgamation x' t
ht2 : ∀ (y : P.obj X.op), (fun t => FamilyOfElements.IsAmalgamation x' t) y → y = t
⊢ ∀ (y : P'.obj X.op), (fun t => FamilyOfElements.IsAmalgamation x t) y → y = i.hom.app X.op t

tactic: rw [show y = (i.inv.app (op X) ≫ i.hom.app (op X)) y by simp]
state_before: case intro.intro.right
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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : FamilyOfElements.Compatible x
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : FamilyOfElements.Compatible x'
t : P.obj X.op
ht1 : FamilyOfElements.IsAmalgamation x' t
ht2 : ∀ (y : P.obj X.op), (fun t => FamilyOfElements.IsAmalgamation x' t) y → y = t
y : P'.obj X.op
hy : FamilyOfElements.IsAmalgamation x y
⊢ y = i.hom.app X.op t

tactic: simp [ht2 (i.inv.app _ y) (FamilyOfElements.IsAmalgamation.compPresheafMap i.inv hy)]
state_before: case intro.intro.right
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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : FamilyOfElements.Compatible x
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : FamilyOfElements.Compatible x'
t : P.obj X.op
ht1 : FamilyOfElements.IsAmalgamation x' t
ht2 : ∀ (y : P.obj X.op), (fun t => FamilyOfElements.IsAmalgamation x' t) y → y = t
y : P'.obj X.op
hy : FamilyOfElements.IsAmalgamation x y
⊢ (i.inv.app X.op ≫ i.hom.app X.op) y = i.hom.app X.op t

tactic: simp
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
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : FamilyOfElements.Compatible x
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : FamilyOfElements.Compatible x'
t : P.obj X.op
ht1 : FamilyOfElements.IsAmalgamation x' t
ht2 : ∀ (y : P.obj X.op), (fun t => FamilyOfElements.IsAmalgamation x' t) y → y = t
y : P'.obj X.op
hy : FamilyOfElements.IsAmalgamation x y
⊢ y = (i.inv.app X.op ≫ i.hom.app X.op) y