a(Art,Form) --> [Vollform],
    { wort(_Stamm,a(Art,Form),Vollform) }.

% definite und interrogative Gradphrasen: gp([Def],[])

gp([indef],[]) --> [sehr].  % proGP
gp([def],[]) --> anzahl(_Zahl), einheit.
gp([def],[]) --> (fp([def],[]) ; []), [so].

gp([qu],[]) --> [wie].    
gp([qu],[]) --> [wieviel]. % HL ??
gp([qu],[]) --> [wieviele] , einheit.
gp([qu],[]) --> fp([qu],[]), [so].

anzahl(Zahl) --> [Zahlatom],
    { anzahl(Zahlatom,Zahl), Zahl >= 1 }.
einheit --> [Mass],
    {member(Mass,[cm,m,km,'Meter'])}.

% Definite und interrogative Faktorphrasen

fp([def],[]) --> anzahl(_Zahl), [mal] 
    ; [doppelt] ; ([ein];[zwei]), [drittel] ; [halb].
fp([qu],[]) --> [wieviel], [mal].

% schrammel ua

gp([Fak],[Zahl|Dim]) -->
    [Zahlatom], {anzahl(Zahlatom,Zahl)}, 
    [kg],{Dim =[gewicht],Fak=abs}.

gp([Fak],[Zahl|Dim]) -->
    [Zahlatom], {anzahl(Zahlatom,Zahl)}, 
    [mal], {Fak=fak,Dim=[]}.

% ------------ AP -------------------
ap([Def],[pos]) -->  % 20 cm gross; wieviel cm gross?
    ( gp([Def],[]), {Grad = +grad}
    ; [], { (Art = dim; Art = bew), Def = indef
          ; Art = equ, Def = indef} ),
    a([Art,Grad],[pos]).
% Aequative:
ap([Def],[pos]) -->  % (doppelt | wieviel mal) so klein
    (fp([Def],[]) ; [], {Def = def}),  
    [so], 
    a([_Art,_Grad],[pos]),
    [wie],
    ( np([Def2,3,_Gen2],[_Num,nom]),
        { Def2 = indef ; Def2 = def ; Def2 = quant}
    ; s([def],[_Temp,_Mod,vl]) 
    ).

% Vergleiche:
ap([Def],[komp]) --> 
    ( ([viel] ; []), {Def = def}   % (viel) kleiner
    ; ([um] ; []),     % (um) 20 cm kleiner; 
        gp([Def],[])   % (um) wieviel cm kleiner?
    ),
    a([_Art,_Grad],[komp]),
    [als],
    ( np([Def2,3,_Gen2],[_Num,nom]),
        { Def2 = indef ; Def2 = def ; Def2 = quant}
    ; s([def],[_Temp,_Mod,vl])
    ).

ap([def],[sup]) -->
    [am], a([_Art,_Grad],[sup]).

ap([Def],[Komp,Adekl,Gen,Num,Kas]) -->
    ( gp([Def],[])
    ; [], { (Art = dim; Art = bew), Def = indef
          ; Art = equ, Def = indef}
    ),
    a([Art,_Grad],[Komp,Adekl,Gen,Num,Kas]),
    ([] ; ap([_Def2],[Komp,Adekl,Gen,Num,Kas])).

ap([Def],[pos,Adekl,Gen,Num,Kas])/wie_vgl -->
    (fp([Def],[]) ; [], {Def = def}), [so],
    a([_Art,_Grad],[pos,Adekl,Gen,Num,Kas]).

ap([Def],[komp,Adekl,Gen,Num,Kas])/als_vgl -->
    ( ([viel] ; []), {Def = def}   % (viel) kleinere
    ; ([um] ; []),     % (um) 20 cm kleinere; 
        gp([Def],[])   % (um) wieviel cm kleinere
    ),
    a([_Art,_Grad],[komp,Adekl,Gen,Num,Kas]).

