Information Technology Reference
In-Depth Information
We have formalized polynomial reductions in the framework of abstract re-
ductions developed in [11]. This approach will allow us to export, by functional
instantiation, well-known properties of abstract reductions (for example, New-
man's lemma) to the case of polynomial reductions, avoiding the need to prove
them from scratch.
In [11], instead of defining reductions as binary relations, they are defined as
the action of
operators
on elements, obtaining reduced elements. More precisely,
the representation of a reduction relation requires defining three functions:
1. A unary predicate specifying the domain where the reduction is defined. In
our case, polynomials, as defined by the function
k-polynomialp
.
2. A binary function,
reduction
, computing the application of an operator to
a polynomial. In our case, operators are represented by structures
m, c, f
consisting of the monomials
m
and
c
, and the polynomial
f
appearing in the
definition of the polynomial reduction relation (Def. 4).
3. A binary predicate checking whether the application of a given operator to
a given object is
valid
. The application of an operator
m, c, f
to
p
is valid
if
p
is a polynomial containing the monomial
m
,
f
= 0 is a polynomial in
F
−m/
lm
(
f
). Notice that the last requirement implies that
lm
(
f
)
must divide
m
. This validity predicate is implemented by a function
validp
.
and
c
=
These functions are just what we need to define in Acl2 all the concepts
related to polynomial reductions. Let us begin defining
↔
F
(the symmetric clo-
sure of
→
F
). We need the notion of
proof step
to represent the connection of
two polynomials by the reduction relation, in either direction (direct or inverse).
Each proof step is a structure consisting of four fields: a boolean field mark-
ing the step direction, the operator applied, and the elements connected (
elt1
,
elt2
). A proof step is
valid
if one of its elements is obtained by a valid applica-
tion of its operator to the other element in the specified direction. The function
valid-proof-stepp
(omitted here), checks the validity of a proof step.
The following function formalizes in Acl2 the relation
↔
F
. Note that due
to the absence of existential quantification, the
step
argument is needed to
explicitly introduce the proof step justifying that
p ↔
F
q
.
(defun <-> (p q step F)
(and (valid-proof-stepp step F)
(equal p (elt1 step)) (equal q (elt2 step))))
Next, we define
∗
→
F
). This can be described
by means of a sequence of concatenated proof steps, which we call a
proof
4
.Note
that again due to the absence of existential quantification, the
proof
argument
explicitly introduces the proof steps justifying that
p
↔
F
(the equivalence closure of
∗
↔
F
q
.
(defun <->* (p q proof F)
(if (endp proof)
4
Notice that the meaning of the word “proof” here is different than in the expression
“Acl2 proof”. This proof is just a sequence of reduction steps. In fact, we are
formalizing an algebraic proof system inside Acl2.
Search WWH ::
Custom Search