Theorem: CategoryTheory.Functor.IsCoverDense.Types.appIso_inv
File: Mathlib/CategoryTheory/Sites/DenseSubsite.lean

Proof steps:
state_before: C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
⊢ appHom i.hom X ≫ appHom i.inv X = 𝟙 (ℱ.val.obj (op X))
state_after: case h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ.val.obj (op X)
⊢ (appHom i.hom X ≫ appHom i.inv X) x = 𝟙 (ℱ.val.obj (op X)) x
tactic: ext x
state_before: case h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ.val.obj (op X)
⊢ (appHom i.hom X ≫ appHom i.inv X) x = 𝟙 (ℱ.val.obj (op X)) x
state_after: case h.h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ.val.obj (op X)
⊢ ∀ ⦃Y : C⦄ (f : G.obj Y ⟶ X),
    ℱ.val.map f.op ((appHom i.hom X ≫ appHom i.inv X) x) = ℱ.val.map f.op (𝟙 (ℱ.val.obj (op X)) x)
tactic: apply Functor.IsCoverDense.ext G
state_before: case h.h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ.val.obj (op X)
⊢ ∀ ⦃Y : C⦄ (f : G.obj Y ⟶ X),
    ℱ.val.map f.op ((appHom i.hom X ≫ appHom i.inv X) x) = ℱ.val.map f.op (𝟙 (ℱ.val.obj (op X)) x)
state_after: case h.h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ.val.obj (op X)
Y : C
f : G.obj Y ⟶ X
⊢ ℱ.val.map f.op ((appHom i.hom X ≫ appHom i.inv X) x) = ℱ.val.map f.op (𝟙 (ℱ.val.obj (op X)) x)
tactic: intro Y f
state_before: case h.h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ.val.obj (op X)
Y : C
f : G.obj Y ⟶ X
⊢ ℱ.val.map f.op ((appHom i.hom X ≫ appHom i.inv X) x) = ℱ.val.map f.op (𝟙 (ℱ.val.obj (op X)) x)
state_after: no goals
tactic: simp
state_before: C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
⊢ appHom i.inv X ≫ appHom i.hom X = 𝟙 (ℱ'.val.obj (op X))
state_after: case h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ'.val.obj (op X)
⊢ (appHom i.inv X ≫ appHom i.hom X) x = 𝟙 (ℱ'.val.obj (op X)) x
tactic: ext x
state_before: case h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ'.val.obj (op X)
⊢ (appHom i.inv X ≫ appHom i.hom X) x = 𝟙 (ℱ'.val.obj (op X)) x
state_after: case h.h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ'.val.obj (op X)
⊢ ∀ ⦃Y : C⦄ (f : G.obj Y ⟶ X),
    ℱ'.val.map f.op ((appHom i.inv X ≫ appHom i.hom X) x) = ℱ'.val.map f.op (𝟙 (ℱ'.val.obj (op X)) x)
tactic: apply Functor.IsCoverDense.ext G
state_before: case h.h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ'.val.obj (op X)
⊢ ∀ ⦃Y : C⦄ (f : G.obj Y ⟶ X),
    ℱ'.val.map f.op ((appHom i.inv X ≫ appHom i.hom X) x) = ℱ'.val.map f.op (𝟙 (ℱ'.val.obj (op X)) x)
state_after: case h.h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ'.val.obj (op X)
Y : C
f : G.obj Y ⟶ X
⊢ ℱ'.val.map f.op ((appHom i.inv X ≫ appHom i.hom X) x) = ℱ'.val.map f.op (𝟙 (ℱ'.val.obj (op X)) x)
tactic: intro Y f
state_before: case h.h
C : Type u_1
inst✝⁵ : Category.{?u.52660, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.52667, u_2} D
E : Type u_3
inst✝³ : Category.{?u.52674, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.52726, u_4} A
G : C ⥤ D
inst✝¹ : G.IsCoverDense K
inst✝ : G.IsLocallyFull K
ℱ✝ : Dᵒᵖ ⥤ Type v
ℱ'✝ : SheafOfTypes K
α : G.op ⋙ ℱ✝ ⟶ G.op ⋙ ℱ'✝.val
ℱ ℱ' : SheafOfTypes K
i : G.op ⋙ ℱ.val ≅ G.op ⋙ ℱ'.val
X : D
x : ℱ'.val.obj (op X)
Y : C
f : G.obj Y ⟶ X
⊢ ℱ'.val.map f.op ((appHom i.inv X ≫ appHom i.hom X) x) = ℱ'.val.map f.op (𝟙 (ℱ'.val.obj (op X)) x)
state_after: no goals
tactic: simp