Zulip Chat Archive
Stream: mathlib4
Topic: Unused variable linter bug (?)
Pim Otte (Aug 31 2024 at 08:49):
The following gives an unused variable on G (and removing it gives errors for obvious reasons). My meta-programming skills are still a little lacking to de-mathlibify this mwe, but maybe someone else can? I have checked it on live.lean-lang.org with v4.11.0-rc3
import Mathlib.Combinatorics.SimpleGraph.Path
def oddVerts (G : SimpleGraph V) := {(c : SimpleGraph.ConnectedComponent G) | Nonempty c}
Johan Commelin (Sep 03 2024 at 04:53):
@Kyle Miller do you know what is going on?
Kyle Miller (Sep 03 2024 at 15:32):
I've seen this issue before -- in the macro expansion, you have match (c : SimpleGraph.ConnectedComponent G) with ..., and for some reason type ascriptions in match statement discriminants don't appear to elaborate correctly, or at least terminfo is missing (try hovering over the type in the type ascription; you don't get any hover information!)
A fix is to avoid using this particular notation and instead use the basic set separation notation:
def oddVerts (G : SimpleGraph V) := {c : SimpleGraph.ConnectedComponent G | Nonempty c}
We should probably extend basic set separation notation to accept parentheses here, since the parenthesis notation gives a surprising expansion anyway.
Mario Carneiro (Sep 04 2024 at 22:58):
I don't think it's match statement discriminants, but rather type ascriptions in match patterns
Mario Carneiro (Sep 04 2024 at 23:00):
example (F : Nat → Prop) (x : Nat) (y : F x) : Nat :=
match (y : F x) with
-- ^ this has hover info
| (_y : F x) => 1
-- ^ this doesn't
Mario Carneiro (Sep 04 2024 at 23:01):
the same issue appears in anything that desugars to match statements, including pattern matching in let and have
Mario Carneiro (Sep 04 2024 at 23:02):
this is lean4#3955
Last updated: May 02 2025 at 03:31 UTC