Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven...

27
Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese aus XSL Diplomarbeit Von Jens Waltermann Feb. 2003

Transcript of Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven...

Page 1: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Induktive Synthese von rekursiven XSL Transformationen

Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese aus XSL

Diplomarbeit Von

Jens WaltermannFeb. 2003

Page 2: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Induktive Programmsynthese

Erzeugung von Rekursiven Programmen aus nicht vollständigen Informationen (Eingabe/Ausgabe-Paaren)

• Klassischer Ansatz nach Summers• Verallgemeinerung nach Schmid

Page 3: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Ansatz nach Summers

• Entwicklung rekursiver Programme aus IOPaaren anhand von Listenbeispielen in Lisp

1) Betrachtung von Prädikaten und Funktionen, die sich innerhalb der betrachteten Domäne eindeutig aus den IOPaaren ergeben

2) Suche nach Rekurrenzrelationen3) Bau der Rekursiven Funktion als Produkt aus

Funktionen und Prädiaten

Page 4: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

IOPaar: {()->(),(AB)->(A),(ABCD)->(AB),(ABCDEF)->(ABC)}

Beispiel Summers

Anfangsprogramme: f1[x] = nil,f2[x]=cons[car[x]];nil],f3[x]= cons[car[x]; cons[cadr[x]];nil]]],f4[x]= cons[car[x]; cons[cadr[x]]; cons[caddr[x]];nil]]]],

Prädikate:p1[x]= atom[x],p2[x]=atom[cddr[x]],p3[x]=atom[cddddr[x]],p4[x]=atom[cddddr[x]],

Rekurrenzrelation der Funktionen:f1[x]=nil, f(n+1)[x]=cons[car[x]; f(n)[cadr[x]]],n>1 Rekurrenzrelation der Prädikate:

p1[x] = atom[x],p(n+1)[x]=p(n)[cddr[x]] ,n>1

Erzeugtes Programm:half[x]<- h[x;x]

h[x;y] <- [atom[y]->nil];T <- cons[car[x];h[cdr[x];cddr[y]]].

Domäne:cons[x,l], car[l], cdr[l], nil, atom[l]

Page 5: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Ansatz nach Schmid

• Universelle Planung innerhalb einer vorgegebenen Domäne zur Erzeugung von Anfangsprogrammen

• Faltung von initialen Termen in ein RPS• Verbindung der beiden Schritte durch

Transformationen zwischen spezieller Domäne und Termen/RPS

Page 6: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.
Page 7: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Beispiel FakultätIOPaar:{ (1,1), (2,2), (3,6), (4,24)}

Anfangsprogramme:f1(i)= i * if (i=1) 1;?f2(i)= i * if (i=1) 1;(i-1) * if (i-1=1)1; ?f3(i)= i * if (i=1) 1;(i-1) * if (i-1=1)1; (i-1-1) * if (i-1-1=1)1; ?f4(i)= i * if (i=1) 1;(i-1) * if (i-1=1)1; (i-1-1) * if (i-1-1=1)1; (i-1-1-1) * if (i-1-1-1=1)1;?

Rekursive Programm:fak(i)= i * if (i=1)1;fak(i-1)

Page 8: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Einsatz von TFold

TFold aus dem Ansatz von Schmid benötigt zur Faltung rekursiver Programme initiale Terme mit folgenden Eigenschaften:

1) Hypothese der Rekursions- Verankerung (Omega-Information)

2) Inkrementierung und Verwendung von mindestens einem Parameter innerhalb des rekursiven Progamms (Kontext)

Page 9: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.
Page 10: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

XSL/XML/Saxon

• Was sind XML/XSL Dokumente,• Wie wirkt ein XSL Dokument auf ein XML• Rekursion in XSL

Page 11: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

XML Dokument<?xml version="1.0" encoding="utf-8" ?> <order>  <Element>(NLL)</Element>   <Element>(NLR)</Element>   <Element>(NL)</Element>   <Element>(NRL)</Element>   <Element>(NRR)</Element>   <Element>(NR)</Element>   <Element>(N)</Element>   </order>

Page 12: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

