Zulip Chat Archive

Stream: general

Topic: Understanding evalConst in aesop tacgen


Frederick Pu (Mar 14 2025 at 17:02):

I'm having trouble understanding what evalConst is actually doing in tacGenImpl

-- Precondition: `decl` has type `TacGen`.
unsafe def tacGenImpl (decl : Name) : RuleTac := λ input => do
  let tacGen  evalConst TacGen decl
  let initialState  saveState
  let suggestions  tacGen input.goal
  let mut apps := Array.mkEmpty suggestions.size
  ...

Aaron Liu (Mar 14 2025 at 17:05):

It's getting the TacGen from an name.

Frederick Pu (Mar 14 2025 at 19:35):

so does it run a compiler on the string?

Aaron Liu (Mar 14 2025 at 19:39):

It looks up the definition and evaluates it. Use like

def foo : TacGen := bar
-- evalConst TacGen `foo
-- works here

Kyle Miller (Mar 16 2025 at 21:43):

Yeah, my understanding is that evalConst TacGen decl looks up the declaration whose name is given by decl, which has already been compiled, and then uses the interpreter to evaluate the compiled code, returning some runtime value, which must be a TacGen. If it's not actually a TacGen, then unspecified behavior occurs.


Last updated: May 02 2025 at 03:31 UTC