--# -path=.:../abstract:../common:../prelude

concrete CatMon of Cat = CommonX - [CAdv,Temp,Tense] ** open ResMon, Prelude in {

 flags optimize=all_subs ; coding=utf8 ;

lincat

-- Tensed/Untensed

   S  = {s : SType => Str} ;
   QS = {s : QForm => Str} ;  
   RS = {s : ComplType => Str ; existSubject : Bool} ;
   SSlash = {s : Str ; c2 : Complement} ;
   
-- Clause (variable tense) e.g. "John walks"/"John walked"

   Cl = {s : ClTense => Anteriority => Polarity => SType => Str} ; 
   ClSlash = {s : ClTense => Anteriority => Polarity => SType => Str ; c2 : Complement} ;
   Imp = {s : Polarity => ImpForm => Str} ;

-- Question

   QCl = {s : ClTense => Anteriority => Polarity => QForm => Str} ;  
   IP = {s : RCase => Str} ;  
   IComp = {s : Str} ;   
   IDet = {s : RCase => Str ; n : Number} ;   
   IQuant = {s : RCase => Str} ;
   
-- Relative

-- Mongolian lacks relative pronouns: a relative clause consists of a truncated sentence
-- (desentential phrase) in apposition to. The verbs of relative clauses in Mongolian take
-- verbal nominal endings (NDS). The subject goes into the genitive case, which transforms the RP.
-- (Binnick, 1979:89; Kullmann 2005:392)

   RCl = {s :  ClTense => Anteriority => Polarity => SType => Str ; existSubject : Bool} ;
   RP = {s : Str} ;

-- Verb

   VP = VerbPhrase ;  
   Comp = {s : RCase => Str} ;   
   VPSlash = VerbPhrase ** {c2 : Complement} ;            

-- Adjective
    
   AP = { s : Str } ; 
   CAdv = {s : Str} ** {c2 : Complement} ;

-- Noun (Mongolian common nouns have neither gender nor animacy):

   CN = {s : Number => NCase => Str} ; 
   NP = NounPhrase ;
   Pron = { s : PronForm => Str ; n : Number ; p : Person} ;

-- Determiners 

-- The determined noun has the case parameter specific for the determiner

   Det = {
      s : Str ; 
	  sp : RCase => Str ; -- substantival form
	  isNum : Bool ; -- true, if a numeral is present
	  isPoss : Bool ; -- true, if a possessive is present
	  isDef : Bool ; -- when definite, is true
	  isPre : Bool
	  } ;
   Ord = { s : Str } ;                              
   Predet = {
      s : Str ; 
	  isPre : Bool ; 
	  isDef : Bool 
	  }  ; 
   Quant = {
      s : Number => Str ; 
	  sp : Number => NCase => Str ; 
	  isPoss : Bool ; 
	  isDef : Bool
	  } ;

-- Numeral

   Num  = {s : Str ; sp : RCase => Str ; n : Number ; isNum : Bool} ; 
   Card = {s : Str ; sp : RCase => Str ; n : Number} ;
   Numeral = {s : CardOrd => Str; n : Number} ;
   Digits = {s : CardOrd => Str ; n : Number} ;
   Decimal = {s : CardOrd => Str ; n : Number; hasDot : Bool} ;

-- Structural

   Conj = {s1,s2 : Str} ;
   Subj = {s : Str ; isPre : Bool} ;   
   Prep = {s : Str ; rc : RCase} ;

-- Open lexical classes, e.g. Lexicon

   V,VA,VS,VQ = Verb ;
   VV = Aux ;
   V2,V2S,V2A,V2Q,V2V = Verb ** {c2 : Complement} ; 
   V3 = Verb ** {c2,c3 : Complement} ;

   A = Adjective ; 
   A2 = Adjective ** {c2 : Complement} ;

   N = Noun ;  
   N2 = Noun ** {c2 : Complement} ;
   N3 = Noun ** {c2,c3 : Complement} ;
   PN = {s : RCase => Str} ;
   
   Temp = {s : Str ; t : ClTense ; a : Anteriority} ;
   Tense = {s : Str ; t : ClTense} ;
}

