Download - Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf
TypinferenzTypinferenz
Prolog Aufbaukurs SS 2000
Heinrich-Heine-Universität Düsseldorf
Christof Rumpf
05.06.2000 Typinferenz 2
HintergrundHintergrund
• 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.
05.06.2000 Typinferenz 3
Getypte MerkmalsstrukturenGetypte 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.
05.06.2000 Typinferenz 4
Typensignatur - SyntaxTypensignatur - Syntax
• 2 Mengen: Types, Features• 2 Relationen:
– unmittelbarer Subtyp >>– Appropriateness ::
• TypdefinitionSupertyp
>> Subtyp1, ..., Subtypn :: Feature1:Typ1, ...,Featurem:Typm.
05.06.2000 Typinferenz 5
Typensignatur zu ‚Shieber 1‘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
05.06.2000 Typinferenz 6
TyphierarchieTyphierarchie
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
05.06.2000 Typinferenz 7
FS zu Typ FS zu Typ ss in ‚Shieber 1‘ in ‚Shieber 1‘s
HEAD : vhead
np
SUBJECT : HEAD : nhead
agr
NUMBER : numAGREEMENT :
PERSON : pers
GENDER : gen
FORM : vform
05.06.2000 Typinferenz 8
Typensignatur: Prolog-SyntaxTypensignatur: 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.2000 Typinferenz 9
‚‚Shieber 1‘ in Prolog-SyntaxShieber 1‘ in Prolog-Syntaxtop >> [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 >> [] :: [].
05.06.2000 Typinferenz 10
Typensignatur-InterpreterTypensignatur-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)
05.06.2000 Typinferenz 11
TypenTypen
% type(?Type).
% Type is defined as a type.
type(T):- call(T >> _).
05.06.2000 Typinferenz 12
Unmittelbare SubtypenUnmittelbare Subtypen
% immediate_subtype(?ImmediateSubType,?Type)
% ImmediateSubType is defined as an immediate
% subtype of Type.
immediate_subtype(ST,T):-
call(T >> STs :: _),
member(ST,STs).
05.06.2000 Typinferenz 13
SubtypenSubtypen
% 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).
05.06.2000 Typinferenz 14
Echte SubtypenEchte Subtypen
% true_subtype(?SubType,?Type)
% SubType is a true subtype of Type.
true_subtype(T1,T2):-
subtype(T1,T2),
T1 \= T2.
05.06.2000 Typinferenz 15
Minimale (Sub-)TypenMinimale (Sub-)Typen
minimal_subtype(MiniType,Type):-
subtype(MiniType,Type),
minimal(MiniType).
minimal(T):- T >> [] :: _.
05.06.2000 Typinferenz 16
Extension eines TypsExtension 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).
05.06.2000 Typinferenz 17
Alle Lösungen: setof/3Alle 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(_,_,[]).
05.06.2000 Typinferenz 18
Setof-BeispielSetof-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]
05.06.2000 Typinferenz 19
Typen-UnifikationTypen-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.
05.06.2000 Typinferenz 20
Untere SchrankenUntere 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).
05.06.2000 Typinferenz 21
Grösste untere SchrankenGrö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.
05.06.2000 Typinferenz 22
GLB über ExtensionGLB ü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:
05.06.2000 Typinferenz 23
Typen-GeneralisierungTypen-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.
05.06.2000 Typinferenz 24
SupertypenSupertypen
% 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).
05.06.2000 Typinferenz 25
Obere SchrankenObere 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).
05.06.2000 Typinferenz 26
Kleinste obere SchrankenKleinste 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.
05.06.2000 Typinferenz 27
LUB über ExtensionLUB ü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:
05.06.2000 Typinferenz 28
LUB-Filter für TypenmengeLUB-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!
05.06.2000 Typinferenz 29
KomplementKomplement
% 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 \= [], !.
05.06.2000 Typinferenz 30
Komplement im KontextKomplement 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).
05.06.2000 Typinferenz 31
Komplement: BeispielKomplement: 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
05.06.2000 Typinferenz 32
LiteraturLiteratur
• 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.