Zulip Chat Archive

Stream: lean4

Topic: Using Environment.evalConst


Amir Livne Bar-on (Oct 11 2024 at 19:35):

I'm trying to look at exported values (for introspection scripts in the Equational Theories project), and I can't get Environment.evalConst to work.

I've been able to reproduce with a small example, based on the initial repo generated by lake. This is Main.lean:

import Lean.Util.SearchPath
import Testimport

open Lean

def main : IO Unit := do
  IO.println s!"Hello, {hello}!"

  searchPathRef.set compile_time_search_path%
  let env  importModules #[{module := `Testimport}] {} (trustLevel := 1024)
  match unsafe Environment.evalConst String env {} `Testimport.Basic.hello with
  | Except.ok value =>
    IO.println s!"Hello, {value}!"
  | Except.error err =>
    IO.println err

When running this (after allowing the interpreter in the lakefile) I'm getting this output:

Hello, world!
unknown declaration 'Testimport.Basic.hello'

What am I doing wrong? How can I access exported values by name?

Sebastian Ullrich (Oct 11 2024 at 20:23):

I don't think the definition is namespaced? Try `hello

Amir Livne Bar-on (Oct 11 2024 at 23:22):

Yes, this works. But the analogue doesn't work in the equational theories project, I'll try to dig into why.

Amir Livne Bar-on (Oct 11 2024 at 23:33):

The definitions I'm interested in ("equations") are defined through a tag declaration extension. The relevant part of the code is

initialize magmaLawExt : TagDeclarationExtension  mkTagDeclarationExtension

elab mods:declModifiers tk:"equation " i:num " := " tsyn:term : command => Command.liftTermElabM do
  [...]
  let lawName := .mkSimple s!"Law{i.getNat}"
  addDecl <| .defnDecl {
    name := lawName
    [...]
  }
  addMarkup lawName
  [...]
  modifyEnv (magmaLawExt.tag · lawName)

and in the extraction script I have

env.find? `Law1

finding the expression for the definition, but

unsafe Environment.evalConst Law.NatMagmaLaw env {} `Law1

failing to evaluate it (with unknown declaration).

Sebastian Ullrich (Oct 12 2024 at 10:35):

You should use addAndCompile in that case instead of addDecl

Mario Carneiro (Oct 12 2024 at 12:52):

sorry, mea culpa

Amir Livne Bar-on (Oct 12 2024 at 13:05):

Mario Carneiro said:

sorry, mea culpa

Are you changing this? I don't feel comfortable touching this foundational part of the code (though I verified it works in our case)

Mario Carneiro (Oct 12 2024 at 13:17):

yes I'm writing the PR

Mario Carneiro (Oct 12 2024 at 13:33):

equational#530


Last updated: May 02 2025 at 03:31 UTC