<!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>From the Blockchain to Logic Programming and Back: Research Perspectives</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Giovanni Ciatto</institution>
          ,
          <addr-line>Roberta Calegari , Stefano Mariani</addr-line>
        </aff>
      </contrib-group>
      <fpage>69</fpage>
      <lpage>74</lpage>
      <abstract>
        <p>-The blockchain is a novel approach to support distributed systems enabling a common, consistent view of a shared state among distributed nodes. There, smart contracts are computer programs that allow users to deploy arbitrary computations, in charge of automatically regulate state transitions and enforce properties. In this paper we speculate on how the blockchain and smart contracts could take advantage of a logic programming approach, and, complementarily, on how logic programming can benefit from the blockchain infrastructure. Accordingly, we discuss some possible research directions and open questions for future research. Index Terms-blockchain, logic programming, smart contracts.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>
        The blockchain technology (BCT henceforth) gained
attention as the backbone of cryptocurrencies such as Bitcoin [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
Yet, its capabilities extend far beyond that, enabling on the one
hand existing applications to be improved – such as the
Domain Name System 1, identity or copyright management [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] –,
on the other hand novel ones to be conceived and deployed—
such as DAOs [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] or crytocurrencies [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] themselves. A lot of
expectations lie around such a novel approach to distributed
systems [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], mostly concerning the way financial transactions,
identity management, or asset property tracking are performed.
      </p>
      <p>
        A popular categorisation of blockchain models orders them
in three generations [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]: the first limited to cryptocurrencies,
the second generalising to any sort of asset tracking, and the
third introducing smart contracts [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. Smart contracts are
computer programs deployed “on the blockchain”, meant to reify
agreements between mutually distrusting participants
automatically enforced by the blockchain consensus mechanism—
without resorting to a trusted centralised authority.
      </p>
      <p>
        The implementation of smart contracts offered by nowadays
BCT constrains users to express their business logic by means
of object-oriented programming (OOP) abstractions and an
imperative programming style—both strictly bound to the
underlying BCT. In the following we take Ethereum2 as
our reference as the most well-known framework for smart
contracts currently available [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
    </sec>
    <sec id="sec-2">
      <title>1http://www.namecoin.org/ 2http://www.ethereum.org</title>
      <p>
        We suggest that the choice of OOP may have hindered the
full realisation of the expectations related to third generation
BCTs. In fact, smart contracts were originally conceived as
a means to automatically enforce the conditions defined in a
contract, and to guarantee invariants and properties despite
the ever-changing state of the blockchain [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].3 Not
exactly what OOP is best for.
      </p>
      <p>So, there seems to be a mismatch between the computational
model chosen for Ethereum’s smart contracts and the one
actually fitting their original requirements and intended purpose.
Among the many programming languages and computational
models available – as Solidity4 for Ethereum, Go for the
Hyperledger Fabric5, or Java for Corda6 – a declarative language
backed by a logic programming computational model could
be best suited for both (i) expressing high level policies in
an unambiguous and human-readable way, and (ii) supporting
inference and sound demonstration of properties of interest.
In turn, as a distributed ledger technology, the blockchain
could bring to distributed logic programming more than a
few desirable features, such as consistency, accountability, and
fault tolerance.</p>
      <p>Accordingly, in this paper we identify the research
opportunities arising from re-interpreting the blockchain from a
logicbased perspective: on the one hand, how logic programming
can improve the capabilities of the blockchain and, especially,
of smart contracts; on the other hand, how logic programming
may benefit from the blockchain, either as a distributed
computing model or as an infrastructure.</p>
      <p>The reminder of the paper is therefore organised as follows:
Section II provides an overview about the main elements of
BCTs and the smart contract abstraction, Section III introduces
our vision of logic-based smart contracts, describing how
logic programming would provide some useful properties, in
Section IV we discuss how the BCT introduces novel ways to
face well-known issues of the distributed logic programming
research area, and, finally, Section V concludes the paper.</p>
      <p>
        3As detailed in the next section despite the similar name, our notion of
logic-based smart contracts differs from the one proposed in [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
4http://solidity.readthedocs.io
5http://www.hyperledger.org/projects/fabric
6http://www.corda.net/
II. BLOCKCHAIN AND SMART CONTRACTS: OVERVIEW
The blockchain is essentially a means for distributed nodes
to consistently perceive a common shared state of the system:
essentially, it provides a novel way to address the problem
of state machine replication [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], focusing on making some
distributed processes expose the very same dynamics, given
that they share the same program and initial state. As such,
the blockchain provides a way to solve (or, at least, mitigate)
some well known problems of distributed systems, such as
the CAP [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] and FLP [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] theorems, the Sybil attack [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ],
Lamport’s Byzantine Generals Problem [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ].
      </p>
      <p>The key point is that the blockchain endows applications
with highly desirable properties such as immutability and
untamperability of the past, consistency among nodes of the
system state, fault tolerance of both data and computations.
In the following, we describe the elements actually enabling
these features, which are:
the system (or world) state
the transactions describing state transitions
the blocks forming an ordered ledger containing all the
events that occurred within the system
the consensus mechanism (or protocol)
smart contracts (3rd generation blockchain only)</p>
      <sec id="sec-2-1">
        <title>A. States</title>
        <p>States represent what is true for the system at a given instant
in time. All nodes composing the system must eventually
perceive the same system state. Generally speaking, it is a
mapping between the entities’ identifiers – i.e. users – and
some arbitrary data associated to and controlled by that entity,
there including smart contracts data and code, or user balances.</p>
      </sec>
      <sec id="sec-2-2">
        <title>B. Transactions</title>
        <p>Transactions encode the state variations yet to be performed.
A transaction can apply to a state producing a new state. Nodes
may issue (publish) transactions in order to produce an effect
on the system state. Transactions may represent money transfer
from an entity to another, the deployment of a smart contract,
or the invocation of an already-deployed smart contract.</p>
        <p>When a transaction is published, it is replicated over the
whole system, thus making every node aware of it. However,
a transaction can be applied only if it is valid, that is,
well formed and correctly signed by the issuer. Otherwise,
it is simply dropped, thus preventing unauthorised actions to
carry on. Furthermore, to produce an effect on the system
state, transactions must be executed without errors, otherwise
their modifications to the system are simply reverted. As an
example, suppose an entity is trying to transfer more money
than it currently owns, by means of a transaction. Such a
transaction would eventually throw an error provoking the
money transfer and any other side effect to be reverted.</p>
      </sec>
      <sec id="sec-2-3">
        <title>C. Blocks</title>
        <p>
          Blocks are timestamped lists of transactions. As such, they
certify (i) the ordering of edits applied to the system state, and
(ii) that each transaction occurred at a specific instant in time,
and therefore the resulting state is valid from that moment on.
Blocks implement the timestamping schema described in [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ],
providing untamperability of the history about the past.
        </p>
        <p>In fact, locks are replicated on all the nodes thanks to the
blockchain protocol, which is in charge of ensuring that the
last block – containing the most recent transactions – is the
same for each node.</p>
      </sec>
      <sec id="sec-2-4">
        <title>D. Consensus</title>
        <p>
          The distributed consensus protocol makes sure that the
distributed nodes – the miners – achieve a common view of
the sequence of blocks, and, consequently, of the ordering
of transactions: in short, its task is to guarantee consistency
in spite of system state replication. While several consensus
mechanisms exist, their detail is outside the scope of this
paper: we forward the interested reader to [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ].
        </p>
        <p>For what concerns the following discussion it is sufficient
to understand that BCTs supporting cryptocurrencies (such as
Ethereum) usually employ the Proof-of-Work consensus
approach, which (i) endows the cryptocurrency with its
economical value, (ii) provides probabilistic and eventual consistency
of the system state, and (iii) makes the blockchain resistant
against Byzantine nodes and Sybil attacks.</p>
      </sec>
      <sec id="sec-2-5">
        <title>E. Smart contracts</title>
        <p>Smart contracts consist of stateful processes that can react to
the publication of a particular kind of transaction: invocation
transactions. For an invocation transaction to be valid, the
triggered computation must terminate without errors: otherwise,
its effects are reverted, leaving the system state unaltered.</p>
        <p>Smart contracts can be conceived (and usually are) as
objects in the OOP sense, thus their invocations as method
calls. Nevertheless, deployment is quite peculiar: their
programs are written and published by end users by means of
deployment transactions, publishing the compiled source code
(or, bytecode) of a smart contract. In Ethereum, smart contracts
are usually programmed with Solidity, which is indeed an
object-oriented language. The Solidity code is compiled into
the Ethereum Virtual Machine (EVM) bytecode before
deployment and the latter is deployed on the blockchain network.
Thanks to transaction signatures and blocks hash links, the
code of smart contracts is immutable after publication. This
is what makes them amenable of trust in, e.g., handling
financial transactions: indeed, since the source code is publicly
inspectable and immutable, anyone can check the bytecode
obtained (i.e. via a disassembler).</p>
      </sec>
      <sec id="sec-2-6">
        <title>F. Miners</title>
        <p>Miners are the peer nodes composing the backbone of
the blockchain network by participating into the consensus
mechanism. They locally store a copy of the whole blockchain
– there included a copy of each smart contract – and execute
all transactions. Since the system state must be kept consistent
among all the miners, each of them locally executes smart
contracts upon reception of invocation transactions. Therefore, the
execution of non-terminating computations must be prevented,
since it would imply a deadlock of the whole blockchain
network. The most notable solution is the one introduced
by the Ethereum platform, where each computational step
is paid by the initiator of the transaction in terms of gas—
converted from the initiator balance. Executions running out
of gas invalidate their invoking transactions but still consume
the initiator’s money.</p>
        <p>
          These money can be redeemed by the first miner producing
the next block of the blockchain, as a compensation for the
computational effort. So, long/infinite computations become
economically unsustainable. This mechanism highlights the
aspect of the economical cost model of computations, which
is currently instruction-based [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ].
        </p>
        <p>III. LOGIC PROGRAMMING FOR SMART CONTRACTS
We now introduce the idea of logic-based smart contracts as
an intriguing research perspective, highlighting its challenges
and possible benefits. It is worth remarking that we do not
mean to produce “yet another compiler” for a logic language
to EVM, but to replace the EVM itself with a logic engine
and related computational model, so that smart contracts can
be expressed in a logic language—e.g., Prolog.</p>
      </sec>
      <sec id="sec-2-7">
        <title>A. Motivations</title>
        <p>We see three major motivations for doing so: (i) the
declarative nature of the source code, (ii) observability of the business
logic, and (iii) controlled mutability of behaviour.</p>
        <p>Adoption of a declarative language with a goal-oriented
semantics could ease both developers’ work and readers’
understanding in general: the former would be able to
explicitly state the business goals the smart contracts should
pursue – which could in turn be able to share them or
reason about how to reach them –, while for the latter would
be easier to understand the functioning of already-deployed
smart contracts. Furthermore, since Prolog is an interpreted
language, it could also help strengthening trust via improved
inspectability: in fact the source code may be deployed with no
need of compilation, and it would not require any disassembler
for being inspected later on.</p>
        <p>
          By endowing logic-based smart contracts with a static
knowledge base (KB) containing immutable rules and terms,
alongside a dynamic KB containing the mutable ones, smart
contracts could be structured in such a way to partially modify
their behaviour in a controllable way. A practical example
of such an interesting feature is extensively described in
Subsection III-C. This helps mitigating the problems caused by
buggy smart contracts that are deployed and, being immutable,
cannot be fixed—anyway, a practice considered harmful [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ].
Again, the fact that both the static and dynamic KBs can be
easily inspected would be an added value, possibly paving
the way towards cryptographically secured, while
humanreadable, contracts.
        </p>
      </sec>
      <sec id="sec-2-8">
        <title>B. A possible roadmap</title>
        <p>As a first step towards our vision we need to re-interpret
the blockchain elements summarised in Section II according
to a logic-based perspective. To this end, let us suppose that
the system state maps smart contract identifiers into some
data structure, including at least a balance to enable
smart contracts to handle money, a static KB made of
an immutable list of logic facts and rules, to be set upon
deployment, and an initially empty dynamic KB which
may be modified via assert/1 and retract/1
money transfer transactions retain their semantics,
whereas smart contract invocations become goal-oriented
computations as described in the following
blocks and consensus retain their semantics
As a second step, we need to define the behaviour of logic
based smart contracts, that is, how they react to transactions.
While money transfer transactions retain their semantics,
invocation transactions can be supposed to specify a logic term,
say Message, that triggers a goal-oriented computation Goal
if the KB of the invoked smart contract contains a rule such
as receive(+Message, +Guard):- Goal. provided
that Guard is true. If no such a rule is found, the transaction
is considered invalid and it produces no effect.</p>
        <p>
          The computation (Goal) is performed according to the
usual SLD resolution process [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ]: the side effects (assertion
or retraction of terms) possibly performed affect only the
dynamic KB of the smart contract. However, for the transaction
to be considered valid and, consequently, its side effects to
be persisted on the blockchain, the resolution process should
terminate producing a proof for Goal: this is persisted along
with the invocation transaction. The issuer of the transaction
(or possibly any other interested party) may later inspect its
local copy of the blockchain seeking for such a proof, if
interested. In essence, the possibly many receive/2 rules
are the only access point to the smart contract code – i.e., its
API –, while other clauses are considered an implementation
detail of the smart contract and cannot be accessed by users.
Such a mechanism would let the programmers be free to allow
(or deny) the injection of some new behaviour into the smart
contract by means of, e.g., the assertion of some new rule.
This is ultimately what we mean by “controlled mutability”.
        </p>
        <p>
          The third step should focus on inter-smart contract
interaction. As the reader may expect, a send(+Recipient,
?Message, ?Money) primitive has been conceived too,
which can be used by a smart contract to send a Message to
another one (namely Recipient), possibly including some
Money, therefore triggering one of its receive(Message,
Guard) entry points. An interesting aspect which may be
worth of further investigation is whether the send/2 primitive
should have a synchronous or an asynchronous communication
semantics. In the first case, the inter-smart contracts interaction
semantics would redeem their OOP-like nature, along with its
well known re-entrancy issues [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ], [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]. We speculate that
the second case may mitigate the aforementioned issues and
open new opportunities related to the engineering of smart
contracts interaction patterns, but further research is needed to
prove this claim. To complete the picture, some convenience
predicates could be built-in into all static KBs, mimicking
Solidity’s “Globally Available Variables”7 like:
now(?Time) may enable a smart contract to inspect the
current time, or activate a given prove rule if the current
time is after/before a given instant
sender(?EntityID) may enable a smart contract to
inspect the identity of the issuers of the transaction
value(?Money) may enable a smart contract to know
how much money it received along with the last message
Such predicates essentially provide context awareness in the
sense that they allow the smart contract to reason and act
taking into account the informations contained (i) within the
lastly received transaction – such as the sender identity –,
(ii) within the lastly published block—e.g., the last commonly
accepted global time, etc. Examples showcasing the utility of
these predicates are described in Subsection III-C.
        </p>
        <p>The semantics of blocks and of the consensus algorithm
remain unchanged: this implies no interference while a
resolution process is being executed, since transactions are totally
ordered and sequentially executed. The miners’ role, too,
remains unchanged: simply, in this vision they are in charge
of the SLD resolution process. However, removing the EVM
bytecode from the picture opens up the possibility of defining
a more coarse-grained computation cost model, taking into
account the specific features of the logic-based computational
model—with the usual aim of discouraging long computations.
For instance, should users pay for the proofs to their queries?
Should they pay for unification of clauses and facts? What
about paying for backtracking? These questions have no trivial
answer at the moment, thus deserve further research.</p>
      </sec>
      <sec id="sec-2-9">
        <title>C. Case study</title>
        <p>As an illustrative example, consider a scenario where the
flight company ACME Inc. exploits smart contracts for
regulating costumer management. The company handles purchase
of tickets through its ACMEPortal smart contract, which
provides a number of functionalities, among which:
1) looking up for flights towards a given destination (To)
within a given timespan (Day):
receive(look_up(Day, From, To), (now(Now), after(Day,</p>
        <p>Now)))
:setof(
flight(Id, Time, Duration, From, To, Price),
(flight(Id, Time, Duration, From, To, Price),
within(Time, Day)),</p>
        <p>Flights
),
sender(Customer),
send(Customer, Flights, _).
where within(+TimeSpan, ?Instant) simply
checks whether Instant is within TimeSpan.
2) reserving a seat paying the corresponding Price:
receive(reserve(Id), (flight(Id, Time, Dur, From, To,</p>
        <p>Price), value(X), X &gt;= Price))
:sender(Customer),
assert(reservation(Customer, flight(Id, Time, Dur,</p>
        <p>From, To, Price))).
7http://solidity.readthedocs.io/en/latest/units-and-global-variables.html
3) cancelling a reservation while getting a refund, possibly
with a fee if cancellation occurs later than 3 days before
expected departure:
receive(cancel(Id), (sender(Customer), reservation(
Customer, flight(Id, ExpDeparture, _, _, Price)))
)
:now(CurrentTime),
retract(reservation(Customer, flight(Id, _, _, _, _)
)),
compute_refund(CurrentTime, ExpDeparture, Price,</p>
        <p>Money),
send(Customer, _, Money).
where computation of the amount to refund is
encapsulated by the compute_refund/4 predicate, assumed
to be in the dynamic KB of the smart contract:
compute_refund(CancellationTime, DepartureTime, Price,</p>
        <p>Price)
:</p>
        <p>DepartureTime - CancellationTime &gt; days(3).
compute_refund(CancellationTime, DepartureTime, Price,</p>
        <p>ToBeRefunded)
:DepartureTime - CancellationTime =&lt; days(3),</p>
        <p>ToBeRefunded is Price / 2.
4) automatically getting a refund in case of delays longer
than some given amount of time:
receive(landing(flight(Id, ExpDeparture, Dur, _),</p>
        <p>ActualTime), true)
