A Formalization of the C99 Standard in HOL, Isabelle and Coq

  • Robbert Krebbers
  • Freek Wiedijk
Part of the Lecture Notes in Computer Science book series (LNCS, volume 6824)


We recently started the Formalin project to create a formal version of the C99 standard for the C programming language. We are writing three matching formalizations for the interactive theorem provers HOL4, Isabelle/HOL and Coq, that all closely follow the existing C99 standard text. The project runs from 2011 to 2015, and involves a full time PhD student, a half time researcher and several scientific advisors.

The project differs from existing work in that our aim is to formalize the full C99 standard. This means that we treat the C preprocessor, the C standard library, floating point arithmetic, and ‘dirty’ C features like signal handling and volatile variables. Importantly, this means we also treat embedded C programs without explicit input/output.


Proof Assistant Embed Software Point Arithmetic Float Point Arithmetic Standard Library 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Bessey, A., et al.: A few billion lines of code later: using static analysis to find bugs in the real world. Communications of the ACM 53(2), 66–75 (2010)CrossRefGoogle Scholar
  2. 2.
    Blazy, S., Leroy, X.: Mechanized semantics for the Clight subset of the C language. Journal of Automated Reasoning 43(3), 263–288 (2009)MathSciNetCrossRefzbMATHGoogle Scholar
  3. 3.
    Cohen, E., Dahlweid, M., Hillebrand, M., Leinenbach, D., Moskal, M., Santen, T., Schulte, W., Tobies, S.: VCC: A Practical System for Verifying Concurrent C. In: Berghofer, S., Nipkow, T., Urban, C., Wenzel, M. (eds.) TPHOLs 2009. LNCS, vol. 5674, pp. 23–42. Springer, Heidelberg (2009)CrossRefGoogle Scholar
  4. 4.
    Coq Development Team. The Coq Proof Assistant Reference Manual (2010)Google Scholar
  5. 5.
    International Organization for Standardization. ISO/IEC 9899: Programming languages – C. ISO Working Group 14 (1999), Draft standard WG14/N1256, the combined C99 + TC1 + TC2 + TC3 (September 7, 2007)Google Scholar
  6. 6.
    Foundations Group of the ICIS. Research/MathWiki,
  7. 7.
    Gordon, M., Melham, T. (eds.): Introduction to HOL. Cambridge University Press, Cambridge (1993)Google Scholar
  8. 8.
    Kernighan, B.W., Ritchie, D.M.: The C Programming Language, 2nd edn. Prentice Hall, Englewood Cliffs (1988)zbMATHGoogle Scholar
  9. 9. Programming Language Popularity,
  10. 10.
    Moy, Y., Marché, C.: Jessie Plugin Tutorial, Beryllium version. INRIA (2009)Google Scholar
  11. 11.
    Nipkow, T., Paulson, L., Wenzel, M. (eds.): Isabelle/HOL — A Proof Assistant for Higher-Order Logic. LNCS, vol. 2283. Springer, Heidelberg (2002)zbMATHGoogle Scholar
  12. 12.
    Sewell, P., et al.: Ott: Effective tool support for the working semanticist. Journal of Functional Programming 20(1), 70–122 (2010)CrossRefzbMATHGoogle Scholar
  13. 13.
    TIOBE Software. TIOBE Programming Community index,
  14. 14.
    Wiedijk, F.: Formalizing the C99 standard in HOL, Isabelle and Coq (2010),

Copyright information

© Springer-Verlag Berlin Heidelberg 2011

Authors and Affiliations

  • Robbert Krebbers
    • 1
  • Freek Wiedijk
    • 1
  1. 1.Institute for Computing and Information SciencesRadboud University NijmegenNijmegenThe Netherlands

Personalised recommendations