Text of Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf
Folie 1
Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universitt Dsseldorf Christof Rumpf
Folie 2
05.06.2000Typinferenz2 Hintergrund Getypte Merkmalsstrukturen sind von Bedeutung insbesondere fr die HPSG. Implementierte Systeme zur Verarbeitung getypter Merkmalsstrukturen sind u.a. ALE, CUF, LKB, TFS, TROLL,... Die nachfolgenden Definitionen liegen dem Dsseldorfer System QType zugrunde, das sich seit 1997 in Entwicklung befindet.
Folie 3
05.06.2000Typinferenz3 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.
Folie 4
05.06.2000Typinferenz4 Typensignatur - Syntax 2 Mengen: Types, Features 2 Relationen: unmittelbarer Subtyp >> Appropriateness :: Typdefinition Supertyp >> Subtyp 1,..., Subtyp n :: Feature 1 :Typ 1,...,Feature m :Typ m.
05.06.2000Typinferenz6 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
Folie 7
05.06.2000Typinferenz7 FS zu Typ s in Shieber 1
Folie 8
05.06.2000Typinferenz8 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, '::').
05.06.2000Typinferenz11 Typen % type(?Type). % Type is defined as a type. type(T):- call(T >> _).
Folie 12
05.06.2000Typinferenz12 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).
Folie 13
05.06.2000Typinferenz13 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).
Folie 14
05.06.2000Typinferenz14 Echte Subtypen % true_subtype(?SubType,?Type) % SubType is a true subtype of Type. true_subtype(T1,T2):- subtype(T1,T2), T1 \= T2.
05.06.2000Typinferenz16 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).
Folie 17
05.06.2000Typinferenz17 Alle Lsungen: setof/3 % setof(?Template,+Goal,?Set) Eingebautes Prdikat. % 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(_,_,[]).
Folie 18
05.06.2000Typinferenz18 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]
Folie 19
05.06.2000Typinferenz19 Typen-Unifikation Die Unifikation zweier Typen t 1 und t 2 liefert entweder Typ t 3, falls t 3 der allgemeinste Typ ist, soda t 3 Subtyp von t 1 ist und t 3 Subtyp von t 2 ist oder ist undefiniert, falls es einen solchen Typ t 3 nicht gibt.
Folie 20
05.06.2000Typinferenz20 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).
Folie 21
05.06.2000Typinferenz21 Grsste 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.
Folie 22
05.06.2000Typinferenz22 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:
Folie 23
05.06.2000Typinferenz23 Typen-Generalisierung Die Generalisierung zweier Typen t 1 und t 2 liefert entweder Typ t 3, falls t 3 der spezifischste Typ ist, soda t 3 Supertyp von t 1 ist und t 3 Supertyp von t 2 ist oder ist undefiniert, falls es einen solchen Typ t 3 nicht gibt.
Folie 24
05.06.2000Typinferenz24 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).
Folie 25
05.06.2000Typinferenz25 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).
Folie 26
05.06.2000Typinferenz26 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.
Folie 27
05.06.2000Typinferenz27 LUB 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. % 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:
Folie 28
05.06.2000Typinferenz28 LUB-Filter fr 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!
Folie 29
05.06.2000Typinferenz29 Komplement % complement(?Type,-Complement) % The Complement of Type relative to all other Types. complement(Type,Complement):- type(Type), complement(Type,top,Compleme