Zulip Chat Archive

Stream: general

Topic: SEGV with irreducible attribute


Kevin Buzzard (Aug 18 2020 at 11:49):

universes u v
variable {α : Type u}

/-- Add an extra element `1` to a type -/
def with_one (α) := option α

namespace with_one

instance : monad with_one := option.monad

instance : has_one (with_one α) := none

instance : inhabited (with_one α) := 1

instance [nonempty α] : nontrivial (with_one α) := option.nontrivial

instance : has_coe_t α (with_one α) := some

attribute [irreducible] with_one

@[simp]
lemma one_ne_coe {a : α} : (1 : with_one α)  a :=
λ h, option.no_confusion h

@[simp]
lemma coe_ne_one {a : α} : (a : with_one α)  (1 : with_one α) :=
λ h, option.no_confusion h

lemma ne_one_iff_exists :  {x : with_one α}, x  1   (a : α), x = a
| 1       := ⟨λ h, false.elim $ h rfl, by { rintros a,ha h, simpa using h }
| (a : α) := ⟨λ h, a, rfl, λ h, with_one.coe_ne_one

end with_one

produces a SIGSEGV for me on Ubuntu 18.04 with Lean 3.18.4 . Can anyone else reproduce? This is pretty much directly from mathlib algebra.group.with_one except that I have added the attribute [irreducible] with_one line, possibly too early -- but I didn't expect a segfault.

Johan Commelin (Aug 18 2020 at 11:51):

You can't use option.no_confusion after marking it irreducible

Johan Commelin (Aug 18 2020 at 11:51):

No idea why it segfaults though

Gabriel Ebner (Aug 18 2020 at 12:00):

Please remove references to mathlib and file as a bug. Segfaults are always bugs.

Kevin Buzzard (Aug 18 2020 at 12:12):

I've already cleared out the mathlib imports. Can someone else confirm it's segfaulting for them?

Gabriel Ebner (Aug 18 2020 at 12:12):

nontrivial?

Shing Tak Lam (Aug 18 2020 at 12:19):

I think I've minimised it to the point where there's no mathlib imports, and commenting out any line won't segfault anymore.

variable {α : Type}

def with_one (α) := option α

instance : has_one (with_one α) := none

attribute [irreducible] with_one

lemma ne_one_iff_exists :  {x : with_one α}, x  1   (a : α), x = a
| 1       := by { using }
| (a : α) := sorry

If whatever is between the braces contains using then it crashes. Otherwise Lean just complains about unknown identifier or something else.

lean#450 . The issue title is vague since I don't really know what is going on tbh.

Kevin Buzzard (Aug 18 2020 at 12:23):

Thanks Shing. I was minimising and restarting Lean in VS Code and then when I would restart VS Code it wouldn't segfault any more -- I had got as far as I did by constantly restarting VS Code

Reid Barton (Aug 18 2020 at 12:35):

For minimizing crashes I generally test from the command line--I don't totally trust emacs to accurately report what is happening when Lean is crashing (though it does seem to generally work)

Gabriel Ebner (Aug 18 2020 at 12:36):

If you use a debug build of lean then you actually get an error message instead of a segfault. This makes it a bit easier.


Last updated: Dec 20 2023 at 11:08 UTC