concrete CatGre of Cat = CommonGre ** open ResGre, Prelude in {

  flags coding =utf8 ;

  lincat


    S  = {s : Mood => Str} ;

    QS  = {s : QForm => Str} ; 

    RS = {s : Mood => Agr => Str ; c : Case} ;  

    SSlash = { s  : AAgr => Mood => Str ;n3 : Agr => Str ; c2 : Compl} ;

    Cl = {s :Order => ResGre.TTense => Anteriority =>  Polarity => Mood =>  Str} ; 

    ClSlash = {s : AAgr => Order =>  ResGre.TTense => Anteriority => Polarity => Mood => Str ;n3 : Agr => Str ; c2 : Compl} ; 

    Imp = {s : Polarity =>  Number => Aspect => Str } ;

    QCl = {s : ResGre.TTense => Anteriority => Polarity => QForm => Str} ; 

    IP = {s : Gender => Case => Str ;  n : Number ;a : AAgr};

    IComp = {s : Str} ;    

    IDet   = {s : Gender => Case => Str ; n : Number} ;

    IQuant = {s : Number => Gender => Case => Str } ;

    RCl  = {s : Agr => ResGre.TTense => Anteriority => Polarity => Mood => Str ;  c : Case } ;  

    RP   = {s : Bool => AAgr =>  Case => Str ; a : AAgr ; hasAgr : Bool} ;

    VP = ResGre.VP ;

    VPSlash = ResGre.VP ** {n3 : Agr => Str ; c2 : Compl} ;

    Comp = {s : Agr => Str} ; 

    AP = ResGre.Adj ;

  
-- Noun

    CN = Noun ;

    NP =NounPhrase; 

    Pron = Pronoun ;

    Det = {s : Gender => Case => Str ; sp : Gender => Case => Str ;  n : Number  ;isNeg : Bool};

    Predet = {s :Number =>  Gender => Case =>Str} ;

    Ord = {s :Degree => Gender => Number => Case => Str ; adv : Degree => Str } ;

    Num  = {s : Gender => Case => Str ; isNum : Bool ; n : Number} ;

    Card = {s : Gender => Case => Str ; n : Number} ;

    Quant = ResGre.Quantifier;
 

-- Numerals

    Numeral = {s : CardOrd => Str ; n : Number } ;

    Digits  = {s : CardOrd => Str ; n : Number} ;

-- Structural
   
    Conj = {s1,s2 : Str ; n : Number} ;

    Subj = {s : Str ; m : Mood} ;

    Prep = {s : Str ; c : Case ; isDir : Bool} ;


-- Open lexical classes, e.g. Lexicon

    V, VS, VQ, VA = Verb ; 

    V2, VV, V2S, V2Q = Verb ** {c2 : Compl} ;

    V3, V2V,V2A = Verb ** {c2, c3 : Compl} ;

    A = ResGre.Adj ; --{s : Degree => Gender => Number => Case => Str } ;

    A2 = {s :Degree => Gender => Number => Case => Str ; adv : Degree => Str ;c2 : Compl }  ;
    

    N = Noun;

    N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Compl} ;

    N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Compl} ;

    PN = PName ;

}
