l3lab/ntp-mathlib huggingface dataset:
/-- The sheaf of smooth functions from `M` to `R`, for `R` a smooth ring, as a sheaf of
rings. -/
def smoothSheafRing : TopCat.Sheaf RingCat.{u} (TopCat.of M) :=
  { val := smoothPresheafRing IM I M R
    cond := by
      

Proof state:
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : Ring R
inst✝ : SmoothRing I R
⊢ CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology ↑(TopCat.of M)) (smoothPresheafRing IM I M R)

Next tactic:
rw [CategoryTheory.Presheaf.isSheaf_iff_isSheaf_forget _ _ (CategoryTheory.forget RingCat)]
/-- The sheaf of smooth functions from `M` to `R`, for `R` a smooth ring, as a sheaf of
rings. -/
def smoothSheafRing : TopCat.Sheaf RingCat.{u} (TopCat.of M) :=
  { val := smoothPresheafRing IM I M R
    cond := by
      rw [CategoryTheory.Presheaf.isSheaf_iff_isSheaf_forget _ _ (CategoryTheory.forget RingCat)]
      

Proof state:
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : Ring R
inst✝ : SmoothRing I R
⊢ CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology ↑(TopCat.of M))
    (CategoryTheory.Functor.comp (smoothPresheafRing IM I M R) (CategoryTheory.forget RingCat))

Next tactic:
exact CategoryTheory.Sheaf.cond (smoothSheaf IM I M R)
/-- The sheaf of smooth functions from `M` to `R`, for `R` a smooth commutative ring, as a sheaf of
commutative rings. -/
def smoothSheafCommRing : TopCat.Sheaf CommRingCat.{u} (TopCat.of M) :=
  { val := smoothPresheafCommRing IM I M R
    cond := by
      

Proof state:
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
⊢ CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology ↑(TopCat.of M)) (smoothPresheafCommRing IM I M R)

Next tactic:
rw [CategoryTheory.Presheaf.isSheaf_iff_isSheaf_forget _ _
        (CategoryTheory.forget CommRingCat)]
