Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Alethe
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Model registry
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
veriT
Alethe
Commits
c4ce2387
Commit
c4ce2387
authored
2 years ago
by
Hans-Jörg
Browse files
Options
Downloads
Patches
Plain Diff
Add Notation section
parent
b0fac417
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
spec/spec.tex
+68
-21
68 additions, 21 deletions
spec/spec.tex
with
68 additions
and
21 deletions
spec/spec.tex
+
68
−
21
View file @
c4ce2387
...
...
@@ -210,6 +210,7 @@ break
\maketitle
\tableofcontents
\thispagestyle
{
empty
}
\clearpage
\begin{abstract}
...
...
@@ -259,6 +260,7 @@ get in touch!
\hspace*
{
\fill
}
The authors.
\end{abstract}
\section
{
Introduction
}
This document is a reference of the
Alethe
\footnote
{
Alethe is a genus of small birds that occur in West Africa~
\cite
{
wp:alethe
}
.
The name was chosen, because it
...
...
@@ -269,15 +271,19 @@ such as interactive theorem provers or proof checkers. The design
is based on natural-deduction style structure
and rules generating and operating on first-order clauses.
%
The Alethe
calculus
consists of two parts: the proof
The Alethe
proof format
consists of two parts: the proof
language based on
{
\smtlib
}
and a collection of proof rules.
Section~
\ref
{
sec:alethe:language
}
introduces the language. First as an
abstract language, then as a concrete syntax.
Section~
\ref
{
sec:alethe:semantic
}
then discusses an abstract procedure
to check Alethe proofs. This abstract checking procedure specifies
the semantic of Alethe proofs.
%
Section~
\ref
{
sec:alethe:rules-generic
}
discusses the core
concepts behind the Alethe proof rules.
The Alethe proof rules are discussed in two sections.
First, Section~
\ref
{
sec:alethe:rules-generic
}
discusses the core
concepts behind the rules.
%
The
Section~
\ref
{
apx:rules
}
presents a list of
Second,
Section~
\ref
{
apx:rules
}
presents a list of
all proof rules currently used by
{
\verit
}
.
Alethe follows a few core design principles. First, proofs should
...
...
@@ -291,25 +297,24 @@ be uniform for all theories used by SMT solvers. With the exception
of clauses for propositional reasoning, there is no dedicated syntax for
any theory.
The
format is currently used by
the SMT solver
{
\verit
}
. If requested
The
Alethe format was originally developed for
the SMT solver
{
\verit
}
. If requested
by the user,
{
\verit
}
outputs a proof if it can deduce that the input problem is
unsatisfiable. In proof production mode,
{
\verit
}
supports the theory of
uninterpreted functions, the theory of linear integer and real arithmetic, and
quantifiers.
The SMT solver
{
\cvcfive
}
~
\cite
{
barbosa-2022
}
(the successor of
{
\cvcfour
}
) supports Alethe experimentally as one of its multiple proof
output formats.
%
The
Alethe proofs can be reconstructed by the
\tactic
{
smt
}
tactic of
the proof assistant
{
\isabelle
}
~
\cite
{
fleury-2019,schurr-2021
}
~(see
Section~
\ref
{
sec:reconstruction
}
).
The
\tool
{
SMTCoq
}
tool can
Alethe proofs can be reconstructed by the
\tactic
{
smt
}
tactic of
the proof assistant
{
\isabelle
}
~
\cite
{
fleury-2019,schurr-2021
}
.
The
\tool
{
SMTCoq
}
tool can
reconstruct an older version of the format in the
proof assistant
\tool
{
Coq
}
~
\cite
{
SMTCoq
}
. An effort to update the
tool to the latest version of Alethe is ongoing.
%
The SMT solver
{
\cvcfive
}
~
\cite
{
barbosa-2022
}
(the successor of
{
\cvcfour
}
) supports Alethe experimentally as one of its multiple proof
output formats.
%
Furthermore, there is an experimental
high-performance proof checker written in Rust.
\footnote
{
Available at
Furthermore,
\tool
{
Carcara
}
is an experimental
high-performance
\index
{
proof chcker
}
proof checker written in Rust.
\footnote
{
Available at
\url
{
https://github.com/ufmg-smite/carcara
}
.
}
In addition to this reference, the proof format has been discussed in past
...
...
@@ -322,6 +327,49 @@ More recently, the format has gained support for reasoning typically used for
processing, such as skolemization, substitutions, and other manipulations of
bound variables~
\cite
{
barbosa-2019
}
.
\subsection
{
Notations
}
The notation used in this document is similar to the notation
used by the SMT-LIB standard. The Alethe proof format uses precisely
the SMT-LIB logic. Since the SMT-LIB language is based on
S-expressions
\index
{
S-expression
}
, SMT-LIB formulas are written using
a λ-calculus style. That is, instead of
$
f
(
1
,
2
)
$
, we write
$
(
f
\,
1
\,
2
)
$
.
However, connectives that a usually written using infix notation, also
use infix notation here. That is, we write
$
t
_
1
\lor
t
_
2
$
, not
$
(
\lor\,
t
_
1
\,
t
_
2
)
$
.
We use
$
x, y, z
$
to indicate variables,
$
f, g
$
for functions, and
$
P, Q
$
for predicates (functions with co-domain
sort
$
\lsymb
{
Bool
}$
. To indicate terms we use
$
t, u
$
and to indicate
formulas (terms of sort
$
\lsymb
{
Bool
}$
) we use
$
\varphi
,
\psi
$
.
To distinguish syntactic equality and the SMT-LIB equality predicate,
we write
$
=
$
for the former, and
$
≈
$
for the later.
We will write pre-defined SMT-LIB symbols, such as sorts and functions,
in bold (e.g.,
$
\lsymb
{
Bool
}$
,
$
\lsymb
{
ite
}$
).
We will use
$
θ
$
to denote a
substitution
\index
{
substitution
}
.
The notation
$
[
x₁ ↦ t₁, …, x
_
n ↦ t
_
n
]
$
denotes the substitution
that maps
$
x
_
i
$
to
$
t
_
i
$
for
$
1
≤ i ≤ n
$
and corresponds to the
identity function for all other variables. If
$
θ
$
and
$
η
$
are two
substitutions, then
$
θη
$
denotes the result of first applying
$
θ
$
and then
$
η
$
(i.e.,
$
η
(
θ
(
.
))
$
). A substitution can naturally be extended
to a function that maps terms to terms by replacing the occurrences of
free variables.
%
We write
$
t
[
\,
]
$
for a term with a hole
\index
{
hole
}
and
$
t
[
u
]
$
for the term where
the hole has been replaced by
$
u
$
. Any term has at most one hole.
%
We also use holes with multiple variables.
%
The notation
$
t
[
x
_
1
,
\dots
, x
_
n
]
$
stands for a term that may depend on distinct
variables
$
x
_
1
,
\dots
, x
_
n
$
.
%
$
t
[
s
_
1
,
\dots
, s
_
n
]
$
is the respective term where the variables
$
x
_
1
,
\dots
, x
_
n
$
are
simultaneously substituted by
$
s
_
1
,
\dots
, s
_
n
$
.
Note that we will introduce the Alethe specific notation to write proof steps
in the following sections.
\section
{
The Alethe Language
}
\label
{
sec:alethe:language
}
...
...
@@ -353,8 +401,7 @@ understand the proof step by step.
\paragraph
{
Many-Sorted First-Order Logic.
}
Alethe builds on the
{
\smtlib
}
language.
%
This includes its many-sorted first-order logic described in
Section~
\ref
{
sec:ti-logic
}
.
% TODO: clarify!
This includes its many-sorted first-order logic.
The available sorts depend on
the selected
{
\smtlib
}
theory/logic as well as on those defined by the user, but the
distinguished
$
\lsymb
{
Bool
}$
sort is always available.
...
...
@@ -1467,7 +1514,7 @@ proof rules. Currently, the proof rules correspond to the rules
that the solver
{
\verit
}
can emit. For the rest of this section, we will discuss some
general concepts related to the rules.
\
subsection
{
Tautologous Rules and Simple Deduction
}
\
paragraph
{
Tautologous Rules and Simple Deduction
}
Most rules introduce tautologies. One example is
the
\proofRule
{
and
_
pos
}
rule:
$
\neg
(
\varphi
_
1
\land
\varphi
_
2
\land
\dots
\land
\varphi
_
n
)
,
\varphi
_
i
$
.
...
...
@@ -1480,7 +1527,7 @@ rule eliminates an implication: From $\varphi_1 → \varphi_2$,
it deduces
$
\neg
\varphi
_
1
,
\varphi
_
2
$
.
\
subsection
{
Resolution.
}
\
paragraph
{
Resolution.
}
{
\cdclt
}
-based SMT solvers, and especially their SAT solvers,
are fundamentally based on resolution of clauses.
Hence, Alethe also has dedicated clauses and a resolution proof
...
...
@@ -1507,7 +1554,7 @@ The premises of a resolution step are clauses, and the conclusion
is a clause that has been derived from the premises by some binary
resolution steps.
\
subsection
{
Quantifier Instantiation
}
\
paragraph
{
Quantifier Instantiation
}
\label
{
reference=rule:forall
_
inst
}
To express quantifier instantiation, the rule
\proofRule
{
forall
_
inst
}
is used. It produces a formula of the form
$
(
\neg
\forall
\bar
...
...
@@ -1525,7 +1572,7 @@ equalities obscures which terms have been used as instances.
Existential quantifiers are handled by skolemization.
\
subsection
{
Linear Arithmetic
}
\
paragraph
{
Linear Arithmetic
}
Proofs for linear arithmetic use a number of straightforward rules,
such as
\proofRule
{
la
_
totality
}
(
$
t
_
1
\leq
t
_
2
\lor
t
_
2
\leq
t
_
1
$
)
\footnote
{
This rule also has a unit clause with a disjunction as its conclusion.
}
...
...
@@ -1556,7 +1603,7 @@ of $(x+y<1) \lor$ $(3<x)$, $x≈ 2$, and $0≈ y$.
\end{Alethe}
\end{example}
\
subsection
{
Skolemization and Other Preprocessing Steps
}
\
paragraph
{
Skolemization and Other Preprocessing Steps
}
One typical example for a rule with context is the
\proofRule
{
sko
_
ex
}
rule that is used to express skolemization of an existentially
quantified variable.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment