Zulip Chat Archive
Stream: new members
Topic: List of all conv tactics
Jakub Nowak (Jan 18 2026 at 16:24):
When I hit autocompletion button inside tactic mode I get list of all tactics:
image.png
But this doesn't work for conv mode:
image.png
I haven't checked in VSCode, because I don't know how to open autocompletion popup there, but I would be surprised if it were working differently in VSCode.
Could this be fixed? Also, is there maybe a list of all conv tactics somewhere in lean4 reference, or mathlib? Like https://leanprover-community.github.io/mathlib-manual/html-multi/Tactics/All-tactics/
Mirek Olšák (Jan 18 2026 at 16:29):
Not very convenient but #help conv
Aaron Liu (Jan 18 2026 at 16:30):
import Batteries.Tactic.HelpCmd
#help conv
Jakub Nowak (Jan 18 2026 at 16:33):
Hm, looks like doc-string for dsimp? got mixed up with doc-string of simp?
syntax "dsimp?"... [Lean.Parser.Tactic.Conv.dsimpTrace]
`simp?` takes the same arguments as `simp`, but reports an equivalent call to `simp only`
that would be sufficient to close the goal. See the `simp?` tactic for more information.
Mirek Olšák (Jan 18 2026 at 16:35):
Also, I once wrote a meta-snippet to display all syntaxes (in live lean) with the possibility to hover over them. Looks like many standard tactics work too.
Lua Viana Reis (Jan 18 2026 at 16:45):
Trying to reproduce @Jakub Nowak OP made me realize the module system is breaking the tactic completions. Is this a known issue?
module
example := by
sor -- place the cursor here, all completions are fully qualified names
Jakub Nowak (Jan 18 2026 at 16:58):
Hm, it looks it's broken withmodule because all names are fully qualified:
image.png
But that fully qualified name completion is bonkers. Completing sor gives this, which doesn't work:
module
example := by
Lean.Parser.Tactic.tacticSorry
Lua Viana Reis (Jan 18 2026 at 17:06):
it's completing with the parser constant names, which have term-mode values but are not tactics
Lua Viana Reis (Jan 18 2026 at 17:08):
compare
module
import Lean.Elab.Tactic.Doc
open Lean.Elab.Tactic.Doc
#eval do
let docs ← allTacticDocs
return docs.map TacticDoc.userName
and
import Lean.Elab.Tactic.Doc
open Lean.Elab.Tactic.Doc
#eval do
let docs ← allTacticDocs
return docs.map TacticDoc.userName
Marc Huisinga (Jan 19 2026 at 09:37):
Regarding the feature request in the OP: could you open an RFC in core?
(I can already say that from an implementation perspective, this is likely pretty tricky. Completion in whitespace is pretty subtle, especially if you want it to make use of incrementality, and making it context-dependent on whether you're currently in a conv block or not is even more subtle.)
David Thrane Christiansen (Jan 19 2026 at 15:23):
Jakub Nowak said:
is there maybe a list of all conv tactics somewhere in lean4 reference
The reference manual section on conv contains a list of the tactics.
@Lua Viana Reis #12047 fixes the first-token detection (using a strategy suggested by @Sebastian Ullrich - thanks!). This seems to fix the completion issue as well. Thank you for reporting it!
Last updated: Feb 28 2026 at 14:05 UTC