--- name: explain description: Parse and interpret Z3 output for human consumption. Handles models, unsat cores, proofs, statistics, and error messages. Translates solver internals into plain-language explanations. --- Given raw Z3 output (from the **solve**, **prove**, **optimize**, or **benchmark** skills), produce a structured explanation. This skill is for cases where the solver output is large, nested, or otherwise difficult to read directly. # Step 1: Identify the output type Action: Determine the category of Z3 output to explain: model, core, statistics, error, or proof. Expectation: The output type maps to one of the recognized formats in the table below. Result: If the type is ambiguous, use `--type auto` and let the script detect it. Proceed to Step 2. | Output contains | Explanation type | |----------------|-----------------| | `(define-fun ...)` blocks | model explanation | | unsat core labels | conflict explanation | | `:key value` statistics | performance breakdown | | `(error ...)` | error diagnosis | | proof terms | proof sketch | # Step 2: Run the explainer Action: Invoke explain.py with the output file or stdin. Expectation: The script auto-detects the output type and produces a structured plain-language summary. Result: A formatted explanation is printed. If detection fails, re-run with an explicit `--type` flag. ```bash python3 scripts/explain.py --file output.txt python3 scripts/explain.py --stdin < output.txt python3 scripts/explain.py --file output.txt --debug ``` # Step 3: Interpret the explanation Action: Review the structured explanation for accuracy and completeness. Expectation: Models list each variable with its value and sort. Cores list conflicting assertions. Statistics show time and memory breakdowns. Result: Use the explanation to answer the user query or to guide the next skill invocation. For models: - Each variable is listed with its value and sort - Array and function interpretations are expanded - Bitvector values are shown in decimal and hex For unsat cores: - The conflicting named assertions are listed - A minimal conflict set is highlighted For statistics: - Time breakdown by phase (preprocessing, solving, model construction) - Theory solver load distribution - Memory high-water mark # Parameters | Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | file | path | no | | file containing Z3 output | | stdin | flag | no | off | read from stdin | | type | string | no | auto | force output type: model, core, stats, error | | debug | flag | no | off | verbose tracing | | db | path | no | .z3-agent/z3agent.db | logging database |