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

Proof steps:
state_before: C : Type u_1
inst✝⁵ : Category.{?u.65033, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.65040, u_2} D
E : Type u_3
inst✝³ : Category.{?u.65047, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.65099, 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
⊢ { val := (presheafIso i).hom } ≫ { val := (presheafIso i).inv } = 𝟙 ℱ
state_after: case w
C : Type u_1
inst✝⁵ : Category.{?u.65033, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.65040, u_2} D
E : Type u_3
inst✝³ : Category.{?u.65047, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.65099, 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
⊢ ({ val := (presheafIso i).hom } ≫ { val := (presheafIso i).inv }).val = (𝟙 ℱ).val
tactic: ext1
state_before: case w
C : Type u_1
inst✝⁵ : Category.{?u.65033, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.65040, u_2} D
E : Type u_3
inst✝³ : Category.{?u.65047, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.65099, 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
⊢ ({ val := (presheafIso i).hom } ≫ { val := (presheafIso i).inv }).val = (𝟙 ℱ).val
state_after: no goals
tactic: apply (presheafIso i).hom_inv_id
state_before: C : Type u_1
inst✝⁵ : Category.{?u.65033, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.65040, u_2} D
E : Type u_3
inst✝³ : Category.{?u.65047, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.65099, 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
⊢ { val := (presheafIso i).inv } ≫ { val := (presheafIso i).hom } = 𝟙 ℱ'
state_after: case w
C : Type u_1
inst✝⁵ : Category.{?u.65033, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.65040, u_2} D
E : Type u_3
inst✝³ : Category.{?u.65047, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.65099, 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
⊢ ({ val := (presheafIso i).inv } ≫ { val := (presheafIso i).hom }).val = (𝟙 ℱ').val
tactic: ext1
state_before: case w
C : Type u_1
inst✝⁵ : Category.{?u.65033, u_1} C
D : Type u_2
inst✝⁴ : Category.{?u.65040, u_2} D
E : Type u_3
inst✝³ : Category.{?u.65047, u_3} E
J : GrothendieckTopology C
K : GrothendieckTopology D
L : GrothendieckTopology E
A : Type u_4
inst✝² : Category.{?u.65099, 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
⊢ ({ val := (presheafIso i).inv } ≫ { val := (presheafIso i).hom }).val = (𝟙 ℱ').val
state_after: no goals
tactic: apply (presheafIso i).inv_hom_id