/-- The sheaf of smooth functions from `M` to `R`, for `R` a smooth commutative ring, as a sheaf of
commutative rings. -/
def smoothSheafCommRing : TopCat.Sheaf CommRingCat.{u} (TopCat.of M) :=
  { val := smoothPresheafCommRing IM I M R
    cond := by
      rw [CategoryTheory.Presheaf.isSheaf_iff_isSheaf_forget _ _
        (CategoryTheory.forget CommRingCat)]
      

Proof state:
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
⊢ CategoryTheory.Presheaf.IsSheaf (Opens.grothendieckTopology ↑(TopCat.of M))
    (CategoryTheory.Functor.comp (smoothPresheafCommRing IM I M R) (CategoryTheory.forget CommRingCat))

Next tactic:
exact CategoryTheory.Sheaf.cond (smoothSheaf IM I M R)
@[simp, reassoc, elementwise] lemma smoothSheafCommRing.ι_forgetStalk_inv (x : TopCat.of M) (U) :
    colimit.ι ((OpenNhds.inclusion x).op ⋙ (smoothSheaf IM I M R).presheaf) U ≫
    (smoothSheafCommRing.forgetStalk IM I M R x).inv =
    (forget CommRingCat).map
      (colimit.ι ((OpenNhds.inclusion x).op ⋙ (smoothSheafCommRing IM I M R).presheaf) U) := by
  

Proof state:
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
U : (OpenNhds x)ᵒᵖ
⊢ colimit.ι ((OpenNhds.inclusion x).op ⋙ TopCat.Sheaf.presheaf (smoothSheaf IM I M R)) U ≫
      (forgetStalk IM I M R x).inv =
    (forget CommRingCat).map
      (colimit.ι ((OpenNhds.inclusion x).op ⋙ TopCat.Sheaf.presheaf (smoothSheafCommRing IM I M R)) U)

Next tactic:
rw [Iso.comp_inv_eq, ← smoothSheafCommRing.ι_forgetStalk_hom, CommRingCat.forget_map]
@[simp, reassoc, elementwise] lemma smoothSheafCommRing.ι_forgetStalk_inv (x : TopCat.of M) (U) :
    colimit.ι ((OpenNhds.inclusion x).op ⋙ (smoothSheaf IM I M R).presheaf) U ≫
    (smoothSheafCommRing.forgetStalk IM I M R x).inv =
    (forget CommRingCat).map
      (colimit.ι ((OpenNhds.inclusion x).op ⋙ (smoothSheafCommRing IM I M R).presheaf) U) := by
  rw [Iso.comp_inv_eq, ← smoothSheafCommRing.ι_forgetStalk_hom, CommRingCat.forget_map]
  

Proof state:
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
U : (OpenNhds x)ᵒᵖ
⊢ ⇑(colimit.ι ((OpenNhds.inclusion x).op ⋙ TopCat.Sheaf.presheaf (smoothSheafCommRing IM I M R)) U) ≫
      (forgetStalk IM I M R x).hom =
    ⇑(colimit.ι ((OpenNhds.inclusion x).op ⋙ TopCat.Sheaf.presheaf (smoothSheafCommRing IM I M R)) U) ≫
      (forgetStalk IM I M R x).hom

Next tactic:
simp_rw [Functor.comp_obj, Functor.op_obj]
/-- Canonical ring homomorphism from the stalk of `smoothSheafCommRing IM I M R` at `x` to `R`,
given by evaluating sections at `x`, considered as a morphism in the category of commutative rings.
-/
def smoothSheafCommRing.evalHom (x : TopCat.of M) :
    (smoothSheafCommRing IM I M R).presheaf.stalk x ⟶ CommRingCat.of R := by
  

Proof state:
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
⊢ TopCat.Presheaf.stalk (TopCat.Sheaf.presheaf (smoothSheafCommRing IM I M R)) x ⟶ CommRingCat.of R

Next tactic:
refine CategoryTheory.Limits.colimit.desc _ ⟨_, ⟨fun U ↦ ?_, ?_⟩⟩
/-- Canonical ring homomorphism from the stalk of `smoothSheafCommRing IM I M R` at `x` to `R`,
given by evaluating sections at `x`, considered as a morphism in the category of commutative rings.
-/
def smoothSheafCommRing.evalHom (x : TopCat.of M) :
    (smoothSheafCommRing IM I M R).presheaf.stalk x ⟶ CommRingCat.of R := by
  refine CategoryTheory.Limits.colimit.desc _ ⟨_, ⟨fun U ↦ ?_, ?_⟩⟩
  · 

Proof state:
case refine_1
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
U : (OpenNhds x)ᵒᵖ
⊢ (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑(TopCat.of M))ᵒᵖ CommRingCat).obj (OpenNhds.inclusion x).op).obj
          (TopCat.Sheaf.presheaf (smoothSheafCommRing IM I M R))).obj
      U ⟶
    ((Functor.const (OpenNhds x)ᵒᵖ).obj (Bundled.mk R)).obj U

Next tactic:
apply smoothSheafCommRing.evalAt
/-- Canonical ring homomorphism from the stalk of `smoothSheafCommRing IM I M R` at `x` to `R`,
given by evaluating sections at `x`, considered as a morphism in the category of commutative rings.
-/
def smoothSheafCommRing.evalHom (x : TopCat.of M) :
    (smoothSheafCommRing IM I M R).presheaf.stalk x ⟶ CommRingCat.of R := by
  refine CategoryTheory.Limits.colimit.desc _ ⟨_, ⟨fun U ↦ ?_, ?_⟩⟩
  · apply smoothSheafCommRing.evalAt
  · 

Proof state:
case refine_2
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
⊢ ∀ ⦃X Y : (OpenNhds x)ᵒᵖ⦄ (f : X ⟶ Y),
    (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑(TopCat.of M))ᵒᵖ CommRingCat).obj (OpenNhds.inclusion x).op).obj
              (TopCat.Sheaf.presheaf (smoothSheafCommRing IM I M R))).map
          f ≫
        (fun U => evalAt IM I M R x U.unop) Y =
      (fun U => evalAt IM I M R x U.unop) X ≫ ((Functor.const (OpenNhds x)ᵒᵖ).obj (Bundled.mk R)).map f

Next tactic:
aesop_cat
@[simp, reassoc, elementwise] lemma smoothSheafCommRing.forgetStalk_inv_comp_eval
    (x : TopCat.of M) :
    (smoothSheafCommRing.forgetStalk IM I M R x).inv ≫
     (FunLike.coe (smoothSheafCommRing.evalHom IM I M R x)) =
    smoothSheaf.evalHom _ _ _ _ := by
  

