Back to all releases
Stable

QCP-v2.0.4

QCP-v2.0.4

Original release notes

We are pleased to announce QCP v2.0.4. This release expands the C programs that QCP can verify and makes complex verification failures substantially easier to diagnose. It introduces a more complete C preprocessor, floating-point verification, pointer-offset reasoning, reusable verified strategies, and strategy-divergence diagnostics, alongside major improvements to branch-aware annotations, Given-based context propagation, and VC feedback.

What's New

Full Preprocessing and Project-Aware Includes

QCP's preprocessing pipeline now covers the C constructs commonly needed by real projects:

Projects can also load include paths from a compilation database:

--compile-commands <file>

This makes it easier to run QCP against an existing C build layout without duplicating its include configuration.

Actionable Strategy-Divergence Diagnostics

Symbolic execution now detects repeating strategy applications whose expressions continue to grow, and reports the responsible rule sequence before the process exhausts memory. Diagnostics include rule files and IDs, priorities, expression size and depth, the successful application count, and a recent application trace.

The shared safeguard can be configured with:

--strategy-application-limit <count>

The default is 4096. The option is available across the shared command-line configuration used by symexec, lsp, mcp, and StrategyCheck. Divergence and limit failures use the stable summary Strategy application did not converge; structured clients can read the detailed trace from errormessage.additional_info.

The detector distinguishes growing cycles from legitimate repeated applications. Regression coverage includes the Graham Scan strategy cycle, text and JSON diagnostics, and custom application limits.

New Verification Support

Floating-Point Verification

QCP v2.0.4 adds Flocq-based proof support and FloatLib.v for floating-point programs. Finite-value safety obligations can be selected explicitly:

--float-finite-vc
--no-float-finite-vc

The release also improves floating-point Rocq output, standardizes generated comparison names, and provides tutorial cases with their generated goals and proofs.

Pointer Offsets and Mixed Memory Layouts

pointer_offset is now a first-class assertion and strategy expression. It is supported throughout parsing, type inference, matching, unification, SMT translation, symbolic memory access, witness generation, Rocq output, and strategy soundness generation.

Pointer and mixed-array strategies use the same representation, making offset reasoning consistent from C annotations through the generated proof obligations.

Major Improvements

Branch-Aware Annotations and Multiple Loop Invariants

Branch-sensitive symbolic execution and annotation handling have been strengthened across complex control-flow cases.

See the examples in QCP_examples/QCP_demos_tutorial/ for the updated annotation workflow.

Given, from, and of Handling

Handling of Given, from, and of annotations has been improved throughout symbolic execution. Given variables are preserved more consistently through assertions, expressions, branch transitions, and function calls. Function-call post-states also propagate the relevant context more reliably, improving relational specifications and multi-stage reasoning.

VC and Symbolic-Execution Feedback

QCP now detects more invalid branches, reducing the number of branches explored during symbolic execution and producing simpler verification conditions.

New Examples and Proof Libraries

Tutorials

QCP_examples/QCP_demos_tutorial/ is the new home for feature-oriented tutorials. It includes:

Each walkthrough includes the relevant C source, strategies, generated goals, automated and manual proofs, and goal checks.

Convex Hull Verification

A new verification development under QCP_examples/Applications_human/convex_hull covers Graham Scan, deduplicating Graham Scan, and Andrew's monotone chain. It includes point-array and safe-execution strategies; geometry, ordering, convexity, maximality, reversal, and monadic specification libraries; and the corresponding generated goals and proofs.

These examples also serve as realistic stress tests for the new strategy-divergence diagnostics.

Additional Improvements

Validation

The Windows v2.0.4 build was exercised against all 204 commands in run-example-windows.cmd with a 30-second per-command guard:

Additional regression checks passed for text and JSON divergence diagnostics, configurable strategy limits, structured error messages, and representative SLL, DLL, BST, and array examples.

Migration Notes

For detailed proof-porting guidance, see Version_Log/V2-0-4.md.


Happy verifying with QCP v2.0.4!