1 / 32

Typinferenz

Typinferenz. Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf. Hintergrund. Getypte Merkmalsstrukturen sind von Bedeutung insbesondere für die HPSG. Implementierte Systeme zur Verarbeitung getypter Merkmalsstrukturen sind u.a. ALE, CUF, LKB, TFS, TROLL, ...

mac
Télécharger la présentation

Typinferenz

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

  2. Hintergrund • Getypte Merkmalsstrukturen sind von Bedeutung insbesondere für die HPSG. • Implementierte Systeme zur Verarbeitung getypter Merkmalsstrukturen sind u.a. ALE, CUF, LKB, TFS, TROLL, ... • Die nachfolgenden Definitionen liegen dem Düsseldorfer System QType zugrunde, das sich seit 1997 in Entwicklung befindet. Typinferenz

  3. Getypte Merkmalsstrukturen • Sind Mengen von Attribut-Wert-Paaren. • Jede Merkmalsstruktur hat einen Typ. • Jeder Wert eines Attributs ist eine getypte Merkmalsstruktur. • Die Typen sind in einer Vererbungshierarchie (Summenhalbverband) angeordnet, innerhalb der Attribut-Wert-Paare top-down vererbt werden. • Die Vererbungshierarchie wird durch eine Typensignatur etabliert, in der Klassen von Merkmalsstrukturen definiert werden. Typinferenz

  4. Typensignatur - Syntax • 2 Mengen: Types, Features • 2 Relationen: • unmittelbarer Subtyp >> • Appropriateness :: • Typdefinition • Supertyp • >> Subtyp1, ..., Subtypn:: Feature1:Typ1, ...,Featurem:Typm. Typinferenz

  5. 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 Typinferenz

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

  7. FS zu Typ s in ‚Shieber 1‘ Typinferenz

  8. Typensignatur: Prolog-Syntax % Type >> Subtypes :: FeatureValuePairs % Type = Atom % Subtypes = [Type1,...,TypeN] % FeatureValuePairs = [F1:V1,...,Fm:Vm] % Fi = Atom % Vi = Type :- op(800, xfx, '>>'). :- op(700, xfx, '::'). Typinferenz

  9. ‚Shieber 1‘ in Prolog-Syntax 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]::[]. base >>[]::[]. v >>[]::[]. masc >>[]::[]. first >>[]::[]. vp >>[]::[]. fem >>[]::[]. second >>[]::[]. s >>[]::[]. neut >>[]::[]. third >>[]::[]. sing >>[]::[]. plur >>[]::[]. finite >>[]::[]. Typinferenz

  10. Typensignatur-Interpreter • type(?Type) • immediate_subtype(?ImmediateSubType,?Type) • subtype(?SubType,?Type) • immediate_supertype(?SuperType,?Type) • supertype(?SuperType,?Type) • lb(?Type1,?Type2,?Type3) lower bound • glb(?Type1,?Type2,?Type3) greatest lower bound • ub(?Type1,?Type2,?Type3) upper bound • lub(?Type1,?Type2,?Type3) least upper bound • complement(?Type,-Complement) Typinferenz

  11. Typen % type(?Type). % Type is defined as a type. type(T):- call(T >> _). Typinferenz

  12. Unmittelbare Subtypen % immediate_subtype(?ImmediateSubType,?Type) % ImmediateSubType is defined as an immediate % subtype of Type. immediate_subtype(ST,T):- call(T >> STs :: _), member(ST,STs). Typinferenz

  13. Subtypen % subtype(?SubType,?Type) % SubType is a subtype of Type. % Reflexive transitive closure of the % immediate_subtype/2 relation. subtype(T,T):- type(T). subtype(ST,T):- immediate_subtype(IST,T), subtype(ST,IST). Typinferenz

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

  15. Minimale (Sub-)Typen minimal_subtype(MiniType,Type):- subtype(MiniType,Type), minimal(MiniType). minimal(T):- T >> [] :: _. Typinferenz

  16. Extension eines Typs % extension(?Type,-Extension) % Extension is the set of minimal subtypes of Type. extension(Type,Extension):- type(Type), setof1(MiniType, minimal_subtype(MiniType,Type), Extension). Typinferenz

  17. Alle Lösungen: setof/3 % setof(?Template,+Goal,?Set) Eingebautes Prädikat. % Set ist die Menge aller Instanzen von Template,% so dass Goal bewiesen werden kann. Falls Set % leer ist, scheitert setof/3. % setof1(?Template,+Goal,?Set) setof1(Template,Goal,Set):- setof(Template,Goal,Set), !. setof1(_,_,[]). Typinferenz

  18. Setof-Beispiel likes(bill, cider). likes(dick, beer). likes(harry, beer). likes(jan, cider). likes(tom, beer). likes(tom, cider). ?- setof(X, likes(X,Y), S). S = [dick,harry,tom], Y = beer -> ; S = [bill,jan,tom], Y = cider -> ; no ?- setof((Y,S), setof(X, likes(X,Y), S), SS).SS = [(beer,[dick,harry,tom]),(cider,[bill,jan,tom])]yes ?- setof(X, Y^(likes(X,Y)), S). % Y existenzquantifiziert S = [bill,dick,harry,jan,tom] Typinferenz

  19. Typen-Unifikation • Die Unifikation zweier Typen t1 und t2 liefert entweder Typ t3, falls t3 der allgemeinste Typ ist, sodaß • t3 Subtyp von t1 ist und • t3 Subtyp von t2 ist • oder ist undefiniert, falls es einen solchen Typ t3 nicht gibt. Typinferenz

  20. Untere Schranken % lb(?Type1,?Type2,?Type3) % Type3 is a lower bound for Type1 and % Type2, if it is a subtype of both. lb(T1,T2,T3):- subtype(T3,T1), subtype(T3,T2). Typinferenz

  21. Grösste untere Schranken % glb(?Type1,?Type2,?Type3) % Type3 is the greatest lower bound of Type1 and Type2. glb(T1,T2,T3):- % T3 is GLB of T1 and T2 if lb(T1,T2,T3), % T3 is a LB of T1 and T2 and setof1(T4, % the set S of types T4 ( % which are true_subtype(T3,T4), % true supertypes of T3 and lb(T1,T2,T4) % lower bounds of T1 and T2 ), S), S=[]. % is the empty set. Typinferenz

  22. 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 über Extension Nebenstehende Definition hat folgende Voraussetzungen: % glb(?T1,?T2,?T3) glb(T1,T2,T3):- extension(T1,E1), extension(T2,E2), intersection(E1,E2,E4), sort(E4,E3), extension(T3,E3). Typinferenz

  23. Typen-Generalisierung • Die Generalisierung zweier Typen t1 und t2 liefert entweder Typ t3, falls t3 der spezifischste Typ ist, sodaß • t3 Supertyp von t1 ist und • t3 Supertyp von t2 ist • oder ist undefiniert, falls es einen solchen Typ t3 nicht gibt. Typinferenz

  24. Supertypen % supertype(?SuperType,?Type) % SuperType is a supertype of Type. supertype(ST,T):- subtype(T,ST). % immediate_supertype(?SuperType,?Type) % SuperType is an immediate supertype of Type. immediate_supertype(ST,T):- immediate_subtype(T,ST). Typinferenz

  25. Obere Schranken % ub(?Type1,?Type2,?Type3) % Type3 is an upper bound for Type1 and % Type2 if it is a supertype of both. ub(T1,T2,T3):- subtype(T1,T3), subtype(T2,T3). Typinferenz

  26. Kleinste obere Schranken % lub(?Type1,?Type2,?Type3) % Type3 is the least upper bound of Type1 and Type2. lub(T1,T2,T3):- % T3 is the LUB of T1 and T2 if ub(T1,T2,T3), % T3 is an UB for T1 and T2 and setof1(T4, % the set S of types T4 ( % which are true_subtype(T4,T3), % true subtypes of T3 and ub(T1,T2,T4) % upper bounds for T1 and T2 ), S), S=[]. % is the empty set. Typinferenz

  27. 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. LUB über Extension Nebenstehende Definition hat folgende Voraussetzungen: % lub(?T1,?T2,?T3) lub(T1,T2,T3):- extension(T1,E1), extension(T2,E2), union(E1,E2,E4), sort(E4,E3), extension(T3,E3). Typinferenz

  28. LUB-Filter für Typenmenge % lubs(+ListOfTypes1, ?ListOfTypes2) % ListOfTypes2 includes the disjunct least upper bounds for % the types in ListOfTypes1. In other words: every type in % ListOfTypes1 that is a subtype of some other type in % ListOfTypes1 is deleted. lubs(Types,Lubs):- delete(Type1,Types,Types1), member(Type2,Types1), subtype(Type1,Type2), !, lubs(Types1,Lubs). lubs(L,L):- !. naives Verfahren, delete/3 vermeiden! Typinferenz

  29. Komplement % 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 \= [], !. Typinferenz

  30. Komplement im Kontext % 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). Typinferenz

  31. Komplement: Beispiel ?- complement(first, top, C). C = [agr,category,gen,head,num,second,third,vform] yes ?- complement(first, pers, C). C = [second,third] yes mit der ‚Shieber 1‘-Signatur als Basis Typinferenz

  32. Literatur • Carpenter, Bob (1993): The Logic of Typed Feature Structures. CUP. • O‘Keefe, Richard A. (1990): The Craft of Prolog. MIT Press. • Shieber, Stuart (1986): An Introduction to Unification-based Approaches to Grammar. CSLI Lecture Notes. Typinferenz

More Related