Zulip Chat Archive

Stream: general

Topic: unfolding issue


Kevin Buzzard (May 22 2018 at 21:40):

(presheaf_of_types_pullback_under_open_immersion {F := F, res := res, Hid := Hid, Hcomp := Hcomp} id _).res

Kevin Buzzard (May 22 2018 at 21:40):

Why can't I unfold that?

Kevin Buzzard (May 22 2018 at 21:41):

lam X, presheaf_of_types_pullback_under_open_immersion X f H is a function from a structure to itself

Kevin Buzzard (May 22 2018 at 21:42):

I explicitly write down the definition, I say what F and res and Hid and Hcomp are

Kevin Buzzard (May 22 2018 at 21:42):

I don't see any reason why Lean can't evaluate that res

Kevin Buzzard (May 22 2018 at 21:42):

My goal is [mess above] == res

Kevin Buzzard (May 22 2018 at 21:43):

and this should just unravel to be, hopefully, something trivial.

Kevin Buzzard (May 22 2018 at 21:43):

This is another one of those insane "trivial in maths, hard in Lean" things

Kevin Buzzard (May 22 2018 at 21:45):

I am trying to prove that if you pull back a sheaf by the identity function, you get the same sheaf

Kevin Buzzard (May 22 2018 at 21:45):

this statement is fraught with difficulties though

Kevin Buzzard (May 22 2018 at 21:45):

and this is definitely not refl

Kevin Buzzard (May 22 2018 at 21:45):

because I am claiming for example that F U = F (id '' U)

Chris Hughes (May 22 2018 at 22:21):

What's the definition of presheaf_of_types_pullback_under_open_immersion? I think the functions like .res only unfold when applied to something of the form {F := _, ...}.res and not x.res for example. Have you tried show?

Chris Hughes (May 22 2018 at 22:22):

Is it because it doesn't know what the underscore is?

Kevin Buzzard (May 22 2018 at 22:25):

The underscore is a horrible proof term.

Kevin Buzzard (May 22 2018 at 22:25):

I have realised there's another approach

Kevin Buzzard (May 22 2018 at 22:25):

so this question is no longer relevant

Kevin Buzzard (May 22 2018 at 22:25):

Again I have to use something very counterintuitive to a mathematician

Kevin Buzzard (May 22 2018 at 22:26):

Instead of trying to claim that the identity map is a map F U -> F (id '' U)

Kevin Buzzard (May 22 2018 at 22:26):

I use the actual map F U -> F (id '' U) which a mathematician would call "the identity map" but which in dependent type theory is known as "restriction from U to the open subset id '' U"

Kevin Buzzard (May 22 2018 at 22:28):

it's unbelievable

Kevin Buzzard (May 22 2018 at 22:28):

all my hitherto impossible goals magically become refl

Kevin Buzzard (May 22 2018 at 22:28):

⊢ {morphism := λ (U : set (X R)) (HU : is_open zariski.open U),
                   ((zariski.structure_presheaf_of_rings R).to_presheaf_of_types).res U (id '' U) HU
                     (eq.mpr (id (eq.rec (eq.refl (is_open zariski.open (id '' U))) (set.image_id U))) HU)
                     (eq.mpr (id (eq.rec (eq.refl (id '' U ⊆ U)) (set.image_id U))) (set.subset.refl U)),
     commutes := λ (U V : set (X R)) (HU : is_open zariski.open U) (HV : is_open zariski.open V) (Hsub : V ⊆ U),
                   eq.refl
                     (((presheaf_of_rings_pullback_under_open_immersion (zariski.structure_presheaf_of_rings R) id
                            H).to_presheaf_of_types).res
                          U
                          V
                          HU
                          HV
                          Hsub ∘
                        (λ (HU : is_open zariski.open U),
                           ((zariski.structure_presheaf_of_rings R).to_presheaf_of_types).res U (id '' U) HU
                             (eq.mpr (id (eq.rec (eq.refl (is_open zariski.open (id '' U))) (set.image_id U))) HU)
                             (eq.mpr (id (eq.rec (eq.refl (id '' U ⊆ U)) (set.image_id U))) (set.subset.refl U)))
                          HU)}.morphism
      U
      HU
      (x * y) =
    {morphism := λ (U : set (X R)) (HU : is_open zariski.open U),
                     ((zariski.structure_presheaf_of_rings R).to_presheaf_of_types).res U (id '' U) HU
                       (eq.mpr (id (eq.rec (eq.refl (is_open zariski.open (id '' U))) (set.image_id U))) HU)
                       (eq.mpr (id (eq.rec (eq.refl (id '' U ⊆ U)) (set.image_id U))) (set.subset.refl U)),
       commutes := λ (U V : set (X R)) (HU : is_open zariski.open U) (HV : is_open zariski.open V) (Hsub : V ⊆ U),
                     eq.refl
                       (((presheaf_of_rings_pullback_under_open_immersion (zariski.structure_presheaf_of_rings R) id
                              H).to_presheaf_of_types).res
                            U
                            V
                            HU
                            HV
                            Hsub ∘
                          (λ (HU : is_open zariski.open U),
                             ((zariski.structure_presheaf_of_rings R).to_presheaf_of_types).res U (id '' U) HU
                               (eq.mpr (id (eq.rec (eq.refl (is_open zariski.open (id '' U))) (set.image_id U))) HU)
                               (eq.mpr (id (eq.rec (eq.refl (id '' U ⊆ U)) (set.image_id U))) (set.subset.refl U)))
                            HU)}.morphism
        U
        HU
        x *
      {morphism := λ (U : set (X R)) (HU : is_open zariski.open U),
                     ((zariski.structure_presheaf_of_rings R).to_presheaf_of_types).res U (id '' U) HU
                       (eq.mpr (id (eq.rec (eq.refl (is_open zariski.open (id '' U))) (set.image_id U))) HU)
                       (eq.mpr (id (eq.rec (eq.refl (id '' U ⊆ U)) (set.image_id U))) (set.subset.refl U)),
       commutes := λ (U V : set (X R)) (HU : is_open zariski.open U) (HV : is_open zariski.open V) (Hsub : V ⊆ U),
                     eq.refl
                       (((presheaf_of_rings_pullback_under_open_immersion (zariski.structure_presheaf_of_rings R) id
                              H).to_presheaf_of_types).res
                            U
                            V
                            HU
                            HV
                            Hsub ∘
                          (λ (HU : is_open zariski.open U),
                             ((zariski.structure_presheaf_of_rings R).to_presheaf_of_types).res U (id '' U) HU
                               (eq.mpr (id (eq.rec (eq.refl (is_open zariski.open (id '' U))) (set.image_id U))) HU)
                               (eq.mpr (id (eq.rec (eq.refl (id '' U ⊆ U)) (set.image_id U))) (set.subset.refl U)))
                            HU)}.morphism
        U
        HU
        y

Kevin Buzzard (May 22 2018 at 22:28):

proof is refl

Andrew Ashworth (May 23 2018 at 01:59):

it seems you discover cool new things daily! perhaps you can include a mathematician's tips and tricks section in the textbook you want to write this summer


Last updated: Dec 20 2023 at 11:08 UTC