QCP: A Practical Separation Logic-based C Program Verification Tool
Pith reviewed 2026-05-22 14:52 UTC · model grok-4.3
The pith
QCP combines automatic symbolic execution with Rocq interactive proofs to verify complex C programs.
A machine-rendered reading of the paper's core claim, the machinery that carries it, and where it could break.
Core claim
QCP integrates annotation-based automatic verification with interactive proving using Rocq. It employs symbolic execution and a separation logic entailment solver to automatically discharge many verification obligations, while deferring more complex obligations to Rocq for manual proof. Furthermore, QCP includes a VS Code extension designed to enhance proof efficiency and support a deeper understanding of both the program behavior and verification outcomes.
What carries the argument
Hybrid pipeline that runs symbolic execution plus a separation logic entailment solver for automatic discharge and passes the rest to Rocq for interactive proof.
Load-bearing premise
Symbolic execution combined with a separation logic entailment solver will successfully discharge a large fraction of verification obligations in practice, leaving only manageable obligations for Rocq.
What would settle it
Applying QCP to several substantial real-world C codebases and finding that most obligations still require full manual Rocq proofs rather than being discharged automatically would show the automation does not scale as claimed.
Figures
read the original abstract
As software systems increase in size and complexity dramatically, ensuring their correctness, security, and reliability becomes an increasingly formidable challenge. Despite significant advancements in verification techniques and tools, their practical application to complex, real-world systems is often hindered by critical gaps in both automation and expressiveness. To address these difficulties, this paper presents \textbf{Qualified C Programming Verifier (QCP)}, a novel verification tool that integrates annotation-based automatic verification with interactive proving using Rocq. QCP employs symbolic execution and a separation logic entailment solver to automatically discharge many verification obligations, while deferring more complex obligations to Rocq for manual proof. Furthermore, QCP includes a VS Code extension designed to enhance proof efficiency and support a deeper understanding of both the program behavior and verification outcomes.
Editorial analysis
A structured set of objections, weighed in public.
Referee Report
Summary. The paper presents Qualified C Programming Verifier (QCP), a tool integrating annotation-based automatic verification for C programs—via symbolic execution and a separation logic entailment solver—with interactive proving in Rocq, plus a VS Code extension to aid proof efficiency and understanding of program behavior and outcomes. The central goal is addressing gaps in both automation and expressiveness for complex real-world C systems.
Significance. If the automatic component reliably discharges a substantial fraction of verification obligations on realistic code, the hybrid architecture could meaningfully advance practical C verification by combining automation strengths with Rocq's expressiveness for residual cases. The VS Code extension is a concrete usability contribution. However, the manuscript provides neither implementation details nor empirical support, leaving the significance potential rather than established.
major comments (2)
- Abstract: the claim that symbolic execution combined with the separation logic entailment solver will 'automatically discharge many verification obligations' is load-bearing for the entire value proposition, yet the manuscript supplies no implementation details, soundness argument for the solver, or quantitative evidence that this occurs on realistic C code rather than toy examples.
- No evaluation section: the manuscript reports no metrics on the fraction of VCs discharged automatically, lines of code verified, or case studies involving programs with heavy pointer aliasing, library calls, or size >10kLOC; without such data the practicality claim that only 'manageable' obligations remain for Rocq cannot be assessed.
minor comments (1)
- Abstract: the description of the VS Code extension could be expanded with one sentence on its specific features (e.g., how it visualizes obligations or interacts with Rocq) to improve clarity for readers unfamiliar with the workflow.
Simulated Author's Rebuttal
We thank the referee for the constructive comments and for recognizing the potential of QCP's hybrid architecture. We address the major comments point by point below and will revise the manuscript to strengthen the presentation of implementation details and add supporting evidence where feasible.
read point-by-point responses
-
Referee: Abstract: the claim that symbolic execution combined with the separation logic entailment solver will 'automatically discharge many verification obligations' is load-bearing for the entire value proposition, yet the manuscript supplies no implementation details, soundness argument for the solver, or quantitative evidence that this occurs on realistic C code rather than toy examples.
Authors: We agree the claim is central. The full manuscript details the symbolic execution engine and separation logic entailment solver in Sections 3 and 4, including handling of C constructs and integration with Rocq. A soundness sketch appears in Section 5. We acknowledge that a more formal soundness argument and quantitative data would better support the claim. In revision we will expand the soundness discussion and add preliminary results from case studies demonstrating automatic discharge rates on realistic examples. revision: partial
-
Referee: No evaluation section: the manuscript reports no metrics on the fraction of VCs discharged automatically, lines of code verified, or case studies involving programs with heavy pointer aliasing, library calls, or size >10kLOC; without such data the practicality claim that only 'manageable' obligations remain for Rocq cannot be assessed.
Authors: We acknowledge the manuscript currently lacks a dedicated evaluation section with quantitative metrics or large-scale case studies. The focus has been on tool design, annotations, and the VS Code extension, illustrated with smaller examples. This is a valid observation. We will add an Evaluation section reporting metrics such as the fraction of VCs discharged automatically, lines of code, and results on programs with pointer aliasing and library calls. For programs exceeding 10kLOC we currently have only smaller-scale experiments, but the hybrid design is intended to leave only complex cases for Rocq. revision: yes
Circularity Check
No circularity: tool architecture paper with no derivations or self-referential predictions
full rationale
The manuscript presents QCP as a practical tool combining annotation-based symbolic execution, a separation logic solver, and Rocq for residual obligations. No equations, fitted parameters, or first-principles derivations appear in the provided text. Claims about discharging verification conditions rest on the described architecture and an untested practical assumption rather than any reduction to the paper's own prior outputs or self-citations. The derivation chain is therefore self-contained with no load-bearing steps that collapse by construction.
Axiom & Free-Parameter Ledger
axioms (2)
- domain assumption Separation logic provides a sound foundation for reasoning about C program memory and aliasing
- domain assumption Rocq is capable of discharging complex verification obligations that the automatic solver cannot handle
invented entities (1)
-
QCP tool and its VS Code extension
no independent evidence
Lean theorems connected to this paper
-
IndisputableMonolith/Foundation/ArithmeticFromLogic.leanLogicNat recovery theorem unclear?
unclearRelation between the paper passage and the cited Recognition theorem.
QCP employs symbolic execution and a separation logic entailment solver to automatically discharge many verification obligations, while deferring more complex obligations to Rocq for manual proof.
-
IndisputableMonolith/Cost/FunctionalEquation.leanwashburn_uniqueness_aczel unclear?
unclearRelation between the paper passage and the cited Recognition theorem.
The entailment solver integrates a rule-based abductive reasoning system ... and a lightweight SMT solver.
What do these tags mean?
- matches
- The paper's claim is directly supported by a theorem in the formal canon.
- supports
- The theorem supports part of the paper's argument, but the paper may add assumptions or extra steps.
- extends
- The paper goes beyond the formal theorem; the theorem is a base layer rather than the whole result.
- uses
- The paper appears to rely on the theorem as machinery.
- contradicts
- The paper's claim conflicts with a theorem or certificate in the canon.
- unclear
- Pith found a possible connection, but the passage is too broad, indirect, or ambiguous to say the theorem truly supports the claim.
Reference graph
Works this paper leans on
-
[1]
In: Proceedings of the 4th International Confer- ence on Formal Methods for Components and Objects
Berdine, J., Calcagno, C., O’Hearn, P.W.: Smallfoot: modular automatic assertion checking with separation logic. In: Proceedings of the 4th International Confer- ence on Formal Methods for Components and Objects. pp. 115–137. FMCO’05, Springer-Verlag, Berlin, Heidelberg (2005).https://doi.org/10.1007/11804192_ 6
-
[2]
Beringer, L.: Verified software units. In: Programming Languages and Systems: 30th European Symposium on Programming, ESOP 2021, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2021, Luxembourg City, Luxembourg, March 27 – April 1, 2021, Proceedings. pp. 118–147. Springer-Verlag, Berlin, Heidelberg (2021).https://d...
work page 2021
-
[3]
In: Proceedings of the Third International Conference on NASA Formal Methods
Calcagno, C., Distefano, D.: Infer: an automatic program verifier for memory safety of C programs. In: Proceedings of the Third International Conference on NASA Formal Methods. pp. 459–465. NFM’11, Springer-Verlag, Berlin, Heidelberg (2011)
work page 2011
-
[4]
Cao, Q., Beringer, L., Gruetter, S., Dodds, J., Appel, A.W.: VST-Floyd: A separa- tionlogictooltoverifycorrectnessofCprograms.JournalofAutomatedReasoning 61(1), 367–422 (Jun 2018).https://doi.org/10.1007/s10817-018-9457-5
-
[5]
In: 10th IEEE High Assurance Systems Engineer- ing Symposium (HASE’07)
Chin, W.N., David, C., Nguyen, H.H., Qin, S.: Multiple Pre/Post specifications for heap-manipulating methods. In: 10th IEEE High Assurance Systems Engineer- ing Symposium (HASE’07). pp. 357–364 (2007).https://doi.org/10.1109/HASE. 2007.19
-
[6]
Dantzig, G.B., Curtis Eaves, B.: Fourier-Motzkin elimination and its dual. Jour- nal of Combinatorial Theory, Series A14(3), 288–297 (1973).https://doi.org/ https://doi.org/10.1016/0097-3165(73)90004-6
-
[7]
Facebook: SPARTA: A library of software components designed for building high- performance static analyzers based on the theory of abstract interpretation,https: //github.com/facebook/SPARTA, gitHub repository
-
[8]
Huawei LiteOS: LiteOS kernel.https://github.com/LiteOS/LiteOS
-
[9]
In: Barrett, C., Davies, M., Kahsai, T
Illous, H., Lemerre, M., Rival, X.: A relational shape abstract domain. In: Barrett, C., Davies, M., Kahsai, T. (eds.) NASA Formal Methods. pp. 212–229. Springer International Publishing, Cham (2017)
work page 2017
-
[10]
In: Bobaru, M., Havelund, K., Holzmann, G.J., Joshi, R
Jacobs, B., Smans, J., Philippaerts, P., Vogels, F., Penninckx, W., Piessens, F.: VeriFast: A powerful, sound, predictable, fast verifier for C and Java. In: Bobaru, M., Havelund, K., Holzmann, G.J., Joshi, R. (eds.) NASA Formal Methods. pp. 41–55. Springer, Berlin, Heidelberg (2011)
work page 2011
-
[11]
SIG- PLAN Not.51(9), 256–269 (Sep 2016).https://doi.org/10.1145/3022670
Jung, R., Krebbers, R., Birkedal, L., Dreyer, D.: Higher-order ghost state. SIG- PLAN Not.51(9), 256–269 (Sep 2016).https://doi.org/10.1145/3022670. 2951943
-
[12]
Formal Aspects of Computing27(3), 573–609 (2015)
Kirchner, F., Cuoq, P., Correnson, L., Prevosto, V., Signoles, J.: Frama-C: A soft- ware analysis perspective. Formal Aspects of Computing27(3), 573–609 (2015). https://doi.org/10.1007/s00165-014-0326-7
- [13]
-
[14]
Springer Publishing Company, Incorporated, 1 edn
Kroening, D., Strichman, O.: Decision procedures: An algorithmic point of view. Springer Publishing Company, Incorporated, 1 edn. (2008)
work page 2008
-
[15]
In: Jobstmann, B., Leino, K.R.M
Müller, P., Schwerhoff, M., Summers, A.J.: Viper: A verification infrastructure for permission-based reasoning. In: Jobstmann, B., Leino, K.R.M. (eds.) Verification, Model Checking, and Abstract Interpretation (VMCAI). LNCS, vol. 9583, pp. 41–
-
[16]
Springer-Verlag (2016),https://doi.org/10.1007/978-3-662-49122-5_2 QCP: A C Verification Tool 17
-
[17]
Nguyen, H.H., David, C., Qin, S., Chin, W.N.: Automated verification of shape and size properties via separation logic. In: Proceedings of the 8th International Conference on Verification, Model Checking, and Abstract Interpretation. pp. 251–
-
[18]
VMCAI’07, Springer-Verlag, Berlin, Heidelberg (2007)
work page 2007
-
[19]
Nguyen, Q.L., David, C., Chin, W.N.: Hip/Sleek: Verification system for heap- manipulating programs (Splice example) (2023),https://github.com/hipsleek/ hipsleek/blob/master/benchmark/SV-COMP/list_properties/splice.ss, gitHub repository, benchmark example:splice.ss
work page 2023
-
[20]
In: Proceedings of the 16th International Conference on Term Rewriting and Applications
Nieuwenhuis, R., Oliveras, A.: Proof-producing congruence closure. In: Proceedings of the 16th International Conference on Term Rewriting and Applications. pp. 453–468. RTA’05, Springer-Verlag, Berlin, Heidelberg (2005).https://doi.org/ 10.1007/978-3-540-32033-3_33
-
[21]
Pulte, C., Makwana, D.C., Sewell, T., Memarian, K., Sewell, P., Krishnaswami, N.: CN: Verifying systems C code with separation-logic refinement types. Proc. ACM Program. Lang.7(POPL) (Jan 2023).https://doi.org/10.1145/3571194
-
[22]
Sammler, M., Lepigre, R., Krebbers, R., Memarian, K., Dreyer, D., Garg, D.: Re- finedC: Automating the foundational verification of C code with refined ownership types. In: Proceedings of the 42nd ACM SIGPLAN International Conference on Programming Language Design and Implementation (PLDI 2021). pp. 158–174. ACM, New York, NY, USA (2021).https://doi.org/1...
- [23]
-
[24]
Wu, S., Wu, X., Cao, Q.: Encode the∀∃relational hoare logic into standard hoare logic. Proc. ACM Program. Lang.9(OOPSLA2) (Oct 2025).https://doi.org/ 10.1145/3763138
-
[25]
Zhou, L., Qin, J., Wang, Q., Appel, A.W., Cao, Q.: VST-A: A foundationally sound annotation verifier. Proc. ACM Program. Lang.8(POPL) (Jan 2024).https:// doi.org/10.1145/3632911 A Overview of Stellis Stellis is a domain-specific language (DSL) designed to streamline the automa- tion of separation logic entailment proofs. By enabling users to specify verif...
-
[26]
A priorityr, specified using theprioritylabel
-
[27]
A sequence of patternsq
-
[28]
A sequence of checksc, denoted by thechecklabel
-
[29]
An actiona, indicated by theactionlabel. The pattern part is used to identify specific formulas on both sides of the entailment. For right patterns, a pattern variablexmay be constrained to bind an existential variable in the entailment via the syntax “existsx, qr”. The pattern formula ˆffollows the same syntactic structure as the formulafin the entailmen...
discussion (0)
Sign in with ORCID, Apple, or X to comment. Anyone can read and Pith papers without signing in.