:setof(
refund(Customer, Price),
(reservation(Customer, flight(Id, ExpDeparture,
Dur, _, _, Price)), too_late(ExpDeparture, Dur,
ActualTime)),</p>
        <p>CustomersToBeRefunded
),
refund_all(CustomersToBeRefunded).
where refund_all/1 is a simple broadcast:
refund_all([]).
refund_all([refund(Customer, Price) | Rs])
:send(Customer, _, Price),
refund_all(Rs).</p>
        <p>To support functionality x4, airports are assumed to deploy
a AirportNotification contract in charge of notifying
ACMEPortal about the actual departure and landing times,
by sending messages in the form:
departure(flight(Id, ExpDeparture, Duration, FromAirport),</p>
        <p>ActualDepatureTime)
landing(flight(Id, ExpDeparture, Duration, ToAirport),</p>
        <p>ActualLandingTime)</p>
        <p>Functionality x1 collects all flights information matching a
custom filter. For instance, users may ask for all the flights
departing from a given place on a given day by providing an
unbounded To variable as input. The operation also shows
how contextual predicates may be useful to implement
userand time-aware operations.</p>
        <p>Functionality x2 shows how to add new data to the dynamic
KB of the smart contract. Notice that, since functionailities are
wrapped within the receive/2 primitive, no entity except
the smart contract itself can add (or remove) information to its
KB. This is how encapsulation of smart contracts KBs, i.e.,
their states, can be achieved.</p>
        <p>Functionality x3 shows the dual operation, namely, how to