XSL Dokment  <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <xsl:stylesheet version="1.0“

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/">  <xsl:apply-templates />   </xsl:template> <xsl:template match="Trees"> <Trees>  <xsl:apply-templates />   </Trees>  </xsl:template> <xsl:template match="Tree">  <xsl:value-of select="Value" />   <xsl:value-of select="Tiefe" />   </xsl:template>  </xsl:stylesheet>

Page 13: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.
Page 14: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.
Page 15: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Rekursion in XSL

• Parametrisierte Rekursiontemplates werden mit geänderten Parametern aufgerufen, die Parameter determinieren die Abarbeitung.

• Kontextabhängige RekursionEntsprechend des Eingabebaum werden templates aufgerufen. Bei rekursiv verschachtelten Eingabedokumenten kann dies zur Rekursion in der Interpretierung führen.

Page 16: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Genetischer Algorithmus

Zur schrittweisen Erzeugung initialer (nicht-rekursiver) Anfangsprogramme aus

Ein/Ausgabe-Paaren.

Page 17: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

• Ausgangspunkt ist ein leerer Stylesheet • Stylesheets werden durch Hinzufügen von

Grundtags schrittweise erweitert• Die Grundtags ergeben sich aus dem IOPaar • Eine Popuation ist eine Menge von Stylesheets,

deren Erzeugnis bezüglich der Eingabe in der Ausgabe liegen

• Eine Folgepopulation eines Stylesheets ist die Menge der Stylesheets, die unter Hinzunahme von maximal N (Suchtiefe) Grundoperationen entsteht, so dass die Erzeugnisse der Stylesheets der Folgepopulation dichter im Ausgabedokument liegen.

Page 18: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.
Page 19: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.
Page 20: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Beispiel IOPaar<Tree> <Tree> <Tree> <inhalt>(NLL)</inhalt> </Tree> <inhalt>(NL)</inhalt> <Tree> <inhalt>(NLR)</inhalt> </Tree> </Tree><inhalt>(N)</inhalt> <Tree> <Tree> <inhalt>(NRL)</inhalt> </Tree> <inhalt>(NR)</inhalt> <Tree> <inhalt>(NRR)</inhalt> </Tree> </Tree></Tree>

<order>(NLL)(NLR)(NL)(NRL)(NRR)(NR)(N)</order>

Page 21: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Beispiel Generator  <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/" name="root"> <order>

<xsl:for-each select="Tree">  <xsl:value-of select="inhalt" /> <xsl:for-each select="Tree">  <xsl:value-of select="inhalt" /> <xsl:for-each select="Tree">  <xsl:value-of select="inhalt" />

<xsl:for-each select="Tree">  <xsl:value-of select="inhalt" />   </xsl:for-each>  </xsl:for-each>  </xsl:for-each>  </xsl:for-each>  </order>  </xsl:template></xsl:stylesheet>

Page 22: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Omega-Information

Finde Stellen innerhalb des Programms an denen eine Rekursionsverankerung vermutet werden kann.

Page 23: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Algorithmus zur Omega-Information

• Betrachte alle aufsteigenden Pfade • Betrachte im jeweiligen Pfad alle

aufsteigenden Sequenzen,• Falls eine Sequenz aus Knoten sich 2x

wiederholt betrachte Indizierung,• Entscheide ob Integration oder

Substitution des Omegas

Page 24: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.
Page 25: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Kontext-Nachtragung

Integration des unsichtbaren Parameters Kontext in die Programme:

• Jeder Tag verwendet seinen Kontext• Ein Template Tag hat den Kontext X• Der Kontext wird entsprechend den

„xsl:for-each“ inkrementiert.

Page 26: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.
Page 27: Induktive Synthese von rekursiven XSL Transformationen Automatische Generierung von rekursiven Programmen aus Beispielen als Anwendung der induktiven Programmsynthese.

Rekursive XSL<?xml version="1.0" encoding="utf-8" standalone="yes" ?> <xsl:stylesheet version="1.0„

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template name="SUB1"> <xsl:for-each select="TREE">  <xsl:value-of select="INHALT" />   <xsl:call-template name="SUB1" />   </xsl:for-each>  </xsl:template> <xsl:template name="Root" match="/"> <order><xsl:call-template name="SUB1" />   </order>  </xsl:template> </xsl:stylesheet>