VERA 79
Citation for published version (APA):
Benthem Jutting, van, L. S., & Wieringa, R. M. A. (1979). Representatie van expressies in het
verificatieprogramma VERA 79. (Eindhoven University of Technology : Dept of Mathematics : memorandum; Vol. 7915). Technische Hogeschool Eindhoven.
Document status and date: Gepubliceerd: 01/01/1979
Document Version:
Uitgevers PDF, ook bekend als Version of Record
Please check the document version of this publication:
• A submitted manuscript is the version of the article upon submission and before peer-review. There can be important differences between the submitted version and the official published version of record. People interested in the research are advised to contact the author for the final version of the publication, or visit the DOI to the publisher's website.
• The final author version and the galley proof are versions of the publication after peer review.
• The final published version features the final layout of the paper including the volume, issue and page numbers.
Link to publication
General rights
Copyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright owners and it is a condition of accessing publications that users recognise and abide by the legal requirements associated with these rights. • Users may download and print one copy of any publication from the public portal for the purpose of private study or research. • You may not further distribute the material or use it for any profit-making activity or commercial gain
• You may freely distribute the URL identifying the publication in the public portal.
If the publication is distributed under the terms of Article 25fa of the Dutch Copyright Act, indicated by the “Taverne” license above, please follow below link for the End User Agreement:
www.tue.nl/taverne Take down policy
If you believe that this document breaches copyright please contact us at: openaccess@tue.nl
providing details and we will investigate your claim.
Memorandum 1979-15
november 1979
REPRESENTATIE VAN EXPRESSIES in het verificatieprogramma VERA 79
door
L.S. van Benthem Jutting
1. Inleiding
door
L.S. van Benthem Jutting R. wieringa
In het volgende wordt een beschrijving gegeven van de codering van
Automath-expressies in het programma VgRA 79. De principes van deze codering zijn afkomstig van I. Zandleven. I"undamenteel zijn de ideeen over naamloze representatie van variabelen, ontwikkeld door N.G. de Bruijn [1], en het principe van uitgestelde substitutie, bedacht door I. Zandleven. Wordt bij naamloos weergegeven variabelen een variabele gecodeerd als een verwijzing naar de plaats waar hij wordt gebonden, bij het systeem van uitgestelde substitutie wordt deze verwijzing zelf intact gelaten, maar de context wordt z6 veranderd dat de aangewezen plaats de expressie bevat die voor de
variabele is gesubstitueerd.
Het beschreven systeem is een enigszins gewijzigde vorm van het
oorspronkelijke systeem van Zandleven. Het ligt ten grondslag aan het nieuwe verificatieprogramma dat momenteel door de schrijvers wordt ontwikkeld. De bedoeling van deze beschrijving is niet een ook voor niet-ingewijden
compleet beeld te geven van de codering van expressies en de bewerkingen daarop, maar eerder om voor de programmeurs deze codering en de bewerkingen duidelijk vast te leggen, en de interpretatie van de gecodeerde expressies als AUT-expressies expliciet te maken.
Zoals gezegd berust het systeem op het naamloos representeren van
variabelen, en op het uitbreiden van de verwijsmogelijkheden waardoor ook naar andere expressies dan bindpl.:l.atsen kan worden verwezen. Komt in een expressie een verwijzing voor, dan kan deze verwijzing een bindplaats binnen de expressie zelf aanduiden, maar ook een plaats in de context. Zo'n context kan in de eerste plaats een gewone AUTOMATH-context zijn (dus een
telescoop), maar hij kan ook expressies (en strings van expressies) bevatten die bedoeld zijn voor substitutie .
We geven nu een informele beschouwing over contexten. Deze kunnen worden opgebouwd uit segmenten. Het eerste segment begint met een gewone AUTOMATH-context, die eventueel nog wordt gevolgd door andere expressies. Elk
volqend segment begint hetzij met een expressiestring, hetzij met een telescoop. Het begin van een nieuw segment wordt in de codering aangegeven. Na deze
eerste expressiestring of telescoop van een segment kunnen weer andere expressies volgen. Verwijzingen vanuit de eerste expressiestring van een segment verwijzen in het voorgaande segment; verwijzingen vanuit de eerste telescoop van een segment komen niet voor: zo'n telescoop bevat, net zoals een contexttelescoop, alleen verwijzingen in zichzelf. Voor de volgende expressies uit een segment geldt, dat het 6f combinaties zijn van een
expressie met een context, zg. complete expressies, 6f gewone expressies die verwijzingen bevatten binnen het segment waarin ze staan. Verwijzingen van buiten in de context verwijzen uitsluitend in het laatste segment.
V~~r een goed begrip van de codering is nog van belang hoe
afkortingsvariabelen worden weergegeven. Variabelen die voorkomen na een constante kunnen worden weggelaten als ze een gemeenschappelijk beginstuk vormen van de context van de lijn die de constante definieert en de lijn waarin de expressie staat. Daze weggelaten variabelen worden gecodeerd als dat gemeenschappelijke contextdeel, dus als een telescoop. Dit geeft
voordeel bij het vaststellen van de compatibiliteit van strings en
telescopen ("fitting"). Dergelijke "afkortingstelescopen" zullen voorkomen aan het begin van een segment, en ze zullen moeten worden gelnterpreteerd als verwijzingen naar het beginstuk van het voorgaande segment. Het idee voor deze codering van afkortingsvariabelen is afkomstig van I. Zandleven.
Een nieuw begrip bij de beschouwing van contexten is de shift. Die speelt een rol bij het vaststellen of een string past in een telescoop. Die
telescoop moet dan gelnterpreteerd worden als een categorieenstring, en wel z6 dat elke interne referentie in die categorieenstring (die oorspronkelijk in het voorstuk van de telescoop verwees) nu geacht wordt te verwijzen naar de overeenkomstige plaats in de string (ook dit is een vorm van uitgestelde substitutie). Externe referenties in de categorieenstring moeten blijven verwijzen naar de oorspronkalijke plaats in de context. Om dit te realiseren wordt de string in de context van de telescoop opgenomen, gevolgd door een
shift: een natuurlijk getal, in grootte gelijk aan de multipliciteit van de string. Re£erenties die voorbij de shift verwijzen moeten met de betreffende waarde verhoogd worden. Wanneer we van de categorieenstring alleen een achterstuk beschouwen, kunnen we om de referenties kloppend te houden -volstaan met het verlagen van de shift.
Nu enige woorden over interpretatie. De interpretatie van gecodeerde expressies als AUT-expressies is beschreven in 6. hieronder. De
interpretatie komt in het verificatorgedeelte van het programma voor bij het schrijven van gecodeerde expressies. In de hieronder gegeven versie zijn de variabelen naamvrij; de haakjes, komma's en andere scheiders die in de AUT-expressies voorkomen zijn
dik
geschreven.De gecodeerde expressies zijn in het begin van deze beschrijving weergegeven volgens het systeem van De Bruijn [2J. Verderop, vanaf 4., worden de
"hekjes" weggelaten. V~~r een beter begrip zijn in de beschrijving
opmerkingen toegevoegd en commentaar in de vorm van namen bij de lijsten "shapes" en expressies en omschrijvingen tussen aanhalingstekens bij de diverse functies, die de intultieve betekenis weergeven. Wat deze functies betreft: ze worden geacht op inputwaarde "undefined" als output "undefined" te geven.
Referenties
[lJ N.G. de Bruijn, Lambda calculus notation with nameless dummies, a tool for automatic formula manipulation, with application to the Church-Rosser theorem,
Indag. Math. 34, 5, 1972.
[2J N.G. de Bruijn, Notation for concatenation,
Memorandum 1977-09, Eindhoven University of Technology, Dept. of Mathematics, Eindhoven.
2. Al12habet Separatoren Shapes names waarin [,
,
] ab abstractie ap applicatie kn konstante (sinqle) rf reference id identifier st string sk string konstante cs complete string t l telescoop tk telescoop konstante ct complete telescoop sa single abstractor rna multiple abstractor __ ~~ ___ ~~~~lete abstractor dc delta context ec extended context sc shift context aftelbare verzameling y category 0 domain S value IT prepart A last element T tailen met deelverzamelingen defns en catns
{O,1,2, ... }
natO\{O}
3. Expressies
sexp := abst u appl u knst u rfce u idfr single expression mexp := strg u skst u tlsc u tkst multiple expression tail := emty u tlsc u strg tail
ctxt := emty U tlsc u dcnt u ecnt u scnt context
cexp := camp u cstr u ctel u cabs complete expression
abst :=
r
ab I [I
sabsI I
sexEI
]
abstraction appl := I ap I [I
sex.l2lI
sexp I ] application knst := I kn I [I
namesI
I
liillOl ] I constant rfce := Irfl [I
nataI
] I reference idfr := lidl [I
names I ]I
identifierstrg :=
r
st I [ I tailI
I stexI
] stringstex := sexp u skst string extension skst := I sk
I
[I
names II
I
tail]]
l
string constant cstr := Icsl [ L£ili'O:II
I
cornEl]
I complete stringcstp := cstr u tail complete string prepart tlsc := I tll [
I
EtelI
12
absI
] telescopeptel := emty u tlsc prepart telescope gabs := sabs u mabs general abstractor tkst := I tk I [ I names I
I
I
tail I ] telescope constant ctel := I ctI
[I
ctlpI
I
I cabsI J
I
complete telescope ctlp := ctel u ptel complete telescopeprepart
emty :=
leY]
emptysabs := I sa I [ I sexE
I
]l
single abstractor mabs := Ima I [ Imcat I ] multiple abstractor mcat := tlsc u tkst multiple category cabs := leal [I
ctxtI
I
I
gabsI
] complete abstractorcomp :=
I
cp I [I
ctxtI
I
stexI
] completedcnt :=
I
dcI
[L£fuOI
I
dexpl ] deltacontext dexp := tlsc u strg delta expressionecnt :=
I
ecI
[I
ctxtI
I~
] extended context eexp := sexp u mexp u sabs u eomp extending expression sent :=I
scI
[ letxtlI
[@
]I
shift contextVanaf hier zien we af van de "hekjesnotatie" •
Zij a een expressie dan zullen we de onderdelen van a aangeven met sh (a)
1f1 (a) 1f2 (a)
het "eerste symbool" of de "shape" van a de "eerste subexpressie" van a
de "tweede subexpressie" van a
Als bijvoorbeeld a
=
ab[blc] dan is4. Functies
1) ~ : defns + sexp U mexp primitief
"De definitie van een gedefinieerde constante".
Opm.: Aan ~ worden wel eisen gesteld, bijv. dat geen "oneindige lI-rijen" kunnen optreden, dat "enkelvoudige namen" ook "enkelvoudige
definities" hebben, etc.
2)
r :
catns + sexp primitief"De categorie van een constante (als die gegeven is)". Opm.: oak aan
r
worden zekere correctheidseisen gesteld.3) mult: sexp u mexp U emty U gabs u eexp u names + nato "De multipliciteit van een ex.pressie".
mult(a) :=
if a € emty then 0 else
.!!.
a € sexp then 1else if a € skst U tkst U gabs ~ mult (7Tl (a) )
!!!!
if a € comp u cabs ~ mult(7T2(a»else if a € strg u cstr u tlsc u ctel then mult(7Tl(a» + mult(7T2 (a»
~.!!. a € defns ~ mult(4(a» else if a € names\defns then 1
4) refd : ctxt + nato
"De maximale verwijzingsdiepte in een context". refd (k) :=
ifk E emty u tlsc ~ mult(k) else i f k E dcnt then mult (7T2 (k) )
-else if k E ecnt ~ refd (7Tl (k) )
-else if k € scnt ~ refd(7Tl (k»
-5) absd : ctxt + nato
"De abstractiediepte van een context". absd(k) :=
if k E emty u tlsc ~mult(k)
+ mult (7T2 (k) ) - 7T2 (k)
~ if k E dcnt u scnt then absd(nl(k»
~
.!!.
7T2 (k) E sabs u meat ~ absd (7Tl (k» + mult (7T2 (k»6) delt : etxt x tail ~ etxt
"Uitbreiding van een context bij cS-reduetie". delt(k,a) :=
if k E sent
~ i f a E emty ~ k ~ se[de[k laJ 10J
~.!!. a E emty then a ~ dc[klaJ
7) etgy : sexp ~ sexp
"Maakt bij een single expressie a de expressie y(a)". etgy(a) :'" kn[yl stCeylaJJ
8) reindex : sent x nat
l ~ sent
"Verandert de shift van een shifteontext". reindex(k,n) := se[nl (k) In2 (k) -nJ
5. p-reductie
Opm.: p-reductie geeft de interpretatie van verwijzingen in een context. Representeert de verwijzing een variabele dan geeft pr de referentie-diepte in de (nieuwe) context; als de verwijzing een expressie
representeert geeft pr deze expressie met bijbehorende (nieuwe) context.
pr: ctxt x int ~ (ctet x (sexp u natO» u {undefined} pr(k,r) :=
if r~refd(k) then undefined
~ ~ sh(k) of
begin
ey undefined;
tl if r<O then undefined ~ (k,r); sc pr (IT 1 (k) , r+lT2 (k) ) ; dc
!!
r<O ~ pr(lTl(k) ,r) else ~ sh(lT2(k» of begin st : !fmult(lT2(lT2(k»)~r ~ pr(dc[lTl(k) IlTl(lT2(k»],r-mult(lT2(lT2(k»» else ~ sh(lT2(lT2(k») of begin ab ap: kn : id : (lT1 (k) ,lT2 (lT2 (k) » ; rf pr(lTl (k) ,7Tl(n2(lT2(k»» I sk pr(ec[delt(lTl(k) ,lT2(lT2(lT2(k»» ItdlTl(lT2(1f2(k»»],r) ~ cases sh(lT2(lT2(k») I tl : pr(lTl(k),r+refd(lT1(k»-refd(k» ~ cases sh(lT2(k»;ee i f r<O then undefined .• - -.;;;;;;,;.;;,;;=,;;,;;;,;;.
!!!!
if mult(1f2(k»sr ~ pr(lTl(k),r-mult(lT2(k»).!l:!!.
~ sh ('IT 2 (k» of begin ab ap: kn: id: ~lT1(k),lT2(k»; rf pr (lT1 (k) ,lTl (lT1 (k») I sa t l : tk : (k,r).,.•
st
!!
mult(~2(~2(k»)srthen pr(ec[~l(k) 1~1(~2(k»J,r-mult(~2(~2(k»»
~ ~ sh(~2(~2(k») of begin ab ap: kn : id (~l(k) ,~2(~2(k»); rf pr (~l (k) ,~1 (~2 (~2 (k»» ; sk pr (ec[delt (d (k) ,~2 (~2 (~2 (k»»
I
t:.
(~l (~2 (~2 (k»» ] ,r) ~ cases sh(~2(~2(k»); sk pr (ec[delt (nl (k) ,n2 (~2 (k»)I
t:.
(~1 (~2 (k» ] ,r) ; cp ~ sh(rr2(n2(k») of begin ab ap: kn: i d : (nl(rr2(k»,rr2(n2(k»); r f pr (nl (n2 (k» ,nl (n2 (~2 (k»» ; sk pr (ec[del t (~l (n2 (k) ) , ~2 (rr2 (n2 (k» ) )It:.
(~l (rr2 (n 2 (k) ) ) ) J, r) end cases sh(n2(~2(k») end cases sh(~2(k» end cases sh(k)6. Interpretatie
opm.: De functie int geeft de interpretatie van een gecodeerde expressie als AUT-expressie. Hij geeft als parameters een context, een expressie en een natuurlijk getal. Dit getal geeft de diepte van de AUT-context waarop de expressie moet worden geInterpreteerd.
De functie intabbrevar geeft de interpretatie van een string van afkortingsvariabelen (dus in code ring van een telescoop). Hij heeft als parameters een context, de lengte van de string afkortings-variabelen en de diepte van de AUT-context.
intabbrevar : ctxt x nat
1 x nato ~ AUT-expressie U {undefined} intabbrevar(k,n,t) :=
if kEtlsc
then if t<n then undefined
~ i-l,i-2, ••• ,i-n else if kEdcnt
----
---then if ~2(k)Etlsc ~ intabbrevar(~l(k) ,n,~)
else!f mult(~2(k))=n ~ int(~l (k) ,~2(k))
else!f mult(~1(~2(k)))~n ~ intabbrevar(dc[~l (k) 1~1(~2(k))],n,~) else if refd(k)<n ~ undefined
~ intabbrevar(k,n-l,i),int(k,rf[refd(k)-n],i) else if kEecnt ~ intabbrevar(~l(k) ,n,~)
int ctxt x (sexp u mexp u gabs u emty u cexp) x nato -~
+ AUT-expressle U {undefined}
int(k,a,2) :=
~ shea) of
begin
ab [int(k,71'l(a) ,t)lint(eo[kr71'l (a) ];71'2(a) ,H1);
ap <int(k,71'1(a),2)
>
int(k,71'2(a),2); kn sk rf id tk : if'TT2(a)€tlsc ~ 'TTl (a)Cintabbrevar(k,mult('TT2(a) ,2)'else 'TTl (a) ,int (k, 71'2 (a) ,2»; if pr
2(k,'TT1(a» (sexp then int(pr(k,71'l (a)) ,t) else pr
2(k,'TTl (a)+t-absd(pr1(k,'TTl (a)) ;
'ld"
'TTl (a) ;st cs i f 71'1 (a) €tlsc ~ intabbrevar (k,mult('TTl (a)) , 2) ~ int(k,'TTl (a) ,2) , in t (k , 'TT2 (a) , 2) ; t l ct ey ma sa cp ca if kE:scnt
~ int(k,'TT1(a) ,2),int(reindex(k,mult('TT1(a») ,'TT2(a) ,t)
~ int(k,'TTl(a) ,t)
rint(~ 'TTl (a) emty then k ~ ec[kl71'l (a)],71'2(a),
int (k, 'TTl (a) ,2) ; int ('TTl (a) , 'TT2 (a) , R,)
2+mult(71'1 (a»)];
7. Reductie
Red: ctxt x (sexpumexpunat
O) x pred (ctxtx(sexpumexpunatO» + (ctxtx(sexpumexpunat
O» u {failure} Red(k,a,P) := if P(k,a) then (k,a)
else if aEabst then Red(nr(k,a) ,P) else if a~appl then Red(6r(k,a) ,P)
else if aEknstuskstutkst then Red(or(k,a) ,P) else if aErfce then Red(pr(k,rrl(a» ,P) else failure
6r ctxt x appl + (ctxtxsexp) u {undefined}
P := YXEctXt YYESeXPUmexpunat
o [y~abstJ 6r(k,a) := i f Red(k,rr2(a) ,P) = (k1,al)
~!! k
=
kl then (ec[klrr1(a) J,rr2(al» ~ (ec[kllcp[klrrl(a) JJ,rr2(al» else undefinednr ctxt x abst + (ctxtxsexp) u {undefined}
P := YXEctXt YYEsexpumexpunatol:YEapPlJ
Q := YXEctXt YYESeXPUmexpunat
o [x = ecl.klnl (a)J 1\ Y OJ nr(k,a) := ~ Red(ec[klnl(a)J,n2(a) ,P) = (k1,al)
~ if Red(kl,nl(a1) ,Q) ~ failure then (ec[kllkn[syntleyJJ,n2(al» else undefined
else undefined
or ctxt x (knstuskstutkst) + (ctxtX(seApumexp» u {undefined}
8. Typering
Oprn.: De functie type geeft het canoniek type van een expressie a,
vartype geeft het type van een verwijzing waarvan (door p-reductie) al is vastgesteld dat hij een variabele representeert.
vartype : ctxt x nato ~ (ctxtxsexp) u {undefined}
vartype (k,r) :=
if rnult(~2(k»~r then vartype (~1(k),r-rnult(n2(k»)
~ ~ sh(rr2(k» of
begin
sa (~1(k),rr1(~2(k»)i
rna vartype (edrr1 (k) 1~1 (rr2(k» ],r);
tk vartype (ec[delt(rrl(k),~2(n2(k»)11I('lT1(rr2(k»)],r)i tl
!f
rnult(n2(n2(k»)~rthen vartype (ecCnl(k) Inl(n2(k»],r-rnult(n2(rr2(k») else ~ sh(rr2(rr2(k») of begin sa : if rr1(n2(k»Eernty then (nl (k) ,nl (n2 (rr2 (k) » ) else (ec[rrl (k) I nl (rr2 (k) ) J,rr 1 (rr2 (rr2 (k» ) ) i rna
!f
rrl(rr2(k»Eemtythen vartype (ec[rr1(k) Irr1 (n2(rr2(k») J,r)
else vartype (ec[ec[rr1 (k) I nl (n2 (k) ) J I nl (n2 (rr2 (k) » J ,r) end cases sh(rr2(~2(k»)
type ctxt x sexp ~ (ctxtxsexp) u {undefined}
type (k,a) := ~ sh(a) of begin
ab (k,ab[rrl(a) !ctgy(rr2(a»]); ap (k,ap[rrl (a) ! ctgy (rr2 (a) ) J) I
kn if rrl (a) Ecatns ~ (delt(k,rr2(a»,r(rrl(a»)
.!!!!. .!!
rr 1 (a) Edefns ~ type (or (k ,a) )~.!! rrl(a) ~ y then type(type(rr2(rr2(a»») else undefined
-rf ~ pr 2(k,rrl(a»Esexp ~ type(pr(k,rr1(a») else vartype(pr(k,rrl(a»); id : undefined end cases sh(a)9. Het passen van een string in een telescoop
Opm.: Pass en wordt nagegaan m.b.v. de boolean procedure in (zie onder). Er zijn twee gevallen waarin nagegaan wordt of een string in een telescoop past:
1. Bij de contrale of op contexttelescoop t c(a1, .•• ,an) correct is.
In dit geval bestaat de string uit s :~ (a1, ..• ,an) en de
telescoop uit de context t. Correctheid geldt als in (t,s,sc[dc[t!sJ!mult(s)J,t,kr,r) en rEemty.
2. Bij de contrale of op contexttelescoop tl (al, ••• ,an): [blJ •.• [bmJ
correct is. In dit geval bestaat de string uit s := (al, ••• ,an) en
de telescoop uit t := [blJ .•• [bmJ. (s en t kunnen ook
stringkonstante resp. telescoopconstante zijn). Correctheid geldt als in (tl,s,sc[ec[tl!sJ!mult(s) J,t,kr,r) en r£emty.
Nog een opmerking over de context van t in de procedure in:
In geval 1. nemen we dc[t!sJ omdat in s abbrevars kunnen voorkomen, die we goed moeten interpreteren; bovendien zijn in t geen externe verwijzingen.
In geval 2. nemen we ec[tl!sJ omdat in t verwijzingen naar tl kunnen voorkomen; bovendien komen in s geen abbrevars voor dus hebben we geen moeite met interpretatie.
boolean procedure in (ks,s,kt,t,kr,r); value ks,s,kt,t;
%s€tailustexucstr %kt€scnt
%t£ptelugabsutkstuctel begin boolean success;
if mult(s)~mult(t) then
~ sh(s) of
begin
st if success := in (ks,rr1(s) ,kt,t,kr,r) then t l case sh(r) of begin ey kr := st i f kr sk i f kr ks; = ks ks r := rr2 (s) ; then r "= st[rlrr2(s)] else r := cs[r I cp[ks I rr2 (s) ]]; then r := st[st[eylr]lrr2(s)] else r :'" cs[st[eylr]lcp[kslrr2(s)]]; cs r:= cs[rlcp[kslrr2(s)]]; tl c t : sa : rna : success := in(ks,rr2(s),kr,r,kr,r);
else if kr = ks then r := st[st[eylrJlrr2(s)]
else r := cs[st[eylr]lcp[kslrr2(s)]J
end cases sh(r);
kr := r :~ ey; success :~ s = t; % geval 1. in opm. vooraan
sk (ks,s):= 8r(ks,s); success := in (ks,s,kt,t,kr,r); cs if success :~ in (ks,rr1(s) ,kt,t,kr,r) then ~ sh(r) of begin ey kr:" rr 1 (rr 2 (s) ); r :.. rr 2 (rr 2 (s) ) ; st if kr
=
rr1(rr2(s» then r := st[rTrr2(rr2(s»] else r :- cs[r 111'2 (s) ]; sk i f kr=
11'1 (11'2 (s» then r :'" st[st[eylr]lrr2(11'2(s»] else r := cs[st[eylr]111'2(s)]; sc r := cs[rlrr2(s)] tl ct : sa : rna : success := in (rr1 (rr2 (s» ,11'2 (rr2 (s» ,kr,r ,kr ,r) ;else if kr - 11'1(11'2(8» then r :- st[st[eylrJlrr2(11'2(s»] else r :- cs[st[eylr]lrr2(s)] end cases sh(r) I
else % s is single, mult(t) ~ 1 case sh(t) of begin ey kr:= ks; r := s; success := ~; tl success:= in (ks,s,kt,TI2(t) ,kr,r); tk (kt,t):"" or(kt,t); success := in (ks,s,kt,t,kr,r); ct success sa success rna success end cases sh (t) := in (ks,s,TIl(TI2(t» ,TI2(TI2(t» ,kr,r); := type (ks,s) = (kt,TIl(t»; kr := r := ey;
D
:= in (ks,s,kt,7Tl (t) ,kr ,r)
~ cases shes)
else: % mult(s) < mult(t)
~ sh(t) of begin ey ; % impossible tl if success := in (ks,s,kt,rrl(t) ,kr,r) then ~ sh(r) of begin ey kr:= reindex (kt ,mult (rrl (t) »; r := rr2 (t) ; tl if TIl (kr) = rrl(kt) then r := tl[r!TI2(t)]
else r :- ct[r!ca[reindex(kt,mult(rrl (t») !TI2 (t) ]];
ct r:= ct[r!ca[reindex(kt,mult(TI1(t»)/rr2(t)]];
sa rna:
i f TIl (kr) rrl(kt) ~ r := tl[tl[ey!r]!rr2(tl]
else r := ct[tl[ey!r]!ca[reindex(kt,mult(TI1(t»)!TI2(t)J];
else: success := in (kr,r,reindex(kt,mult(TI1(t») ,TI2(t) ,kr,r)
end cases sh(r);
tk (kt,t):= or(kt,t)/ success := in (ks,s,kt,t,kr,r);
ct if success := in (ks,s,kt,TIl(t) ,kr,r) then
sa - 1~ -begin ey kr:= 1Tl(1T2(t»i r := 1T2(1T2(t» t l i f 1Tl (kr) = 7Tl (1Tl (1T2 (t) » then r := tl[r 11T2 (1T2 (t» ] else r := ct[rl1T2(t)]i ct r:= ct[rl1T2(t)]i sa rna: i f 1T1Ckr) = 1Tl(1Tl(1T2(t») then r := tl[tl[eylr]I1T2(1T2(t»] else r := ct[tl[eylr]I1T2(t)]i else : success := in (kr,r ,1Tl (1T2 (t» ,1T2 (1T2 (t) ) ,kr ,r)
end cases sh(r)i
kr := kti r := t i success := true % mult (s)
o
ma success:= in (ks,s,kt,1Tl(t) ,kr,r) end cases sh(t)
in := succeSSi end b proc ini