remove data, while illustrating what we mean by controlled
mutability. Suppose ACME Inc. wants to adopt a different
policy for cancellations. Assuming the smart contracts exposes
one more functionality:
receive(compute_refund(C, D, P, T) :- NewPolicy), (sender(S
), authorised(S)))
:retract_all(compute_refund(_, _, _, _) :- _),
assert(compute_refund(C, D, P, T) :- NewPolicy).
then it would be easy for the IT department to dynamically
inject the novel policy as a replacement of the previous one.
In Ethereum, for instance, such a flexibility is not possible
without carefully engineering some cumber-stone interaction
pattern between two or more smart contracts.</p>
        <p>Finally, functionality x4 illustrates how to compose smart
contracts declaratively to give a refund to customers in case
of delayed flights, automatically. This is an example of
intersmart contracts interaction through the send and receive
primitives involving more than two smart contracts.</p>
        <p>IV. THE BLOCKCHAIN FOR LOGIC PROGRAMMING
We now switch perspective w.r.t. previous section, that is,
we explore the idea of exploiting the blockchain
technology to face some well-known issues of logic programming
in distributed systems—namely, consistency of a distributed,
possibly dynamic logic theory which evolves over time, and
concurrent reasoning. The blockchain may support for instance
cooperative exploration of the proof tree for a given goal,
while smart contracts may be the key for letting different,
para-consistent theories coexist within the same system. As
a first intuition, the blockchain can act as the mediator
giving distributed access to the logical theory representing the
knowledge to share.</p>
        <p>In the following we discuss two distinct scenarios: in
