<!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>On the Sequence Rule for the Floyd-Hoare Logic with Partial Pre- and Post-Conditions</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Ievgen Ivanov</string-name>
          <email>ivanov.eugen@gmail.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Mykola Nikitchenko</string-name>
          <email>nikitchenko@unicyb.kiev.ua</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Taras Shevchenko National University of Kyiv 64/13</institution>
          ,
          <addr-line>Volodymyrska Street, 01601 Kyiv</addr-line>
          ,
          <country country="UA">Ukraine</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Classical Floyd-Hoare logic is valid when total pre- and postconditions are considered. In the case of partial conditions (predicates) the logic becomes invalid. This situation may be corrected by introducing additional constraints for the rules of the logic. But such constraints, especially for the sequence and while rules, are rather complicated. In this paper we propose a new simpler sequence rule formulated in an extended program algebra. The same considerations also allow to reformulate the while rule. The obtained results can be useful for software verification.</p>
      </abstract>
      <kwd-group>
        <kwd />
        <kwd>Formal methods</kwd>
        <kwd>software verification</kwd>
        <kwd>Floyd-Hoare logic</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        The classical Floyd-Hoare logic [
        <xref ref-type="bibr" rid="ref1 ref2 ref3">1–3</xref>
        ] is a useful tool for proving partial
correctness of sequential programs. It is based on properties of Floyd-Hoare triples
(assersions) of the form {p}f {q} which consists of pre- and post-conditions p,
q (predicates) and a program f . This assersion is treated in the following way:
when the program’s input data d satisfies the pre-condition ( q(d) is true), and
the program terminates on d, the program’s output (the value f (d)) satisfies the
post-condition (q(d) is true).
      </p>
      <p>Although in the classical Floyd-Hoare logic it is assumed that program may
not terminate and its output may be undefined on a particular input d (f (d) is
undefined), it is also assumed that the pre- and post-conditions p, q are predicates
which are defined on all possible data , i.e. that they are total predicates.</p>
      <p>Partiality of these predicates can arise naturally, if they are expressed using
operations which can cause errors, nontermination, or non-well-defined behavior.
For example, one may want to consider the Floyd-Hoare triple</p>
      <p>
        {true} a[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]:=0 {a[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]=0}
where a[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]:=0 denotes the operation of assignment of the value 0 to the 1-st
element of the array (or a more sophisticated key-value map) a, and a[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]=0 is a
predicate stating that the 1-st element of a is zero. Logically, it makes sense to
consider the latter predicate (the truth value of which depends on the content
of a) as partial and assume that it is defined only when a has an element with
index/key 1 (e.g. it is undefined, when a has no content). Note that depending on
the rules of the programming language, the assignment operation may be always
well-defined (e.g. if the assignment a[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]:=0 automatically allocates the space for
the new value, if it is not allocated), but the post-condition predicate may be
formally partial, because extraction from a is not always defined in the sense that
it causes an error or other types of abnormal behavior. In particular, a situation
of this kind occurs in Matlab [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] and Octave [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] languages for element insertion
and extraction operations for vectors (these languages and the corresponding
environments are widely used in scientific computing).
      </p>
      <p>
        In the literature [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] one finds discussions of the ways of emulating partial
predicates and functions in software specifications using total predicates and/or
functions, however, almost all approaches which try to avoid partiality have some
drawbacks which are described in [
        <xref ref-type="bibr" rid="ref6 ref7 ref8">7, 6, 8</xref>
        ].
      </p>
      <p>
        To deal with this issue in the previous works [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ] extensions of the classical
Floyd-Hoare logic which allowed one to reason about partial correctness of
sequential programs using Floyd-Hoare triples consisting of both partial programs
and partial pre- and post-conditions were investigated.
      </p>
      <p>Here a Floyd-Hoare triple {p}f {q} means that when the program’s input data
d satisfies the pre-condition ( q(d) is defined and true), and the program
terminates on d, and the post-condition is defined on the program’s output (the value
q(f (d))), then the program’s output satisfies the post-condition ( q(f (d)) is true).
We call this interpretation of a triple with partial pre- and post-conditions a weak
Floyd-Hoare triple (the reason is that it does not require the post-condition to
be defined, if the pre-condition is defined; one alternative is to require that the
post-condition is defined whenever the pre-condition is defined which we call the
strong Floyd-Hoare triple, but which we do not consider in this paper).</p>
      <p>
        An important fact is that the classical inference system for the Floyd-Hoare
