Zulip Chat Archive
Stream: general
Topic: Lean assertion violation
Kevin Buzzard (Mar 05 2018 at 09:05):
universes u v theorem set.subset.trans {α : Type*} {a b c : set α} (ab : a ⊆ b) (bc : b ⊆ c) : a ⊆ c := assume x h, bc (ab h) def set.preimage {α : Type u} {β : Type v} (f : α → β) (s : set β) : set α := {x | f x ∈ s} infix ` ⁻¹' `:80 := set.preimage structure presheaf_of_types (α : Type*) := (F : Π U : set α, Type*) (res : ∀ (U V : set α) (H : V ⊆ U), (F U) → (F V)) (Hcomp : ∀ (U V W : set α) (HUV : V ⊆ U) (HVW : W ⊆ V), (res U W (set.subset.trans HVW HUV)) = (res V W HVW) ∘ (res U V HUV) ) definition presheaf_of_types_pushforward {α : Type*} {β : Type*} (f : α → β) (FPT : presheaf_of_types α) : presheaf_of_types β := { F := λ V : set β, FPT.F (set.preimage f V), res := λ V₁ V₂ H, FPT.res (set.preimage f V₁) (set.preimage f V₂)(λ x Hx,H Hx), Hcomp := λ Uβ Vβ Wβ HUV HVW,rfl -- assertion violation }
Kevin Buzzard (Mar 05 2018 at 09:05):
LEAN ASSERTION VIOLATION File: /home/travis/build/leanprover/lean/src/frontends/lean/elaborator.cpp Line: 3167 Task: /home/buzzard/Encfs/Computer_languages/Lean/lean/bug.lean: presheaf_of_types_pushforward m_ctx.match(e, *val2)
Kevin Buzzard (Mar 05 2018 at 09:06):
Here's a (mathlib-free) assertion violation. Is this a known issue? If not, is my MWE minimal enough? If so, shall I file a bug report? I'd be happy to hear advice before working on this any more
Sebastian Ullrich (Mar 05 2018 at 09:06):
I'm looking into it
Kevin Buzzard (Mar 05 2018 at 09:06):
Lean (version 3.3.1, commit d6d44a19947e, Release)
Ubuntu 16.04
Sebastian Ullrich (Mar 05 2018 at 09:06):
Can reproduce
Kevin Buzzard (Mar 05 2018 at 09:07):
Thanks.
Sebastian Ullrich (Mar 05 2018 at 09:08):
I get the feeling structure notation is too sophisticated for our (the implementers') own good :sweat_smile:
Kevin Buzzard (Mar 05 2018 at 09:08):
ha ha
Kevin Buzzard (Mar 05 2018 at 09:08):
so it's my fault? :-)
Kevin Buzzard (Mar 05 2018 at 09:08):
I wasn't expecting rfl to work, it's just sometimes worth a try
Sebastian Ullrich (Mar 05 2018 at 09:09):
It's obviously our fault for enabling you to do weird things :)
Kevin Buzzard (Mar 05 2018 at 09:09):
I would be interested to know what the first thing you do in this situation is. If it's to fire up some C++ debugger then fair enough, you've lost me already, but if it's to just set some options and watch more carefully then I would be interested to follow along for a while
Kevin Buzzard (Mar 05 2018 at 09:10):
What do I do that is weird?
Kevin Buzzard (Mar 05 2018 at 09:14):
actually I wonder whether I am now grown up enough to fire up a C++ debugger myself
Sebastian Ullrich (Mar 05 2018 at 09:16):
It's a unification error, so I'm now looking at the is_def_eq_detail
trace. The terms are still quite big - if you find a way to minimize them, that would be great.
Kevin Buzzard (Mar 05 2018 at 09:17):
OK I will try and minimise more
Kevin Buzzard (Mar 05 2018 at 09:29):
definition presheaf_of_types_pushforward {β : Type*} : presheaf_of_types β := { F := sorry, res := sorry, Hcomp := λ Uβ Vβ Wβ HUV HVW,rfl -- assertion violation }
Kevin Buzzard (Mar 05 2018 at 09:29):
No idea if that helps
Kevin Buzzard (Mar 05 2018 at 09:30):
I just replaced some stuff with sorry
Kevin Buzzard (Mar 05 2018 at 09:32):
definition presheaf_of_types_pushforward {β : Type*} : presheaf_of_types β := { Hcomp := λ Uβ Vβ Wβ HUV HVW,rfl -- assertion violation }
Kevin Buzzard (Mar 05 2018 at 09:34):
oh I have made it smaller
Kevin Buzzard (Mar 05 2018 at 09:34):
universes u v structure presheaf_of_types (α : Type*) := (F : Π U : set α, Type*) (res : ∀ (U V : set α) , (F U) → (F V)) (Hcomp : ∀ (U V W : set α), (res U W = (res V W) ∘ (res U V) )) set_option trace.type_context.is_def_eq_detail true definition presheaf_of_types_pushforward {β : Type*} : presheaf_of_types β := { Hcomp := λ Uβ Vβ Wβ,rfl -- assertion violation }
Kevin Buzzard (Mar 05 2018 at 09:46):
structure presheaf_of_types (α : Type*) := (F : Π U : set α, Type*) (res : ∀ (U V : set α) , (F U) → (F V)) (Hidem : ∀ U : set α, res U U = (res U U) ∘ (res U U)) set_option trace.type_context.is_def_eq_detail true definition presheaf_of_types_pushforward {β : Type*} : presheaf_of_types β := { Hidem := λ U, rfl, }
Kevin Buzzard (Mar 05 2018 at 09:57):
structure presheaf_of_types (α : Type) := (res : ∀ (U V : set α) , {x : α // U x} → {x : α // V x}) (Hidem : ∀ U : set α, res U U = (res U U) ∘ (res U U)) definition presheaf_of_types_pushforward {β : Type} : presheaf_of_types β := { Hidem := λ U, rfl, }
Kevin Buzzard (Mar 05 2018 at 09:58):
I'm going to stop there because all I am doing now is taking things like my general F from set alpha to Type and replacing it with an arbitrary explicit F (in this case the map sending U to the subtype corresponding to U)
Kevin Buzzard (Mar 05 2018 at 09:59):
oh here's an even better one, I can just use some random map unit to unit
Kevin Buzzard (Mar 05 2018 at 09:59):
structure presheaf_of_types (α : Type) := (res : ∀ (U V : set α) , unit → unit) (Hidem : ∀ U : set α, res U U = (res U U) ∘ (res U U)) definition presheaf_of_types_pushforward {β : Type} : presheaf_of_types β := { Hidem := λ U, rfl, }
Kevin Buzzard (Mar 05 2018 at 10:01):
Still simpler:
Kevin Buzzard (Mar 05 2018 at 10:01):
structure presheaf_of_types (α : Type) := (res : ∀ (U : set α) , unit → unit) (Hidem : ∀ U : set α, res U = (res U) ∘ (res U)) definition presheaf_of_types_pushforward {β : Type} : presheaf_of_types β := { Hidem := λ U, rfl, }
Kevin Buzzard (Mar 05 2018 at 10:02):
structure presheaf_of_types (α : Type) := (res : unit → unit) (Hidem : ∀ U : set α, res = (res) ∘ (res)) definition presheaf_of_types_pushforward {β : Type} : presheaf_of_types β := { Hidem := λ U, rfl, }
Sebastian Ullrich (Mar 05 2018 at 10:04):
Thanks! That should do hopefully.
Kevin Buzzard (Mar 05 2018 at 10:04):
structure presheaf_of_types := (res : unit → unit) (Hidem : ∀ U : unit, res = res ∘ res) set_option trace.type_context.is_def_eq_detail true definition presheaf_of_types_pushforward : presheaf_of_types := { Hidem := λ U, rfl, }
Kevin Buzzard (Mar 05 2018 at 10:05):
Thanks for asking for more minimisation -- in some sense that was quite instructive. Initially I just removed everything not directly related to the violation in the form I had it, but after you asked more I realised there was nothing stopping me trying to find simpler violations
Kevin Buzzard (Mar 05 2018 at 10:07):
Adding the field res := id
makes the problem go away
Kevin Buzzard (Mar 05 2018 at 10:10):
Hey, is it doing a prolog-like search?
Patrick Massot (Mar 05 2018 at 10:11):
Poor Kevin was deprived of a prolog-like search yesterday
Patrick Massot (Mar 05 2018 at 10:11):
Please be nice this time
Kevin Buzzard (Mar 05 2018 at 10:11):
I should never have equated this phrase with "random thing I don't understand"
Kevin Buzzard (Mar 05 2018 at 10:12):
but looking at the debugging output it looks like it might be backtracking...
Patrick Massot (Mar 05 2018 at 10:13):
I'm picturing you asking to Scholze: "are you doing a a prolog-like search" at the end of a really tough talk.
Kevin Buzzard (Mar 05 2018 at 10:17):
Maybe I don't even know what backtracking means. I guess I look at these debugging outputs and think "oh look it's trying lots of things in what looks like a systematic manner"
Patrick Massot (Mar 05 2018 at 10:17):
It's not enough
Kevin Buzzard (Mar 05 2018 at 10:17):
but I probably need to look more closely to distinguish the difference between "if this fails, discard it and try something else"
Kevin Buzzard (Mar 05 2018 at 10:17):
and "let's actually backtrack here"
Patrick Massot (Mar 05 2018 at 10:17):
You want to start following a path and then come back to an earlier branch point
Kevin Buzzard (Mar 05 2018 at 10:17):
yes this is just dawning on me now
Sebastian Ullrich (Mar 05 2018 at 11:51):
@Kevin Buzzard Congrats, I think you found a bug where definitional equality is not idempotent
Kevin Buzzard (Mar 05 2018 at 11:51):
Is that a good thing?
Kevin Buzzard (Mar 05 2018 at 11:51):
Do I get an achievement?
Patrick Massot (Mar 05 2018 at 11:51):
I'm jalous
Patrick Massot (Mar 05 2018 at 11:52):
My conv bug seems much less cool
Gabriel Ebner (Mar 05 2018 at 11:57):
@Sebastian Ullrich "Idempotent"?? Do you mean is_def_eq(t, t)
returns false?
Sebastian Ullrich (Mar 05 2018 at 11:57):
On the first run it returns true for two terms, then false on any subsequent runs
Kevin Buzzard (Mar 05 2018 at 12:00):
ooh can I prove false??
Kevin Buzzard (Mar 05 2018 at 12:00):
I would definitely get an achievement for that
Sebastian Ullrich (Mar 05 2018 at 12:00):
Nah, it's just the elaborator
Kevin Buzzard (Mar 05 2018 at 12:00):
aah well
Sebastian Ullrich (Mar 05 2018 at 12:01):
Apparently elim_delayed_abstractions
accidentally supports backtracking assignments to a metavar... not the correct place for a Prolog-like search
Kevin Buzzard (Mar 05 2018 at 12:01):
you lost me at the prolog-like search bit
Sebastian Ullrich (Mar 05 2018 at 12:02):
That was mostly a joke :)
Gabriel Ebner (Mar 05 2018 at 12:03):
Wow, this is unexpected.
Kevin Buzzard (Mar 05 2018 at 12:04):
Kenny posted this about a week ago
Kevin Buzzard (Mar 05 2018 at 12:04):
instance error (α : Type) : group α := { mul_assoc := λ x y z, rfl }
Kevin Buzzard (Mar 05 2018 at 12:04):
without any further comment
Kevin Buzzard (Mar 05 2018 at 12:05):
and it might be the same thing
Sebastian Ullrich (Mar 05 2018 at 12:06):
Yep, same assertion
Patrick Massot (Mar 05 2018 at 12:17):
users.png
One little bug and everybody flies out, except devs. So sad...
Last updated: Dec 20 2023 at 11:08 UTC