Trace tags for dumping the decision tree in org-mode format (#2871)
authormakaimann <makaim@stanford.edu>
Mon, 16 Dec 2019 09:58:24 +0000 (01:58 -0800)
committerAndres Noetzli <andres.noetzli@gmail.com>
Mon, 16 Dec 2019 09:58:24 +0000 (01:58 -0800)
commitc1c8b61a03732cb485e358bc0f78e654242d58de
treec7943638645ed74976c1e5aa0fe7ddad59d57c0f
parent0e5efa8c4ff22925d3fc011a3588a3e67c107d0e
Trace tags for dumping the decision tree in org-mode format (#2871)

This would add tracing options to print the decision tree in [org-mode](https://orgmode.org/) format which can be viewed with emacs or [vim-orgmode](https://github.com/jceb/vim-orgmode).

In the raw format, the number of asterisks denote the decision level of a decision, and within a propagation node, the number of spaces denote the level. Most viewers render the asterisks as indented bullets.

There are some options for controlling verbosity:
`dtview` - prints the decisions (basic option)
`dtview::command` - also prints smt-lib commands as they're issued
`dtview::conflict` - also prints conflicts
`dtview::prop` - also prints propagations

Example usage:
`cvc4 -t dtview -t dtview::command -t dtview::conflict -t dtview::prop <example smt2 file> &> example-trace.org`

The resulting file when opened with an org-mode viewer has collapsible nodes, where "..." marks a node with children.
src/prop/minisat/core/Solver.cc
src/prop/minisat/core/Solver.h
src/smt/command.cpp
src/theory/theory_engine.cpp