leanprover / leanprover/lean4

Expr.listLit? fails for long literal lists

Open
#7,730 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug P-low
Dominant language
Lean
Stars
9.2k
Forks
990
Avg merge
1d 17h
Merged PRs (30d)
175

Description

Prerequisites

Please put an X between the brackets as you perform the following steps:

Description

Expr.listLit? behaves as expected for literal lists of length <= 32, but fails for larger literal lists. In particular, for list literals of length 33, it returns none.

import Lean

elab "#test" t:term : command => do
  let e ← Lean.Elab.Command.liftTermElabM do
    Lean.Elab.Term.elabTerm t none
  if let .none := e.listLit? then
    throwError "Not a list literal"

#test [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -- works
#test [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] -- fails
Context

#lean4 > Extracting entries from a literal list @ 💬

Steps to Reproduce
  1. Code as above

Expected behavior: Both tests above succeed.

Actual behavior: The first test succeeds and the second fails.

Versions

[Output of #version or #eval Lean.versionString]
[OS version, if not using live.lean-lang.org.]

Additional Information

[Additional information, configuration or data that might be necessary to reproduce the issue]

Impact

Add 👍 to issues you consider important. If others are impacted by this issue, please ask them to add 👍 to it.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Run the standalone Lean reproduction from the issue and inspect the implementation of Expr.listLit?. Verify the behavior at the 32- and 33-element boundaries; done means both example list literals are recognized successfully.

Written by the indexing model from the issue text.

Assessment

Domain
compilers
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.