For years, Integrated Development Environments have demonstrated their usefulness in order to ease the development of software. High-level security or safety systems require proofs of compliance to standards, based on analyses such as code review and, increasingly nowadays, formal proofs of conformance to specifications. This implies mixing computational and logical aspects all along the development, which naturally raises the need for a notion of Formal IDE. This paper examines the FoCaLiZe environment and explores the implementation issues raised by the decision to provide a single language to express specification properties, source code and machine-checked proofs while allowing incremental development and code reusability. Such features create strong dependencies between functions, properties and proofs, and impose an particular compilation scheme, which is described here. The compilation results are runnable OCaml code and a checkable Coq term. All these points are illustrated through a running example.
[1]
Thomas Johnsson,et al.
Lambda Lifting: Treansforming Programs to Recursive Equations
,
1985,
FPCA.
[2]
François Pessaux,et al.
Development of a Generic Voter under FoCal
,
2009,
TAP@TOOLS.
[3]
Virgile Prevosto,et al.
Conception et implantation du langage FoC pour le développement de logiciels certifiés. (Design and implementation of the FoC language for developping certified software)
,
2003
.
[4]
Thérèse Hardin,et al.
On the way to certify Computer Algebra Systems
,
1999,
Calculemus.
[5]
Damien Doligez,et al.
Algorithms and Proofs Inheritance in the FOC Language
,
2003,
Journal of Automated Reasoning.
[6]
François Pessaux,et al.
Development Life-cycle of Critical Software Under FoCaL
,
2009,
TTSS.
[7]
Virgile Prevosto,et al.
Making proofs in a hierarchy of mathematical structures
,
2003
.
[8]
Damien Doligez,et al.
Algebraic Structures and Dependent Records
,
2002,
TPHOLs.