Zulip Chat Archive

Stream: maths

Topic: Subspaces and opens


Ramon Fernandez Mir (Mar 08 2019 at 17:16):

I'm having a very hard time with something which I thought would take an hour. I have a topological space X and an open subset U : opens X. I define a presheaf on X as map from opens X to some type plus some properties as follows:

structure presheaf (X : Type u) [T : topological_space X] :=
(F     : opens X  Type v)
(res   :  (U V) (HVU : V  U), F U  F V)
(Hid   :  (U), res U U (set.subset.refl U) = id)
(Hcomp :  (U V W) (HWV : W  V) (HVU : V  U), res U W (set.subset.trans HWV HVU) = res V W HWV  res U V HVU)

Now suppose that I have OX : sheaf X (presheaf as above + sheaf axiom). I want to define the restriction sheaf, of type sheaf U (or sheaf {x // x ∈ U}). I have a map f : opens X → opens U which is just subtype.val with the proof that it preserves is_open. I have defined the restricted presheaf in the obvious way using f. Is this the right way to work with subspaces? Am I missing something already in mathlib?

The reason why I think that I might be doing something very wrong is because when I try to prove the sheaf condition, at some point I have a goal that looks like:

⊢ OX.res (f Uj) ((f Uj) ∩ (f Uk)) _ (s j) = OX.res (f Uk) ((f Uj) ∩ (f Uk)) _ (s k)

And in my hypotheses I have:

H : OX.res (f Uj) (f (Uj ∩ Uk)) _ (s j) = OX.res (f Uk) (f (Uj ∩ Uk)) _ (s k)

I also have a lemma that says:

 lemma f.inter :  {V W}, (f U (V  W)) = (f U V)  (f U W)

So I thought that rewriting at H would do the trick but I get:

[check] application type mismatch at
  OX.res (f Uj) _a _
argument type
  f (Uj ∩ Uk) ⊆ f Uj
expected type
  _a ⊆ f Uj

Any suggestions?

Reid Barton (Mar 08 2019 at 17:20):

You can't rewrite H with that lemma because there are proof terms (the _s) whose types depend on the things you want to rewrite.
Try convert H instead

Reid Barton (Mar 08 2019 at 17:20):

At least, I think that's the problem. I don't recognize your error message though.

Ramon Fernandez Mir (Mar 08 2019 at 17:29):

What does convert do?

Patrick Massot (Mar 08 2019 at 17:30):

https://github.com/leanprover-community/mathlib/blob/master/docs/tactics.md#convert

Ramon Fernandez Mir (Mar 08 2019 at 17:39):

Thanks! I should get more familiar with many of these..

Mario Carneiro (Mar 08 2019 at 18:08):

that error message is what you get if you get the rewrite motive is not type correct error and then follow the error's advice and set_option trace.check true

Kevin Buzzard (Mar 08 2019 at 18:18):

Hi. Sorry, I was chairing a meeting and watching these interesting messages go by. I think you should make a more general construction than this. I think you should define the pullback sheaf, or comap sheaf as it will be called in this world, for an open immersion. Because at some point when defining a scheme you're going to need to pull a sheaf back along an isomorphism so you're going to have to write that code anyway.

Johan Commelin (Mar 08 2019 at 18:19):

Might as well do pullback of sheaves in general in that case.

Kevin Buzzard (Mar 08 2019 at 18:20):

But that's harder because then you have to take some limit

Kevin Buzzard (Mar 08 2019 at 18:20):

It's pushing forward which is the easy one

Johan Commelin (Mar 08 2019 at 18:20):

Oh, yep.. that's right.

Kevin Buzzard (Mar 08 2019 at 18:56):

I had to deal with all this with schemes the first time around :-)

Kevin Buzzard (Mar 08 2019 at 19:02):

I was idly wondering whether pullbacks are easy for an open map (image of open is open) but the naive definition isn't a sheaf, it seems to me (f(U intersect V) might not be f(U) intersect f(V)). So maybe open immersions are the correct generality.


Last updated: Dec 20 2023 at 11:08 UTC