logic for the language WHILE [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] is not sound in the presence of partial
preand post-conditions [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. One reason of this is unsoundness of the sequence rule
when p, q, r are partial predicates:
      </p>
      <p>R SEQ
{p} f {q}, {q} g {r}
where f • g denotes the sequential composition of programs f and g (i.e. g is
runs after f on the result of f ).</p>
      <p>This can be explained on the following simple example in Octave syntax.
Suppose that n denotes an integer-valued variable. The expression zeros(n,1)
evaluates to a n × 1 vector of zeros. If the variable a contains a vector, the
expression length(a) evaluates to the length of a. The i-th (i=1,2,...) component
can be accessed using the expression a(i) which raises an error, if the value of i
is not a valid index, e.g. if the length of a is less than the value of i. Assignment
is denoted as =, equality test is denoted as ==, and comparisons are denoted as
&gt;=, &gt;. Then we can assume that the following are valid assertions (in the sense
of weak Floyd-Hoare triples):
{a(1)==0} m=length(a) {m&gt;0}</p>
      <p>We assume that in the first triple the post-condition is undefined, if the length
of a is zero (a is empty), which happens if n is zero. However,</p>
      <p>{n&gt;=0} a=zeros(n,1); m=length(a) {m&gt;0}
is not a valid assertion (in sense of weak Floyd-Hoare triples), since if n is zero,
then a is a zero-length vector (is empty) and m is zero.</p>
      <p>
        Because of unsoundness of some rules of the classical inference system in
the presence of partial predicates, in [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] a new inference system for an extended
Floyd-Hoare logic with partial pre-and post-conditions for a similar language was
proposed. Besides a few other modifications, in this system the regular sequence
rule was replaced with the following constrained sequence rule:
      </p>
      <p>R SEQ’ {p} f {q}, {q} g {r} , p |= P C(f • g, r)</p>
      <p>
        {p} f • g {r}
where
– f • g denotes the function d 7→ g(f (d)) which is the result of sequential
composition of f and g;
– p |= q means that each interpretation of the formula ¬p ∨ q (p → q) never
takes a false value (i.e. it is always either true or undefined);
– P C is the Predicate transformer composition [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] such that P C(f, q) is a
partial predicate r such that for any data d, r(d) = q(f (d)), if f (d) (i.e.
program value) and q(f (d)) (i.e. the value of the predicate q on the result
of f on data d) are defined, and r(d) is undefined otherwise (i.e. if f (d) or
q(f (d)) are undefined).
      </p>
      <p>The presence of a complicated constraint, however, makes application of this
rule dificult in all but the most trivial cases.</p>
      <p>In this paper we propose an alternative unconstrained sequence rule for
Floyd-Hoare logic with partial predicates based on extended program algebra
which can be useful for software verification.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Notation</title>
      <p>The symbol →˜ will denote partial functions and → will denote total functions
(e.g. f : A →˜B means that f is a partial function on a set A with values in a set
B; f : A → B means that f is a total function from A to B). We will use the
symbol −n→ for partial functions with finite graph. For f : D→˜ D0:
– f (d) ↓ denotes that f is defined on d ∈ D;
– f (d) ↓= d0 denotes that f is defined on d ∈ D with a value d0 ∈ D0;
– f (d) ↑ denotes that f is undefined on d ∈ D;
– dom(f ) = {d ∈ D | f (d) ↓} is the domain of a function (note that there are
diferent definitions of the domain of a partial function in diferent branches
of mathematics); we use the convention from recursion theory).</p>
      <p>The notation f1(d1) ∼= f2(d2) means the strong equality, i.e. that f1(d1) ↓ if
and only if f2(d2) ↓, and if f1(d1) ↓, then f1(d1) = f2(d2).</p>
    </sec>
    <sec id="sec-3">
      <title>Constructing New Sequence Rule</title>
      <p>
        Let D be a non-empty set. We will consider its elements mathematical models
