<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Application of the Method for Concurrent Programs Properties Proof to Real-World Industrial Software Systems</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Taras Panchenko</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Taras Shevchenko National University of Kyiv</institution>
          ,
          <addr-line>64/13, Volodymyrska st., Kyiv, 01601</addr-line>
          ,
          <country country="UA">Ukraine</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2016</year>
      </pub-date>
      <fpage>21</fpage>
      <lpage>24</lpage>
      <abstract>
        <p>Software correctness is an actual topic in many industries nowadays. Signi cant system properties should be checked in order to use these software safely. The properties proof task is applicable to previously developed systems also, if the property is new one or when the system is transferring to another runtime environment { for example, to multi-core processor. The method for software properties proof in interleaving concurrent environment with communication via shared memory was developed to solve the problem of simultaneous check the required property over the family of programs being run arbitrary times in parallel { instead of doing separate proofs for every number of program instances being run concurrently. Application of this method to real-world industrial tasks is demonstrated in this work.</p>
      </abstract>
      <kwd-group>
        <kwd>software correctness</kwd>
        <kwd>shared memory concurrency</kwd>
        <kwd>safety property</kwd>
        <kwd>interleaving concurrency</kwd>
        <kwd>formal methods Key Terms</kwd>
        <kwd>Characteristic</kwd>
        <kwd>Environment</kwd>
        <kwd>Process</kwd>
        <kwd>Research</kwd>
        <kwd>Development</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Software correctness problem (or programs' properties check &amp; proof) is
important and challenging in many industries and for di erent reasons [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. The problem
of software correctness has transformed over the time but still remains the
actual one. The huge variety of program system's properties needs to be proven
(or checked and warranted somehow) in order to use this software safely. First
of all, it concerns safety-critical systems, but also these questions are important
for many other software systems:
{ do software program behaves as expected? (software validation)
{ do software give us the results we need when it completes the work? (safety
properties veri cation)
{ is software system processing the request in a timely manner? (program
liveness veri cation)
      </p>
      <p>- 120</p>
    </sec>
    <sec id="sec-2">
      <title>There are three main approaches to solve these problems [2]: { testing, { model checking and { theorem proving.</title>
      <p>
        While testing techniques itself can't cover all the use cases, even behavioral,
they can't warrant the total safety of the system. Moreover, Dijkstra in [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] insists
on the main testing limitation { it can show an error, but it can't demonstrate
the absence of errors. The two other approaches mentioned above tries to do
that. But, the model checking has well-known state explosion problem [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] while
pure theorem proving is rather hard technique, even for professionals. One of
the advanced approaches address the problem is symbolic model checking which
incorporates the pros of both latter. Detailed comparative analysis can be found
in many sources, for example in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>Software correctness problem is actual in many cases and for di erent
industries:
{ when we deal with safety-critical (or life-critical) systems whose failure or
malfunction may result in death or serious injury to the people OR loss
or damage to the equipment or property OR environmental harm (aircraft,
space, nuclear industries etc.),
{ concerning any system especially important or mission-critical ones (
nancial, banking, real-time systems etc.) { to prove its correct behavior (or its
correct results of work) and other formal properties,
{ to check the properties of existing (already developed) systems in new
circumstances { to be sure if previously known properties keep true for the
system being migrated to another environment with changed
characteristics (for example, transferring the system from single-CPU environment to
multi-processor or multi-threading architecture).</p>
      <p>So, methods for program properties check and proof are required in wide
range of situations.
2
2.1</p>
      <sec id="sec-2-1">
        <title>The Task and the Method</title>
        <sec id="sec-2-1-1">
          <title>Problem Overview and Complexity</title>
          <p>
            Classical questions of the program safety (partial correctness) and liveness (total
correctness) are complicated by many contemporary programming techniques
like object-oriented programming (OOP), concurrency, Web Services, closures
and so on. For example, OOP actualizes type checking problem due to
dynamical but strong typing, signature problems due to polymorphism and inheritance
(plus virtual methods and dynamic linking) and visibility in the scope
problems (or accessibility in the scope, i.e. kind of security). Many of them can be
addressed to [
            <xref ref-type="bibr" rid="ref1">1</xref>
            ], where OOP is deeply investigated from the start and closely
integrated into the method. Web Services usage, for example, arouses questions
- 121
on accessibility, reliability and discoverability (including semantic speci cations
like RDF) etc. But we will concentrate on concurrency and its' challenges in this
work.
          </p>
          <p>Main troubles of concurrency are non-determinism and inter-process
communications complexity. The de nitive di erence between parallel and sequential
worlds is that the state of program (shared memory data or messages in
communication channels) can be changed between two consequent statements of one
of concurrently running processes by another one, being executed in
interleaving manner. In other words, the (global) state can be in uenced by side e ect
of another concurrent process, which is impossible behavior for pure sequential
programs.</p>
          <p>
            Concurrency as the ability to execute more than one operation somehow
at the same time can be formalized via the inter-process communication (IPC)
mechanism. There exist two main approaches for IPC: message passing and
shared memory. While the rst approach is investigated in details, for example,
in [
            <xref ref-type="bibr" rid="ref5">5</xref>
            ], the latter is rather less researched [
            <xref ref-type="bibr" rid="ref2">2</xref>
            ]. Moreover, the classical Hoare logic
for reasoning on programs [
            <xref ref-type="bibr" rid="ref6">6</xref>
            ] can't be directly applied to interleaving shared
memory concurrency because of possible side e ect of parallel programs to each
other [
            <xref ref-type="bibr" rid="ref7">7</xref>
            ].
2.2
          </p>
        </sec>
        <sec id="sec-2-1-2">
          <title>Interleaving Concurrency with Shared Memory</title>
          <p>Thus here we will concentrate on interleaving concurrency with shared memory
environment, which is present de facto in many cases (runtime environments)
in di erent industries and in various systems (hardware as well as software) all
over us:
{ hardware multi-processor and multi-core architectures (of course with shared
memory), primarily SMP-architectures (Symmetric Multi-Processing),
{ supercomputing, namely with UMA and NUMA (Uniform and Non-Uniform</p>
          <p>Memory Access) architectures,
{ multi-tasking Operating Systems,
{ software services and applications running in parallel on hardware with
shared memory (like UMA, NUMA),
{ servers (hardware as well as software ones, like a reactive system executing
request { response cycles):</p>
          <p>Web Server
Application Server
SQL Server (DataBase Management Systems as well as Data Warehouse
Systems)</p>
          <p>All samples mentioned above have common characteristics of environment:
{ interleaving concurrency { means that control can be passed to any other
concurrent pretender to CPU time at any time moment (also known as
'process context switch' system operation),
{ shared memory { is the mean for IPC, where each process can write the
values to and read the values from the so-called shared variables (at any
time moment) in order to communicate with each other,
{ it represents the most wide MIMD model (Multiple Instruction Multiple</p>
          <p>
            Data) in Flynn's taxonomy.
The formal model for interleaving concurrency with shared memory proposed
in [
            <xref ref-type="bibr" rid="ref11 ref8">8, 11</xref>
            ] is the special subclass of IPCL (Interleaving Parallel Compositional
Languages) [
            <xref ref-type="bibr" rid="ref8">8</xref>
            ]. Such programs will have the following form: P1k1 jjP2k2 jj:::jjPnkn
where Pj { are sequential programs running in parallel (in interleaving
concurrent mode) kj times, and jj { is the interleaving concurrency operation sign.
Proposed construction is an adequate model for program systems being executed
in interleaving concurrent runtime environment with shared memory [
            <xref ref-type="bibr" rid="ref2 ref8">8, 2</xref>
            ].
          </p>
          <p>
            We should notice also that proposed model follows the recommendations
("best practices") and considers warnings (avoidances) by C.A.R. Hoare [
            <xref ref-type="bibr" rid="ref5">5</xref>
            ]
about parallel execution operation (like fork), that, in general, multithreading is
an incredibly complex and error-prone technique, not to be recommended in any
but the smallest programs and, thus, concurrency can be a orded only at the
outermost (most global) level of a job, and its use on a small scale is discouraged.
The problem formulation and the method for program properties proof can be
found in [
            <xref ref-type="bibr" rid="ref2 ref8">8, 2</xref>
            ]. Two types of properties de ned there are:
1. Hoare-style: fP reCondition(S)gP rogramfP ostCondition(S)g
2. Invariant-style: Inv(S), which keeps true throughout all execution time
where P reCondition(S), P ostCondition(S) and Inv(S) are predicates over the
current state (S).
          </p>
          <p>The state S includes current "instruction pointers" (labels or marks) of each
sequential sub-program running in parallel as well as the data { shared and local
for every such sub-program. These two property types are the kinds of safety
properties, while the liveness properties ( rst of all { termination problem) are
out of our scope here because of its algorithmically undecidability in common
case.</p>
          <p>Here are some examples of such properties:
{ race condition analysis,
{ critical section condition,
{ "transactionality" (integrity, consistency) of the system,</p>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>Known Alternative Approaches Overview</title>
        <p>We should note that the right way which addresses software correctness problem
is formal speci cation combined with stepwise re nement from an abstract model
(speci cation) to the speci c one ( nal code) with veri cation of these steps. In
this case we obtain correct programs by construction. Testing techniques can
be complementary only to other, more precise or formal methods, because of
impossibility to test things totally. Formal methods can also be useful for proving
properties of already existing systems { for example, while being transferred to
another run-time environment with di erent characteristics or when we need to
be sure in some (probably new) properties of the system and we can't (or don't
want) replace current system (for some new system with these properties being
proven).</p>
        <p>Starting our consideration from famous Petri Nets regarding veri cation of
parallel programs, we should note that this formalism was developed for
concurrent processes behavior modelling and not for veri cation purposes. So, it
can not cope with state-based properties check and proof, and ts for reasoning
about ow-like properties only (data- ow or concurrent processes behavior).</p>
        <p>
          Although there is a broad range of approaches to handle this issue { most of
them have remarkable disadvantages in terms of using them on practice as they
are too complicated or too theorized. Moreover, some of them are not applicable
to cope with real tasks in general. For instance, without specifying the details,
original Owicki-Gries method [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] requires the quadratic number of veri cations
relating to the program operators count. While the extended version of the
rely-guarantee Owicki-Gries method [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] needs the implementation of additional
variables as well as non-evident formulating of rely- and guarantee- conditions
in order to tackle this task. In TLA [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] (Temporal Logic of Actions) Lamport
o ers to construct a model which is not much easier than the two previous ones.
Moreover, TLA is characterized with a big di erence between the program and
its proving formula. In such a way IPCL [
          <xref ref-type="bibr" rid="ref11 ref2 ref8">8, 2, 11</xref>
          ] might be one of the most
e cient solutions. While IPCL is up to solve the veri cation problem of the
parallel software, in fact, it describes the so-called serializability mechanism.
Though ultimately, we will work with sequential processes which steps will be
interrupted by parallel running programs in an unpredictable way.
        </p>
        <p>
          Many approaches have been adopted to deal with shared memory
concurrency, but majority of them have di erent disadvantages [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ]. One of the lacks is
that known methods can be applied to a xed program whilst we often have deal
with the family of the same xed structure program running arbitrary instances
of it in parallel. So do Web and SQL servers, which run any arbitrary number
of the same scripts (requests, queries) concurrently. So does operating system,
executing various count of the same services and applications at any given time
slice.
        </p>
        <p>Consequently, we rather need the method for reasoning over the family of
programs than the method which operates with a xed program when the
runtime environment is shared memory interleaving concurrency. In the latter case
we need to reason over many programs (each number of program copies running
concurrently) instead of parameterized form of one of them.
4</p>
      </sec>
      <sec id="sec-2-3">
        <title>The Method and Its Applications</title>
        <p>
          The method for program properties proof in compositional nominative languages
IPCL with interleaving concurrency and shared memory communication
mechanism is described in [
          <xref ref-type="bibr" rid="ref11 ref2 ref8">8, 2, 11</xref>
          ] in details.
        </p>
        <p>
          It operates over IPCL, which includes common compositions: ";",
"if-thenelse", "while-do", vector assignment operator ((a; b) := (c; d)) and the
interleaving concurrency "||", which has obvious structural operational (not pure
compositional) semantics [
          <xref ref-type="bibr" rid="ref11 ref2 ref8">8, 2, 11</xref>
          ]. Because of it, IPCL is similar to any common
universal (structural, imperative) programming language. Thus, every program
(from C, PHP, C#, Java, JavaScript, even SQL etc.) could be rewritten in IPCL
without substantial problems { to apply the method.
        </p>
        <p>
          Main stages of the method are the following [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]:
{ to label (to mark-up) the program in IPCL according to its syntax tree {
each particular operator should have a label (a mark),
{ to specify the notion of a state { the vector, which components include:
labels (marks) of every particular sequential sub-program of the whole
IPCL-program,
the single shared data of the whole program,
and local data for every particular sequential sub-program (if present),
{ to construct transition system (i.e. the model of the program execution, or
operational semantics), which x all possible transitions between states
(really, macro-transitions or transitions schema because of its countable
quantity) { this could be done algorithmically by the program syntax tree using
labels and states xed above [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ],
{ to x start and nal states of the transition system (of the program),
{ to formulate the required precondition and postcondition over start and nal
states respectively,
{ the main step is to formulate invariant of the system { it should incorporate
the program behavior as a whole, in a single predicate, and it could be
completed by human only for now,
{ to prove that
each of macrotransitions keeps invariant true,
precondition on starting states implies invariant,
invariant on nal states implies postcondition.
        </p>
        <p>We will not go into details of the method, but concentrate on examples of
the method applications.</p>
        <p>Here we note that by the years the method mentioned above was successfully
applied to prove some properties of the industrial software systems, which are
the banking systems mainly. Let us discuss those examples.</p>
        <p>Here we consider some of the method applications to the classical algorithms
and tasks (for demonstration purposes) as well as to the commercial (industrial)
software systems.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>First, we would like to mention some "classical" examples:</title>
      <p>
        { parallel addition to shared variable consistency [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ],
{ Peterson's Algorithm for mutual exclusion correctness proof [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
      </p>
      <p>
        In rst article it is proven that i := i + 1jji := i + 1 increases the value of i
by 2. The main result is that the proof is two times shorter that in any other
known formal techniques [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>
        Correctness of the well-known Peterson's Algorithm (for mutual exclusion)
is the subject of the latter paper. The fact that two concurrent processes can
not appear in their critical section at the same time is proved in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. The proof
again is a half of length of else known classical one (for example, in TLA).
      </p>
      <p>More of that, the more generous task was discussed there { because the
proof was made simultaneously over the family of each number of program run
concurrently in rst case, and it could be done in the second case.
4.2</p>
      <sec id="sec-3-1">
        <title>Presentation System</title>
        <p>Infosoft e-Detailing 1.0 is commercial presentation support system designed to
hold the almost synchronous online+o ine presentations with one lecturer
(manager) and one-or-more listeners (clients). The usage of this system basically lies
in switching slides on a manager's device which is almost immediately followed
by an automatic switching to the same slide on each of the clients' devices
connected to the current presentation session.</p>
        <p>The most important from the correct functioning point of view is to make
sure that every client will see the same slide that manager has switched to. Work
of the system consists of cycles, namely switching a slide on manager's device
and then switching a slide on all of clients' devices. The amount of such cycles is
unlimited, the only stopping criteria is that everyone has left their presentation
session. Typical cycle would look like this: manager sends to the server, and
clients are reading from it, the index of a current slide (currently using HTTP
+ AJAX + Long Poll technologies) { in such a way the asynchronous slide
replication is achieved on all the devices.</p>
        <p>
          In [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] the safety property proof of Infosoft e-Detailing 1.0 software system
using correctness proof methodology [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] in IPCL is presented. Operational
semantics of the system with interleaving concurrency was described by means of
transition system, program Invariant as well as Pre- and Post- conditions were
formulated in accordance with the methodology. Application of the method to
the real-world system and its usage simplicity were demonstrated in [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ].
        </p>
        <p>
          The detailed proof was given in [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ] also. Thus partial correctness of an
Infosoft e-Detailing 1.0 software system was proven.
4.3
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>Electronic Exchange</title>
        <p>
          In the case with Currency Stock Electronic Exchange for Joint-Stock Company
"State Oschadny Bank of Ukraine" compositional-nominative languages and the
method were used to formulate properties of the system (that each bid/ask o er
is presented to stock exchange participants and that buy/sell deal is closed only
once for each o er, with only one dealer, in despite of their concurrent work) and
then to prove it [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. We will not go into details here because of more interesting
next example.
Now let us consider the system for international remittances from Vigo
Remittance Corp. paying out developed for Joint-Stock Company "State Oschadny
Bank of Ukraine".
        </p>
        <p>
          In this case the fact that no money remittance can be paid out twice needs to
be proven [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. The task was stated, transitional system according to the method
was built for the model with simpli ed state (i.e. without local data), and the
program invariant was formulated and proved to keep true over the software
system at any given time. Conclusions about the convenience and adequacy of
method application to prove the correctness of parallel systems were made as
well as correctness property of the banking system for remittances payments was
proven, namely that each money transfer can be authorized to pay out only once
(due to authorization procedure) [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ].
        </p>
        <p>
          The simpli ed state [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] modi cation of the method is applicable when there
is no local data within processes. In this case the state itself as well as the
reasoning over the system can be signi cantly simpli ed [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ].
5
        </p>
        <sec id="sec-3-2-1">
          <title>Conclusions</title>
          <p>Application of the method for concurrent programs, communicating via shared
memory, properties proof to real-world industrial software was demonstrated in
this work.</p>
          <p>There are many questions left out of scope:
{ software tools for automatic support for reasoning over such families of
programs,
{ more deep research of the proposed methodology through more industry
samples (i.e. real-life software systems),
{ the absence of native support of OOP in IPCL and compositional languages
for now,
{ non-compositional nature of interleaving concurrency etc.</p>
          <p>But now we can a rm that the method developed is applicable and usable
to proof the properties of real industry software systems.</p>
          <p>
            Partial correctness of the software systems, namely Infosoft e-Detailing 1.0,
Currency Stock Electronic Exchange for Joint-Stock Company "State Oschadny
Bank of Ukraine" and the system for international money transfers from Vigo
Remittance Corp. paying out according to an initial problem statement has been
proven using the correctness proof methodology [
            <xref ref-type="bibr" rid="ref11 ref8">8, 11</xref>
            ] in an IPCL language.
Considering the di culties in the process of such proofs in parallel environments,
one can state:
{ correctness proof method in IPCL is well suited for the veri cation of parallel
programs or the software correctness proof in terms of safety properties;
{ the method allows shortening the proof at the expense of choosing an
adequate abstraction level [
            <xref ref-type="bibr" rid="ref19">19</xref>
            ] due to universality of a compositional nominative
approach [
            <xref ref-type="bibr" rid="ref19 ref20">19, 20</xref>
            ] and by xing the appropriate basic function set of semantic
algebra.
          </p>
          <p>
            Taking into account the exibility of the methodology, existence of
'simplied state' model for reasoning in some cases [
            <xref ref-type="bibr" rid="ref12 ref2">2, 12</xref>
            ], and universal nature of the
approach [
            <xref ref-type="bibr" rid="ref21">21</xref>
            ], it can be recommended for program properties proof
(particularly safety property or partial correctness) for wide range of industrial software
which is executed in interleaving concurrency environment with shared memory
interaction, primarily for server-side software of client-server complexes, because
of the method's usability and advances. The same conclusion was obtained in
[
            <xref ref-type="bibr" rid="ref14 ref15 ref17 ref22">14, 15, 17, 22</xref>
            ] also.
6
          </p>
        </sec>
        <sec id="sec-3-2-2">
          <title>Acknowledgments</title>
          <p>Firstly, I would like to acknowledge my scienti c mentors, Mykola S. Nikitchenko
and Volodymyr N. Red'ko for their time of long discussions and attention to all
my questions.</p>
          <p>I would also like to thank the anonymous reviewers, who provided important
comments and suggestions that improved this paper.</p>
          <p>But especially I would mention and thank my dear co-authors of referenced
works, namely Nataliia Polishchuk, Mykyta Kartavov, Yuliia Ostapovska and
Andrii Zhygallo. These results were obtained due to their huge work as well.</p>
        </sec>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. The RAISE Method Group.
          <source>The RAISE Development Method. BCS Practitioner Series. Prentice Hall</source>
          .
          <volume>493</volume>
          p. (
          <year>1995</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Panchenko</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <article-title>Compositional Methods for Software Systems Speci cation and Veri cation (PhD Thesis)</article-title>
          [in Ukrainian].
          <source>Kyiv</source>
          .
          <volume>177</volume>
          p. (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Dijkstra</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          <string-name>
            <surname>Why</surname>
          </string-name>
          <article-title>Correctness must be a Mathematical Concern. The Correctness Problem in Computer Science</article-title>
          . By Boyer,
          <string-name>
            <given-names>R.S.</given-names>
            ,
            <surname>Moore</surname>
          </string-name>
          ,
          <string-name>
            <surname>J.S.</surname>
          </string-name>
          , (eds.) London: Academic Press.
          <volume>1</volume>
          {
          <issue>8</issue>
          (
          <year>1981</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Clarke</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wing</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          et al.
          <article-title>Formal methods: state of the art and future directions</article-title>
          .
          <source>ACM Computing Surveys</source>
          . Vol.
          <volume>28</volume>
          , no.
          <issue>4</issue>
          . 626{
          <issue>643</issue>
          (
          <year>1996</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Hoare</surname>
            ,
            <given-names>C.A.R.</given-names>
          </string-name>
          <string-name>
            <surname>Communicating</surname>
          </string-name>
          <article-title>Sequential Processes</article-title>
          . Prentice Hall International.
          <volume>238</volume>
          p. (
          <year>1985</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Hoare</surname>
            ,
            <given-names>C.A.R.</given-names>
          </string-name>
          <article-title>An Axiomatic Basis for Computer Programming</article-title>
          .
          <source>Communications of the ACM</source>
          . Vol.
          <volume>12</volume>
          , no.
          <volume>10</volume>
          . 576{
          <issue>583</issue>
          (
          <year>1969</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Xu</surname>
            ,
            <given-names>Q.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>de Roever</surname>
          </string-name>
          , W.-P. and
          <string-name>
            <surname>He</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <article-title>The Rely-Guarantee Method for Verifying Shared Variable Concurrent Programs</article-title>
          .
          <source>Formal Aspects of Computing</source>
          . Vol.
          <volume>9</volume>
          , no.
          <issue>2</issue>
          . 149{
          <issue>174</issue>
          (
          <year>1997</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Panchenko</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <article-title>The Method for Program Properties Proof in Compositional Nominative Languages IPCL [in Ukrainian]</article-title>
          .
          <source>Problems of Programming. No. 1</source>
          . 3{
          <issue>16</issue>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Owicki</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Gries</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <article-title>An Axiomatic Proof Technique for Parallel Programs</article-title>
          .
          <source>Acta Informatica</source>
          . Vol.
          <volume>6</volume>
          , no.
          <issue>4</issue>
          . 319{
          <issue>340</issue>
          (
          <year>1976</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Lamport</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          <article-title>Veri cation and Speci cation of Concurrent Programs. A Decade of Concurrency</article-title>
          . deBakker, J., deRoever,
          <string-name>
            <given-names>W.</given-names>
            ,
            <surname>Rozenberg</surname>
          </string-name>
          ,
          <string-name>
            <surname>G</surname>
          </string-name>
          . (eds.). Berlin: SpringerVerlag. Vol.
          <volume>803</volume>
          . 347{
          <issue>374</issue>
          (
          <year>1993</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Panchenko</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <article-title>The Methodology for Program Properties Proof in Compositional Languages IPCL [in Ukrainian]</article-title>
          .
          <source>Proceedings of the International Conference "Theoretical and Applied Aspects of Program Systems Development" (TAAPSD</source>
          '
          <year>2004</year>
          ). Kyiv.
          <volume>62</volume>
          {
          <issue>67</issue>
          (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Panchenko</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <article-title>Parallel Addition to Shared Variable Correctness Proof in IPCL [in Ukrainian]</article-title>
          .
          <source>Bulletin of Taras Shevchenko National University of Kyiv. Series: Physical and Mathematical Sciences. No. 4</source>
          . 187{
          <issue>190</issue>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Zhygallo</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ostapovska</surname>
          </string-name>
          , Yu. and
          <string-name>
            <surname>Panchenko</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <article-title>Peterson's Algorithm for Mutual Exclusion Correctness Proof in IPCL</article-title>
          . Bulletin of Taras Shevchenko National University of Kyiv.
          <source>Series: Physical and Mathematical Sciences. No. 4</source>
          . 119{
          <issue>124</issue>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Polishchuk</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kartavov</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Panchenko</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <article-title>Safety Property Proof using Correctness Proof Methodology in IPCL</article-title>
          .
          <source>Proceedings of the 5th International Scienti c Conference "Theoretical and Applied Aspects of Cybernetics"</source>
          .
          <source>Kyiv: Bukrek</source>
          .
          <volume>37</volume>
          {
          <issue>44</issue>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Kartavov</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Panchenko</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Polishchuk</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          <article-title>Infosoft e-Detailing System Total Correctness Proof in IPCL [in Ukrainian]</article-title>
          .
          <source>Bulletin of Taras Shevchenko National University of Kyiv. Series: Physical and Mathematical Sciences. No. 3</source>
          . 80{
          <issue>83</issue>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Panchenko</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <article-title>Using the Formal Speci cations for Development of Electronic Stock Exchange of Oschadny Bank [in Ukrainian]</article-title>
          .
          <source>Problems of Programming. No. 1-2</source>
          . 161{
          <issue>167</issue>
          (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Ostapovska</surname>
          </string-name>
          , Yu.,
          <string-name>
            <surname>Panchenko</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Polishchuk</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Kartavov</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <article-title>Correctness Property Proof for the Banking System for Money Transfer Payments [in Ukrainian]</article-title>
          .
          <source>Problems of Programming. No. 2-3</source>
          . 119{
          <issue>132</issue>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Panchenko</surname>
          </string-name>
          , T. Simpli ed
          <article-title>State Model for Properties Proof Method in IPCL Languages and its Usage with Advances [in Ukrainian]</article-title>
          .
          <source>Proceedings of the International Scienti c Conference "Theoretical and Applied Aspects of Program Systems Development" (TAAPSD</source>
          '
          <year>2007</year>
          ).
          <volume>319</volume>
          {
          <issue>322</issue>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Nikitchenko</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          <article-title>A Composition Nominative Approach to Program Semantics</article-title>
          .
          <source>Technical Report</source>
          IT-TR:
          <fpage>1998</fpage>
          -
          <lpage>020</lpage>
          . Technical University of Denmark. 103 p. (
          <year>1998</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Redko</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          <article-title>Compositions of Programs and Composition Programming [in Russian]</article-title>
          .
          <source>Programming. No. 5</source>
          . 3{
          <issue>24</issue>
          (
          <year>1978</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Panchenko</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <article-title>Formalization of Parallelism Forms in IPCL [in Ukrainian]</article-title>
          .
          <source>Bulletin of Taras Shevchenko National University of Kyiv. Series: Physical and Mathematical Sciences. No. 3</source>
          . 152{
          <issue>157</issue>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Kartavov</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Panchenko</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Polishchuk</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          <article-title>Properties Proof Method in IPCL Application To Real-World System Correctness Proof</article-title>
          .
          <source>International Journal "Information Models and Analyses"</source>
          .
          <article-title>So a, Bulgaria, ITHEA</article-title>
          . Vol.
          <volume>4</volume>
          , No.
          <volume>2</volume>
          . 142{
          <issue>155</issue>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>