Skip to content

metareflection/dafny-tasker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dafny-tasker

LSP-based extractor for Dafny proof/annotation tasks:

  • focus: full program with exactly one /*[CODE HERE]*/ per task in the target lemma.
  • focus --modular: same, but axiomatize other lemmas by adding {:axiom} and removing bodies.
  • sketch: full program with all extractable statements in the target lemma removed (deleted). Output is the complete lemma body. One task per lemma.
  • extract: convert JSON tasks to individual .dfy files (creates <id>.dfy for program and <id>_output.dfy for solution).
  • axiomatize: transform a file to axiomatize all lemmas except the target, writing the result to a new file.
  • minimize: minimize lemma proofs by greedily removing unnecessary statements while maintaining verification.
  • empty: create .dfy files or JSON tasks with lemma bodies emptied (one per lemma) for training proof synthesis systems.

Ask DeepWiki

Install

python3.12 -m venv .venv
source .venv/bin/activate
pip install -e .

LSP (required)

export DAFNY_LSP_CMD="dafny server"
# or: export DAFNY_LSP_CMD="dotnet /path/to/DafnyLanguageServer.dll"

Commands

Focus: Generate tasks with one statement per task

# Focus (regular): full program + one CODE_HERE_MARKER per task
python -m dafny_tasker.cli focus --file examples/bs_demo.dfy --lemma binarySearchCorrect --out focus.jsonl

# Focus (modular): axiomatized other lemmas
python -m dafny_tasker.cli focus --file examples/bs_demo.dfy --lemma binarySearchCorrect --out modular.jsonl --modular

# Focus (multiple files): process all lemmas in all files
python -m dafny_tasker.cli focus --inputs 'bench/*_solution.dfy' --out focus_all.json --json-list

Sketch: Generate structural skeleton tasks

# Sketch: full program with all statements removed (one task per lemma)
python -m dafny_tasker.cli sketch --file examples/bs_demo.dfy --lemma binarySearchCorrect --out sketch.jsonl

# Sketch (multiple files): process all lemmas in all files
python -m dafny_tasker.cli sketch --inputs 'bench/*_solution.dfy' --out sketches.json --json-list

# Sketch (modular): with axiomatized other lemmas
python -m dafny_tasker.cli sketch --inputs 'bench/*_solution.dfy' --out sketches_modular.json --json-list --modular

Extract: Convert JSON tasks to individual .dfy files

# Extract programs from tasks
# Creates <id>.dfy (program) and <id>_output.dfy (solution) for each task
python -m dafny_tasker.cli extract --input sketches.json --out programs_dir/

# Works with both JSON and JSONL formats
python -m dafny_tasker.cli extract --input focus_tasks.jsonl --out focus_programs/

Axiomatize: Transform files for modular verification

# Axiomatize: transform file to axiomatize all lemmas except the target
python -m dafny_tasker.cli axiomatize --file examples/bs_demo.dfy --lemma binarySearchCorrect --out axiomatized.dfy

# Axiomatize: infer target lemma from CODE_HERE_MARKER location
python -m dafny_tasker.cli axiomatize --file examples/bs_demo.dfy --out axiomatized.dfy

Minimize: Reduce lemma proofs to minimal necessary statements

The minimize command reduces lemma proofs to their minimal form by greedily removing unnecessary statements while maintaining verification. It processes each lemma by:

  1. First attempting to verify with an empty body
  2. If that fails, trying to remove each extractable statement one-by-one in reverse order (bottom-up)
  3. Keeping removals that maintain successful verification
  4. Generating a JSON report with detailed statistics
# Minimize: remove unnecessary statements from lemma proofs
python -m dafny_tasker.cli minimize --file examples/bs_demo.dfy --out minimized/

# Minimize (multiple files): process all lemmas in all files
python -m dafny_tasker.cli minimize --inputs 'bench/*_solution.dfy' --out minimized_bench/

# Minimize (specific lemma): only minimize a specific lemma
python -m dafny_tasker.cli minimize --file examples/bs_demo.dfy --lemma binarySearchHelperCorrect --out minimized/

# Minimize (modular): with axiomatized other lemmas
python -m dafny_tasker.cli minimize --file examples/bs_demo.dfy --out minimized/ --modular

# Minimize (custom timeout): adjust verification timeout per attempt (default: 30s)
python -m dafny_tasker.cli minimize --file examples/bs_demo.dfy --out minimized/ --timeout 60

# Minimize (specific statement types): only consider assert statements for removal
python -m dafny_tasker.cli minimize --file examples/bs_demo.dfy --out minimized/ --extract-types assert

Output:

  • Minimized .dfy files written to output directory (one per input file)
  • minimize_report.json with detailed statistics about what was removed from each lemma

Empty: Create .dfy files or JSON tasks with emptied lemma bodies

The empty command creates standalone .dfy files or JSON tasks where a specific lemma's body is emptied, while all other lemmas remain intact. This is useful for training proof synthesis systems like dafny-zero to fill in proofs one at a time.

# Empty: create one file per lemma with that lemma's body emptied
python -m dafny_tasker.cli empty --file examples/bs_demo.dfy --out emptied/

# Empty (multiple files): process all lemmas in all files
python -m dafny_tasker.cli empty --inputs 'bench/*_solution.dfy' --out emptied_bench/

# Empty (specific lemma): only empty a specific lemma
python -m dafny_tasker.cli empty --file examples/bs_demo.dfy --lemma binarySearchCorrect --out emptied/

# Empty (modular): axiomatize other lemmas while emptying the target
python -m dafny_tasker.cli empty --file examples/bs_demo.dfy --out emptied/ --modular

# Empty (JSON output): create JSON tasks instead of .dfy files
python -m dafny_tasker.cli empty --inputs 'bench/*_solution.dfy' --out emptied.json --json-list

# Empty (JSONL output): create JSONL tasks
python -m dafny_tasker.cli empty --inputs 'bench/*_solution.dfy' --out emptied.jsonl

Output:

  • Directory output (default when --out is a directory): Creates <filestem>_<lemmaname>.dfy for each lemma
  • JSON output (when --out ends in .json or .jsonl, or when --json-list/--jsonl is specified): Creates tasks with:
    • id: <filestem>_<lemmaname>_empty
    • type: "empty"
    • program: The full file with the target lemma's body emptied ({ })
    • output: The original lemma body content (the proof to be synthesized)

About

No description or website provided.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages