Formal Methods - An Overview
-
Author
marco-bonanno -
Category
Documents
-
view
236 -
download
0
Embed Size (px)
Transcript of Formal Methods - An Overview
-
8/3/2019 Formal Methods - An Overview
1/25
Formal Methods: An Overview1
Formal MethodsAn Overview
Introduction
The task of minimizing human errors in building an artifact increases the trust in it, thus
increasing its usage. This is true especially if failure implies losses of any kind. This can
be seen in the construction of bridges. In the early bridge constructions the load that amaterial could withstand or the effect the elements had upon the structure of the bridge
being constructed were probably not considered. As time progressed, the need to prevent
disasters due to the falling of bridges led to more disciplined bridge constructions. For
example, the study of materials was applied to find the best material that can withstand aparticular load. The best structure that can withstand powerful winds and the most
effective way how to join the materials together are all part of the new form of bridge
construction. This process of human error minimization led to a much a less occurrenceof bridge disaster and a higher trust in these structures.
This argument can be applied to all fields in engineering (including hardware
construction) and the building of software. The more complex the system the larger thediscipline needed in the construction of the systems. The study of how to discipline the
construction of software is software engineering. Software engineering, describes the
different ways how to design, build, test and maintain the software. When this knowledgeis applied correctly, the construction of software cost and time can be reduced
dramatically.
Among the repertoire of techniques and ideas in software engineering that can be used to
build software, there is a family of techniques that specify, design and verify software
(and hardware) with mathematical rigor. This means that the statements describing thespecification and design are written using well-formed formulae in a particular calculus.Thus, one can reason more effectively on these descriptions and deduce new facts by
using the axioms and inference rules of the calculus. Such facts include properties that
are true for a given set of inputs. [1]
Two important properties are safety and liveliness properties. Consider the case of the
design of a scheduler. First, the design is encoded as logic formulae in a particularcalculus. By using the theorems and axioms of the calculus one can arrive at a property of
the scheduler stating that the scheduler is mutually exclusive (no two processes can be in
a critical section at the same time). This is a safety property since its shows that the
scheduler is safe from entering incorrect states (in this case the incorrect state is that ofhaving non-mutual exclusion). If a fact can be proved showing that a process waiting to
be scheduled will eventually be executed, then a liveliness property of the scheduler has
been proved. A liveliness property shows that good states will eventually be reached.From these properties one can go on to talk about partial correctness and termination
properties. A program is said to be partially correct if the program gives the correct
output when it terminates. This follows from safety properties. A program has a
-
8/3/2019 Formal Methods - An Overview
2/25
Formal Methods: An Overview2
termination property if it always terminates. This is a liveliness property since
termination is a good state which will eventually happen. [9]
The group of techniques described is called formal methods. When these techniques are
correctly applied, one can build software or hardware that complies perfectly with its
specification, hence behaving as it should. The effort spent in applying formal methodsreduces drastically the number of bugs found in testing and the time taken in bug-fixing
[8].
Due to the complexity of certain systems, formal techniques are applied on the most
important parts of the system. For example, when building a theorem prover theapplication of formal methods will be on the section of the code which performs the
proof.
Whilst these methods help in minimizing human error in building hardware and software,one cannot regard these techniques as panaceas of hardware and software development.
There is no such thing as program that is all correct and one can expect that it is bug-free.[2] argues that the actual behavior of a program depends on the operating system, thehardware and the compiler. One can be surer on the stability of the software built in this
case by studying the behavior of the software with these three entities. Nevertheless, the
application of formal methods has been shown to produce reliable hardware and softwarethat is used in highly critical situations ranging from business applications to spacecraft
[8].
As mentioned previously, there are a number of techniques in formal methods. Not allmethods are equally good for being applied at a particular hardware or software
specification, design or implementation since each method has its own degree of
abstraction and own way how to model the artifact. For example, a method can be usedbetter to model a design at the gate level while another can model better the operation of
a circuit to its change of state in time. Thus the success of application of formal methods
depends on choosing the choice of the method [2]. This write-up is an overview on anumber of techniques used in formal methods.
The overview starts by describing the methods used in giving the semantics of formal
languages which are methods used to describe the meaning in programming languages,followed by temporal Logics: different logics with which one can reason about
statements whose truth value changes with time. An overview of Model Checking and
several methods than can be used in Model Checking such as Binary Decision Diagrams(BDDs) and timed automata are discussed. Runtime Verification, another technique
sitting in between Model Checking and testing and compiler correctness follow the
discussion. A description of the use of the functional paradigm as a meta-language offormal logic is then given.
-
8/3/2019 Formal Methods - An Overview
3/25
Formal Methods: An Overview3
1. Semantics of Programming LanguagesLet us take a valid source code from a programming language. The description of the
meaning of the source code can be done at several levels. The meaning can be describedin several ways, for example using another language or describing the execution being
carried out. The different methods to represent the meaning or semantics of programminglanguages in a rigorous way fall in the field of formal semantics of programming
languages. Such methods include Algebraic Semantics, Denotational Semantics,Axiomatic Semantics and Operational Semantics [4].
1.1Algebraic SemanticsWith algebraic semantics, a program is defined as a mathematical expression. A set of
algebraic laws are written for each statement. These laws govern the behaviour of thecommand when executed. For example, the meaning of an arithmetic operator such as
multiplication can be defined in terms of the laws it obeys such as monotonicity and
associativity. The behaviour of the operator is then described algebraically [10]. Thealgebraic semantics of a programming language are divided into two parts: The domain
or values used are defined, followed by the definition of the functions on these values.
Algebraic Laws are built from the functions that define the behavior. The following
example shows the meaning of a stack data structure using algebraic semantics [2].
The domain is composed of:
NNat
Stack
},{ falsetrueBool
The functions on the domain are defined
Stackcreate :
StackStackNatpush :
StackStackpop :
NatStacktop :
BoolStackempty :
The laws describing the behavior of the stack are defined as
SSNpushpop =)),((
NSNpushtop =)),((
falseSNpushempty =)),((
truecreateempty =)(
-
8/3/2019 Formal Methods - An Overview
4/25
Formal Methods: An Overview4
Although only the type definition of the functions is given, the laws (or axioms) describe
the behavior. The definition of the function is irrelevant as long as the laws are obeyed.
Algebraic semantics provide the best description of ADTs such as in this case [17].
The use of such laws enables programs to be reduced to a normal form. This enables
comparison of programs. In this way it can be shown that two syntactically differentprograms can be semantically equivalent, that is they perform the same task. Ordering of
programs can also be achieved, showing if a program is more specific than another. The
laws can be used to develop and reason on a specification. This specification can then be
transformed directly from the algebra to the actual syntax of the programming language,
thus generating the source code. Algebraic transformations can be used to optimize a
given program.
Algebraic Semantics, like all methods have the following drawback: the meaning given
by the algebra is not easy to comprehend immediately. Although algebraic semantics can
give several advantages, its application in real situations involves having practical
experience in the application of these laws. More specific theorems need to be discoveredto make the application of the laws more practical.
1.2Axiomatic SemanticsThe meaning of a statement in a programming language is described by the change in the
assertions representing the state of the program. The meaning of a statement c is defined
in the following way:
}{}{ QcP
P is an assertion describing the state of the program before the execution of command c .Q is the post condition describing the state of the program after the execution of
command c . The assertions are written in a chosen logic. The entire formula means that
if c is executed, then P must be satisfied before, while Q must be satisfied after execution
[17].
Consider a program (shown in Figure 1) that computes the summation of numbers in an
arrayA . The axiomatic semantics of the program can be used to verify that the output is
correct.
Lines 1 and 11 are the pre-and post-conditions of the program. The pre-condition states
that the sum of the first 0 elements ofA is 0 and that the number of elements in the arrayn is greater than 0. The post-condition states that the sum of the contents of the array is
equal to S. Line 3 states that the summation S is equal to the summation of the first I
elements inA, whereIis less than or equal to the number of elements inA.
The while loop can be entered ifI is less than n. If this is true, the summation of the first
i+1 elements must be equal to the sum of the i+1th element and the summation of the
firstIelements where i+1 is less than or equal to n. After the assignment on line 7 S must
-
8/3/2019 Formal Methods - An Overview
5/25
Formal Methods: An Overview5
be equal to the summation of the first i+1 elements. Line 10 states that the while loop
stops when i is equal to n.
Figure 1 A Summation program given meaning using axiomatic semantics [2]
Showing that the program is correct means showing that the pre and post conditions of
each command are true. To do this, the axioms describing the relation of the pre and post
conditions with the execution of a particular command must be used to show that the
conditions are true.
In the case of the assignment command, the axiom is
}{:]}:[{ PExExP =
This means that ifP is a post condition, then P must also be true before the execution of
the assignment given that x is substituted instead ofE. Lines 1-3 and 6-8 satisfy this
axiom.
The rule of consequence states:
}{}{
}{}{
RcP
RScQP
From this axiom, lines 5-8 can be written as
}1,][{1],1[:,},][{00
nIiAsIIASISnIiAsI
i
I
i+=+++=
-
8/3/2019 Formal Methods - An Overview
6/25
Formal Methods: An Overview6
=
===
-
8/3/2019 Formal Methods - An Overview
7/25
Formal Methods: An Overview7
1.3Denotational SemanticsIn denotational semantics each statement in a programming language is translated into a
denotation. A denotation is a description of the meaning in another language. To do this
the denotational semantics of a programming language is built from three parts: A
description of the syntax of the language, a semantic algebra and a set of valuationfunctions that map the syntax of the language to the semantic algebra. The functions thus
map from the syntactic domain to the semantic domain. To find the meaning of astatement we apply the valuation functions to the command. The result of the function is
an expression in the semantic algebra which denotes the meaning.
Let us give an example of the denotational semantics for the assignment and conditionalstatements. Initially, the syntax of the language is defined:
OperatorO
ExpressionE
CommandC
>
-
8/3/2019 Formal Methods - An Overview
8/25
Formal Methods: An Overview8
falseEec = |2
falseEvct =),(|),( 2
Using these two functions the denotation of the assignment and conditional commands
can be made in the semantic algebra
]:[:: EeVEVc ==
The evaluation of E is done by applyingEand to e. When V is applied to , the valuereturned will be the evaluation ofE.
To evaluate the conditional:
trueEeccelsecthenEifc == |121
If the evaluation of E is true, the denotation of the conditional is the denotation of c1,
otherwise the denotation of c2 is the denotation of the conditional.
Denotational Semantics are useful for the theoretical study of programming languages,especially in compiler construction. The denotations do not necessarily have to be
mathematical objects but any other representation can denote the meaning, such as object
code. In fact systems can be developed that can construct compilers given the
specification in terms of denotational semantics.
1.4Operational SemanticsWith operational semantics the meaning of the program can be understood by viewing
the execution of the program itself. Operational Semantics gives the trace of program
execution. The operational semantics of a programming language is built from two parts:
the first part is similar to that of denotational semantics: a description of the syntax of thelanguage. Then the second part is the definition of an interpreter that describes the
computation. The interpreter can be seen as a function that describes the meaning of a
command c by taking c and the state of the program . is a structure containing thevariables and their corresponding values.. The operational semantics for the programming
language defined in section 1.3 will be defined. The syntactic description is the same as
that for the denotational semantics. The interpreter is defined as follows
As stated, the interpretation function tis defined as Ct: . The function
e evaluates expressions: )(: TNEv . To describe the meaning of the assignment
statement we define the t as:
)],(:[),:( evVEVt ==
The same is done for the conditional statement:
trueEvctcelsecthenEift == ),(|),(),( 121
-
8/3/2019 Formal Methods - An Overview
9/25
Formal Methods: An Overview9
The execution trace in operational semantics can be described using a labelled transition
system. [14] defines a labelled transition system is defined as >< TLSS o ,,, where
S is the set of states
SSo is the initial state
L is the set of possible actions or events in the system
SLST is the set of transition relations.
A transition from state s to 's if there is an action or event a which is given by a
transition relation )',,( sas .
A way of showing if two transition systems are equivalent is by using bi-simulation [14].
One can see if two automata are equivalent if we compare the language generated by the
two automata and so in this case, bi-simulation is not that useful. However Bi-simulation
is useful in pi-calculus, a calculus used for modelling concurrent systems, there are final
no states and thus the approach to determine equivalence used in automata cannot be
used.
Bi simulation can be defined as an equivalence relation SSR where
RqpTqlqqTplpTqp )','()',,'.()',,.(),( . Two states p and q are bi-
similar if the actions from p and q go into states p and q that are bi-similar with each
other.
Although operational semantics does not give information on how to implement the
commands, specifying the programming language using operational semantics is very
convenient since by looking at the described execution trace, one can understand better
what the command should do in relation to the program state. A specification inoperational semantics is thus helpful when developing an interpreter or simulator of a
programming language.
2 Temporal LogicsIn the analysis of hardware and software specification and design, reasoning about the
change of objects in time is very important. Unfortunately propositional and predicate
logic cannot be used to represent such reasoning. For example the statement the light
bulb is on can be true at a certain time but false in another. For this reason an extension
is needed to these logics to provide reasoning on change in time. This is done with
temporal logic. In temporal logic one can represent statements such as The bulb isalways switched on, The light bulb will be eventually switched on and The light bulb
will be switched on until someone switches it off [11]. This is achieved using the
following operators:
P, meaning Always P
P, meaning Eventually, P will be true
-
8/3/2019 Formal Methods - An Overview
10/25
Formal Methods: An Overview10
Temporal logic is used for reasoning in a timeline. In this way there is no need to write
properties as functions of time and the reasoning and proving of properties can be done in
a more elegant and easier way. There are various temporal logics each having a different
way of looking at time. For example, in linear temporal logic reasoning can be done on
only one time line, being deterministic. On the other hand, branching logics can handle
more than one timeline, introducing non-determinism. One example is ComputationalTree Logic (CTL). In CTL one can write statements saying there is a possibility that the
light bulb will be switched off meaning that there exists at least one timeline where there
is an instance where the light bulb is switched off. These different timelines are
represented as different paths in a graph. This is done by introducing path quantifiers that
state for which paths (or timelines) a predicate is true. For example AP means that
Always P is true for all timelines. EP means that there exists at least one path in
which P is always true [5].
Interval temporal logic (ITL) is another logic with which one can reason effectively about
the periods of time. This is very useful in hardware design and analysis where certain
properties of a system can be true for certain periods of time. One type of ITL is DurationCalculus, which is appropriate for the design of real-time systems.
2.1Duration Calculus [11]In duration calculus time is represented as }0{=
+T . This definition of time enables
stating which the order of occurrence of events. State variables are functions that map
from the time domain to {0,1}. State variables cannot vary infinitely often. Removing
this assumption will introduce problems in the calculus. An interval
}^|{],[^
braTrrba = denotes a time slice. An empty interval has length 0. As
mentioned previously, temporal logic was developed to eliminate the use of statevariables as functions of time and in duration calculus this is done by introducing the idea
of a duration. A duration is an amount of time a state Variable P is true in an interval.
This is written as =a
b
dttPP )( . nbaP = ],[ is true if the duration of P in an interval
],[ ba is equal to n . If P is true for the entire duration, then == 11a
b
dtP . P is true if
= 1P . To show that there is an interval which can be divided into two parts where inthe first one P is true and in the second part Q is true, the chop operator ; is used. The
chop operator is defined as === 1^1.,,;c
b
b
a
dtBdtATcbaBA . This operator
is used to describe which state variables are true in a part of the interval. The duration
calculus contains 4 axioms which are
00 =
-
8/3/2019 Formal Methods - An Overview
11/25
Formal Methods: An Overview11
+=+
)()(
0
QPQPQP
P
)();( ==+= sPrPsrP
The and operators are defined in the following way:
P = true ; P ; true
P = P
Note the relation between the always and sometimes operator in temporal logic. With
these axioms and the theorems that can be proved from them, one can prove properties
for real time systems. An induction rule in propositional calculus eases the task of
proving the properties. Given a state P and Xis a predicate in )(XR , the induction rule
is defined as
)()));;()(()(( trueRPXPXXRXRR
The induction rule tells us that if a property R is true on the empty interval and if from
the fact that property is satisfied on part of the interval one can reach the fact that the
property is satisfied by the interval together with another part then the property is trueover the whole interval.
The safety constraints of a gas burner can be defined in duration calculus. For example, a
safety constraint stating that if the gas burner has been on for 60 seconds, leaking timemust be at most 1/20 of the total time. In duration calculus this is written as
120601 Leak (R1)
)(tLeak is true if the gas burner leaks at time t.
The design of the gas burner detects a leak after 1 second from the start of the leak. The
time between two successive leaks is at minimum 30 seconds. These are written as
11 Leak (D1)( ;Leak ;Leak Leak
301 ) (D2)
To show that the gas burner is safe, one must show that the design constraints imply the
security constraints: 12^1 RDD
The induction rule is in fact used to first prove the assertion by first proving on the empty
interval and then showing that if this is true on a part of the interval then it is true for the
interval together with another part. Duration calculus provides a simple notation for
-
8/3/2019 Formal Methods - An Overview
12/25
Formal Methods: An Overview12
expressing these statements by abstracting over time. With the theorems and the
induction rule, the proving of properties of the real-time system such as these examplesbecomes less time-consuming and more elegant.
2.2Discrete Duration Calculus [15]In digital circuits time is represented as pulses of unit time, or discrete time. To simplify
the reasoning of a digital circuit with respect to time a refined form of duration calculuswas developed called discrete duration calculus. In discrete duration calculus, intervals
can be described by ],0[ n where n is an integer. Since time is discrete the smallest
change in time greater than 0 cannot take any value but is the defined by the unit time.Thus the change in time must be a multiple of the unit time. The notion of history is also
present in this calculus. This is given by the >> operator. Given a state variable P a time
n, Pn >> will return a function that given the present time will return the value of P n
units before the present time. Thus:
>=>>
otherwisentPtntPn
|)(|0)(
Discrete duration calculus is further extended with relational duration calculus, with
which reasoning on 0 time events can be done.
2.3Relational Duration Calculus [16]Consider the following code snippet from a Hardware Description language Verilog:
i:=1; j := i; i:= 0. If the behavior were to be modeled using discrete duration
calculus a problem is encountered. The reason is that each of the statement is takes 0time, thus it happens in 0 clock cycles and so is not registered so whenj is assigned to
i, i will have a value of 1, but the value before the assignment. The reasoning above
events that take 0-time long must be introduced in duration calculus. The extension to
duration calculus where such reasoning can be done is called relational duration calculus.This calculus is built upon discrete duration calculus. The pre and post values of the
variables are written for each interval. Thus in this case, the value 0=i is written before
an empty interval and 1=i is written after an empty interval. The chop operator is similar
to the one used in duration calculus but handles also sequence of zero time events which
affect certain state variables. Thus ifi:=1 is event A and i:=2 is event B then using the
chop operator we can write BAi 1
;=
. In this wayj will be assigned to i with value 1 rather
than the value ofi before the assignment to 1.
Relational Duration Calculus can thus be used to model the semantics of Verilog. Since
Verilog describes circuits, there are commands which take a number of time units toexecute and others which take 0 time long like the delay and assignment constructs. As
seen above with relational duration calculus the meaning of assignment is defined using
the chop operator. These semantics of these two types of commands can both bedescribed using relational duration calculus as described above.
-
8/3/2019 Formal Methods - An Overview
13/25
Formal Methods: An Overview13
3. Model Checking [6]Given a model of the system Mand a logical property P , model checking involves the
process to show that P is true forM. Thus, if the system is in an initial state s, with
Model Checking one tries to show that Ps =| . The choice of the model must be made in
a way that the properties of the system can be easily described. The Model built musthave a level of abstraction enough to hide irrelevant details and keep only those relevantto prove correctness. For example, the model for a real-time system should describe the
variation of state over time. The system can be modeled using a state transition diagram
or a Kripke Structure. Informally, a Kripke structure describes state transitions but inaddition, each state contains a number of logical formulae which are true for this state. To
describe properties of systems changing with time, temporal logic is used to write the
statements that describe the model (the property). The property can be written in atemporal logic and then it is shown if the property is true for the model. The computation
of the system can be described by the model as a sequence of states which is achieved by
transitions from one state to the other.
Systems can have multiple paths of execution. Thus properties of such system can be
written in CTL due to its ability of reasoning about multiple time lines. Given a model of
a traffic light controller, it is important to check if this model does not permit that twolights are green at the same time. This is a safety property. This can be written as, in all
execution paths, it is always true that ))()^(( 21 tgreentgreen where 1t and 2t are traffic
lights. This is written as (AG )))()^(( 21 tgreentgreen where A represents all
execution paths and G states that the assertion is globally true throughout the entire
execution path.
It can be shown that the expressive power of LTL and CTL are different. For example in
LTL one cannot specify truths for certain paths as done in CTL using the E quantifier. Onthe other hand strong fairness cannot be expressed in CTL [5]. CTL* is a temporal logicthat has the expressive power of the two temporal logics combined together. In this logic,
the temporal operators can be applied without any constraints. For example one can writeAP, which states that for all paths, P is true infinitely often. Using CTL*, properties
such as fairness can be proved for systems that have more than one computation paths.
For certain instances, the proofs to show that a property is true for a Model can be fullyautomated using Model Checkers. This is done using Model Checking Algorithms that
given a model of the system such as Kripke Structure S and a property described in a
logic such as a CTL* formula f . The algorithm finds if f is true for S . Thus, system
designers do not need to have a huge expertise in proof techniques. The system designers
need only create a model to give as input and encode the requirements of the system aslogical formulae. If a property is not true for a Model, the Model Checker gives a counter
example which helps in understanding the reason of why the property is not true for the
system. Unfortunately, the system can contain a huge number of different computationpaths, leading to the state explosion problem. Different model checking algorithms
handle this problem with techniques to reduce the search space. However, this does not
-
8/3/2019 Formal Methods - An Overview
14/25
Formal Methods: An Overview14
always work and so the model checker must either divide the design and model check
each part on its own or else reduce the number of independent variables.
Model checking is a very important method in formal methods with regards to the
analysis of specification and design of a system. The problems found in the design due to
model checking save effort in redesigning, re-writing the code and testing again. Twoalgorithms that can be used for modeling the system are described in this section: Binary
Decision Diagrams (BDDs) and Timed Automata.
3.1Binary Decision DiagramsBinary Decisions Diagrams (BDDs) are structures that represent Boolean functions. Theidea of BDDs was inspired from the Shannon Expansion [4]. The Shannon Expansion
expresses a Boolean function as the sum of two sub functions. This can be done by
converting the function into if-then-else normal form. To convert a Boolean function
fhaving a variable x in if-then-else normal form the following rule is used
]0[[],1/[ xfxfxf =
The rule says that if x is true then substitute x with 1, otherwise substitute x with 0. Thesub-formulae are then applied the same rule until no sub-formulae contains any more
variables. Thus, each formula is split into two parts, one where the variable is true, and
one where the variable is false. A decision tree can be built from these formulae by
having each formula pointing to each its sub-formulae. For example yxt = in if-then-
else normal form becomes )1,0(),0,1( = yyxt . A more complex example is the
following:
Figure 2 [3]
This function can thus be represented as a Binary Decision Diagram (BDD) as shown in
figure 2. Note that the dashed (solid) edge represents the variable represented in the nodehaving a value 0 (1).
Note that 110t and 000t , 111t and 001t , and 00t and 11t are all equal. Merging these nodes
together we create a binary decision diagram with no duplicate nodes which is
represented in figure 3.
-
8/3/2019 Formal Methods - An Overview
15/25
Formal Methods: An Overview15
The BDD is effectively a graph. In this way one can use graph algorithms to analyze the
Boolean function being represented. A BDD is said to be ordered if node x comes before
node y if yx < . A reduced BDD is a BDD where there are no redundant nodes, that is
no nodes where both edges go to the same node. If a graph has no duplicate nodes, no
redundant nodes and is ordered then the BDD is called Reduced Ordered Binary Decision
Diagram (ROBDD). The BDD in the figure is an ROBDD since it has no redundantnodes and is ordered. Note the small size of an ROBDD compared to the BDD from
where it was converted. It can be shown that there is a unique ROBDD for every Boolean
function and that it takes constant time to see if an ROBDD is a tautology. On the otherhand, the construction of an ordered BDD is computationally intensive. For example
choosing the best ordering for a given BDD is NP-Hard.
Figure 3 The representation of )1,0(),0,1( = yyxt [3]
Figure 3 The ROBDD of Figure 2 [3]
-
8/3/2019 Formal Methods - An Overview
16/25
Formal Methods: An Overview16
Checking if the Boolean formula represented by a BDD is a tautology and if two BDDs
are equivalent takes constant time. BDDs are applied in formal verification in two fields.BDDs can be used to check satisfiability of a Boolean formula and can be also used to
compare if two combinational circuits are equivalent. The output of combinational
circuits is a function of the input given and does not depend on the inputs given
previously. Each circuit is a representation of Boolean formula which has a uniqueROBDD. Hence by comparing the ROBDD of two circuits one can find if two
combinational circuits are equivalent.
3.2Timed Automata [3]As one can see from the temporal logics such as CTL and duration calculus, real-timesystems can be modeled effectively. However it is useful to describe such systems in
terms of transitions between states with respect to the flow of time. This can be achieved
through a specialized form of automata: timed automata.
Given a set of symbols
, while in an automaton, reading a symbol
a in a state b willmake a transition to a state c given tcab ),,( , in a timed automaton, the reading of
symbol a in a state b will make a transition to a state c if the time in the system is .Time is represented by a non-negative real number where if two events a and b happen
at time 1t and 2t , where 12 tt > then b happens later than a . Thus the flow of time can
be described by a sequence of real numbers. Timed automata accept an infinite set of
timed words described by ),( a where *a and is the time at which a is accepted.
Time is represented using the positive real number. A number of clocks can be defined
for a timed automaton. These clocks are real numbers giving the time. Clocks can bereset in a transition and constraints on the time given by a clock can be made. A transition
can happen if a constraint is satisfied. Figure 4 shows an example of a timed automata.
Figure 4 A timed automata producing strings }2.|),){((122
+
-
8/3/2019 Formal Methods - An Overview
17/25
Formal Methods: An Overview17
Formally, we can define a timed automata as a 5 tuple >< ,,,,, tCQQ o where
Q is the set of states
oQ is the initial state
is the alphabet
Cis the set of clocks
)(2 CSStC : the set of transitions.
A transition is described by >< )(,,,', Cass . A transition from s to 's is made by
accepting a , resetting the clocks in to 0 if the constraints on the clocks )(C are true.
Timed automata are used in modeling of real-time finite-state systems. The theory of
automata can then be used to prove properties about the system [18]. An example of such
a system is a gate controller. After describing the design as a timed automaton, certain
properties such as if the gate is never closed longer than an amount of time can be
proved. This is a safety property. Such properties can be proved or disproved by
analyzing the time constraints between the open and closed states. This shows theconvenience of modeling using timed-automata for such systems.
Timed Automata can be used for scheduling problems. The timed automata used here is a
variant of the timed automata described in the timed automata section. This variant can
be described as a 5 tuple >< tfsCQ ,,,, where
Q is the set of states
Cis the set of clocks
s is the initial state
f is the final state
tis a set of transition relations.
The transition functions are of the form >< )(,,', Ccss . The transition from s to s with
the clocks in c reset to 0, happens if the clock constraint )(C is true.
Consider having a set of jobs each made of a number of operations. Each operation needs
to use resource for a fixed time. Only one operation can be put on the machine at a given
time. Finding the start time of each operation and which machine it will use to minimize
the time taken to complete the entire process is known the job-shop scheduling problem.
This problem can be shown to be NP-Complete.
The shop scheduling problem can be posed as a time-automata and the shortest path (in
terms of time) from the initial state to the final state is found. For every job J, one timed
clock is made. For every operationj using a resource m , two states are created. The first
state represents the job waiting to start called m and the second state represents the step
executing m . In the transition between the two states the clock of the job is set to 0. For
example, let us consider two jobs: )}3,(),4,{( 211 mmJ = where )}3,{( 12 mJ = . Each job is
represented as a set of operations. An operation is in turn represented as a tuple
-
8/3/2019 Formal Methods - An Overview
18/25
Formal Methods: An Overview18
),( ba where a is the machine to be used and b is the time allocated on the machine a. The
jobs can be represented as a timed automata as shown in Figure 5.
Figure 5 Job represented as a timed automata. Note that the state corresponds to the machine being
used and the time before a transition can be made (the machine stops) is no less than the time
required for the step to use the machine [18].
However both jobs are in the same system so the two automata have to be combined
together. However, when merging states together one must not merge two states that areusing the same resource to conserve mutual exclusion. Instead of having two states s1
and s2 with the same resource, one must consider the case of having s1 using the resource
while s2 waiting or vice versa. Let us consider the merging of the two automata. Initially,
both machines are waiting to be used. Thus the first state is 11 mm . Now there are two
possibilities: either a transition to 11mm or 11 mm since both jobs need to use the same
resource so one job waits until the other finishes. This is applied to all states and the
automata representing the job-shop scheduling in this case is given below. Note how the
automaton grows for only two jobs. The computationally intensive part is the building of
the automata rather than finding the shortest path. The representation automata of the two
jobs merged together is found in figure 6.
Thus, job-scheduling problem is reduced to a timed-automata and then finding the
shortest path from the initial to the final state is achieved. In this way different techniques
to develop heuristics to get good solutions for the scheduling problem can be found and
different insights on the scheduling problems can be developed.
-
8/3/2019 Formal Methods - An Overview
19/25
Formal Methods: An Overview19
Figure 6 The two jobs described by a single automata. The shortest path in terms of time will give the
optimal schedule. The graph as more than two paths to preserve mutual exclusion [18].
3.3 Runtime Verification [7]In Model Checking a model of the system is checked to see if it satisfies a given property.
Thus Model Checking increases the trust in the design of the system. However, Model
Checking does not check the actual implementation. To check the implementation testing
techniques are used. However testing is neither formal nor does it give any guarantee thatthe implementation satisfies a property. Formal Verification, on the other hand sits
between Model Checking and testing. With Formal Verification one can see if a property
is satisfied along a trace of execution of the system. While increasing the trust of the
system more than testing, it still does not provide a guarantee like in Model Checking
since to do so, all traces of execution must be checked. However, runtime verification is
applied to the running program continuously and if there is a case where the
implementation does not satisfy a property, the failure is logged. In this way, the reason
why that particular execution failed can be used to find the source of the error and change
it in less time.
Runtime verification is achieved by having an observer that views the execution of theprogram and checks that the property is true along all the execution trace. The observer
can be thought of as a monitor. The observer logs information on the execution trace that
can be used for analysis. The properties in this case are expressed in Linear Temporal
Logic since only the actual execution trace is dealt. Thus, only events in one timeline are
being dealt with and the reasoning can be done using this logic.
-
8/3/2019 Formal Methods - An Overview
20/25
Formal Methods: An Overview20
When using runtime verification care must be taken to ensure that the effect of the
observer running with the program does not effect if the property is true for the execution
trace or no. For example suppose that there is a property for a system stating that the time
taken between a request and a response should be less than 200ms. With the system
running without the observer, the property is true for the system. However when the
observer is introduced a slow down can make the property false. One should also takecare of the correctness of the observer of the monitor itself. Incorrect behavior of the
monitor can effect the execution of the program itself, which if run by itself could have
run correctly.
Runtime verification is a method of getting more confident about the correctness of the
implementation of the system. With runtime verification the behavior of the system with
its environment, such as the hardware and operating system is understood better. The
changes of the environment may not be known before execution and these cases cannot
be handled by testing, showing that runtime verification helps in the delivery of a more
reliable system.
4. Compiler Correctness [13]
In the introduction it was mentioned that that the actual behavior of the program built
depends on the compiler and systems software. The behavior of the program can become
more predictable and increases confidence that the program is correct if one can show
that the compiler with the program is being compiled is correct. Compiler Correctness
means that if a statement a in the source language is converted into a statement 'a into the
target language, the meaning of a is the same as the meaning of 'a . Ensuring correctness
implies that when the compiled code is executed it will behave as is defined in the source
code.
Let us suppose that a language that represents expressions involving addition,
subtraction, multiplication and addition is compiled to a target language which is run on a
single address computer with an accumulator and 4 instructions: li (load immediate),
load, store and add. To prove the correctness of the compiler one must start by defining
the semantics of source and target language. As explained in the section on semantics,
semantics provide meaning to each command. By showing that the semantics of the
command in the source language are equal to the semantics in the target language, the
correctness of the compiler is shown. Although the proof of correctness for the compiler
described above is quite straightforward, the task complicates more when other
commands are introduced, such as loops which in the target language can be handled
with jump statements.
Using a compiler that is shown to be correct is of extreme importance in critical systems.
A compiler that has been proved correct implies that behavior of the implementation is
the same as the behavior of the program executed from the object code will behave as
defined in the source code used to produce the object code. Hence the properties true for
the program described in the source will be also true for the program in the object code,
thus increasing further the trust in the system.
-
8/3/2019 Formal Methods - An Overview
21/25
Formal Methods: An Overview21
5. Learning Formal Logic using the Functional Paradigm [12]
The difficulties encountered when learning Formal Logic can be due to various reasons.
One could mention the failure to understand how a proof works. The distinction between
theorems and meta-theorems is also important to understand formal logic. The notation
used can introduce difficulty initially to students. Perhaps having a meta-language withwhich students are familiar to represent the concepts of formal logic can help in reducing
these difficulties. For students who have a background in functional programming,
formal logic can be introduced by using a functional language as the meta-language. The
syntax of functional languages is very readable compared to languages in other
paradigms. The language used in this demonstration is Gofer, the predecessor of Haskell.
The formal logic introduced is Hilbert Logic. In this logic system, well-formed-formulae
(wff) are built from variables, negation and implication. There are three axiom schemas:
)(| ABA (1)
))()(())((| CABACBA (2))()(| ABBA (3)
An axiom schema is a wff where the variables represent any wff. When the variables are
substituted with wff the axiom schema becomes an axiom.
The inference rule used is Modus Ponens:
B
BAA |,|
A proof in Hilbert logic is made of a non-empty set of hypothesis T, a number of steps n
from 1s to ns that lead to a conclusion a. This is written as aT | . Each step can be a
hypothesis, an axiom or an application of Modus Ponens using two previous steps. It can
be shown that Hilbert Logic is both sound and complete. Soundness of a logic system
implies that all conclusion proved are true. Completeness of a logic system implies that
all true conclusions can be proved.
In the functional meta-language a well-formed-form is represented as:
data Wff = Var String | Not Wff | Wff :=> Wff
The structure of the proof is then described. Note that K, S and CP represent axiom
schemas 1,2 and 3 respectively. Hyp and MP represent the Hypothesis and Modus
Ponens respectively.
data Prf = K Wff Wff | S Wff Wff Wff | CP Wff Wff
| Hyp Wff | MP Prf Prf
Sequents relate the set of hypothesis with the conclusion of a proof:Data Seq = [Wff] :|- Wff
-
8/3/2019 Formal Methods - An Overview
22/25
Formal Methods: An Overview22
Function seq gives the sequent described by a proof. seq :: Prf -> Seq. This provides
a way to get the hypothesis and conclusion from a proof.
seq :: Prf -> Seq
seq (K x y) = [] :|- (x :=> (y :=> x))
seq (S x y z) = [] :|- (x:=>(y:=>z)) :=>
(x:=>y):=>(x:=>z)seq (CP x y) = [] :|- (Not x :=> Not y) :=> (y :=> x)
seq (Hyp x) = [x] :|- x
seq (MP p q) = (ws `union` hs) :|- z = if w == x
where ws |- x = seq p
hs |- w :=> z = seq q
Note that seq is a partial function since it assumes that the proof is given in a correct
form. However, a proof must be first checked that it is in a good form before applying it
to seq. The checking of a proof is done using:
gp :: Prf -> Bool
gp (MP p q) = gp p && gp q && isImp cq&& cp == limp cq
where (cp,cq) = (con p,con q)
gp _ = True
isImp x checks ifcq is an implication. limp p returns the left side of the implication p.
con p returns the conclusion of a proofp. Using seq and gp, proof checking can be
achieved. This is done using the function just, which finds if a sequent has all the
hypothesis of the proof and the conclusion of the sequent is the same as that of the proof.
just :: Prf -> Seq -> Bool
just pr (h :|- c) = gp pr && con pr == c &&
hyps pr `subset` h
This is achieved by checking ifpr is a good proof and then checking if the conclusion of
the proof is the same as the conclusion of the sequent. It is then checked if the hypothesis
of the sequent contains all the hypothesis of the proof.
With the just function we can define ch | , )):|``.Prf:(| chjustppch ( .
Students being introduced to formal logic can understand this definition better.
Consider proving xxwffx |.: . This means writing a proof p such that (p x) just
([]:|-x:=>x) is true.
0. xxK)(| xxx
1. x)(xxK ))((| xxxx
2.xx)(xxS
))())((()))(((| xxxxxxxxx
3. 21MP)())((| xxxxx
4. 30MPxx |
-
8/3/2019 Formal Methods - An Overview
23/25
Formal Methods: An Overview23
Using the functional meta-language, the proof can be written as
p x = MP (K x x) (MP (K x (x:=>x)) (S x (x:=>x) x))
Proving even the simplest properties of implication are long, tedious and difficult.
However such proofs can be made easier using the deduction theorem. The deduction
theorem can be written in the following way:
The deduction theorem states that given a set of hypothesis }{hhs , from which c is
concluded, then one can prove that using hs as a hypothesis, one can conclude ch . Forexample, proving ))((| yyxx can be done by first proving yyxx |},{ , then
using the deduction theorem to obtain the actual proof. This can be done by using a
function ded which satisfies:
con p)h :ut` h :|-s p `withojust` (hypded h p `gp p =>
Thus ded, given a proof of form chhs |}{ will create a proof for chhs ! . ded is
an implementation of the construction got from the proof of the deduction theorem. The
deduction theorem is proved by constructing an algorithm that given chhs |}{ ,
creates a proof for chhs ! . Using ded we can prove ))((| yyxx .
1) proofp1 is obtained from yyxx |},{
p1 = MP (Hyp (Var x) (Hyp ((Var x:=>Var y))
2) Secondly, p2 is obtained from yyxx )(|}{
p2 = ded (Var x :=> Var y) p1
Finally, we obtain a proof p3 for ))((| yyxx
p3 = ded (Var x) p2
Using the functional paradigm, a gentler introduction can be given to formal logic.
Concepts which are found difficult in the beginning such as the structure of proofs and
the role of the meta-theorem in Hilbert Logic are explained easily in this manner. A layer
of experimentation with proofs is also obtained where students can practice writing
proofs.
Conclusion
The more complex and critical systems are, the more important it is to reduce to
minimum errors in the system. Correctly applied design and testing techniques achieve
conchs :|- h:conc` [h]) :|-(hs `union =>
-
8/3/2019 Formal Methods - An Overview
24/25
Formal Methods: An Overview24
this up to a certain degree. For example, with these techniques alone one cannot show
that a design of vending machine gives back the exact change exactly. To ensure that a
design meets the requirements or that the implementation is faithful to the design formal
methods have to be used. As already mentioned not all methods are equally good to be
used on any system. Experience and expertise are necessary in employing these methods
successfully. For example in the case of using axiomatic semantics finding an invariantfor a while loop is not an easy task and requires skill. Neither is the task of finding the
property which is true for the entire interval in duration calculus. However from the
number of success stories of formal method one can see that the correct use of the
methods described to specify, model and verify systems leads to a software or hardware
product of a much higher quality.
References
[1] What is formal methods? http://shemesh.larc.nasa.gov/fm/fm-what.html. Last
Referenced: 13th April 2007.
[2] Anthony A. Aaby. Semantics of Programming Languages.http://cs.wwc.edu/ aabyan/LN/PL/book/book.html Last Referenced: 13th April
2008, 2004.
[3] Dill Alur. A theory of timed automata. Theoretical Computer Science, 126:183
235, 1994.
[4] Henrik Leif Anderson. An introduction to binary decision diagrams. In Lecture
Notes for 49285 Advanced Algorithms E97. Technical University of Denmark,
1997.
[5] Alessandro Artale. Formal Methods: Computational Tree Logic.
http://www.inf.unibz.it/ artale/FM/slide4.pdf. Last Referenced: 13th April 2007,
2007.
[6] E.M. Clarke.Model Checking, chapter 3. 2000.[7] Marc Geilen. On the construction of monitors for temporal logic properties.
Electronic Notes in Theoretical Computer Science, 2001.
[8] Anthony Hall. Seven myths of formal methods.IEEE Software, 7, 1990.
[9] David Harel.Algorithics - The Spirit of Computing. Addison-Wesley, 1987.
[10] C.A.R. Hoare. Laws of programming. Communications of the ACM, 30:672686,
1988.
[11] C.A.R. Hoare. A calculus of durations. Information Processing Letters, 40:269
276, 1991.
[12] B.A. Sufrin J. Leifer. Deduction for functional programmers. Functional Pearl,
Journal of Functional Programming, 6:365373, 1993.
[13] John McCarthy and James Painter. Correctness of a compiler for arithmeticexpressions. Proceedings Symposium in Applied Mathematics, Vol. 19,
Mathematical Aspects of Computer Science, pages 3341, 1967.
[14] Robin Milner.A Calculus of Communicating Systems. 1980.
[15] Gordon J. Pace. Hardware Design Based on Verilog HDL. PhD thesis, Oxford
University, 1998.
[16] Gordon J. Pace. Hardware Design Based on Verilog HDL. PhD thesis, Oxford
University, 1998.
-
8/3/2019 Formal Methods - An Overview
25/25
Formal Methods: An Overview25
[17] Kenneth Slonneger. Syntax and Semantics of Programming Languages. Addison-
Wesley, 1995.
[18] Oded Maler Yasmina Abdeddaim. Jobshop scheduling using timed automata.
Computer Aided Verification, pages 478492, 2001.