Proof state:
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
⊢ (forgetStalk IM I M R x).inv ≫ ⇑(evalHom IM I M R x) = smoothSheaf.evalHom IM I R x

Next tactic:
apply Limits.colimit.hom_ext
@[simp, reassoc, elementwise] lemma smoothSheafCommRing.forgetStalk_inv_comp_eval
    (x : TopCat.of M) :
    (smoothSheafCommRing.forgetStalk IM I M R x).inv ≫
     (FunLike.coe (smoothSheafCommRing.evalHom IM I M R x)) =
    smoothSheaf.evalHom _ _ _ _ := by
  apply Limits.colimit.hom_ext
  

Proof state:
case w
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
⊢ ∀ (j : (OpenNhds x)ᵒᵖ),
    colimit.ι
          (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑(TopCat.of M))ᵒᵖ (Type u)).obj (OpenNhds.inclusion x).op).obj
            (TopCat.Sheaf.presheaf (smoothSheaf IM I M R)))
          j ≫
        (forgetStalk IM I M R x).inv ≫ ⇑(evalHom IM I M R x) =
      colimit.ι
          (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑(TopCat.of M))ᵒᵖ (Type u)).obj (OpenNhds.inclusion x).op).obj
            (TopCat.Sheaf.presheaf (smoothSheaf IM I M R)))
          j ≫
        smoothSheaf.evalHom IM I R x

Next tactic:
intro U
@[simp, reassoc, elementwise] lemma smoothSheafCommRing.forgetStalk_inv_comp_eval
    (x : TopCat.of M) :
    (smoothSheafCommRing.forgetStalk IM I M R x).inv ≫
     (FunLike.coe (smoothSheafCommRing.evalHom IM I M R x)) =
    smoothSheaf.evalHom _ _ _ _ := by
  apply Limits.colimit.hom_ext
  intro U
  

Proof state:
case w
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
U : (OpenNhds x)ᵒᵖ
⊢ colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑(TopCat.of M))ᵒᵖ (Type u)).obj (OpenNhds.inclusion x).op).obj
          (TopCat.Sheaf.presheaf (smoothSheaf IM I M R)))
        U ≫
      (forgetStalk IM I M R x).inv ≫ ⇑(evalHom IM I M R x) =
    colimit.ι
        (((whiskeringLeft (OpenNhds x)ᵒᵖ (Opens ↑(TopCat.of M))ᵒᵖ (Type u)).obj (OpenNhds.inclusion x).op).obj
          (TopCat.Sheaf.presheaf (smoothSheaf IM I M R)))
        U ≫
      smoothSheaf.evalHom IM I R x

Next tactic:
show (colimit.ι _ U) ≫ _ = colimit.ι ((OpenNhds.inclusion x).op ⋙ _) U ≫ _
@[simp, reassoc, elementwise] lemma smoothSheafCommRing.forgetStalk_inv_comp_eval
    (x : TopCat.of M) :
    (smoothSheafCommRing.forgetStalk IM I M R x).inv ≫
     (FunLike.coe (smoothSheafCommRing.evalHom IM I M R x)) =
    smoothSheaf.evalHom _ _ _ _ := by
  apply Limits.colimit.hom_ext
  intro U
  show (colimit.ι _ U) ≫ _ = colimit.ι ((OpenNhds.inclusion x).op ⋙ _) U ≫ _
  

Proof state:
case w
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
U : (OpenNhds x)ᵒᵖ
⊢ colimit.ι ((OpenNhds.inclusion x).op ⋙ TopCat.Sheaf.presheaf (smoothSheaf IM I M R)) U ≫
      (forgetStalk IM I M R x).inv ≫ ⇑(evalHom IM I M R x) =
    colimit.ι ((OpenNhds.inclusion x).op ⋙ TopCat.Sheaf.presheaf (smoothSheaf IM I M R)) U ≫
      smoothSheaf.evalHom IM I R x

