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

Proof steps:
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
⊢ IsSheafFor P R → IsSheafFor P' R
state_after: C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
⊢ ∃! t, x.IsAmalgamation t
tactic: intro h x hx
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
⊢ ∃! t, x.IsAmalgamation t
state_after: C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
⊢ ∃! t, x.IsAmalgamation t
tactic: let x' := x.compPresheafMap i.inv
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
⊢ ∃! t, x.IsAmalgamation t
state_after: C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : x'.Compatible
⊢ ∃! t, x.IsAmalgamation t
tactic: have : x'.Compatible := FamilyOfElements.Compatible.compPresheafMap i.inv hx
state_before: C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : x'.Compatible
⊢ ∃! t, x.IsAmalgamation t
state_after: case intro.intro
C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : x'.Compatible
t : P.obj (op X)
ht1 : x'.IsAmalgamation t
ht2 : ∀ (y : P.obj (op X)), (fun t => x'.IsAmalgamation t) y → y = t
⊢ ∃! t, x.IsAmalgamation t
tactic: obtain ⟨t, ht1, ht2⟩ := h x' this
state_before: case intro.intro
C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : x'.Compatible
t : P.obj (op X)
ht1 : x'.IsAmalgamation t
ht2 : ∀ (y : P.obj (op X)), (fun t => x'.IsAmalgamation t) y → y = t
⊢ ∃! t, x.IsAmalgamation t
state_after: case h
C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : x'.Compatible
t : P.obj (op X)
ht1 : x'.IsAmalgamation t
ht2 : ∀ (y : P.obj (op X)), (fun t => x'.IsAmalgamation t) y → y = t
⊢ (fun t => x.IsAmalgamation t) (i.hom.app (op X) t) ∧
    ∀ (y : P'.obj (op X)), (fun t => x.IsAmalgamation t) y → y = i.hom.app (op X) t
tactic: use i.hom.app _ t
state_before: case h
C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : x'.Compatible
t : P.obj (op X)
ht1 : x'.IsAmalgamation t
ht2 : ∀ (y : P.obj (op X)), (fun t => x'.IsAmalgamation t) y → y = t
⊢ (fun t => x.IsAmalgamation t) (i.hom.app (op X) t) ∧
    ∀ (y : P'.obj (op X)), (fun t => x.IsAmalgamation t) y → y = i.hom.app (op X) t
state_after: case h.left
C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : x'.Compatible
t : P.obj (op X)
ht1 : x'.IsAmalgamation t
ht2 : ∀ (y : P.obj (op X)), (fun t => x'.IsAmalgamation t) y → y = t
⊢ (fun t => x.IsAmalgamation t) (i.hom.app (op X) t)

case h.right
C : Type u₁
inst✝ : Category.{v₁, u₁} C
P Q U : Cᵒᵖ ⥤ Type w
X Y : C
S : Sieve X
R : Presieve X
P' : Cᵒᵖ ⥤ Type w
i : P ≅ P'
h : IsSheafFor P R
x : FamilyOfElements P' R
hx : x.Compatible
x' : FamilyOfElements P R := FamilyOfElements.compPresheafMap i.inv x
this : x'.Compatible
t : P.obj (op X)
ht1 : x'.IsAmalgamation t
ht2 : ∀ (y : P.obj (op X)), (fun t => x'.IsAmalgamation t) y → y = t
⊢ ∀ (y : P'.obj (op X)), (fun t => x.IsAmalgamation t) y → y = i.hom.app (op X) t
tactic: fconstructor