Zulip Chat Archive

Stream: general

Topic: Lean segfaulting


Koundinya Vajjha (Apr 18 2019 at 18:06):

I just came across this and I am unsure of why this causes the Lean server to segfault on my machine:
I am writing a tactic to revert all propositions in a theorem.

open tactic

meta def revert_props : tactic unit :=
    do ctx  local_context,
       lst  mmap infer_type ctx,
       foo  mfilter is_prop lst,
       g  mmap revert foo,
       skip

example (b c d e f : Prop) (h₁ : b  c) (h₂ : d  e) (g : Prop) (h₃ : b  f  g) :
  true :=
begin
  -- revert_props, -- causes a segfault
  guard_target (b  f  g)  (d  e)  b  c  true,
  intros,
  trivial
end

I am concerned if mmap revert foo is the right way to do what I had in mind.

Mario Carneiro (Apr 18 2019 at 18:12):

I recall revert having a bug in it that causes a segfault, although I thought it was fixed

Koundinya Vajjha (Apr 18 2019 at 18:13):

Does this mean I can skip Q1 for tomorrow's ITP homework?

Mario Carneiro (Apr 18 2019 at 18:19):

no, there is a bug in your code

Mario Carneiro (Apr 18 2019 at 18:20):

the bug in lean is that it segfaults instead of just failing the tactic, but you called revert wrong

Mario Carneiro (Apr 18 2019 at 18:24):

@Simon Hudon Here's a MWE:

example (a b : Prop) : true :=
by do to_expr ```(a  b) >>= revert

It looks like local_context::find_local_decl asserts that the input is a local constant rather than returning none like you might expect

Simon Hudon (Apr 18 2019 at 18:26):

I'll have a look

Mario Carneiro (Apr 18 2019 at 18:26):

maybe revert() in revert_tactic.cpp should have a check in the for loop

Simon Hudon (Apr 18 2019 at 20:42):

I think I have a fix

Simon Hudon (Apr 18 2019 at 21:41):

@Mario Carneiro can you review and merge please?

Wojciech Nawrocki (Jun 13 2019 at 16:35):

Just ran into this in Lean community edition nightly. A consistent repro - start with this in an empty file:

lemma segfault {α: Type u} {a a': α} (H : a = a') : a = a' := begin
  revert a,
end

then change revert a, to revert a a',

Bryan Gin-ge Chen (Jun 13 2019 at 17:16):

I can reproduce this with 3.4.2 . It seems that it occurs the instant the file reads revert a a. If I paste a' instead of typing it then no crash occurs. Similarly, I can easily type in revert a' a (though changing it to revert a' a' crashes).

Curiously, I can't reproduce any of these crashes in the web editor. (This version uses community Lean).

Mario Carneiro (Jun 13 2019 at 18:33):

there is a bug in revert_lst in 3.4.2; this is fixed in community lean

Bryan Gin-ge Chen (Jun 13 2019 at 18:36):

This happens in 3.5.0c too though.

Wojciech Nawrocki (Jun 13 2019 at 18:37):

Yup, I can reproduce this on nightly-2019-05-17. Maybe it's fixed in newer nightlies?

Bryan Gin-ge Chen (Jun 13 2019 at 18:38):

That's the most recent nightly.

Koundinya Vajjha (Jun 13 2019 at 19:18):

This has a separate instance where Lean segfaults.Is this fixed in community?
https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Lean.20crashing

Bryan Gin-ge Chen (Jun 13 2019 at 19:18):

No, I don't think anyone has looked at it yet.

Edit: I opened an issue for this.

Bryan Gin-ge Chen (Jun 13 2019 at 19:21):

In particular, the version of 3.5.0c I used in my last comment in that thread was also the most recent nightly.


Last updated: Dec 20 2023 at 11:08 UTC