of computer data (which is used as input or output for programs of interest).
An example of such models can be nominative sets [
        <xref ref-type="bibr" rid="ref12 ref13">12, 13</xref>
        ] (which are partial
assignments of values to variable names) or nominative data [
        <xref ref-type="bibr" rid="ref12 ref13 ref14 ref15">12–15</xref>
        ] (which
can be thought of as hierarchically constructed, nested nominative sets). The
latter ones can be used to represent many forms of data commonly used in
programming (e.g. multidimensional arrays, lists, trees, etc.) [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>We will consider partial functions from D to D (denoted as D→˜ D) as
semantic models of sequential programs operating on such data.</p>
      <p>Let f, g : D →˜D. Denote by f • g a function D→˜ D such that
– (f • g)(d) = g(f (d)), if g(f (d)) is defined;
– (f • g)(d) is undefined, otherwise.</p>
      <p>We will call f • g the sequential composition of f and g.</p>
      <p>Denote by T, F the logical values true and false.</p>
      <p>We call partial functions from an arbitrary set X to Bool = {T, F } partial
predicates on X.</p>
      <p>Let p, q : D →˜Bool.</p>
      <p>Denote by p ∨ q the partial predicate D→˜ Bool such that
– (p ∨ q)(d) = T , if p(d) ↓= T (i.e. p(d) is defined and has the value T ), or if
q(d) ↓= T ;
– (p ∨ q)(d) = F , if p(d) ↓= F and q(d) ↓= F ;
– (p ∨ q)(d) is undefined, otherwise.</p>
      <p>Denote by p ∧ q the partial predicate D→˜ Bool such that
– (p ∧ q)(d) = T , if p(d) ↓= T and q(d) ↓= T ;
– (p ∧ q)(d) = F , if p(d) ↓= F or q(d) ↓= F ;
– (p ∧ q)(d) is undefined, otherwise.</p>
      <sec id="sec-3-1">
        <title>Denote by ¬p the partial predicate D→˜ Bool such that</title>
        <p>– (¬p)(d) = T , if p(d) ↓= F ;
– (¬p)(d) = F , if p(d) ↓= T ;
– (¬p)(d) is undefined, if p(d) is undefined.</p>
        <p>
          Operations (compositions) ∨, ∧, and¬ are respectively disjunction,
conjunction, and negation operations on partial predicates. These operations are defined
according to the truth tables of Kleene’s strong logic of indeterminacy [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. The
set of all partial predicates on D together with these operations forms a Kleene
algebra (a De Morgan algebra which satisfies the normality axiom) [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ].
        </p>
        <p>Denote by ∼ p the partial predicate D→˜ Bool such that
– (∼ p)(d) = T , if p(d) is undefined;
– (∼ p)(d) is undefined, if p(d) is defined.</p>
        <p>It means that that we extend a program algebras, and in particular predicate
algebra, with new operation ∼</p>
        <p>.</p>
        <p>Definition 1.</p>
        <p>A semantic weak Floyd-Hoare triple is a tuple (p, f, q), where
f : D →˜D0, p : D →˜Bool, q : D0→˜ Bool for some D, D0such that
for each d ∈ D, if p(d) ↓= T and f (d) ↓ and q(f (d)) ↓, then q(f (d)) = T .</p>
        <sec id="sec-3-1-1">
          <title>We will use the following notation:</title>
          <p>Then {p}f • g{r1 ∨ r2}.</p>
          <p>– {p}f {q} means that (p, f, q) is a semantic weak Floyd-Hoare triple.
Theorem 1. Assume that {p}f {q}, {q}g{r1}, and {∼ q}g{r2}.
Proof. Let d ∈ D. Assume that p(d) ↓= T , (f •g)(d) ↓, and (r1 ∨r2)((f •g)(d)) ↓.</p>
          <p>Then f (d) ↓ and g(f (d)) ↓. Denote d0 = f (d) and d00 = (f • g)(d) = g(f (d)).
Let us show that (r1 ∨ r2)(d00) = T .</p>
          <p>Suppose that (r1 ∨ r2)(d00) ↓= F . Then r1(d00) ↓= F and r2(d00) ↓= F . We
have that either q(d0) ↓, or q(d0) ↑.
tioned statement r1(d00) = F .
{ }
{ }</p>
          <p>Consider the case when q(d0) ↓. Then q(f (d)) ↓, and since p(d) ↓= T and
p f {q}, we have q(f (d)) = q(d0) = T . Then since r1(g(d0)) ∼= r1(d00) ↓ and
q g{r1}, we have r1(g(d0)) = r1(d00) = T , but this contradicts the above
menthe above mentioned statement r2(d00) = F .</p>
          <p>Consider the case when q(d0) ↑. Then (∼ q)(d0) ↓= T . Then since r2(g(d0)) ∼=
r2(d00) ↓ and {∼ q}g{r2}, we have r2(g(d0)) = r2(d00) = T , but this contradicts</p>
          <p>In both cases we have a contradiction, so (r1 ∨ r2)(d00) ↓= F is impossible.
But (r1 ∨r2)(d00) ∼= (r1 ∨r2)((f •g)(d)) ↓ by the assumption, so (r1 ∨r2)(d00) = T .
tu</p>
          <p>This result can be used as a semantic foundation of the following
unconoperation on predicates):
strained inference rule for sequential composition for the inference system for
Floyd-Hoare logic with partial pre- and post-conditions (which involves the ∼
R USEQ
R SSEQ
{p} f {q}, {q} g {r1}, {∼ q}g{r2}</p>
          <p>
            {p} f • g {r1 ∨ r2}
{p} f {q}, {q} g {r}, {∼ q}g{r}
In the special case of coinciding r1 and r2, it can be rewritten as:
Theorem 1 implies that addition of the rules R U SEQ and/or R SSEQ to
operation) does not change its soundness.
the inference system AC proposed in [
            <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
            ] (with the proper extension of syntax
of pre- and post-condition predicate formulas to accommodate the symbol of ∼
          </p>
          <p>As an informal example, consider how these rules can be potentially applied
in the case mentioned in the introduction:
{a(1)==0} m=length(a) {m&gt;0}.</p>
          <p>These two assumptions alone are not suficient to establish the triple
concerning the sequential composition. A missing piece of information is the triple
describing the behavior of the instruction m=length(a) when the predicate
(a(1)==0) is undefined. Under the interpretation assumed in Introduction, this
undefinedness means that the attempt of evaluation of (a(1)==0) leads to an
abnormal/error state. If a is a defined vector, this happens exactly when a has zero
length (is empty). If a is undefined, then an attempt of evaluation of length(a)
causes an error. Thus we can state that</p>
          <p>{∼(a(1)==0)} m=length(a) {m=0}.
where ∼ is not a part of Octave syntax, but just a notation to represent the
statement that the expression (a(1)==0) is undefined (causing an abnormal/error
state). Thus by the R U SEQ rule:</p>
          <p>{n&gt;=0} a=zeros(n,1); m=length(a) {m&gt;0 ∨ m=0}.</p>
          <p>Again, here ∨ is not a part of Octave syntax, but a notation to represent the
disjunction of two predicates.
4</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Application to the While Loop Analysis</title>
      <sec id="sec-4-1">
        <title>Let r be a partial predicate on D and f : D→˜ D. Denote by W H(r, f ) the function D→˜ D such that for each d ∈ D,</title>
        <p>W H(r, f )(d) ↓= f (n)(d),
if there exists an integer n ≥ 0 such that r(f (i)(d)) ↓= T for all i = 0, 1, ..., n − 1
and r(f (n)(d)) ↓= F , where f (i) denotes f • f • ... • f and f (0) is the identity
| {iz }
function on D (i.e. f (0)(d0) = d0 for all d0 ∈ D);
and W H(r, f )(d) ↑, otherwise.</p>
        <p>
          In [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ] W H, considered as an operation on r and f , is called the while
composition. It is intended to capture the semantics of the loop of the form
while r do f end
in imperative programming languages which support structured programming.
Here f represents the semantics of the loop body.
        </p>
        <p>
          In terms of W H the loop rule for the classical inference system for the
FloydHoare logic with total pre- and post-conditions [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] can be reformulated as
follows [18, p. 15]:
        </p>
        <p>{r ∧ p} f {p}
R WH {p} W H(r, f ) {¬r ∧ p}</p>
        <sec id="sec-4-1-1">
          <title>Here p represents the loop invariant.</title>
          <p>This rule, generally, is not valid in the case of partial pre- and post-conditions,
but can be replaced with a constrained rule [18, p. 16] (R W H0) in this case.</p>
          <p>Applying the approach which we used in the statement and proof of Theorem
1, we can propose an alternative unconstrained rule for the while loop which may
be more convenient to apply.</p>
          <p>Theorem 2. Assume {r ∧p}f {p}, {r ∧(∼ p)}f {p}. Then {p}W H(r, f ){¬r ∧p}.
p)(W H(r, f )(d)) ↓.</p>
          <p>Proof. Let d ∈ D. Assume that p(d) ↓= T , W H(r, f )(d) ↓= d0, and (¬r ∧</p>
          <p>Let us show that (¬r ∧ p)(W H(r, f )(d)) = (¬r ∧ p)(d0) = T .
that r(f (i)(d)) ↓= T for all i = 0, 1, ..., n − 1, and r(f (n)(d)) ↓= F , and
From the definition on</p>
        </sec>
      </sec>
      <sec id="sec-4-2">
        <title>W H it follows that there exists an integer n ≥ 0 such</title>
        <p>d0 = W H(r, f )(d) = f (n)(d).</p>
      </sec>
      <sec id="sec-4-3">
        <title>Now we will assume that n ≥ 1.</title>
        <p>If n = 0, then d0 = d, so r(d0) ↓= F and p(d0) ↓= T , whence (¬r ∧ p)(d0) = T .</p>
        <p>Let us show by induction on i ∈ {0, 1, ...} that if i ∈ {0, 1, ..., n − 1}, then
p(f (i)(d)) ↓= T or p(f (i)(d)) ↑.
because i &lt; n. Denote d1 = f (i)(d).</p>
        <p>Base of induction: p(f (0)(d)) ∼= p(d) ↓= T , so the statement holds.</p>
        <p>Inductive step. Assume that i ∈ {0, 1, ..., n − 1}. Assume that p(f (i)(d)) ↓= T
or p(f (i)(d)) ↑. Assume that i + 1 ∈ {0, 1, ..., n − 1}. Note that r(f (i)(d)) ↓= T</p>
        <p>Consider the case p(f (i)(d)) ↓= T . Then since r(d1) ↓= T and p(d1) ↓= T ,
we have (r ∧ p)(d1) ↓= T . If p(f (d1)) ↓
, then since {
r ∧ p}f {p}, we have
p(f (i+1)(d)) ∼= p(f (d1)) ↓=
p(f (i+1)(d)) ↓= T , or p(f (i+1)(d)) ↑ holds.</p>
        <p>Consider the case p(f (i)(d)) ↑. Then p(d1) ↑ and r(d1) ↓= T . Then (∼
p)(d1) ↓= T , so (r ∧ (∼ p))(d1) ↓= T . Then since {
either p(f (i+1)(d)) ∼= p(f (d1)) ↓= T , or p(f (i+1)(d)) ∼= p(f (d1)) ↑.
r ∧ (∼ p)}f {p}, we have
In both cases p(f (i+1)(d)) ↓= T or p(f (i+1)(d)) ↑, so the inductive step is</p>
      </sec>
      <sec id="sec-4-4">
        <title>T . Otherwise, p(f (d1)) ↑. In either case, either</title>
        <p>completed.
p(f (n)(d)) ↓.</p>
        <p>Since n ≥ 1 by our assumption, the proven statement implies that either
p(f (n−1)(d)) ↓= T , or p(f (n−1)(d)) ↑</p>
        <p>. We have (¬r ∧ p)(f (n)(d)) ∼= (¬r ∧
p)(W H(r, f )(d)) ↓. Moreover, r(f (n)(d)) ↓= F , so (¬r)(f (n)(d)) ↓= T , whence
we have p(f (n)(d)) = T .</p>
        <p>Consider the case p(f (n−1)(d)) ↓= T . We have r(f (n−1)(d)) ↓= T , so (r ∧
p)(f (n−1)(d)) ↓= T . Then since {r ∧ p}f {p} and p(f (f (n−1)(d))) ∼= p(f (n)(d)) ↓,
(r ∧ (∼ p))(f (n−1)(d)) ↓= T . Then because {
p(f (f (n−1)(d))) ∼= p(f (n)(d)) ↓, we have p(f (n)(d)) = T .
(∼ p)(f (n−1)(d)) ↓= T . Moreover, we have r(f (n−1)(d)) ↓= T , whence
Consider the case p(f (n−1)(d)) ↑. Then because f (n−1)(d) ↓, we have
r ∧ (∼ p)}f {p} and, moreover,
(¬r ∧ p)(W H(r, f )(d)) ∼= (¬r ∧ p)(f (n)(d)) ↓= T .</p>
        <p>In both cases we have p(f (n)(d)) = T . Since r(f (n)(d)) ↓= F , we have
tu</p>
        <p>This result can be used as a semantic foundation of the following
unconstrained inference rule (for the case of partial pre- and post-conditions):
R UWH
{r ∧ p} f {p}, {r ∧ (∼ p)}f {p}</p>
        <p>{p} W H(r, f ) {¬r ∧ p}
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Conclusion</title>
      <p>
        We have proposed modifications of the inference system for an extension of the
classical Floyd-Hoare logic to the case of partial pre- and post-conditions and
partial programs proposed in [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ]. These modifications concern sequence and
while rules and have been formulated in the extended program algebras. The
addition of these rules does not change the soundness of the system. However,
the new rules have no semantic constraints, unlike the sequence rule of the
original system. The obtained results can be useful for verification of program
with respect to specifications which can contain partial operations.
      </p>
      <p>In the future we plan to make detailed comparison of inference systems and
propose new modifications to improve their eficiency.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Floyd</surname>
          </string-name>
          , R.:
          <article-title>Assigning meanings to programs</article-title>
          .
          <source>Mathematical aspects of computer science</source>
          <volume>19</volume>
          (
          <fpage>19</fpage>
          -
          <lpage>32</lpage>
          ) (
          <year>1967</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Hoare</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>An axiomatic basis for computer programming</article-title>
          .
          <source>Commun. ACM</source>
          <volume>12</volume>
          (
          <issue>10</issue>
          ) (
          <year>1969</year>
          )
          <fpage>576</fpage>
          -
          <lpage>580</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Apt</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Ten years of Hoare's logic: A survey - part I</article-title>
          .
          <source>ACM Trans. Program. Lang. Syst</source>
          .
          <volume>3</volume>
          (
          <issue>4</issue>
          ) (
          <year>1981</year>
          )
          <fpage>431</fpage>
          -
          <lpage>483</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>4. : MATLAB - MathWorks. https://www.mathworks.com/products/matlab.html</mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>5. : GNU Octave. https://www.gnu.org/software/octave/</mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Jones</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Reasoning about partial functions in the formal development of programs</article-title>
          .
          <source>In: Proceedings of AVoCS'05</source>
          . Volume
          <volume>145</volume>
          ., Elsevier, Electronic Notes in Theoretical Computer Science (
          <year>2006</year>
          )
          <fpage>3</fpage>
          -
          <lpage>25</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7. H¨ahnle, R.:
          <article-title>Many-valued logic, partiality, and abstraction in formal specification languages</article-title>
          .
          <source>Logic Journal of the IGPL</source>
          <volume>13</volume>
          (
          <issue>4</issue>
          ) (
          <year>2005</year>
          )
          <fpage>415</fpage>
          -
          <lpage>433</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Gries</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schneider</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Avoiding the undefined by underspecification</article-title>
          .
          <source>Technical report</source>
          , Ithaca,
          <string-name>
            <surname>NY</surname>
          </string-name>
          , USA (
          <year>1995</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Nikitchenko</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kryvolap</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Properties of inference systems for Floyd-Hoare logic with partial predicates</article-title>
          .
          <source>Acta Electrotechnica et Informatica</source>
          <volume>13</volume>
          (
          <issue>4</issue>
          ) (
          <year>2013</year>
          )
          <fpage>70</fpage>
          -
          <lpage>78</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Kryvolap</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nikitchenko</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schreiner</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          :
          <article-title>Extending Floyd-Hoare logic for partial pre- and postconditions</article-title>
          . In Ermolayev, V.,
          <string-name>
            <surname>Mayr</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nikitchenko</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Spivakovsky</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zholtkevych</surname>
            , G., eds.: Information and Communication Technologies in Education, Research, and
            <given-names>Industrial</given-names>
          </string-name>
          <string-name>
            <surname>Applications</surname>
          </string-name>
          . Volume
          <volume>412</volume>
          of Communications in Computer and Information Science. Springer International Publishing (
          <year>2013</year>
          )
          <fpage>355</fpage>
          -
          <lpage>378</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Nielson</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nielson</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Semantics with applications - a formal introduction</article-title>
          . Wiley professional computing.
          <source>Wiley</source>
          (
          <year>1992</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Skobelev</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nikitchenko</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ivanov</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          :
          <article-title>On algebraic properties of nominative data and functions</article-title>
          . In Ermolayev, V.,
          <string-name>
            <surname>Mayr</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nikitchenko</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Spivakovsky</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zholtkevych</surname>
            , G., eds.: Information and Communication Technologies in Education, Research, and
            <given-names>Industrial</given-names>
          </string-name>
          <string-name>
            <surname>Applications</surname>
          </string-name>
          . Volume
          <volume>469</volume>
          of Communications in Computer and Information Science. Springer International Publishing (
          <year>2014</year>
          )
          <fpage>117</fpage>
          -
          <lpage>138</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Nikitchenko</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shkilniak</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Mathematical logic and theory of algorithms</article-title>
          . Publishing house of Taras Shevchenko National University of Kyiv,
          <source>Ukraine (in Ukrainian)</source>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Kornilowicz</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kryvolap</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nikitchenko</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ivanov</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          :
          <article-title>Formalization of the algebra of nominative data in mizar</article-title>
          . In Ganzha,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Maciaszek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.A.</given-names>
            ,
            <surname>Paprzycki</surname>
          </string-name>
          , M., eds.
          <source>: Proceedings of the 2017 Federated Conference on Computer Science and Information Systems, FedCSIS</source>
          <year>2017</year>
          , Prague, Czech Republic,
          <source>September 3-6</source>
          ,
          <year>2017</year>
          . (
          <year>2017</year>
          )
          <fpage>237</fpage>
          -
          <lpage>244</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Korni</surname>
            <given-names>lowicz</given-names>
          </string-name>
          , A.,
          <string-name>
            <surname>Kryvolap</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nikitchenko</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ivanov</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          <article-title>In: Formalization of the Nominative Algorithmic Algebra in Mizar</article-title>
          . Springer International Publishing,
          <string-name>
            <surname>Cham</surname>
          </string-name>
          (
          <year>2018</year>
          )
          <fpage>176</fpage>
          -
          <lpage>186</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Kleene</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          : Introduction to metamathematics. North-Holland Publishing Co., Amsterdam, and P. Noordhof,
          <string-name>
            <surname>Groningen</surname>
          </string-name>
          (
          <year>1952</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Korni</surname>
            <given-names>lowicz</given-names>
          </string-name>
          , A.,
          <string-name>
            <surname>Ivanov</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nikitchenko</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Kleene algebra of partial predicates</article-title>
          .
          <source>Accepted for publication in Formalized Mathematics</source>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Korni</surname>
            <given-names>lowicz</given-names>
          </string-name>
          , A.,
          <string-name>
            <surname>Kryvolap</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nikitchenko</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ivanov</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          :
          <article-title>An approach to formalization of an extension of Floyd-Hoare logic</article-title>
          .
          <source>In: Proceedings of the 13th International Conference on ICT in Education, Research and Industrial Applications</source>
          . Integration, Harmonization and
          <string-name>
            <given-names>Knowledge</given-names>
            <surname>Transfer</surname>
          </string-name>
          , Kyiv, Ukraine, May
          <volume>15</volume>
          -18,
          <year>2017</year>
          . (
          <year>2017</year>
          )
          <fpage>504</fpage>
          -
          <lpage>523</lpage>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>