Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
why3
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
122
Issues
122
List
Boards
Labels
Service Desk
Milestones
Merge Requests
15
Merge Requests
15
Operations
Operations
Incidents
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Why3
why3
Commits
bcae786c
Commit
bcae786c
authored
May 09, 2012
by
MARCHE Claude
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Doc: standard library updated, with ref to the URL of the on-line
doc generated by why3doc
parent
c854f2d9
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
98 additions
and
149 deletions
+98
-149
ROADMAP
ROADMAP
+7
-10
doc/library.tex
doc/library.tex
+85
-133
doc/manpages.tex
doc/manpages.tex
+1
-1
doc/manual.tex
doc/manual.tex
+1
-1
doc/syntax.tex
doc/syntax.tex
+3
-3
doc/whyml.tex
doc/whyml.tex
+1
-1
No files found.
ROADMAP
View file @
bcae786c
...
...
@@ -85,14 +85,21 @@
- also: BTS 13736
https://gforge.inria.fr/tracker/index.php?func=detail&aid=13736&group_id=2990
* Documentation
- (ANDREI) make the glossary available
- (CLAUDE) revoir documentation du smoke detector
- (CLAUDE) complete api.tex: explain how to build theories, apply
transformations, write new functions on terms (A)
* detect editors
*** check if coqide and also emacs/proof-general is installed
* deplacer option -bench de why3replayer dans une commande de why3session
* IDE
** todo: run detection immediately at start up if conf file absent or
outdated. should become doable with the new Session module
...
...
@@ -104,9 +111,6 @@ https://gforge.inria.fr/tracker/index.php?func=detail&aid=13736&group_id=2990
* (JCF) reject global "val"s in typing environment for logic decls.
* (CLAUDE) complete api.tex: explain how to build theories, apply
transformations, write new functions on terms (A)
==================== Roadmap for release 0.72 ========================
...
...
@@ -175,11 +179,6 @@ See manual Section xx
install.tex:179:% \todo{que devient l'option -to-known-prover de why3session ?
manpages.tex:790:% \todo{A adapter en fonction de la decision sur l'upgrade de prover}
library.tex:8:\todo{Plutot la version produite avec why3doc}
library.tex:42:\section{Library \texttt{int}} \todo{Completer}
library.tex:120:\section{Library \texttt{array}} \todo{Mettre a jour}
library.tex:224:\section{Library \texttt{string}} \todo{Detailler}
manpages.tex:15:\item[\texttt{why3bench}] produces benchmarks \todo{obsolete ?}
manpages.tex:809:\section{The \texttt{why3doc} tool} \todo{Documenter}
...
...
@@ -190,8 +189,6 @@ See manual Section xx
ses realisations ne pas oublier de dire que les dependances avec le
.why ou .mlw: ne sera pas vérifié
- (CLAUDE) revoir documentation du smoke detector
- DONE Documenter l'utilisation de plusieurs versions du meme
prouveur comme CVC3 et Z3
...
...
doc/library.tex
View file @
bcae786c
\chapter
{
Standard Library
: Why3 Theories
}
\chapter
{
Standard Library
}
\label
{
chap:library
}
We provide here a short description of logic symbols defined in the
standard library. Only the most general-purpose ones are
described. For more details, one should directly read the
corresponding file,
\todo
{
Plutot la version produite avec why3doc
}
or alternatively, use the
\verb
|
why3
|
with option
This chapter provides a short description of the contents of
\why
standard library. It contains both standard logic theories, described
in Section~
\ref
{
sec:stdlib
}
, and standard ML modules, described in
Section~
\ref
{
sec:mllibrary
}
.
Only a rough introduction of the theories and modules is given
here. For detailed information, one should refer to the on-line
documentation automatically generated from the actual sources,
available at
\url
{
http://why3.lri.fr/stdlib/
}
.
\section
{
Standard Theories
}
\label
{
sec:stdlib
}
We present the most important theories here, see the URL above for the
others.
Notice there is an alternative way to explore the contents of a
library, using the
\verb
|
why3
|
command with option
\verb
|
-T
|
and a qualified theory name, for example:
\begin{verbatim}
> why3 -T bool.Ite
...
...
@@ -23,160 +36,128 @@ theory Ite
end
\end{verbatim}
In the following, for each library, we describe the
(main) symbol
s
In the following, for each library, we describe the
main theorie
s
defined in it.
\section
{
Library
\texttt
{
bool
}}
\s
ubs
ection
{
Library
\texttt
{
bool
}}
\begin{description}
\item
[Bool]
boolean data type
\verb
|
bool
|
with constructors
\verb
|
True
|
and
\verb
|
False
|
;
operations
\verb
|
andb
|
,
\verb
|
orb
|
,
\verb
|
xorb
|
,
\verb
|
notb
|
.
\item
[Bool]
provides the Boolean data type
\verb
|
bool
|
with
constructors
\verb
|
True
|
and
\verb
|
False
|
; and
operations
\verb
|
andb
|
,
\verb
|
orb
|
,
\verb
|
xorb
|
,
\verb
|
notb
|
.
\item
[Ite]
polymorphic if-then-else operator written as
\verb
|
ite
|
.
\item
[Ite]
p
rovides the p
olymorphic if-then-else operator written as
\verb
|
ite
|
.
\end{description}
\section
{
Library
\texttt
{
int
}}
\todo
{
Completer
}
\subsection
{
Library
\texttt
{
int
}}
\begin{description}
\item
[Int]
basic operations
\verb
|
+
|
,
\verb
|
-
|
and
\verb
|
*
|
; comparison
operators
\verb
|
<
|
,
\verb
|
>
|
,
\verb
|
>=
|
and
\verb
|
<=
|
.
\item
[Int]
provides the basic operations
\verb
|
+
|
,
\verb
|
-
|
and
\verb
|
*
|
; and comparison operators
\verb
|
<
|
,
\verb
|
>
|
,
\verb
|
>=
|
and
\verb
|
<=
|
.
\item
[Abs]
absolute value written as
\verb
|
abs
|
.
\item
[Abs]
provides the
absolute value written as
\verb
|
abs
|
.
\item
[EuclideanDivision]
division and modulo, where division rounds
\item
[EuclideanDivision]
d
efines d
ivision and modulo, where division rounds
down, written as
\verb
|
div
|
and
\verb
|
mod
|
.
\item
[ComputerDivision]
division and modulo, where division rounds to
\item
[ComputerDivision]
d
efines d
ivision and modulo, where division rounds to
zero, also written as
\verb
|
div
|
and
\verb
|
mod
|
.
\item
[MinMax]
\verb
|
min
|
and
\verb
|
max
|
operators.
\item
[MinMax]
provides
\verb
|
min
|
and
\verb
|
max
|
operators.
\end{description}
\section
{
Library
\texttt
{
real
}}
See the on-line web documentation for the other theories defined in the
\texttt
{
int
}
library.
\subsection
{
Library
\texttt
{
real
}}
\begin{description}
\item
[Real]
basic operations
\verb
|
+
|
,
\verb
|
-
|
,
\verb
|
*
|
and
\verb
|
/
|
;
\item
[Real]
provides
basic operations
\verb
|
+
|
,
\verb
|
-
|
,
\verb
|
*
|
and
\verb
|
/
|
;
comparison operators.
\item
[RealInfix]
basic operations with alternative syntax
\verb
|
+.
|
,
\item
[RealInfix]
provides
basic operations with alternative syntax
\verb
|
+.
|
,
\verb
|
-.
|
,
\verb
|
*.
|
,
\verb
|
/.
|
,
\verb
|
<.
|
,
\verb
|
>.
|
,
\verb
|
<=.
|
and
\verb
|
>=.
|
, to
allow simultaneous use of integer and real operators.
\item
[Abs]
absolute value written as
\verb
|
abs
|
.
\item
[Abs]
provides
absolute value written as
\verb
|
abs
|
.
\item
[MinMax]
\verb
|
min
|
and
\verb
|
max
|
operators.
\item
[MinMax]
provides
\verb
|
min
|
and
\verb
|
max
|
operators.
\item
[FromInt]
operator
\verb
|
from_int
|
to convert an integer to a real.
\item
[FromInt]
provides the
operator
\verb
|
from_int
|
to convert an integer to a real.
\item
[Truncate]
conversion operators from real to integers:
\item
[Truncate]
provides
conversion operators from real to integers:
\verb
|
truncate
|
rounds to 0,
\verb
|
floor
|
rounds down and
\verb
|
ceil
|
rounds up.
\item
[Square]
operators
\verb
|
sqr
|
and
\verb
|
sqrt
|
for square and square root.
\item
[Square]
provides
operators
\verb
|
sqr
|
and
\verb
|
sqrt
|
for square and square root.
\item
[ExpLog]
functions
\verb
|
exp
|
,
\verb
|
log
|
,
\verb
|
log2
|
, and
\verb
|
log10
|
.
%
\item[ExpLog] functions \verb|exp|, \verb|log|, \verb|log2|, and \verb|log10|.
\item
[PowerReal]
function
\verb
|
pow
|
with two real parameters.
%
\item[PowerReal] function \verb|pow| with two real parameters.
\item
[PowerInt]
function
\verb
|
pow
|
with integer only exponents.
%
\item[PowerInt] function \verb|pow| with integer only exponents.
\item
[Trigonometry]
functions
\verb
|
cos
|
,
\verb
|
sin
|
,
\verb
|
tan
|
, and
\verb
|
atan
|
. Constant
\verb
|
pi
|
.
%
\item[Trigonometry] functions \verb|cos|, \verb|sin|, \verb|tan|, and
%
\verb|atan|. Constant \verb|pi|.
\item
[Hyperbolic]
functions
\verb
|
cosh
|
,
\verb
|
sinh
|
,
\verb
|
tanh
|
,
\verb
|
acosh
|
,
\verb
|
asinh
|
,
\verb
|
atanh
|
.
%
\item[Hyperbolic] functions \verb|cosh|, \verb|sinh|, \verb|tanh|,
%
\verb|acosh|, \verb|asinh|, \verb|atanh|.
\item
[Polar]
functions
\verb
|
hypot
|
and
\verb
|
atan2
|
.
%
\item[Polar] functions \verb|hypot| and \verb|atan2|.
\end{description}
\section
{
Library
\texttt
{
floating
\_
point
}}
See the on-line web documentation for the other theories defined in the
\texttt
{
real
}
library, such exponential, logarithm, power,
trigonometric functions.
\subsection
{
Library
\texttt
{
floating
\_
point
}}
This library provides a theory of IEEE-754 floating-point numbers. It
is inspired by~
\cite
{
ayad10ijcar
}
.
\begin{description}
\item
[Rounding]
type
\verb
|
mode
|
with 5 constants
\verb
|
NearestTiesToEven
|
,
\verb
|
ToZero
|
,
\verb
|
Up
|
,
\verb
|
Down
|
and
\verb
|
NearTiesToAway
|
.
\item
[SpecialValues]
handling of infinities and NaN.
\item
[GenFloat]
generic floats parameterized by the maximal
representable number. Functions
\verb
|
round
|
,
\verb
|
value
|
,
\verb
|
exact
|
,
\verb
|
model
|
, predicate
\verb
|
no_overflow
|
.
\item
[Single]
instance of GenFloat for 32-bits single precision numbers.
\item
[Double]
instance of GenFloat for 64-bits double precision numbers.
\end{description}
\subsection
{
Library
\texttt
{
map
}}
This library provides the data type of purely applicative maps. It is
polymorphic both in the index type and the contents. There are also a
few theories and operators specialized to maps indexed by integers,
such as the sorted predicate, permutation, etc.
\s
ection
{
Library
\texttt
{
array
}}
\s
ubsection
{
Library
\texttt
{
option
}}
\todo
{
Mettre a jour
}
This library provides the classical ML option type with constructors
\verb
|
None
|
and
\verb
|
Some
|
.
\
begin{description
}
\
subsection
{
Library
\texttt
{
list
}
}
\item
[Array]
polymorphic arrays, a.k.a maps. Type
\verb
|
t
|
parameterized by both the type of indices and the type of
data. Functions
\verb
|
get
|
and
\verb
|
set
|
to access and update
arrays. Function
\verb
|
create_const
|
to produce an array initialized
by a given constant.
This library provides the classical ML type of polymorphic lists, with
constructors
\verb
|
Nil
|
and
\verb
|
Cons
|
. Most of the classical list
operators are provided in separate theories.
\
item
[ArrayLength]
arrays indexed by integers and holding their
length. Function
\verb
|
length
|
.
\
section
{
Standard ML Modules
}
\label
{
sec:mllibrary
}
\item
[ArrayRich]
additional functions on arrays indexed by
integers. Functions
\verb
|
sub
|
and
\verb
|
app
|
to extract a sub-array
and append
arrays.
The standard ML modules provided allow to write imperative
programs. The two main modules are the one providing ML references,
and the one providing
arrays.
\
end{description
}
\
subsection
{
Library
\texttt
{
ref
}
}
\section
{
Library
\texttt
{
option
}}
\begin{description}
\item
[Option]
data type
\verb
|
option 'a
|
with constructors
\verb
|
None
|
and
\verb
|
Some
|
.
\end{description}
\section
{
Library
\texttt
{
list
}}
\begin{description}
\item
[List]
data type
\verb
|
list 'a
|
with constructors
\verb
|
Nil
|
and
\verb
|
Cons
|
.
\item
[Length]
function
\verb
|
length
|
\item
[Mem]
function
\verb
|
mem
|
for testing for list membership.
\item
[Nth]
function
\verb
|
nth
|
for extract the
$
n
$
-th element.
\item
[HdTl]
functions
\verb
|
hd
|
and
\verb
|
tl
|
.
\item
[Append]
function
\verb
|
append
|
, concatenation of lists.
\item
[Reverse]
function
\verb
|
reverse
|
for list reversal.
\item
[Sorted]
predicate
\verb
|
sorted
|
for lists of integers.
\item
[NumOcc]
number of occurrences in a list.
\item
[Permut]
list permutations.
\item
[Induction]
structural induction on lists.
\item
[Map]
list map operator.
\end{description}
\chapter
{
Standard Library: Why3ML Modules
}
\label
{
chap:mllibrary
}
\section
{
Library
\texttt
{
ref
}}
\begin{description}
\item
[Ref]
references
\emph
{
i.e.
}
mutable variables:
\item
[Ref]
provides references
\emph
{
i.e.
}
mutable variables:
type
\verb
|
ref 'a
|
and functions
\verb
|
ref
|
for creation,
\verb
|
(!)
|
for access, and
\verb
|
(:=)
|
for mutation
\item
[Refint]
references with additional functions
\texttt
{
incr
}
and
\texttt
{
decr
}
over integer references
\verb
|
(!)
|
for access, and
\verb
|
(:=)
|
for mutation
.
\item
[Refint]
provides additional functions
\texttt
{
incr
}
,
\texttt
{
decr
}
and a few others, over integer references.
\end{description}
\section
{
Library
\texttt
{
array
}}
\s
ubs
ection
{
Library
\texttt
{
array
}}
\begin{description}
\item
[Array]
polymorphic arrays (type
\texttt
{
array 'a
}
, infix
...
...
@@ -191,42 +172,13 @@ is inspired by~\cite{ayad10ijcar}.
(
\verb
|
permut_sub
|
and
\verb
|
permut
|
)
\end{description}
\section
{
Library
\texttt
{
queue
}}
\begin{description}
\item
[Queue]
polymorphic mutable queues (type
\texttt
{
t 'a
}
and
functions
\texttt
{
create
}
,
\texttt
{
push
}
,
\texttt
{
pop
}
,
\texttt
{
top
}
,
\texttt
{
clear
}
,
\texttt
{
copy
}
,
\texttt
{
is
\_
empty
}
,
\texttt
{
length
}
)
\end{description}
\section
{
Library
\texttt
{
stack
}}
\begin{description}
\item
[Stack]
polymorphic mutable stacks (type
\texttt
{
t 'a
}
and
functions
\texttt
{
create
}
,
\texttt
{
push
}
,
\texttt
{
pop
}
,
\texttt
{
top
}
,
\texttt
{
clear
}
,
\texttt
{
copy
}
,
\texttt
{
is
\_
empty
}
,
\texttt
{
length
}
)
\end{description}
\section
{
Library
\texttt
{
hashtbl
}}
\subsection
{
Standard Data Types
}
\begin{description}
\item
[Hashtbl]
hash tables with monomorphic keys (type
\texttt
{
key
}
)
and polymorphic values (type
\texttt
{
t 'a
}
of hash tables, syntax
$
h
[
k
]
$
for access, functions
\texttt
{
create
}
,
\texttt
{
clear
}
,
\texttt
{
add
}
,
\texttt
{
mem
}
,
\texttt
{
find
}
,
\texttt
{
find
\_
all
}
,
\texttt
{
copy
}
,
\texttt
{
remove
}
, and
\texttt
{
replace
}
)
\end{description}
A few other classical data types are provided, such as queues (library
\texttt
{
queue
}
), stacks (library
\texttt
{
stack
}
), hash tables (library
\texttt
{
hashtbl
}
), characters and strings (library
\texttt
{
string
}
),
etc.
\section
{
Library
\texttt
{
string
}}
\todo
{
Detailler
}
\begin{description}
\item
[Char]
\item
[String]
\end{description}
%%% Local Variables:
%%% mode: latex
...
...
doc/manpages.tex
View file @
bcae786c
...
...
@@ -583,7 +583,7 @@ nothing. On the other hand if the proof is obsolete we mark it with an
For example, here are the session tree produced on the ``hello
proof'' example of Section~
\ref
{
chap:starting
}
.
{
\
footnote
size
{
\
script
size
\begin{verbatim}
hello
_
proof---../hello
_
proof.why?---HelloProof?-+-G3-+-Alt-Ergo (0.93)
| `-Simplify (1.5.4)?
...
...
doc/manual.tex
View file @
bcae786c
...
...
@@ -44,7 +44,7 @@
\begin{document}
\sloppy
\hbadness
=
1
000
\hbadness
=
5
000
\thispagestyle
{
empty
}
...
...
doc/syntax.tex
View file @
bcae786c
...
...
@@ -11,7 +11,7 @@ These declarations can be directly written in the theory or taken from
existing theories. The base logic of
\why
is first-order
logic with polymorphic types.
\s
ubs
ection
{
Example 1: lists
}
\section
{
Example 1: lists
}
The Figure~
\ref
{
fig:tutorial1
}
contains an example of
\why
input
text, containing three theories. The first theory,
\texttt
{
List
}
,
...
...
@@ -109,7 +109,7 @@ Note that the type signature of \lstinline{sorted} predicate does not
include the name of a parameter (see
\texttt
{
l
}
in the definition
of
\texttt
{
length
}
): it is unused and therefore optional.
\s
ubs
ection
{
Example 1 (continued): lists and abstract orderings
}
\section
{
Example 1 (continued): lists and abstract orderings
}
In the previous section we have seen how a theory can reuse the
declarations of another theory, coming either from the same input
...
...
@@ -294,7 +294,7 @@ written as:
However, since
\why
favours short theories over long and complex ones,
this feature is rarely used.
\s
ubs
ection
{
Example 2: Einstein's problem
}
\section
{
Example 2: Einstein's problem
}
\index
{
Einstein's logic problem
}
We now consider another, slightly more complex example: how to use
\why
...
...
doc/whyml.tex
View file @
bcae786c
...
...
@@ -86,7 +86,7 @@ The additional keyword \texttt{module} means that we are looking for
and
\texttt
{
array.mlw
}
here), instead of
\texttt
{
.why
}
files.
Modules
\texttt
{
Ref
}
and
\texttt
{
Array
}
respectively provide a type
\texttt
{
ref 'a
}
for references and a type
\texttt
{
array 'a
}
for
arrays (see
Chapter~
\ref
{
chap
:mllibrary
}
), together with useful
arrays (see
Section~
\ref
{
sec
:mllibrary
}
), together with useful
operations and traditional syntax.
We are now in position to define a program function
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment