Zulip Chat Archive

Stream: general

Topic: inspecting #reduce

Moses Schönfinkel (Jun 07 2018 at 10:09):

Is there a set_option of sorts to see what steps #reduce is going through to debug a (deterministic) timeout?

Sean Leather (Jun 07 2018 at 11:09):

I have no idea, but I did this:

$ cd lean/tests; git grep set_option

Looking around, I found these possible options:

set_option profiler true
set_option trace.elaborator_detail true
set_option trace.compiler.code_gen true

Perhaps one of those will help, or perhaps looking at lean/tests will.

Moses Schönfinkel (Jun 08 2018 at 07:47):

Thank you Sean. It seems that profiler and compiler.* pertain to #eval only. There's a little bit of information from elaborator.* in this regard, but it somewhat unsurprisingly doesn't provide much beyond how parsing transpired and how it typed the AST before sending it for reduction. Going through lean/tests doesn't yield much either. There's a secret import tools.debugger but even there are no options to look into reduce. I'll just go through the implementation, can't be that bad :P.

Sean Leather (Jun 08 2018 at 07:53):

Good luck!

library/init/meta/tactic.lean:1204:    memory allocations (in thousands) performed by 'tac'. This is a deterministic way of interrupting
library/init/util.lean:34:  This is a deterministic way of interrupting long running tasks. -/
src/shell/lean.cpp:200:    std::cout << "                     this is a deterministic way of interrupting long running tasks\n";
src/util/exception.cpp:29:    return "(deterministic) timeout";
src/util/json.hpp:7760:        deterministic finite automaton (DFA) by the tool
src/util/sexpr/options.cpp:29:    register_unsigned_option(*g_timeout, 0, "the (deterministic) timeout is measured as the maximum of memory allocations (in thousands) per task, the default is unbounded");
tests/lean/induction_generalize_premise_args.lean:8:  lemma deterministic_aux (c σ c'₁ c'₂ σ'₁ σ'₂) (h₁ : smallstep c, σ⟩ c'₁, σ'₁⟩)

Moses Schönfinkel (Jun 08 2018 at 07:58):

It is somewhat mysterious to me why #eval works just fine and #reduce gets stuck, even though I've been told that #reduce can get stuck on axioms such as propext - however everything I have should be perfectly computable as witnessed by #eval. Getting #reduce to work should mean that I can also use defeq to compute rfl proofs for me, which is the ultimate goal.

Gabriel Ebner (Jun 08 2018 at 08:26):

Just to confirm: there are no tools to trace the computation of #reduce (at least that I know of). Your best bet is to probably to run lean in a debugger and set a breakpoint on normalize_fn::normalize (or add a tout() << e << "\n" there).

Gabriel Ebner (Jun 08 2018 at 08:27):

however everything I have should be perfectly computable as witnessed by #eval

That's the point. #eval (VM computation) can evaluate more things than #reduce (definitional reduction).

Moses Schönfinkel (Jun 08 2018 at 09:02):

How does that conceptually make sense in pure settings? Does it have something to do with non-transitive defeq? Isn't pure computation technically just definitional reduction?

Gabriel Ebner (Jun 08 2018 at 09:15):

Can you clarify the term "pure setting"? The main area where definitional reduction can get stuck where VM computation succeeds is on terms with axioms---VM computation erases all Props and proofs, and hence does not care whether you use axioms or not. Practically speaking, there is also a big performance difference.

Moses Schönfinkel (Jun 08 2018 at 10:00):

I just wanted to avoid having to think about side-effects that can possibly influence computation as it is being executed, that's why I said "pure setting". However, VM computation erasing Props/proofs is interesting in my scenario - I think I know where it's getting stuck. I have a structure that has both x and a proof of P x - what I end up asking for is the x only. The interesting part is that if proof of P x is sorry, it reduces just fine - but I think that also makes sense.

Moses Schönfinkel (Jun 08 2018 at 10:04):

I'll fix it by using less dependent typing, thank you so much, I think I've got this :).

Last updated: Dec 20 2023 at 11:08 UTC