Typinferenz (mit Bitvectoren) Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf Gast: Wolfram Bernhardt.

Slides:



Advertisements
Ähnliche Präsentationen
Relative Clauses.
Advertisements

Algorithmen und Datenstrukturen
Christian Scheideler SS 2009
Vorlesung Compilertechnik Sommersemester 2008
Informatik II: Algorithmen und Datenstrukturen SS 2013
Falls Algorithmen sich selbst rekursiv aufrufen, so kann ihr Laufzeitverhalten bzw. ihr Speicherplatzbedarf in der Regel durch eine Rekursionsformel (recurrence,
2.3 Kodierung von Zeichen 2.4 Kodierung von Zahlen
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Generalisierung/Spezialisierung (1)
Vom graphischen Differenzieren
Sortieren I - Bubblesort -
Das LCA – Problem in Suffixbäumen
Elektronisch messen, steuern, regeln
Programmieren in Logik
Suche in Texten (Stringsuche )
Finale Semantik und beobachtbares Verhalten
Listen [mia, vincent, jules, yolanda] [mia, robber(honey_bunny), X, 2, mia] [] [mia, [vincent, jules], [butch, girlfriend(butch)]] [[], dead(zed), [2,
Übung 6.6Schranken 1.Angenommen, Ihr Algorithmus habe einen Aufwand von g(n) = 5n 3 + n für alle n a)Geben sie eine obere Schranke O(g(n)) an. b)Beweisen.
Rekursive Listenverarbeitung
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Union-Find-Strukturen
Semantik von Prolog & Unifikation
Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.
PATR II Interpreter Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.
Vorschau Prolog Aufbaukurs SS 2003 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.
Parsing Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.
Merkmalslogik Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.
FS_Geschwindigkeitsmessung
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Was sind Histogramme? (1)
Hauptseminar Automaten und Formale Sprachen
§9 Der affine Raum – Teil 2: Geraden
§9 Der affine Raum – Teil 2: Geraden
Histogramm/empirische Verteilung Verteilungen
Effiziente Algorithmen
Rechnen im Binärsystem
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Adjektivendungen Let’s start by reviewing our basic case endings for Nominativ, Akkusativ, Dativ and Genitiv…
Effiziente Algorithmen
Proseminar an der TU München Martin Levihn
Morphology and Syntax More on sentence structure.
Effiziente Algorithmen
Effiziente Algorithmen
Quantum Computing Hartmut Klauck Universität Frankfurt WS 04/
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Hartmut Klauck Universität Frankfurt WS 06/
Dynamische Datentypen
Wahrscheinlichkeitsrechnung
Was ist eine Funktion? Eine Zuordnung,
Aufgabenstellung Aufgabenstellung: What do the following terms (formulae) express? Which of these terms characterize all sequences of real numbers , x_n.
Potenzen und Wurzeln Zusammenfassung
SFZ FN Sj. 13/14 Python 3 Rekursion Inf K1/2 Sj 13/14
Technische Informatik II Übung 1: Konvertieren von Zahlen
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
Vom graphischen Differenzieren
German Key Sounds Deutsche Schlüssellaute
Jahrgang 9 G- Kurs Zehnerpotenzen
1 Attribute, Attributwerte (1) Attribut (a): Eigenschaft eines Entity mit Attributname a Zu jedem Attribut a gehört ein Wertebereich (Domain) dom(a) Zum.
Sortiernetzwerke1 Seminar über Algorithmen SS 2005 von Arash Sarkohi und Christian Bunse.
Kapitel 4 Grammar INDEX 1.Ordinal Numbers 2.Relative Pronouns and Relative Clauses 3.Conditional Sentences 4.Posessive: Genitive Case.
Algorithmen und Datenstrukturen Prof. Dr. Ralf Möller Universität zu Lübeck Institut für Informationssysteme Stefan Werner (Übungen) sowie viele Tutoren.
Kapitel 2 Grammar INDEX 1.Subjects & Verbs 2.Conjugation of Verbs 3.Subject Verb Agreement 4.Person and Number 5.Present Tense 6.Word Order: Position of.
Sortierverfahren Mit VB 2010 express edition JBS Tr, info Q1.
Lineare Optimierung Nakkiye Günay, Jennifer Kalywas & Corina Unger Jetzt erkläre ich euch die einzelnen Schritte und gebe Tipps!
 Präsentation transkript:

Typinferenz (mit Bitvectoren) Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf Gast: Wolfram Bernhardt

Typinferenz2 Typensignatur zu Shieber 1 top >> category, featval. category >> verbal, np :: HEAD:head. featval >> head, agr, gen, pers, num, vform. head >> vhead, nhead. verbal >> v, vp, s :: HEAD:vhead. np :: HEAD:nhead. nhead :: AGREEMENT:agr. agr :: GENDER:gen, PERSON:pers, NUMBER:num. gen >> masc, fem, neut. pers >> first, second, third. num >> sing, plur. vhead :: FORM:vform, SUBJECT:np. vform >> finite, base. Kilbury 1997, QType-Syntax

Typinferenz3 Typhierarchie category verbal np v vp s head vhead nhead gen masc fem neut pers first second third num sing plur vform finite base featval top agr

Typinferenz4 Typhierarchie (mit Bitvectoren) category(1111) verbal(111) np(1000) v(1) vp(10) s(100) head( ) vhead( ) nhead( ) gen( ) masc(10000) fem(100000) neut( ) pers( ) first( ) second( ) third( ) num( ) sing( ) plur( ) vform( ) finite( ) base( ) featval( ) top( ) agr( )

Typinferenz5 Subtypen Ein Subtyp ist ein Typ, bei dem dieselben Bits gesetzt sind wie beim seinem Supertyp, dessen totaler Wert jedoch kleinergleich dem des Supertypen ist. Dies kann mit einem Subsumptionscheck (siehe spätere Folie) geprüft werden. subtype(ST,T):- bitset_subsumes(T,ST).

Typinferenz6 Echte Subtypen % true_subtype(?SubType,?Type) % SubType is a true subtype of Type. true_subtype(T1,T2):- subtype(T1,T2), T1 \= T2.

Typinferenz7 Minimale (Sub-)Typen minimal_subtype(MiniType,Type):- subtype(MiniType,Type), minimal(MiniType). minimal(T):- T >> [] :: _. Bei minimalen Subtypen ist genau ein Bit gesetzt; sein Zahlenwert beträgt also eine Potenz von 2. Falls keine Operation zum Zählen gesetzer Bits vorliegt, ist die Überprüfung auf diesem Wege kompliziert, so daß wie gehabt auf die Typensignatur zurückgegriffen werden sollte: Eine allgemeine Möglichkeit ist festzustellen, ob ein Typ true_subtyps hat. Wenn nicht, ist er ein minimaler Typen: minimal(T):- \+ true_subtype(_,T).

Typinferenz8 Extension eines Typs Die Extension eines Typen ist direkt aus seinem Bitvector abzulesen. Jedes gesetzte Bit entspricht einem minimalen Typen. Z.B. Category(1111) np(1000) v(0001) vp(0010) s(0100) Durch Operationen wie z.B. Komplementberechnung können Bitvektoren entstehen, die keine Entsprechung in der Typsignatur haben. Dennoch kann mit ihnen gearbeitet werden, da sie auf jeden Fall eine eindeutige Extension haben: _Noname( ) np( ) v( ) sing( ) nhead( )

Typinferenz9 GLB über Extension extension/2 liegt als berechnete Faktenmenge vor. Das zweite Argument von extension/2 ist alphabetisch sortiert. Jeder Typ hat entweder keinen oder mindestens zwei unmittelbare Subtypen. % glb(?T1,?T2,?T3) glb(T1,T2,T3):- extension(T1,E1), extension(T2,E2), intersection(E1,E2,E4), sort(E4,E3), extension(T3,E3). Nebenstehende Definition hat folgende Voraussetzungen:

Typinferenz10 GLB - Berechnung / Typ-Unifikation Ein Hauptvorteil der Repräsentation durch Bitvectoren ist eine einfache Berechnung der größten unteren Schranke zweier Typen (greatest lower bound) durch die schnell Bitoperation AND. Um die größte untere Schranke zweier Typen zu berechnen, werden ihre Bitvectoren mit logischem UND verknüpft: Beispiele: category(1111) /\ np(1000) = np(1000) featval( ) /\ second( ) = second( ) Aufgrund dieser Repräsentation und Berechnung ist glb/3 immer deterministisch. glb(T1,T2,T3):- T3 is T1 /\ T2.

Typinferenz11 Untere Schranken Da die größte untere Schranke zweier Typen leicht zu berechnen ist und alle anderen unteren Schranken Subtypen dieser sind, können sie so berechnet werden: lb(T1,T2,T3):- glb(T1,T2,GLB), subtype(T3,GLB).

Typinferenz12 Typen-Generalisierung / LUB Die Generalisierung von Typen läßt sich entgegen der Intuition nicht über die Vereinigung (logisches ODER) realisieren. verbal(111) v(1) vp(10) s(100) v(1) \/ v(10) = ?(011) !!! statt verbal(111) Hier muß auf die bekannte Methode zurückgegriffen werden.

Typinferenz13 LUB über Extension - nicht vollständig extension/2 liegt als berechnete Faktenmenge vor. Das zweite Argument von extension/2 ist alphabetisch sortiert. Jeder Typ hat entweder keinen oder mindestens zwei unmittelbare Supertypen. % lub(?T1,?T2,?T3) lub(T1,T2,T3):- extension(T1,E1), extension(T2,E2), union(E1,E2,E4), sort(E4,E3), extension(T3,E3). Nebenstehende Definition hat folgende Voraussetzungen:

Typinferenz14 Komplementberechnung ohne Bitvektoren % complement(?Type,-Complement) % The Complement of Type relative to all other Types. complement(Type,Complement):- type(Type), complement(Type,top,Complement). % complement(?Type,+ContextType,-Complement) % The Complement of Type relative to ContextType. % ContextType is the LUB for the complement types. complement(Type,CT,Complement):- setof1(ST,subtype(ST,CT),Types), complement_in_context(Type,Types,Complement0), lubs(Complement0,Complement), Complement \= [], !.

Typinferenz15 Komplement im Kontext ohne Bitvektoren % complement_in_context(?Type,+Context,-Complement) % The Complement of Type relative to Context. Context is a % list of candidate types for the complement. Every type in % Context that has no lower bound with Type is in Complement. complement_in_context(_,[],[]):- !. complement_in_context(Type,[T|Ts],Complement):- lb(Type,T,_), !, complement_in_context(Type,Ts,Complement). complement_in_context(Type,[T|Ts],[T|Complement]):- complement_in_context(Type,Ts,Complement).

Typinferenz16 Komplement mit Bitvectoren I Die Komplementberechnung über Bitvektoren bietet zwei Vorteile: - einfach und schnell - Ergebnis ist ein weiterer Bitvektor anstatt einer Menge complement(BVType,Complement):- type(Type), bitvector_for_type(top,BVTOP), complement_in_context(BVType,BVTOP,Complement). Die Berechnung des Komplements in einem Kontext erfolgt über ein logisches NOT und ein AND: complement_in_context(T, CT, COMP) :- COMP is ( (\(T)) /\ CT).

Typinferenz17 Auf diese Weise können Bitvektoren entstehen, die keine Entsprechung im Typenverband haben Komplement mit Bitvectoren II category(1111) verbal(111) np(1000) v(1) vp(10) s(100) complement_in_context(T, CT, COMP) :- COMP is ( (\(T)) /\ CT). Berechnet werden soll das Komplement von v(1) in Kontext von category(1111): COMP is ( (\(1)) /\ 1111) ==> COMP is ( (...110) /\ 1111)==> COMP is 1110

Typinferenz18 Auf diese Weise können Bitvektoren entstehen, die keine Entsprechung im Typenverband haben Komplement mit Bitvectoren II category(1111) verbal(111) np(1000) v(1) vp(10) s(100) complement_in_context(T, CT, COMP) :- COMP is ( (\(T)) /\ CT). Berechnet werden soll das Komplement von v(1) in Kontext von category(1111): COMP is ( (\(1)) /\ 1111) ==> COMP is ( (...110) /\ 1111)==> COMP is 1110

Typinferenz19 Problem: Identische Bitvektoren In bestimmten Fällen kann es dazu kommen, daß im Typenverband mehreren Typen derselbe Bitvektor zugewiesen wird. Unäre Vererbung: a(111) b(111) BCPO-Verletzung a(11) d(11) c(1)b(10) Diese Typen sind dann nicht mehr voneinander zu unterscheiden (z.B. bei Subtyp-Berechnung).

Typinferenz20Literatur Hassan Ait-Kaci & Robert Boyer & Patrick Lincoln & Roger Nasr (1989): Efficient Implementation of Lattice Operations, ACM Transactions on Programming Languages and Systems, pg Christof Rumpf & Christian Fischbach & Wolfram Bernhardt (2000): QType Manual (to appear) Wolfram Bernhardt (2000): ???, master thesis (to appear)

Typinferenz21 Aufgaben zu Bitvektoren: Aufgabe 1: Schreibe das Prädikat build_bitvectors/0, das aus einem gegebenen Typenverband (z.B. shieber1) die Faktenmenge bitvector_to_type/2 erzeugt. Aufgabe 2: a) Schreibe das Prädikat vector2set(+Bv, -Tl), das einem beliebigen Bitvektor die Liste der überdeckten Typen zuordnet. b) Versuche vector2set/2 deklarativ zu machen : vector2set(?Bv, ?Tl) Hilfe: Möglicherweise benötigst Du die Operationen shift-left/2 und shift-right/2, um Bitketten zu verschieben: >> verschiebt nach rechts (Division durch 2), << verschiebt nach links (Multiplikation mit 2). 1 << 4 = 16 (1 viermal nach links geschoben) Aufgabe 3: Überlege, wie Problem mit identischen Bitvectoren vermieden und bekämpft werden können.