Next tactic:
rw [smoothSheafCommRing.ι_forgetStalk_inv_assoc]
@[simp, reassoc, elementwise] lemma smoothSheafCommRing.forgetStalk_inv_comp_eval
    (x : TopCat.of M) :
    (smoothSheafCommRing.forgetStalk IM I M R x).inv ≫
     (FunLike.coe (smoothSheafCommRing.evalHom IM I M R x)) =
    smoothSheaf.evalHom _ _ _ _ := by
  apply Limits.colimit.hom_ext
  intro U
  show (colimit.ι _ U) ≫ _ = colimit.ι ((OpenNhds.inclusion x).op ⋙ _) U ≫ _
  rw [smoothSheafCommRing.ι_forgetStalk_inv_assoc]
  

Proof state:
case w
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
U : (OpenNhds x)ᵒᵖ
⊢ (forget CommRingCat).map
        (colimit.ι ((OpenNhds.inclusion x).op ⋙ TopCat.Sheaf.presheaf (smoothSheafCommRing IM I M R)) U) ≫
      ⇑(evalHom IM I M R x) =
    colimit.ι ((OpenNhds.inclusion x).op ⋙ TopCat.Sheaf.presheaf (smoothSheaf IM I M R)) U ≫
      smoothSheaf.evalHom IM I R x

Next tactic:
convert congr_arg (fun i ↦ (forget CommRingCat).map i) (smoothSheafCommRing.ι_evalHom ..)
@[simp, reassoc, elementwise] lemma smoothSheafCommRing.forgetStalk_inv_comp_eval
    (x : TopCat.of M) :
    (smoothSheafCommRing.forgetStalk IM I M R x).inv ≫
     (FunLike.coe (smoothSheafCommRing.evalHom IM I M R x)) =
    smoothSheaf.evalHom _ _ _ _ := by
  apply Limits.colimit.hom_ext
  intro U
  show (colimit.ι _ U) ≫ _ = colimit.ι ((OpenNhds.inclusion x).op ⋙ _) U ≫ _
  rw [smoothSheafCommRing.ι_forgetStalk_inv_assoc]
  convert congr_arg (fun i ↦ (forget CommRingCat).map i) (smoothSheafCommRing.ι_evalHom ..)
  

Proof state:
case h.e'_3
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
U : (OpenNhds x)ᵒᵖ
⊢ colimit.ι ((OpenNhds.inclusion x).op ⋙ TopCat.Sheaf.presheaf (smoothSheaf IM I M R)) U ≫
      smoothSheaf.evalHom IM I R x =
    (forget CommRingCat).map (evalAt IM I M R x U.unop)

Next tactic:
exact smoothSheaf.ι_evalHom IM I R x U
@[simp, reassoc, elementwise] lemma smoothSheafCommRing.forgetStalk_hom_comp_evalHom
    (x : TopCat.of M) :
    (smoothSheafCommRing.forgetStalk IM I M R x).hom ≫ (smoothSheaf.evalHom IM I R x) =
    (forget _).map (smoothSheafCommRing.evalHom _ _ _ _ _) := by
  

Proof state:
𝕜 : Type u_1
inst✝²¹ : NontriviallyNormedField 𝕜
EM : Type u_2
inst✝²⁰ : NormedAddCommGroup EM
inst✝¹⁹ : NormedSpace 𝕜 EM
HM : Type u_3
inst✝¹⁸ : TopologicalSpace HM
IM : ModelWithCorners 𝕜 EM HM
E : Type u_4
inst✝¹⁷ : NormedAddCommGroup E
inst✝¹⁶ : NormedSpace 𝕜 E
H : Type u_5
inst✝¹⁵ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
H' : Type u_6
inst✝¹⁴ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E H'
M : Type u
inst✝¹³ : TopologicalSpace M
inst✝¹² : ChartedSpace HM M
N G A A' R : Type u
inst✝¹¹ : TopologicalSpace N
inst✝¹⁰ : ChartedSpace H N
inst✝⁹ : TopologicalSpace G
inst✝⁸ : ChartedSpace H G
inst✝⁷ : TopologicalSpace A
inst✝⁶ : ChartedSpace H A
inst✝⁵ : TopologicalSpace A'
inst✝⁴ : ChartedSpace H' A'
inst✝³ : TopologicalSpace R
inst✝² : ChartedSpace H R
inst✝¹ : CommRing R
inst✝ : SmoothRing I R
x : ↑(TopCat.of M)
⊢ (forgetStalk IM I M R x).hom ≫ smoothSheaf.evalHom IM I R x = (forget CommRingCat).map (evalHom IM I M R x)

Next tactic:
simp_rw [← CategoryTheory.Iso.eq_inv_comp]