Theorem: AlgebraicGeometry.RingedSpace.basicOpen_res
File: Mathlib/Geometry/RingedSpace/Basic.lean

tactic: induction U using Opposite.rec'
state_before: X : RingedSpace
U V : (Opens ↑↑X.toPresheafedSpace)ᵒᵖ
i : U ⟶ V
f : ↑(X.presheaf.obj U)
⊢ X.basicOpen ((X.presheaf.map i) f) = V.unop ⊓ X.basicOpen f
state_after: case h
X : RingedSpace
V : (Opens ↑↑X.toPresheafedSpace)ᵒᵖ
X✝ : Opens ↑↑X.toPresheafedSpace
i : { unop := X✝ } ⟶ V
f : ↑(X.presheaf.obj { unop := X✝ })
⊢ X.basicOpen ((X.presheaf.map i) f) = V.unop ⊓ X.basicOpen f

tactic: induction V using Opposite.rec'
state_before: case h
X : RingedSpace
V : (Opens ↑↑X.toPresheafedSpace)ᵒᵖ
X✝ : Opens ↑↑X.toPresheafedSpace
i : { unop := X✝ } ⟶ V
f : ↑(X.presheaf.obj { unop := X✝ })
⊢ X.basicOpen ((X.presheaf.map i) f) = V.unop ⊓ X.basicOpen f
state_after: case h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
i : { unop := X✝¹ } ⟶ { unop := X✝ }
⊢ X.basicOpen ((X.presheaf.map i) f) = { unop := X✝ }.unop ⊓ X.basicOpen f

tactic: let g := i.unop
state_before: case h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
i : { unop := X✝¹ } ⟶ { unop := X✝ }
⊢ X.basicOpen ((X.presheaf.map i) f) = { unop := X✝ }.unop ⊓ X.basicOpen f
state_after: case h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
i : { unop := X✝¹ } ⟶ { unop := X✝ }
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop := i.unop
⊢ X.basicOpen ((X.presheaf.map i) f) = { unop := X✝ }.unop ⊓ X.basicOpen f

tactic: have : i = g.op := rfl
state_before: case h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
i : { unop := X✝¹ } ⟶ { unop := X✝ }
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop := i.unop
⊢ X.basicOpen ((X.presheaf.map i) f) = { unop := X✝ }.unop ⊓ X.basicOpen f
state_after: case h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
i : { unop := X✝¹ } ⟶ { unop := X✝ }
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop := i.unop
this : i = g.op
⊢ X.basicOpen ((X.presheaf.map i) f) = { unop := X✝ }.unop ⊓ X.basicOpen f

tactic: clear_value g
state_before: case h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
i : { unop := X✝¹ } ⟶ { unop := X✝ }
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop := i.unop
this : i = g.op
⊢ X.basicOpen ((X.presheaf.map i) f) = { unop := X✝ }.unop ⊓ X.basicOpen f
state_after: case h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
i : { unop := X✝¹ } ⟶ { unop := X✝ }
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
this : i = g.op
⊢ X.basicOpen ((X.presheaf.map i) f) = { unop := X✝ }.unop ⊓ X.basicOpen f

tactic: subst this
state_before: case h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
i : { unop := X✝¹ } ⟶ { unop := X✝ }
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
this : i = g.op
⊢ X.basicOpen ((X.presheaf.map i) f) = { unop := X✝ }.unop ⊓ X.basicOpen f
state_after: case h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
⊢ X.basicOpen ((X.presheaf.map g.op) f) = { unop := X✝ }.unop ⊓ X.basicOpen f

tactic: ext
state_before: case h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
⊢ X.basicOpen ((X.presheaf.map g.op) f) = { unop := X✝ }.unop ⊓ X.basicOpen f
state_after: case h.h.h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x✝ : ↑↑X.toPresheafedSpace
⊢ x✝ ∈ ↑(X.basicOpen ((X.presheaf.map g.op) f)) ↔ x✝ ∈ ↑({ unop := X✝ }.unop ⊓ X.basicOpen f)

tactic: constructor
state_before: case h.h.h.h
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x✝ : ↑↑X.toPresheafedSpace
⊢ x✝ ∈ ↑(X.basicOpen ((X.presheaf.map g.op) f)) ↔ x✝ ∈ ↑({ unop := X✝ }.unop ⊓ X.basicOpen f)
state_after: case h.h.h.h.mp
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x✝ : ↑↑X.toPresheafedSpace
⊢ x✝ ∈ ↑(X.basicOpen ((X.presheaf.map g.op) f)) → x✝ ∈ ↑({ unop := X✝ }.unop ⊓ X.basicOpen f)

case h.h.h.h.mpr
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x✝ : ↑↑X.toPresheafedSpace
⊢ x✝ ∈ ↑({ unop := X✝ }.unop ⊓ X.basicOpen f) → x✝ ∈ ↑(X.basicOpen ((X.presheaf.map g.op) f))