the first, the ledger is re-interpreted as a single distributed
logic theory where nodes may participate to the resolution
process, while in the second, smart contracts are conceived as
containers of immutable logic theories.</p>
      </sec>
      <sec id="sec-2-10">
        <title>A. Single theory</title>
        <p>
          Several approaches for distributing logic programming have
been historically explored, in particular towards implicit
parallel evaluation, leading to explore AND-parallelism and
ORparallelism [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ], [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ], [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ]. The most relevant results [
          <xref ref-type="bibr" rid="ref25">25</xref>
          ]
perform well but are not meant to face distributed
programming. Yet, implicit parallelism lacks two important control
mechanisms—synchronisation of logic processes, and control
over the non-determinism of schedulers.
        </p>
        <p>The blockchain model and technology could open up new
perspectives in the distribution and parallelisation of the
resolution process with respect to a single theory shared between
different participants of the distributed system. In this vision,
a first intriguing possibility is to distribute the goal to solve
over the blockchain: the blockchain system is so re-interpreted
as an inference engine coordinating a number of processors –
the miners – aimed at (i) handling users’ assert, retract, and
solve requests, or (ii) carrying on goal proving processes by
concurrently exploring different paths of some goal’s proof
tree. We therefore imagine transactions as:
information creation/consumption, in the form
of logic clauses, to the distributed ledger—e.g.,
assert(?Clause)/retract(?Clause)
inference invocation aimed at triggering a resolution
process on a given goal—e.g., solve(?Goal)
At the same time, miners are re-interpreted as the entities in
charge for repeatedly performing partial explorations of the
proof tree or producing solutions for provable sub-goals. By
keeping track of already proved (sub-)goals too – on the ledger
– miners can avoid wasting their computational resources
proving what has been proved by others.</p>
        <p>Finally, economical incentives could be designed and tuned
