leanprover / leanprover/lean4

Turning `abbrev` into `def` defeats type inference

Open
#8,766 4 comments 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

Turning an abbrev into a def may regress elaboration.

Context

The definition of SPred below will be upstreamed into Core soon (#8745); it would be better if it could be a def.

Steps to Reproduce

Elaborate

def SPred (σs : List Type) := match σs with
  | [] => Prop
  | σ :: σs => σ → SPred σs

class WP (m : Type → Type) (σs : outParam (List Type)) where

instance : WP (EStateM ε σ) [σ] where

def Triple [WP m σs] (x : m α) (P Q : SPred σs) := True

theorem test {prog : EStateM ε σ α} (P : σ → Prop) :
    Triple prog (fun s' => s' = s) P → P s := sorry

Expected behavior: Successfully elaborate. This is the behavior if I turn def SPred into abbrev SPred.

Actual behavior: Fails to elaborate (fun s' => s' = s).

Versions

Lean 4.21.0-rc3

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

Start by running the minimal Lean 4.21.0-rc3 reproduction and compare elaboration with SPred declared as def versus abbrev. Trace the failed elaboration of (fun s' => s' = s); done means the def version elaborates successfully without changing the reported example.

Written by the indexing model from the issue text.

Assessment

Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.