Computer Sciences
Corporation
& The University of
Texas at Arlington
wwilson3@csc.com
wilsonww11@msn.com
LOPSTR 2000
July 27, 2000
Language
Objectives
1.
pure specification language
·
what,
not how
·
efficiency
is ignored
·
transformation
is required
1.
minimal
·
as
small and simple as possible
·
nothing
built-in that can be defined
1.
meta-language
·
able
to imitate other languages and paradigms
An Informal
Introduction
axiomatic language [1982]
=
pure Prolog with revised syntax
+
higher-order generalization
[HiLog]
+
"string variables"
syntax differences:
father(bill,X) à
(father Bill %x)
·
predicate
names moved inside parentheses
·
commas
replaced with blanks
·
(expression)
variables start with %
higher-order generalization:
·
predicate
names can be expressions, incl. variables
·
variables
can represent entire predicates
An Informal
Introduction (cont.)
example "axioms":
(number 0).
(number (s %))< (number %).
(plus 0 % %)< (number %).
(plus (s %1) %2 (s %3)<
(plus %1 %2 %3).
example
generated expressions:
(number (s (s (s 0))))
(plus (s 0) (s 0) (s (s 0)))
An Informal
Introduction (cont.)
string variables:
·
start
with $
·
match
zero or more expressions in a sequence
·
simpler
list predicate definitions:
(append ($1) ($2) ($1 $2)).
(member % ($1 % $2)).
(reverse () ()).
(reverse (% $) ($rev %))<
(reverse ($) ($rev)).
example
generated expressions:
(append (a) (b c) (a b c))
(member c (a b c))
(reverse (u v) (v u))
The Language
"axioms"
generate "valid expressions"
an expression is:
an atom
(symbolic constant),
an expression
variable,
or a sequence
of zero or more expressions and
string
variables
syntax:
atoms:
`abc, `+, `X3
expression variables: %expr,
%x
string variables: $str,
$1
sequences: (), (`M %y),
(`xyz () $ (`))
-- expressions and string variables
separated by
blanks and enclosed in
parentheses
The Language
(cont.)
axiom: a conclusion expression and zero or more
condition expressions:
conclu
< cond1, …, condn.
conclu. ! a
comment
axioms
generate axiom instances by
substitution:
-- an expression for an expression
variable
-- a string of expressions and string
variables
for a string variable
axiom
instances generate valid expressions:
If all conditions of an axiom instance
are valid,
then the conclusion is valid.
For
example, axioms
(`a
`b).
((%) $ $)< (% $).
generate
valid expressions:
(`a `b)
((`a) `b `b)
(((`a)) `b `b `b `b)
…
Some Syntax
Extensions
characters:
'A' = (`char (`bit0 … `bit1))
character
strings:
(… 'abc' …) = (… 'a' 'b' 'c' …)
"abc" = ('abc') =
('a' 'b' 'c')
symbols:
abc
= (` "abc")
Higher-Order
Examples
definition
of relations and sets:
% < (valid $1 % $2).
(valid (father Sue Tom)
(father Bill Tom)
(father Jane Bill)).
(%set %elem)<
(finite_set %set ($1 %elem $2)).
(finite_set day
(Sun Mon Tue Wed Thu Fri Sat)).
! generates (day Thu)
combining valid expressions:
(all_valid).
(all_valid % $)< % , (all_valid $).
(one_valid $1 % $2)< % .
(parent %x %y)<
(one_valid (mother %x %y)
(father %x %y)).
Higher-Order Examples (cont.)
representing axioms in expressions:
%conclu < (axiom %conclu $conds),
(all_valid $conds).
(axiom (sort %1 %2)
(permutation %1 %2)
(ordered %2)).
(axiom $axiom)<
(axiom_set $1 ($axiom) $2).
(axiom_set
((times % 0 0)
(number %))
((times %1 (s %2) %3)
(times %1 %2 %x)
(plus %x %1 %3))
((length () 0))
((length (% $) (s %n))
(length ($) %n))
).
Higher-Order Examples (cont.)
map predicates to sequences of arguments:
((` ($rel '*')) $nulls)<
(zero_or_more () ($nulls)).
((` ($rel '*')) $argseqsx)<
((` ($rel '*')) $argseqs),
((` ($rel)) $args),
(distr ($args) ($argseqs)
($argseqsx)).
(zero_or_more % ()).
(zero_or_more % (% $))<
(zero_or_more % ($)).
(distr () () ()).
(distr (% $) (($seq) $seqs)
((% $seq) $seqsx))<
(distr ($) ($seqs) ($seqsx)).
example valid expressions:
(day* (Sat Tue Tue))
(reverse* ((a b c) () (u v))
((c b a) () (v u))).
Meta-Language Examples
LISP-like expression evaluation:
(finite_set digit "0123456789").
(index %set %elem %index)<
(finite_set %set ($1 %elem $2)),
(length ($1) %index).
(eval
(` (%digit)) %value)<
(index digit %digit %value).
(eval (` ($digits %digit)) %valuex)<
(eval (`$digits)) %value),
(index digit %digit %n),
(times %value (s (s (s (s (s
(s (s (s (s (s
0))))) ))))) %10val),
(plus %10val %n %valuex).
(eval (quote %expr) %expr).
(eval (%fn $args) %result)<
(eval* ($args) ($results)),
(%fn $results %result).
example valid expressions:
(eval (plus 12 (times 4 5)) (s …))
(eval (reverse (append (quote (a b))
(quote (c)))) (c b a))
Meta-Language Examples (cont.)
procedural language example (from original
paper):
(function factorial (N) is
variables I FACT ; ! local vars
begin
I := 0 ;
FACT := 1 ;
while I < N loop
I := I + 1 ;
FACT := FACT * I ;
end loop ;
end factorial return FACT).
! add axioms for language definition
example valid expression:
(factorial (s (s (s 0)))
(s (s (s (s (s (s 0)))))))
What This Language Does Not Have
1. non-logical operations
2. built-in predicates
3. built-in inequality
-- define inequality
between character bit atoms,
then between characters,
then between character strings and symbols,
and finally between expressions containing symbols
4. negation
--
define negative predicates (ex.
"not_member"),
or define negation-as-failure for encoded axioms
5. assert/retract -- a set of axioms is static
6. input/output -- defined by interpretation
Defining Programs by Interpretation
Defining a program with valid expressions:
(program <input>
<output>)
The input/output expressions are interpreted as
files.
(ex. sequence of lines, each a sequence of
characters)
Example program to reverse lines in a text file:
(program %input %output)<
(reverse* %input %output).
Interactive program:
(program <output1> <input1>
<output2> <input2>
… )
-- generate for all possible execution histories!
String Variable Elimination
String variable unification can have multiple
mgu's:
example: (a $) and ($ a) yield $
= '', 'a', 'a a', …
--
problem due to "non-tail" string variables, as in ($ a)
Eliminating non-tail string variables:
… (..x.. $1 ..y..) …
is replaced by
… (..x.. $1x) … ! new variable
with the following condition added:
(APPEND ($1) (..y..) ($1x))
Then add these axioms:
(APPEND () ($2) ($2)).
(APPEND (% $1) %2 (% $3))<
(APPEND ($1) %2 ($3)).
Final transformation: represent sequences as nested pairs
(analogous to Prolog representation of lists)
Conclusions
simple language
higher-order
meta-language
defining programs by interpretation
Future Work on Transformation
do example unfold/fold proofs
identify proof patterns
incorporate into rules and schemas
combine into transformation program
-- handle axioms that are instances of stored
patterns
continue adding rules and generalizing
-- eventually able to handle most programs?