:- module(kategorien,[kategorie/1]).

:- use_module('Morphologie/wortformen.pl'). 
genus(Gen) :-
    (Gen = fem ; Gen = mask ; Gen = neut).
kasus(X) :-
    (X = nom ; X = gen ; X = dat ; X = akk).

kategorie(en([Gen],[sg,Kas])) :-
    genus(Gen), 
    kasus(Kas).

kategorie(n([Gen],[Num,Kas])) :-
    genus(Gen),
    numerus(Num),  % wortformen:numerus/1 
    kasus(Kas).

kategorie(rn([Gen],[Num,Kas])) :-
    genus(Gen),
    numerus(Num),
    kasus(Kas).

kategorie(pron([Def],[Gen,Num,Kas])) :-
    (Def = def ; Def = rel ; Def = qu), 
    genus(Gen),          % er, der, wer
    numerus(Num),
    kasus(Kas).
    
kategorie(det([Def],[Gen,Num,Kas])) :-
    member(Def,[indef,def,qu,quant]), 
    genus(Gen),          % ein,der,welcher,jeder
    numerus(Num),
    kasus(Kas).

kategorie(poss([Def],[Gen,Num,Kas])) :-
    member(Def,[def,rel,qu]), 
    genus(Gen),          % sein,dessen,wessen
    numerus(Num),
    kasus(Kas).

kategorie(v([nom,akk],[Pers,Num,Temp,Mod])) :-
    Pers = 3,
    numerus(Num),
    tempus(Temp),  % wortformen:tempus/1 
    modus(Mod).    % wortformen:modus/1 

kategorie(v([H],[Pers,Num,Temp,Mod])) :-
    hilfsverb(H),
    Pers = 3,
    numerus(Num),
    tempus(Temp),
    modus(Mod).
hilfsverb(H) :-
    (H = sein ; H = werden).  % ggf. haben
kategorie(np([Def,Pers,Gen],[Num,Kas])) :-
    definitheit(np,Def),
    genus(Gen),
    numerus(Num),
    kasus(Kas),
    Pers = 3. % wir behandeln nur dritte Person

definitheit(np,Def) :-
    ( Def = indef ; Def = def ; Def = qu ; Def = quant
    ; Def = rel(Gen,Num), genus(Gen), numerus(Num) ).

kategorie(s([Def],[Temp,Mod,Vst])) :-
    definitheit(s,Def),
    tempus(Temp), % ggf. ; Temp = perf
    modus(Mod),
    verbstellung(Vst).

definitheit(s,Def) :-
    (Def = def ; Def = qu
    ; Def = rel(Gen,Num), genus(Gen),numerus(Num)).
verbstellung(Vst) :-
    (Vst = ve ; Vst = vz ; Vst = vl).