to stimulate a particular joint exploration strategy of the proof
tree. For instance, the blockchain protocol may initially reward
the most miners exploring novel branches of the proof tree or
finding solutions for unproven (sub-)goals, but, after that, it
may also start encouraging miners to keep exploring the same
path of the proof tree, in order to minimise the probability of
two ones competing to prove the same (sub-)goal.</p>
        <p>
          Although our vision appears to be feasible in practice,
further research is needed when facing the theoretical foundations
of cooperative reasoning on top of a blockchain. In particular,
the lesson learned from concurrent logic languages such as
Concurrent Prolog [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ] and Parlog [
          <xref ref-type="bibr" rid="ref26">26</xref>
          ] may provide important
and useful insights: e.g., how shared variables may be handled
along with AND-parallelism, or how to prevent concurrent
updates to the shared logic theory. Also, the termination of
recursive resolution processes too may be a critical aspect,
since non-termination may imply live-locks between miners.
As a future work, we plan to study whether the above issues
can be mitigated through economic (dis)incentives—similarly
to what cryptocurrencies essentially do.
        </p>
      </sec>
      <sec id="sec-2-11">
        <title>B. Multiple theories</title>
        <p>
          All the above blockchain benefits in guaranteeing properties
like consistency can be re-thought in a multiple theories
scenario, where consistency is referred to the local situation, for
instance. There, diverse logical theories are scattered around,
representing the local knowledge of each node situated in
space and time [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ], [
          <xref ref-type="bibr" rid="ref28">28</xref>
          ]. Even if the initial knowledge is the
same, the KB is then likely to evolve over time in different
ways, due to space-time situatedness (i.e. the temperature of
a room). There, each theory is consistent with its local reality
while not in contrast with other theories representing truth in
a different locality—resembling paraconsistent logics [
          <xref ref-type="bibr" rid="ref29">29</xref>
          ].
        </p>
        <p>In this context, each theory would be associated to a group
of local agents, and possibly merged with other computations
in the system only once the result is computed: there the
blockchain technology could help in integrating data, and
guaranteeing properties like local consistency.</p>
        <p>
          Indeed, smart contracts could play a key role to
