%%-------------------** Term Rewriting System (TRS) **------------------------ %% %% Authors : Andre Luiz Galdino %% Universidade Federal de Goiás - Brasil %% %% and %% %% Mauricio Ayala Rincon %% Universidade de Brasília - Brasil %% %% Last Modified On: May 10, 2011 %% %%----------------------------------------------------------------------------
positions[variable: TYPE+, symbol: TYPE+, arity: [symbol -> nat]]: THEORY BEGIN
position: TYPE = finseq[posnat]
positions: TYPE = set[position]
IMPORTING IUnion_extra[position],
structures@seq_extras[position] as fspos,
structures@seq_extras[posnat] as fsepn,
variables_term[variable,symbol, arity],
structures@seq_extras[term] as fset
%%%%%%%%%%%% Definition: The set of positions of a term %%%%%%%%%%%%%%%%%%%
only_empty_seq: positions = {x: position | x = empty_seq}
catenate(i: posnat, s: positions): positions =
{seq: position | EXISTS (x: position): (member(x,s) AND
seq = add_first(i,x))}
positionsOF(t: term): RECURSIVE positions =
(CASES t OF
vars(t): only_empty_seq,
app(f, st): IF length(st) = 0 THEN
only_empty_seq ELSE
union(only_empty_seq,
IUnion((LAMBDA (i: upto?(length(st))):
catenate(i, positionsOF(st(i-1)) )))) ENDIF ENDCASES) MEASURE t BY <<
positions?(t: term): TYPE = {p: position | positionsOF(t)(p)}
positions(t: term): set[position] = {p: position | positionsOF(t)(p)}
%%%%%%%%%%%% Definition: Order on positions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
p, q: VAR position
s, r, t: VAR term
j, i: VAR posnat
<=(p, q): bool = (EXISTS (p1: position): q = p o p1);
child(p, q): bool = (EXISTS (p1: position):
(p1 /= empty_seq AND p = q o p1))
left_without_children(p, q): bool = (EXISTS (r,p1,q1: position):
(q = r o q1 AND p = r o p1 AND
q1 /= empty_seq AND p1 /= empty_seq AND
first(p1) < first(q1)))
left_pos(p, q): bool = (EXISTS (r,p1,q1: position):
(q = r AND p1 /= empty_seq AND p = r o p1) OR
(q = r o q1 AND p = r o p1 AND
q1 /= empty_seq AND p1 /= empty_seq AND
first(p1) < first(q1)))
subterm_if_le_arity : LEMMA
( app?(s) AND arity(f(s)) >= i ) IMPLIES positionsOF(s)( #(i))
subterms_acc_arity : LEMMA
positionsOF(s)( #(i)) AND j <= i IMPLIES positionsOF(s)( #(j))
lwc_add_last_delete : LEMMA FORALL (q1 : position) :
(p /= empty_seq AND left_without_children(p, q1)) IMPLIES LET q = add_last(delete(p, length(p) - 1), 1 + last(p)) IN
left_without_children(q, q1) OR child(q1, q) OR q1 = q
lwc_add_last_delete1 : LEMMA FORALL (q1 : position, p : position | p /= empty_seq) : LET q = add_last(delete(p, length(p) - 1), 1 + last(p)) IN
left_without_children(q1, q) IMPLIES
left_without_children(q1, p) OR child(q1, p) OR q1 = p
leftmost_pos : LEMMA
( NOT positionsOF(s)( #(i + 1)) AND
positionsOF(s)( #(i)) AND positionsOF(s)(q) ) IMPLIES ( q = empty_seq OR left_pos(q, #(i)) OR q = #(i) )
END positions
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.