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

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

Embed Size (px)

Citation preview

Page 1: 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

Page 2: Typinferenz 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.

Page 3: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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.

Page 4: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

05.06.2000 Typinferenz 4

Typensignatur - SyntaxTypensignatur - Syntax

• 2 Mengen: Types, Features• 2 Relationen:

– unmittelbarer Subtyp >>– Appropriateness ::

• TypdefinitionSupertyp

>> Subtyp1, ..., Subtypn :: Feature1:Typ1, ...,Featurem:Typm.

Page 5: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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

Page 6: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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

Page 7: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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

Page 8: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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, '::').

Page 9: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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 >> [] :: [].

Page 10: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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)

Page 11: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

05.06.2000 Typinferenz 11

TypenTypen

% type(?Type).

% Type is defined as a type.

type(T):- call(T >> _).

Page 12: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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).

Page 13: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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).

Page 14: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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.

Page 15: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

05.06.2000 Typinferenz 15

Minimale (Sub-)TypenMinimale (Sub-)Typen

minimal_subtype(MiniType,Type):-

subtype(MiniType,Type),

minimal(MiniType).

minimal(T):- T >> [] :: _.

Page 16: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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).

Page 17: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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(_,_,[]).

Page 18: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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]

Page 19: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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.

Page 20: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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).

Page 21: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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.

Page 22: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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:

Page 23: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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.

Page 24: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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).

Page 25: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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).

Page 26: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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.

Page 27: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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:

Page 28: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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!

Page 29: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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 \= [], !.

Page 30: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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).

Page 31: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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

Page 32: Typinferenz Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

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.