Zulip Chat Archive
Stream: mathlib4
Topic: Searching for lemmas to rename
Patrick Massot (Aug 29 2024 at 23:09):
It may be useful to post some code I used today. In a large refactor, I renamed Finsupp.total to Finsupp.linearCombination. The main pain point was to rename all lemmas whose named contained total. The meta-code I used to find them is:
import Mathlib
open Lean Elab Command Meta
-- Generalized monad for `Lean.Name.isBlackListed`
def Lean.Name.isBlackListed' {m : Type → Type} [Monad m] [MonadEnv m]
(declName : Name) : m Bool := do
if declName == ``sorryAx then return true
if declName matches .str _ "inj" then return true
if declName matches .str _ "noConfusionType" then return true
let env ← getEnv
pure $ declName.isInternalDetail
|| isAuxRecursor env declName
|| isNoConfusion env declName
<||> isRec declName <||> isMatcher declName
namespace Mathlib.FindUnused
/-- Remove all blacklisted names from the given environment.
This might not be accurate since the blacklist function is a heuristic. -/
def filterNames {m : Type → Type} [Monad m] [MonadEnv m] {α : Type _}
(env : HashMap Name α) : m (HashMap Name α) := do
let mut env' := env
for (n, _) in env do
if ← n.isBlackListed' then
env' := env'.erase n
return env'
elab "#lemmas" : command => do
let env ← filterNames (← getEnv).constants.map₁
for (n, c) in env do
if `Finsupp.linearCombination ∈ c.type.getUsedConstants && ((toString n).findSubstr? "total").isSome then do
dbg_trace n
#lemmas
The two auxiliary functions were stolen from an old Zulip message by @Kyle Miller. Then the lemmas command look at all declarations and print the names of the declarations whose type involve Finsupp.linearCombination and whose name includes total. Of course in the future we will have much better ways of doing this using #13973, but I thought the above trick can already be useful to other people.
Patrick Massot (Aug 29 2024 at 23:10):
Note I’m defining a command because I always forget how to simply run code in CommandElabM without defining a command.
Eric Wieser (Aug 29 2024 at 23:36):
run_cmd?
Last updated: May 02 2025 at 03:31 UTC