tactic: rintro ⟨x, hx : IsUnit _, rfl⟩
state_before: case h.h.h.h.mp
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x✝ : ↑↑X.toPresheafedSpace
⊢ x✝ ∈ ↑(X.basicOpen ((X.presheaf.map g.op) f)) → x✝ ∈ ↑({ unop := X✝ }.unop ⊓ X.basicOpen f)
state_after: case h.h.h.h.mp.intro.intro
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x : ↥{ unop := X✝ }.unop
hx : IsUnit ((X.presheaf.germ x) ((X.presheaf.map g.op) f))
⊢ ↑x ∈ ↑({ unop := X✝ }.unop ⊓ X.basicOpen f)

tactic: erw [X.presheaf.germ_res_apply _ _ _] at hx
state_before: case h.h.h.h.mp.intro.intro
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x : ↥{ unop := X✝ }.unop
hx : IsUnit ((X.presheaf.germ x) ((X.presheaf.map g.op) f))
⊢ ↑x ∈ ↑({ unop := X✝ }.unop ⊓ X.basicOpen f)
state_after: case h.h.h.h.mp.intro.intro
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x : ↥{ unop := X✝ }.unop
hx : IsUnit ((X.presheaf.germ ((fun x => ⟨↑x, ⋯⟩) x)) f)
⊢ ↑x ∈ ↑({ unop := X✝ }.unop ⊓ X.basicOpen f)

tactic: exact ⟨x.2, g x, hx, rfl⟩
state_before: case h.h.h.h.mp.intro.intro
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x : ↥{ unop := X✝ }.unop
hx : IsUnit ((X.presheaf.germ ((fun x => ⟨↑x, ⋯⟩) x)) f)
⊢ ↑x ∈ ↑({ unop := X✝ }.unop ⊓ X.basicOpen f)
state_after: no goals

tactic: rintro ⟨hxV, x, hx, rfl⟩
state_before: case h.h.h.h.mpr
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x✝ : ↑↑X.toPresheafedSpace
⊢ x✝ ∈ ↑({ unop := X✝ }.unop ⊓ X.basicOpen f) → x✝ ∈ ↑(X.basicOpen ((X.presheaf.map g.op) f))
state_after: case h.h.h.h.mpr.intro.intro.intro
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x : ↥{ unop := X✝¹ }.unop
hx : x ∈ {x | IsUnit ((X.presheaf.germ x) f)}
hxV : ↑x ∈ ↑{ unop := X✝ }.unop
⊢ ↑x ∈ ↑(X.basicOpen ((X.presheaf.map g.op) f))

tactic: refine ⟨⟨x, hxV⟩, (?_ : IsUnit _), rfl⟩
state_before: case h.h.h.h.mpr.intro.intro.intro
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x : ↥{ unop := X✝¹ }.unop
hx : x ∈ {x | IsUnit ((X.presheaf.germ x) f)}
hxV : ↑x ∈ ↑{ unop := X✝ }.unop
⊢ ↑x ∈ ↑(X.basicOpen ((X.presheaf.map g.op) f))
state_after: case h.h.h.h.mpr.intro.intro.intro
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x : ↥{ unop := X✝¹ }.unop
hx : x ∈ {x | IsUnit ((X.presheaf.germ x) f)}
hxV : ↑x ∈ ↑{ unop := X✝ }.unop
⊢ IsUnit ((X.presheaf.germ ⟨↑x, hxV⟩) ((X.presheaf.map g.op) f))

tactic: erw [X.presheaf.germ_res_apply _ _ _]
state_before: case h.h.h.h.mpr.intro.intro.intro
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x : ↥{ unop := X✝¹ }.unop
hx : x ∈ {x | IsUnit ((X.presheaf.germ x) f)}
hxV : ↑x ∈ ↑{ unop := X✝ }.unop
⊢ IsUnit ((X.presheaf.germ ⟨↑x, hxV⟩) ((X.presheaf.map g.op) f))
state_after: case h.h.h.h.mpr.intro.intro.intro
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x : ↥{ unop := X✝¹ }.unop
hx : x ∈ {x | IsUnit ((X.presheaf.germ x) f)}
hxV : ↑x ∈ ↑{ unop := X✝ }.unop
⊢ IsUnit ((X.presheaf.germ ((fun x => ⟨↑x, ⋯⟩) ⟨↑x, hxV⟩)) f)

tactic: exact hx
state_before: case h.h.h.h.mpr.intro.intro.intro
X : RingedSpace
X✝¹ : Opens ↑↑X.toPresheafedSpace
f : ↑(X.presheaf.obj { unop := X✝¹ })
X✝ : Opens ↑↑X.toPresheafedSpace
g : { unop := X✝ }.unop ⟶ { unop := X✝¹ }.unop
x : ↥{ unop := X✝¹ }.unop
hx : x ∈ {x | IsUnit ((X.presheaf.germ x) f)}
hxV : ↑x ∈ ↑{ unop := X✝ }.unop
⊢ IsUnit ((X.presheaf.germ ((fun x => ⟨↑x, ⋯⟩) ⟨↑x, hxV⟩)) f)
state_after: no goals