🤖 AI Summary
This work addresses the challenge of formal verification for Reflex programs in industrial-scale control systems, where the generation of an excessive number of verification conditions often renders manual analysis impractical. To overcome this limitation, the authors propose a hybrid verification strategy that integrates a structured requirement annotation language with automated invariant inference based on program structure, coupled with an SMT solver to automatically discharge a substantial subset of verification conditions. By leveraging this synergistic approach, the method significantly reduces the number of verification tasks requiring human intervention, thereby enhancing the automation, feasibility, and overall efficiency of formal verification for large-scale process control systems.
📝 Abstract
Process-Oriented Programming is a software development approach that emphasizes the management of control systems through abstractions of processes and their states, enabling these systems to be described in terms of real physical processes. This native description of control is particularly important for industrial systems consisting of hundreds or thousands of processes. For such systems, safety is critical. To ensure the reliability and safety of these systems, formal verification methods must be applied. One such method is deductive verification, which involves formalizing programs and their requirements as logical formulas, known as verification conditions. Proving these conditions confirms that the program meets its requirements. The automatic generation of verification conditions is performed by a specialized software tool called a verification condition generator. We previously proposed a verification condition generator for the Reflex language. However, it generates too many verification conditions, making their manual proof impossible. This paper proposes modifications to the verification condition generator aimed at automating the proof of some of these conditions. These modifications include introducing an annotation language to describe requirements in a structured form, generating invariants based on the program structure, and using SMT solvers for the preliminary attempt to solve the verification conditions.