Nowadays there is an overall adoption of parallel programming, caused by the wide use of multicore processors, clusters and graphics processing units for various problems solving. Usually, programs are writ ten in imperative programming languages. The risk of making an error in a parallel program is higher in comparison to the sequential one, as parallel programs have their specific errors. Since the majority of system fails are the result of software malfunction, it is extremely important to develop reliable software. Formal verification could be used to increase software reliability. Formal verifi cation is a proof of programs correctness by finding the correspondence between the program and its spec ification, which describes the aim of the development [1] . The main advantage of formal verification is the capability to prove the absence of errors in the program, while testing only allows to detect errors. In con trast to other methods formal verification requires analytical treatment of source code properties, that is why the aim of formal verification could be achieved only by rigorous mathematical proof of program to specification correspondence. This requires formalization of objects used in verification. One method of formal verification was introduced by Hoare [2] . It utilises an axiomatic approach based on Hoare logic. Hoare logic is an extension of a formal system with certain formulas, containing the source code in the verified programming language, that are called Hoare triples. A Hoare triple is an annotated program, namely the source code and two formulas of the theory , that describe restrictions on input variables and conditions of the program execution result correctness. These formulas are named precondition and postcondition, respectively. A Hoare triple is usually of the form {ϕ}Prog{ψ}, where Prog is a program, ϕ is a precondition and ψ is a postcondition for Prog. The extended formal system is distinguished from by additional axioms and inference rules, that allow to deduce assertions of program properties, particularly of the program correctness. Then the program is correct if its Hoare triple is iden tically true. So the main idea of this approach is to derive a formula of formal system from the Hoare triple applying rules of inference and using axioms as premises, and then prove the truth of this formula within the formal system . There are certain achievements in practical application of such an approach for imperative program ming languages [3] . However formal verification complexity for parallel imperative programs increases rapidly for systems with both shared and distributed memory. In general, the main problem is the system resource conflicts. The examples are improper shared memory use for shared memory systems, and dead locks for distributed memory systems. An alternative to imperative programming is the functional data flow paradigm for parallel program ming that represents a program as a directed data flow graph. One implementation of the functional data flow paradigm is the Pifagor language [4] . The basis of this model is computation control based on the data 1 The article is published in the original. Abstract-The article is devoted to the methods of proving parallel programs correctness, that are based on the axiomatic approach. Formal system for functional data flow parallel programming lan guage Pifagor is described. On the basis of this system programs correctness could be proved. Formal Verification of Programs in the Functional
In REF , the verification of parallel programs correctness is based on the axiomatic approach.
Formal verification of programs in the functional data-flow parallel language
Automatic Control and Computer Sciences
Automatic Control and Computer Sciences
Computer Science