guarantee the consistency (or other relevant properties) of a logic
theory replicated on the subset of network nodes in a “logic
neighbourhood”: in fact, a smart contract running every time a
change to the theory is proposed could help deciding whether
the change should be accepted or not. There, the smart
contract could also manage assert/retract on the knowledge
base, ensuring the (eventual?) consistency of the shared theory.
Other examples of properties that could be enforced by such
a mechanism are invariants and computational properties like
stratification [
          <xref ref-type="bibr" rid="ref30">30</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>V. CONCLUSION</title>
      <p>On the one hand, the blockchain could benefit from logic
programming to obtain system properties like observability,
explainability, and evolvability. On the other hand, blockchain
and smart contracts look as promising technologies to exploit
the full potential of distributed LP. Accordingly, this paper
elaborates on how blockchain and smart contracts could mix
with logic programming, and foresees a number of lines of
future research on the subject.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>S.</given-names>
            <surname>Nakamoto</surname>
          </string-name>
          , “
          <article-title>Bitcoin: A peer-to-peer electronic cash system</article-title>
          ,”
          <year>2008</year>
          . [Online]. Available: http://bitcoin.org/bitcoin.pdf
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>S. X.</given-names>
            <surname>Zibin</surname>
          </string-name>
          <string-name>
            <surname>Zheng</surname>
          </string-name>
          , “
          <article-title>Blockchain challenges and opportunities: A survey</article-title>
          ,”
          <source>International Journal of Web and Grid Services</source>
          , In press.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>U.</given-names>
            <surname>Chohan</surname>
          </string-name>
          , “
          <article-title>The decentralized autonomous organization and governance issues,” SSRN Electronic Journal</article-title>
          , Dec.
          <year>2017</year>
          . [Online]. Available: http://ssrn.com/abstract=3082055
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>I. Bashir</surname>
          </string-name>
          , Mastering Blockchain -
          <article-title>Distributed ledgers, decentralization and smart contracts explained</article-title>
          .
          <source>Packt Publishing</source>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>M.</given-names>
            <surname>Swan</surname>
          </string-name>
          ,
          <article-title>Blockchain: Blueprint for a New Economy</article-title>
          .
          <source>O'Reilly</source>
          ,
          <year>2015</year>
          . [Online]. Available: http://shop.oreilly.com/product/0636920037040.do
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>N.</given-names>
            <surname>Szabo</surname>
          </string-name>
          , “
          <article-title>Formalizing and securing relationships on public networks,” First Monday</article-title>
          , vol.
          <volume>2</volume>
          , no.
          <issue>9</issue>
          ,
          <string-name>
            <surname>Sep</surname>
          </string-name>
          .
          <year>1997</year>
          . [Online]. Available: http://journals.uic.edu/ojs/index.php/fm/article/view/548
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>S.</given-names>
            <surname>Omohundro</surname>
          </string-name>
          , “Cryptocurrencies, smart contracts, and artificial intelligence,
          <source>” AI Matters</source>
          , vol.
          <volume>1</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>19</fpage>
          -
          <lpage>21</lpage>
          , Dec.
          <year>2014</year>
          . [Online]. Available: http://dl.acm.org/citation.cfm?id=
          <fpage>2685334</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>F.</given-names>
            <surname>Idelberger</surname>
          </string-name>
          , G. Governatori,
          <string-name>
            <given-names>R.</given-names>
            <surname>Riveret</surname>
          </string-name>
          , and G. Sartor, “
          <article-title>Evaluation of logic-based smart contracts for blockchain systems</article-title>
          ,” in Rule Technologies. Research, Tools, and Applications, ser.
          <source>LNCS</source>
          , vol.
          <volume>9718</volume>
          . Springer,
          <year>2016</year>
          , pp.
          <fpage>167</fpage>
          -
          <lpage>183</lpage>
          . [Online]. Available: http: //link.springer.
          <source>com/10.1007/978-3-319-42019-6 11</source>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>K.</given-names>
            <surname>Bhargavan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Delignat-Lavaud</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Fournet</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Gollamudi</surname>
          </string-name>
          , G. Gonthier,
          <string-name>
            <given-names>N.</given-names>
            <surname>Kobeissi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Kulatova</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Rastogi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Sibut-Pinote</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Swamy</surname>
          </string-name>
          , and S. Zanella-Be´guelin, “
          <article-title>Formal verification of smart contracts: Short paper</article-title>
          ,” in
          <source>2016 ACM Workshop on Programming Languages and Analysis for Security (PLAS '16)</source>
          . ACM,
          <year>2016</year>
          , pp.
          <fpage>91</fpage>
          -
          <lpage>96</lpage>
          . [Online]. Available: http://dl.acm.org/citation.cfm?id=
          <fpage>2993611</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>M. P.</given-names>
            <surname>Andersen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Kolb</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Chen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Fierro</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. E.</given-names>
            <surname>Culler</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R. A.</given-names>
            <surname>Popa</surname>
          </string-name>
          , “
          <article-title>WAVE: A decentralized authorization system for IoT via blockchain smart contracts</article-title>
          ,” EECS Department, University of California, Berkeley,
          <source>Technical Report UCB/EECS-2017-234</source>
          , Dec.
          <year>2017</year>
          . [Online]. Available: http://www2.eecs.berkeley.edu/Pubs/ TechRpts/2017/EECS-2017-234.html
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>C.</given-names>
            <surname>Cachin</surname>
          </string-name>
          and M. Vukolic´, “
          <article-title>Blockchain consensus protocols in the wild (keynote talk),” in 31st International Symposium on Distributed Computing (DISC 2017), ser</article-title>
          .
          <source>Leibniz International Proceedings in Informatics (LIPIcs)</source>
          , vol.
          <volume>91</volume>
          . Dagstuhl, Germany: Schloss DagstuhlLeibniz-Zentrum fuer Informatik,
          <year>2017</year>
          , pp.
          <volume>1</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>1</lpage>
          :
          <fpage>16</fpage>
          . [Online]. Available: http://drops.dagstuhl.de/opus/volltexte/2017/8016
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>S.</given-names>
            <surname>Gilbert</surname>
          </string-name>
          and
          <string-name>
            <given-names>N.</given-names>
            <surname>Lynch</surname>
          </string-name>
          , “
          <article-title>Brewer's conjecture and the feasibility of consistent, available, partition-tolerant web services</article-title>
          ,
          <source>” SIGACT News</source>
          , vol.
          <volume>33</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>51</fpage>
          -
          <lpage>59</lpage>
          , Jun.
          <year>2002</year>
          . [Online]. Available: http://dl.acm.org/citation.cfm?id=
          <fpage>564601</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>M. J. Fischer</surname>
            ,
            <given-names>N. A.</given-names>
          </string-name>
          <string-name>
            <surname>Lynch</surname>
            , and
            <given-names>M. S.</given-names>
          </string-name>
          <string-name>
            <surname>Paterson</surname>
          </string-name>
          , “
          <article-title>Impossibility of distributed consensus with one faulty process</article-title>
          ,
          <source>” Journal of the ACM</source>
          , vol.
          <volume>32</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>374</fpage>
          -
          <lpage>382</lpage>
          ,
          <year>1985</year>
          . [Online]. Available: http://portal.acm.org/citation.cfm?id=
          <fpage>214121</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>J. R.</given-names>
            <surname>Douceur</surname>
          </string-name>
          , “The Sybil attack,”
          <source>in IPTPS '01 Revised Papers from the First International Workshop on Peer-to-Peer Systems</source>
          . Springer,
          <year>2002</year>
          , pp.
          <fpage>251</fpage>
          -
          <lpage>260</lpage>
          . [Online]. Available: http://dl.acm.org/citation.cfm? id=
          <fpage>687813</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>L.</given-names>
            <surname>Lamport</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Shostak</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Pease</surname>
          </string-name>
          , “
          <article-title>The Byzantine Generals problem</article-title>
          ,
          <source>” ACM Transactions on Programming Languages and Systems</source>
          , vol.
          <volume>4</volume>
          , no.
          <issue>3</issue>
          , pp.
          <fpage>382</fpage>
          -
          <lpage>401</lpage>
          , Jul.
          <year>1982</year>
          . [Online]. Available: http://dl.acm.org/citation.cfm?id=
          <fpage>357176</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>S.</given-names>
            <surname>Haber</surname>
          </string-name>
          and
          <string-name>
            <given-names>W.</given-names>
            <surname>Stornetta</surname>
          </string-name>
          , “
          <article-title>How to time-stamp a digital document</article-title>
          ,
          <source>” Journal of Cryptology</source>
          , vol.
          <volume>3</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>99</fpage>
          -
          <lpage>111</lpage>
          ,
          <year>1991</year>
          . [Online]. Available: http://link.springer.com/10.1007/BF00196791
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>G.</given-names>
            <surname>Wood</surname>
          </string-name>
          , “
          <article-title>Ethereum: a secure decentralised generalised transaction ledger,” Ethereum Project</article-title>
          ,
          <source>Yellow Paper 151</source>
          ,
          <year>2014</year>
          . [Online]. Available: http://ethereum.github.io/yellowpaper/paper.pdf
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>Q.</given-names>
            <surname>Dupont</surname>
          </string-name>
          , “
          <article-title>Experiments in algorithmic governance. a history and ethnography of “the dao,” a failed decentralized autonomous organization,” in Bitcoin and Beyond</article-title>
          . Cryptocurrencies, Blockchains, and Global Governance, 1st ed. London, UK: Routledge, Nov.
          <year>2017</year>
          , ch. 8. [Online]. Available: https://www.taylorfrancis.com/books/ e/9781351814089/chapters/10.4324%
          <fpage>2F9781315211909</fpage>
          -
          <lpage>8</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>J. A.</given-names>
            <surname>Robinson</surname>
          </string-name>
          ,
          <string-name>
            <surname>“</surname>
          </string-name>
          <article-title>A machine-oriented logic based on the resolution principle</article-title>
          ,
          <source>” Journal of the ACM</source>
          , vol.
          <volume>12</volume>
          , no.
          <issue>1</issue>
          , pp.
          <fpage>23</fpage>
          -
          <lpage>41</lpage>
          , Jan.
          <year>1965</year>
          . [Online]. Available: http://dl.acm.org/citation.cfm?id=
          <fpage>321253</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>L.</given-names>
            <surname>Luu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.-H.</given-names>
            <surname>Chu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Olickel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Saxena</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Hobor</surname>
          </string-name>
          , “
          <article-title>Making smart contracts smarter,” in 2016 ACM SIGSAC Conference on Computer and Communications Security (CCS'16)</article-title>
          . ACM Press,
          <year>2016</year>
          , pp.
          <fpage>254</fpage>
          -
          <lpage>269</lpage>
          . [Online]. Available: http://dl.acm.org/citation.cfm?id=
          <fpage>2978309</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>N.</given-names>
            <surname>Atzei</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Bartoletti</surname>
          </string-name>
          , and T. Cimoli, “
          <article-title>A survey of attacks on Ethereum smart contracts (SoK),” in Principles of Security and Trust, ser</article-title>
          .
          <source>LNCS</source>
          . Springer, Jul.
          <year>2017</year>
          , vol.
          <volume>10204</volume>
          , pp.
          <fpage>164</fpage>
          -
          <lpage>186</lpage>
          . [Online]. Available: http://link.springer.
          <source>com/10.1007/978-3-662-54455-6 8</source>
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>L.</given-names>
            <surname>Monteiro</surname>
          </string-name>
          , “
          <article-title>A proposal for distributed programming in logic,” in Implementations of Prolog, ser</article-title>
          .
          <source>Artificial Intelligence. Chicester</source>
          , UK: Ellis Horwood Limited,
          <year>1984</year>
          , pp.
          <fpage>329</fpage>
          -
          <lpage>340</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>E. Y.</given-names>
            <surname>Shapiro</surname>
          </string-name>
          , Concurrent Prolog - Vol.
          <volume>1</volume>
          :
          <string-name>
            <given-names>Collected</given-names>
            <surname>Papers</surname>
          </string-name>
          , ser.
          <source>Logic Programming</source>
          . Cambridge, MA, USA: The MIT Press,
          <year>1987</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>K. L.</given-names>
            <surname>Clark</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Gregory</surname>
          </string-name>
          , “
          <article-title>A relational language for parallel programming</article-title>
          ,
          <source>” in 1981 Conference on Functional Programming Languages and Computer Architecture (FPCA '81)</source>
          . New York, NY, USA: ACM,
          <year>1981</year>
          , pp.
          <fpage>171</fpage>
          -
          <lpage>178</lpage>
          . [Online]. Available: http: //dl.acm.org/citation.cfm?id=
          <fpage>806776</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>A.</given-names>
            <surname>Brogi</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Gorrieri</surname>
          </string-name>
          , “
          <article-title>A distributed, net oriented semantics for Delta Prolog,”</article-title>
          <source>in TAPSOFT '89: Proceedings of the International Joint Conference on Theory and Practice of Software Development Barcelona, Spain, March</source>
          <volume>13</volume>
          -17,
          <year>1989</year>
          , ser.
          <source>LNCS</source>
          . Springer,
          <year>1989</year>
          , vol.
          <volume>351</volume>
          , pp.
          <fpage>162</fpage>
          -
          <lpage>177</lpage>
          . [Online]. Available: http://link.springer.
          <source>com/10. 1007/3-540-50939-9 131</source>
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <surname>K. L. Clark</surname>
          </string-name>
          , “
          <article-title>PARLOG: The language and its applications,” in PARLE Parallel Architectures and Languages Europe. Volume II: Parallel Languages</article-title>
          . Eindhoven, The Netherlands,
          <fpage>15</fpage>
          -
          <lpage>19</lpage>
          Jun.
          <year>1987</year>
          . Proceedings, ser.
          <source>LNCS</source>
          . Springer,
          <year>1987</year>
          , vol.
          <volume>259</volume>
          , pp.
          <fpage>30</fpage>
          -
          <lpage>53</lpage>
          . [Online]. Available: http://link.springer.
          <source>com/10.1007/3-540-17945-3 2</source>
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>R.</given-names>
            <surname>Calegari</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Denti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Mariani</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Omicini</surname>
          </string-name>
          , “
          <article-title>Logic programming as a service in multi-agent systems for the Internet of Things,”</article-title>
          <source>International Journal of Grid and Utility Computing</source>
          , In press.
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28] --, “
          <article-title>Logic Programming as a Service (LPaaS): Intelligence for the IoT</article-title>
          ,” in
          <source>2017 IEEE 14th International Conference on Networking, Sensing and Control (ICNSC</source>
          <year>2017</year>
          ). IEEE, May
          <year>2017</year>
          , pp.
          <fpage>72</fpage>
          -
          <lpage>77</lpage>
          . [Online]. Available: http://ieeexplore.ieee.org/document/8000070/
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>H. A.</given-names>
            <surname>Blair</surname>
          </string-name>
          and
          <string-name>
            <given-names>V. S.</given-names>
            <surname>Subrahmanian</surname>
          </string-name>
          , “
          <article-title>Paraconsistent logic programming</article-title>
          ,
          <source>” Theoretical Computer Science</source>
          , vol.
          <volume>68</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>135</fpage>
          -
          <lpage>154</lpage>
          ,
          <year>1989</year>
          . [Online]. Available: http://www.sciencedirect.com/ science/article/pii/0304397589901266
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>P.</given-names>
            <surname>Glasserman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Heidelberger</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Shahabuddin</surname>
          </string-name>
          , “
          <article-title>Gaussian importance sampling and stratification: Computational issues</article-title>
          ,” in
          <source>1998 Winter Simulation Conference</source>
          , vol.
          <volume>1</volume>
          . IEEE, Dec.
          <year>1998</year>
          , pp.
          <fpage>685</fpage>
          -
          <lpage>693</lpage>
          . [Online]. Available: http://ieeexplore.ieee.org/document/745051/
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>