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

resource MorphoRon = ResRon ** 
  open   Prelude, Predef in {

flags optimize=noexpand ; coding = utf8 ;

---------------------------------------------------------------------------------
------------------------------ARTICLES-------------------------------------------
---------------------------------------------------------------------------------

--defined article (enclitic)
-- we need two forms, as the Singular AGenDat form for Feminine is obtained from the
-- Plural form, except for irregular nouns that need an additional form  

oper artDf : Str -> Str -> Gender -> Number -> ACase -> Str =
\bun, buni, g, n, a ->
case <g,n,a> of
{ <Masc,Sg,ANomAcc>  => case last bun of
                        { "u" => bun + "l";
                          "e" => bun + "le"; 
                          "ă" => bun + "l";
                           _   => bun + "ul"
                        };
  <Masc,Sg,AGenDat>  => case last bun of
                        {("u"|"e"|"ă" ) => bun + "lui" ;    
                          _          => bun + "ului"
                         };              
  <Masc,Sg,AVoc>  => case bun of
					    { x+"u"           => bun + "le";
					      x + "itor"      => bun + "ule" ;
					      x + ("en"|"or") => bun + "e" ;
					      x+("e"|"ă") => bun;
						  _           => bun + "ule"
					    };                                  
  <Masc,Pl,ANomAcc>  => buni + "i";
  <Masc,Pl, _>    => buni + "lor";
  <Fem,Sg,ANomAcc>   =>  case bun of
				        { x + ("a"|"i") => bun + "ua";
					      x + "ie"      => x + "ia";
						  x + "ă"       => x + "a";
						  _             => bun + "a"			
						};
						 
 <Fem,Sg,AGenDat>   => case  bun of
                        { x + ("a"|"e")+"ie" => buni+"i";
                          x + "ie"  => bun + "i"; 
                          _   => buni + "i"
                         };
                            
 <Fem,Sg,AVoc>   => case bun of
					    { x + "ă"       => x + "o";
					      x + "ie"      => x + "io";
					      _             => bun + "o"
					    };						  
 <Fem,Pl,ANomAcc>   => buni + "le";
 <Fem,Pl,_>   => buni + "lor"
                            };
 



	     		  



--flexion forms of a noun without article

oper artUnf : Str -> Str -> Gender -> Number -> ACase -> Str = \buna,bune,g,n,a ->
case <g,n,a> of
{<Masc,Sg,_> => buna ; <Masc,Pl,_> => bune ;
 <Fem,Sg,ANomAcc> => buna ; <Fem,Sg,AGenDat> => bune ; <Fem,Sg,AVoc> => buna;
 <Fem,Pl,_> => bune 
} ;

--undefined article form 

oper artUndefMasc : Str -> Number -> ACase -> Str = \s,n,a -> s;

oper artUndefFem : Str -> Str -> Number -> ACase -> Str = \buna, bune, n, a ->
case <n,a> of
{
<Sg,ANomAcc>  => buna;
<Sg,AGenDat>  => bune;
<Sg,AVoc>   => buna;  
<Pl,_>     => bune
}; 
          	


---------------------------------------------------------------------------------
------------------------------- NOUNS-------------------------------------------- 
---------------------------------------------------------------------------------

-- the irregular nouns (of feminine gender) need 3 forms in order to build the
-- morfological table : (Singular ANomAcc Indef, Plural ANomAcc Indef and 
-- Singular AGenDat Indef)


oper mkNomVIrreg : Str -> Str -> Str -> Noun = \iarba, ierburi, ierbi ->
let noun = mkNomIrreg iarba ierburi NFem
 in
  {s = \\n,a,c => case n of
                    {Sg => case c of 
                            {AGenDat => case a of {Indef => ierbi;
                                                   Def   => artDf iarba ierbi Fem Sg AGenDat
                                                   };
                              _ => noun.s ! Sg ! a ! c                  
                            };
                     Pl => noun.s ! Pl ! a ! c     
                     };
 g = NFem ;
 a = Animate 
   }; 
 
-- usual nouns need two forms (Singular + Plural ANomAcc Indef)
-- because the Neuter behaves like Masculine for Singular and Feminine for Plural,
-- we pass 2 parameters - gender for Singular and for Plural, so that we can define 
-- the forms for Neuter as a combination of Feminine and Masculine

 
oper mkNomIrreg : Str -> Str -> NGender -> Noun = \obiect, obiecte , gen ->
 case gen of
  { NMasc =>  {s = mkNom obiect obiecte Masc Masc ; g = gen ; a = Animate };
    NFem  =>  {s = mkNom obiect obiecte Fem Fem ; g = gen ; a = Animate };
    NNeut =>  {s = mkNom obiect obiecte Masc Fem ; g = gen ; a = Animate } 
  };
 
--creates the table for a noun : 
 
oper mkNom : Str -> Str -> Gender -> Gender -> Number => Species => ACase => Str = \obiect, obiecte, gs, gp ->
     table  { Sg => table {Def => \\p => artDf obiect obiecte gs Sg p;    
                           Indef => \\p => artUnf obiect obiecte gs Sg p
                           };
              Pl => table { Def   => \\p => artDf obiect obiecte gp Pl p ;
                            Indef => \\p => artUnf obiect obiecte gp Pl p              
                           }             
            } ;


-- for regular nouns, we need just the Singular ANomAcc Indef form :
-- for obtaining the plural form, we apply almost the same rules as for adjectives
-- for Neuter we treat the Singular ANomAcc Indef for as the Masculine Singular form of an Adjective
-- and we obtains it's plural form as the Feminine Plural form of the adjective 
-- (with potential o -> oa mutations, that occur in most of the cases)
      
mkNomReg : Str -> NGender -> Noun = \obiect, g ->
case g of 
       {NMasc => mkNomIrreg obiect ((mkAdjReg obiect).s ! (AF Masc Pl Indef ANomAcc)) NMasc ;
        NFem  => case (Predef.dp 4 obiect) of 
                   { "ai"+x+"ă"  => mkNomIrreg obiect (init obiect + "e") NFem ; --always
                      _ => case (Predef.dp 3 obiect) of
                      {"i"+("c"|"n"|"m"|"p")+"ă" => mkNomIrreg obiect (init obiect + "i") NFem ; -- 60% cases frequently used words, not frequent for neological words
                         _                       => mkNomIrreg obiect (mkFemPl obiect) NFem 
                      }
                   };
        NNeut => if_then_else Noun (pbool2bool (Predef.occur "o" (Predef.dp 3 obiect) ))  
                           (mkNomIrreg obiect ((mkAdjRegO obiect).s ! (AF Fem Pl Indef ANomAcc)) NNeut) 
                                       (mkNomIrreg obiect ((mkAdjReg obiect).s ! (AF Fem Pl Indef ANomAcc)) NNeut)                                      
       };

--for nouns that have a different vocative form than the one inferred

mkVocc : Noun -> Str -> Noun  = \n -> \vo ->
 {s = table{ Sg => \\p, c => case c of
                                     { AVoc => vo ;
                                       _    => n.s ! Sg ! p ! c
                                      };
             Pl => \\p,c => n.s ! Pl ! p ! c                     
           };
  g = n.g ;
  a = n.a

  };                                 
 
 -- composes a noun with an invariable string ( Ex camera foto)
 -- with/without dash
 
 ccompose : Noun -> Str -> Noun = \noun, y ->
 { s = \\n,p,c => noun.s ! n ! p ! c +"-"+ y ;
   g = noun.g ;
   a = noun.a
 };
 
 
 composeN : Noun -> Str -> Noun = \noun, y ->
 { s = \\n,p,c => noun.s ! n ! p ! c ++ y ;
   g = noun.g ;
   a = noun.a
 };
 
 -- changes the Animacy attribute 
 
 mkInanimate : Noun -> Noun = \n ->
 {s = table { Sg => \\p,c => case c of 
                       {AVoc => n.s ! Sg ! p ! ANomAcc ;
                        _    => n.s ! Sg ! p ! c
                       };
              Pl => \\p, c => n.s ! Pl ! p ! c         
            };
  g = n.g ;
  a = Inanimate          
  };
 
 mkAnimate : Noun -> Noun = \n ->
  let ob = n.s ! Sg ! Indef ! ANomAcc ;
     obs = n.s ! Pl ! Indef ! ANomAcc 
     in
 {s = table { Sg => \\p,c => case <p,c> of 
                       {<Indef,AVoc> => n.s ! Sg ! Indef ! ANomAcc ;
                        <Def,AVoc>   => case (n.g) of 
                                          {NFem  => artDf ob obs Fem Sg AVoc ;
                                           _     => artDf ob obs Masc Sg AVoc 
                                          } ;
                        _            => n.s ! Sg ! p ! c
                       };
              Pl => \\p, c => n.s ! Pl ! p ! c         
            };
  g = n.g ;
  a = Animate      
};
 
--a special case of neuter nouns -- the ones that just add -ri/-uri to the Singular Form
 
mkNomNeut : Str -> Noun = \obiect ->
case last obiect of
{"u" => mkNomIrreg obiect (obiect + "ri") NNeut;
  _  => mkNomIrreg obiect (obiect + "uri") NNeut
};


---------------------------------------------------------------------------------
-----------------------------ADJECTIVES------------------------------------------
---------------------------------------------------------------------------------



-- in the worst case, the adjective needs 5 forms for Singular/Plural - Masculine/Feminine +  Adverb		  				    	


oper mkAdjSSpec : Str -> Str -> Str -> Str -> Str -> Adj
= \bun -> \buna -> \buni -> \bune -> \bine ->
{ s = table {AF Masc Sg Def c   => artDf bun buni Masc Sg c ;
              AF Fem Sg Def c    => artDf buna bune Fem Sg c ;
              AF Masc Pl Def c   => artDf bun buni Masc Pl c; 
              AF Fem Pl Def c    => artDf buna bune Fem Pl c ;
              AF Masc Pl Indef c => artUndefMasc buni Pl c;
              AF Fem Pl Indef c  => artUndefFem buna bune Pl c;
              AF Masc Sg Indef c => artUndefMasc bun Sg c;
              AF Fem Sg Indef c  => artUndefFem buna bune Sg c;
              AA                  => bine
             }

};

-- usually the determined adverb is identical to the Singular Masculine form of the adjective

oper mkAdjSpec : Str -> Str -> Str -> Str -> Adj 
= \bun -> \buna -> \buni -> \bune ->
                mkAdjSSpec bun buna buni bune bun ;


-- special classes of adjectives :

oper adjAuriu : Str -> Adj = \s ->
  let f  = init s + "e";
      pl = init s + "i" 
       in
   mkAdjSpec s f pl pl ;
  
oper adjMuncitor : Str -> Adj = \s ->
 let f   = Predef.tk 2 s + "oare";
     pl  = s + "i";
     adv = s + "eşte"
     in
 mkAdjSSpec s f pl f adv ;
 
 oper adjRomanesc : Str -> Adj = \s ->
  let f   = Predef.tk 2 s + "ască";
      pl  = Predef.tk 2 s + "şti";
      adv = Predef.tk 2 s + "şte"
      in
 mkAdjSSpec s f pl pl adv ;
 
oper adjMare : Str -> Adj = \s ->
  let pl = mkStemPlReg s
   in
   mkAdjSpec s s pl pl;                    
  
oper adjDimin : Str -> Adj = \s ->
  let f  = Predef.tk 2 s + "ică";
     pl  = init s + "i";  
     plf = s + "e" 
     in
     mkAdjSpec s f pl plf;
 
oper adjNat : Str -> Adj = \s ->
  let f = Predef.tk 2 s + "en" 
      in
     mkAdjSpec s (s+"ă") (f+"i") (f+"e");

 -- the phonetical mutations that occur in Romanian (Singular Masculine -> Singular Feminine) are 
 -- o -> oa  (Ex : frumos -> frumoasă)
 -- e -> ea / ie -> ia (Ex : des -> deasă)
 -- on the last occurence of o/e in the word (usually 2rd or 3rd last letter)
     
  mkStemMutE : Str -> Str = \s ->
   let  s1 = if_then_Str (pbool2bool (Predef.occur "ie" (Predef.dp 4 s))) ((Predef.tk 3 s) +"a"+(Predef.dp 2 s)) ((Predef.tk 3 s) +"ea" + (Predef.dp 2 s));
        s2 = if_then_Str (pbool2bool (Predef.occur "ie" (Predef.dp 3 s))) ((Predef.tk 2 s) +"a" + (last s)) ((Predef.tk 2 s) +"ea" + (last s))
         in
  case Predef.dp 3 s of
		  {"e"+x => s1;
			_    => s2
		  };
		  
  mkStemMutO : Str -> Str = \s ->
  case Predef.dp 3 s of
  {"o"+x => (Predef.tk 3 s) +"oa" + x;
    _    => (Predef.tk 2 s) + "oa" + (last s)
  };

  -- another phonetical mutation is ă -> e (Ex : proaspătă -> proaspete) 
  -- Singular Feminine -> Plural Feminine
  -- on the last occurence of ă -- 2nd last letter of the root 
  
  mkStemMutA : Str -> Str = \s ->
   case (Predef.dp 2 s) of
   { "ă" + x => (Predef.tk 2 s) + "e" + (last s);
      _      => s
   };
   
  
-- obtaining the Masculine Plural form from the Masculine Singular
-- contains most usual mutations  

oper mkStemPlReg : Str -> Str = \s -> 
case s of
{x + ("st"|"sc"|"şc")=> x + "şti"; -- always -- usually the nouns/adj can end in an "u", but we eliminate that first
 x + "str"           => x + "ştri"; 
 x + "s"             => x + "şi"; 
 x + "x"             => x + "cşi"; 
 x + "xt"            => x + "cşti"; 
 x + "ian"           => x + "ieni"; 
 x + "ean"           => x + "eni"; 
 x + "ead"           => x + "ezi"; 
 x + ("de"|"d")      => x + "zi";  
 x + ("te"|"tă"|"t") => x + "ţi";
 x + ("e"|"i"|"a"|"ă")=> x + "i";
 _                   => s + "i"
}; --all the mutations occur always for adjectives, appart from the exception that mutate other syllables from the word


-- special cases that imply other mutations that don't occur for all words
-- because these rules don't apply for neological words, which are more frequent, they are treated
-- separately

oper mkStemPlSpec : Str -> Str = \s ->
case s of 
{x + "l"    => x + "i";
 x + "z"    => x + "j";
 _          => s
};


--obtaining the Feminine Singular form from the Masculine Singular one for Adjectives :

mkFemSg : Str -> Str = \s ->
case s of
{x + "i"  => s + "e";
 x + "iu" => x + "ie";
 x + "u"  => x + "ă";
 _        => s + "ă"
};

-- obtaining the Feminine Plural from Feminine Singular for Nouns :

mkFemPl : Str -> Str = \s ->
case s of
{ x + "are"           => x + "ări"; --always
  x + ("ui"|"ai")     => s + "e"; -- from Masc (adjectives)
  x + "ură"           => x + "uri"; -- always
  x + "oaie"          => x + "oi"; -- almost always
  x + "aie"           => x + "ăi"; --always
  x + "eie"           => x + "ei"; --always
  x + "i"             => s + "le" ; --always - special cases of Feminines ending in "i" like zi = day
  x + "a"             => x + "le"; --always - special cases of Feminines ending in "a" -- most of Turkish origine like cafea = coffee
  x + "une"           => x + "uni"; --always - abstract collective nouns like "naţiune" = nation, French origine
  x + "ate"           => x + "ăţi"; --always same as above like "libertate" = freedom--  x + "şă"            => x + "şi"; -- 70% of cases
  x + "re"            => x + "ri"; -- almost always, exception nouns ending in "oare" which are treated as special case in adjReg
  x + "e"             => x + "i"; -- almost always for Nouns, always for Adjectives
  _                   => case init s of
                        { 
                          x + ("g"|"h"|"nc")   => (init s) + "i"; -- always for Adjectives, almost always for Nouns (g - ending has exceptions)
                          
                          x + "ăt"                 => x + "ete"; --always
                          x + "ânt"                => x + "inte"; --always
                          _                        => case s of
                                                  { x + "ă" => x + "e" ; -- default -- exception occur
                                                    _       => s + "e" -- worst case
                                                  }

                        }
};


--obtainint Feminine Plural from Masculine Singular for Adjectives :

mkFemAdj : Str -> Str = \s ->
case s of 
{ x + ("g"|"h"|"nc") => s + "i";
  x + "ânt"              => x + "inte";
  x + "ăt"               => x + "ete";
  _                      => s + "e"

};


---------------------------------------------------------------

-- invariable adjective - where all the forms are identical
 
mkAdjInvar : Str -> Adj  = \s ->
{s =  table {AF g n a c         => s ;
             AA                 => s
             }
 };

-- regular adjective - just the Masculine Singular Form is needed
 
mkAdjReg : Str -> Adj = \s ->
 let  r    = mkStemMutA s ; 
      rad  = if_then_Str (pbool2bool (Predef.occur "u" (last r))) (init r) r;
      radF = if_then_Str (pbool2bool (Predef.occur "u" (last s))) (init s) s
 in
 case s of 
 {x + "tor" => adjMuncitor s;
  x + "esc" => adjRomanesc s;
  x + "e"   => adjMare s;
  x + "iu"  => adjAuriu s;
  x + "el"  => adjDimin s;
  x + "an"  => adjNat s;
  _         => mkAdjSpec s (mkFemSg radF) (mkStemPlReg rad) (mkFemAdj rad)
 
 };
 
 -- regular adjective that has the e -> ea mutation from Masculine Singular to Feminine Singular
 
 mkAdjRegE : Str -> Adj = \s ->
 let rad = if_then_Str (pbool2bool (Predef.occur "u" (last s))) (init s) s 
  in
    mkAdjSpec s (mkFemSg (mkStemMutE rad)) (mkStemPlReg rad) (mkFemAdj rad);

    
-- regular adjective that has the e -> ea mutation as above, and also the l -> _ / z -> j
-- mutations from Masculine Singular -> Masculine Plural   
    
 mkAdjSpecE : Str -> Adj = \s ->
 let rad = if_then_Str (pbool2bool (Predef.occur "u" (last s))) (init s) s 
 in
    mkAdjSpec s (mkFemSg (mkStemMutE rad)) (mkStemPlSpec rad) (mkFemAdj rad);
    
-- regular adjective that has the o -> oa mutation from Masculine Singular to Feminine Singular    
    
 mkAdjRegO : Str -> Adj = \s ->
 let rad = if_then_Str (pbool2bool (Predef.occur "u" (last s))) (init s) s 
 in
    mkAdjSpec s (mkFemSg (mkStemMutO rad)) (mkStemPlReg rad) (mkFemPl (mkStemMutO rad));      
 
 -- regular adjective that has the o -> oa mutation as above and also the l -> _ / z -> j
 -- mutations from Masculine Singular -> Masculine Plural
 
 mkAdjSpecO : Str -> Adj = \s ->
 let rad = if_then_Str (pbool2bool (Predef.occur "u" (last s))) (init s) s 
 in
    mkAdjSpec s (mkFemSg (mkStemMutO rad)) (mkStemPlSpec rad) (mkFemPl (mkStemMutO rad));
 
 
 -- the two categories mkAdjRegE and mkAdjRegO have been merge into one category of adjectives
 -- that have mutations from Masculine Singular to Feminine Singular
 
 mkRegMut : Str -> Adj = \s ->
 let rad = if_then_Str (pbool2bool (Predef.occur "u" (last s))) (init s) s 
     in
      if_then_else Adj (pbool2bool (Predef.occur "o" (Predef.dp 3 rad)))  
              (mkAdjSpec s (mkFemSg (mkStemMutO rad)) (mkStemPlReg rad) (mkFemPl (mkStemMutO rad)))
              (mkAdjSpec s (mkFemSg (mkStemMutE rad)) (mkStemPlReg rad) (mkFemAdj rad));
 
 -- the two categories mkAdjSpecE and mkAdjSpecO have been merge into one category of adjectives
 -- that have mutations from Masculine Singular to Feminine Singular
 -- and also from Masculine Singular to Masculine Plural
               
mkSpecMut : Str -> Adj = \s ->              
  let rad = if_then_Str (pbool2bool (Predef.occur "u" (last s))) (init s) s 
     in
      if_then_else Adj (pbool2bool (Predef.occur "o" (Predef.dp 3 rad)))  
              (mkAdjSpec s (mkFemSg (mkStemMutO rad)) (mkStemPlSpec rad) (mkFemPl (mkStemMutO rad)))
              (mkAdjSpec s (mkFemSg (mkStemMutE rad)) (mkStemPlSpec rad) (mkFemAdj rad));            
        





-----------------------------------------------------------------------------------
------------------------------VERBS------------------------------------------------
----------------------------------------------------------------------------------- 

--with rules based on the book "Conjugarea verbelor romanesti" by Ana-Maria Barbu--


-- for building the table for a verb, there are needed 29 forms
-- infinitive - 1 form 
-- tables for Present, Imperfect, Past Simple, Past Perfect - 24 forms
-- 3rd person Singular form for Conjunctive Present (= 3rd person Plural) - 1 form
-- Adjective that describes the Past Participe Form (regular adjective)- 1 form
-- Gerund - 1 form 
-- 2nd person Singular form for Imperative - 1 form

  
  
   verbAffixes :
     Str-> (a,b,c,d: Number => Person => Str) ->  Str -> Adj -> Str -> Str -> Verbe =
    \fi,pres, imperf, pSimple, pPerf, subj, adj, ger, imp  ->
    let t = table {
      Inf                     => fi  ;
      Indi  Presn n p         => pres ! n ! p ;
      Indi  Imparf  n p       => imperf ! n ! p;
      Indi  PSimple n p       => pSimple ! n ! p ;
      Indi  PPerfect   n p    => pPerf ! n ! p ;
      Subjo SPres   n P3      => subj ;
      Subjo SPres   n p       => pres ! n ! p;
      Imper        SgP2       => imp ;
      Imper        PlP2       => pres ! Pl ! P2 ;
      Imper        PlP1       => pres ! Pl ! P1 ;
      Ger                     => ger ;
      PPasse g n a d          => adj. s ! (AF g  n  a  d) 
      }  in
     {s = t};

{-
-- syntactical verb : 
-- obtains all the verb forms present in Romanian, based on the primitive forms found in Verbe 

SVerbe : Type = VerbForm => Str ;

  mkVerb : Verbe -> SVerbe = \vb -> 
    table {   
      TInf                    => "a" ++ vb.s ! Inf  ;
      TIndi  TPresn n p       => vb.s ! (Indi Presn n p) ;
      TIndi  TImparf  n p     => vb.s ! (Indi Imparf n p);
      TIndi  TPComp n  p      => pComp ! n ! p ++ vb.s ! (PPasse Masc Sg Indef ANomAcc) ;
      TIndi  TPSimple n p     => vb.s ! (Indi PSimple n p) ;
      TIndi  TPPerfect n p    => vb.s ! (Indi PPerfect n p) ;
      TIndi  TFutur   n p     => pFut ! n ! p ++ vb.s ! Inf ;
      TSubjo TSPres   n p     => "să" ++ vb.s ! (Subjo SPres n p) ;
      TSubjo TSPast   n p     => "să" ++ "fi" ++ vb.s ! (PPasse Masc Sg Indef ANomAcc) ;
      TCondi n p              => pCond ! n ! p ++ vb.s ! Inf ;
      TImper        PlP1      => "să" ++ vb.s ! (Imper PlP1) ;
      TImper        p         => vb.s ! (Imper p) ;
      TGer                    => vb.s ! Ger ;
      TPPasse g n a d         => vb.s ! (PPasse g n a d)
           }; 

mkVerbRefl : Verbe -> SVerbe = \vb ->
table {   
      TInf                    => "a" ++ "se" ++ vb.s ! Inf  ;
      TIndi  TPresn n p       => pronRefl ! n ! p ++ vb.s ! (Indi Presn n p) ;
      TIndi  TImparf  n p     => pronRefl !n ! p ++ vb.s ! (Indi Imparf n p);
      TIndi  TPComp n  p      => pronReflClit ! n ! p + "-" + pComp ! n ! p ++ vb.s ! (PPasse Masc Sg Indef ANomAcc) ;
      TIndi  TPSimple n p     => pronRefl ! n ! p ++ vb.s ! (Indi PSimple n p) ;
      TIndi  TPPerfect n p    => pronRefl ! n ! p ++ vb.s ! (Indi PPerfect n p) ;
      TIndi  TFutur   n p     => pronRefl ! n ! p ++ pFut ! n ! p ++ vb.s ! Inf ;
      TSubjo TSPres   n p     => "să" ++ pronRefl ! n ! p ++ vb.s ! (Subjo SPres n p) ;
      TSubjo TSPast   n p     => "să" ++ pronRefl ! n ! p ++ "fi" ++ vb.s ! (PPasse Masc Sg Indef ANomAcc) ;
      TCondi n p              => pronReflClit ! n ! p + "-" + pCond ! n ! p ++ vb.s ! Inf ;
      TImper        PlP1      => "să" ++ pronRefl ! Pl ! P1 ++ vb.s ! (Imper PlP1) ;
      TImper        PlP2      => vb.s ! (Imper PlP2) + "-"+ pronRefl ! Pl ! P2  ;
      TImper        SgP2      => vb.s ! (Imper SgP2) + "-"+ pronRefl ! Sg ! P2  ;
      TGer                    => vb.s ! Ger + "u" + "-" + pronRefl ! Sg ! P3 ;
      TPPasse g n a d         => vb.s ! (PPasse g n a d)
           };                                 
-- auxiliary for Past Composite (to have - as auxiliary) :
-}

                                         

-- reflexive pronouns - full form

pronRefl : Number => Person => Str = 
table {Sg => table {P1 => "mă" ; P2 => "te" ; P3 => "se"};
       Pl => table {P1 => "ne" ; P2 => "vă" ; P3 => "se" } 
};

-- reflexive pronouns - short form (clitics)

pronReflClit : Number => Person => Str =
table {Sg => table {P1 => "m" ; P2 => "te" ; P3 => "s"};
       Pl => table {P1 => "ne" ; P2 => "v" ; P3 => "s" } 
};


{-
  verbAffixes1 :
     Str-> (a,b,c,d: Number => Person => Str) -> (e,f,g,h : Str) -> Verbe =
    \fi,pres, imperf, pSimple, pPerf, subj, part, ger, imp ->
    table {
      Inf                     => fi  ;
      Indi  Presn n p         => pres ! n ! p ;
      Indi  Imparf  n p       => imperf ! n ! p;
      Indi  PComp   n  p      => "aa"  ++ part ;
      Indi  PSimple n p       => pSimple ! n ! p ;
      Indi  PPerf   n p       => pPerf ! n ! p ;
      Indi  Futur   n  p      => "va" ++ fi ;
      Condi         n  p      => "as" ++ fi ;
      Subjo SPres   n P3      => subj ;
      Subjo SPres   n p       => pres ! n ! p;
      Subjo SPast   n  p      => "sa" ++ "fi" ++ part ;
      Imper        SgP2       => imp ;
      Imper        PlP2       => pres ! Pl ! P2 ;
      Imper        PlP1       => "sa" ++ pres ! Pl ! P1 ;
      Part PPres              => ger ;
      Part (PPasse g n a d)   => (mkAdjReg part). s ! (AF g  n  a  d) 
      } ;
-}

-- This is a conversion to the type in $CommonRomance$.
{-
oper
  vvf : (VerbForm => Str) -> (VF => Str) = \aller -> table { 
    VInfin _       => aller ! TInf ;
    VFin (VPres   Indic) n p => aller ! TIndi TPresn n p ; 
    VFin (VPres   Subjunct) n p => aller ! TSubjo TSPres n p ;
    VFin (VImperf Indic) n p => aller ! TIndi TImparf n p ;     --# notpresent
    VFin (VImperf Subjunct) n p => aller ! TSubjo TSPast n p ;  --# notpresent
    VFin VPasse n p  => aller ! TIndi TPComp n p ;  --# notpresent
    VFin VFut n p    => aller ! TIndi TFutur n p ;  --# notpresent
    VFin VCondit n p => aller ! TCondi n p ;  --# notpresent
    VImper np        => aller ! TImper np ;
    VPart g n a d    => aller ! TPPasse g n a d ;
    VGer             => aller ! TGer 
    } ;
-}


-- vowells in Romanian - used for clitics

   vocale : Str = ("a"|"e"|"i"|"u"|"ă"|"î"|"â");

-- phonetical mutations that occur when declining verbs :

-- last ă in the word -> a

modALast : Str -> Str = \root ->
if_then_Str (pbool2bool (Predef.occur "ă" (Predef.dp 2 root))) 
                   ((Predef.tk 2 root) + "a" + (last root)) ((Predef.tk 3 root) + "a" + (Predef.dp 2 root)); 
           
-- last u in the word -> o
           
modU : Str -> Str = \root ->
if_then_Str (pbool2bool (Predef.occur "u" (Predef.dp 2 root))) 
                   ((Predef.tk 2 root) + "o" + (last root)) ((Predef.tk 3 root) + "o" + (Predef.dp 2 root)); 
                      
-- first ă in the word -> a           
           
modAFirst : Str -> Str = \root ->
if_then_Str (pbool2bool (Predef.occur "ă" (Predef.take 2 root))) 
                   ((Predef.take 1 root) + "a" + (Predef.drop 2 root)) ((Predef.take 2 root) + "a" + (Predef.drop 3 root)); 
           
-- ă -> a (general)           

modA : Str -> Str = \root ->
  if_then_Str (pbool2bool (Predef.occur "ă" (Predef.dp 3 root))) (modALast root) (modAFirst root) ;


-- e -> ea mutation (general)

mkMutE : Str -> Str = \root ->
  if_then_Str (pbool2bool (Predef.occur "e" (Predef.dp 3 root))) (mkStemMutE root) 
                     (mkStemMutE (Predef.take 4 root) + (Predef.drop 4 root)) ;

-- o -> oa mutation (general)

mkMutO : Str -> Str = \root ->
    if_then_Str (pbool2bool (Predef.occur "o" (Predef.dp 3 root))) (mkStemMutO root) 
                     (mkStemMutO (Predef.take 4 root) + (Predef.drop 4 root)) ;
             
-- general mutation - last occurence of a letter in the word is replaced by other string
-- the letter should occurd 2nd or 3rd last in the word

--for replacing 1 character with a string             
genMut : Str -> Str -> Str -> Str = \root, e, a ->
   if_then_Str (pbool2bool (Predef.occur e (Predef.dp 2 root))) 
                   ((Predef.tk 2 root) + a + (last root)) ((Predef.tk 3 root) + a + (Predef.dp 2 root)); 
                           
-- for replacing 2 characters with a string

genMut2 : Str -> Str -> Str -> Str = \root,e , a ->
   if_then_Str (pbool2bool (Predef.occur e (Predef.dp 3 root))) 
                   ((Predef.tk 3 root) + a + (last root)) ((Predef.tk 4 root) + a + (Predef.dp 2 root)); 
                           

-- oa -> o mutation (last occurence in the word)

mkStemMutOa : Str -> Str = \s ->
  case Predef.dp 4 s of
  {"oa" + x => (Predef.tk 4 s) + "o" + x;
   _        => (Predef.tk 3 s) + "o" + (last s)  
  };                            
          

-- Affixes :
-- It is convenient to have sets of affixes as data objects.

  Affixe : Type = Person => Str ;

  afixe : (_,_,_ : Str) -> Affixe = \x,y,z -> table {
      P1 => x ;
      P2 => y ;
      P3 => z
      } ;
     
-- Empty table (for verbs that lack certain tenses and moods )

empty : Number => Person => Str = \\n,p => nonExist ;      
     
specTab : Str -> Str -> Number => Person => Str = \ploua, plouau ->
\\n,p => case <n,p> of     
         {<Sg,P3> => ploua ;
          <Pl,P3> => plouau ;
          _  => nonExist 
          };
                                                            
-- VERB GROUPS :     
      
      
---------------------------------------------------
-----------Group 1 - ending in -a, with exceptions
---------------------------------------------------
   
-- Much of variation can be described in terms of affix sets:
---------------------------------
--for Present :
---------------------------------
--for subGroups 1,13

  affixSgGr1Ez  : Affixe = afixe "ez" "ezi" "ează" ;
  affixPlGr1Ez  : Affixe = afixe "ăm" "aţi" "ează" ;
------
--for subGroups 2-3
  affixSgGr1EzI : Affixe = afixe "ez" "ezi" "ază" ;
  affixPlGr1EzI : Affixe = afixe "em" "aţi" "ază" ;
------
--for subGroup 4
  affixSgGr1I  : Affixe = afixe "i" "i" "e" ;
  affixPlGr1I  : Affixe = afixe "em" "aţi" "e";
------
--for subGroup 5
  affixSgGr1VI  : Affixe = afixe "" "" "e" ;
  affixPlGr1VI  : Affixe = affixPlGr1I ; 
------
--for subGroups 6-7
  affixSgGr1    : Affixe = afixe "" "i" "ă" ; 
  affixPlGr1    : Affixe = afixe "ăm" "aţi" "ă" ;   
------
--for subGroup 8
  affixSgGr1U   : Affixe = afixe "u" "i" "ă" ;
  affixPlGr1U   : Affixe = affixPlGr1 ;
------
--for subGroup 9,11,12
  affixSgGr1AU   : Affixe = afixe "au" "ai" "ă" ;
  affixPlGr1AU   : Affixe =  afixe "ăm" "aţi" "au" ;
-------
--for subGroup 10
  affixSgGr1EU   : Affixe = afixe "au" "ei" "a" ;
  affixPlGr1EU   : Affixe =  afixe "ăm" "aţi" "au" ;
-------
 --for subGroup 14 
  affixSgGr1CI  : Affixe = afixe "i" "i" "e" ;
  affixPlGr1CI  : Affixe = afixe "em" "eaţi" "e";
-----  


-------------------------  
--for Imperfect :
-------------------------
--for subGroups 1-10
 affixSgI : Affixe = afixe "am" "ai" "a" ;
 affixPlI : Affixe = afixe "am" "aţi" "au" ;
 
--for subGroups 11-14 
 affixSgII : Affixe = afixe "eam" "eai" "ea" ;
 affixPlII : Affixe = afixe "eam" "eaţi" "eau" ;

---------------------------
 --for Perfect Simple :
 ---------------------------
 --for subGroups 1, 6-10
 
 affixSgPS1 : Affixe = afixe "ai" "aşi" "ă" ;
 affixPlPS1 : Affixe = afixe "arăm" "arăţi" "ară" ;
 
 --for subGroups 2-5
 
 affixSgPS2 : Affixe = afixe "ai" "aşi" "e" ;
 affixPlPS2 : Affixe = afixe "arăm" "arăţi" "ară" ;
 
 --for subGroups 11-12
 
 affixSgPS3 : Affixe = afixe "ui" "uşi" "u" ;
 affixPlPS3 : Affixe = afixe "urăm" "urăţi" "ură" ;
 
 --for subGroups 13-14
 
 affixSgPS4 : Affixe = afixe "eai" "eaşi" "e" ;
 affixPlPS4 : Affixe = afixe "earăm" "earăţi" "eară" ;
 
--------------------------  
-- for Past Perfect :
---------------------------

--for subGroups 1-10

affixSgPP : Affixe = afixe "asem" "aseşi" "ase" ;
affixPlPP : Affixe = afixe "aserăm" "aserăţi" "aseră" ;

--for subGroups 11-12

affixSgPP2 : Affixe = afixe "usem" "useşi" "use" ;
affixPlPP2 : Affixe = afixe "userăm" "userăţi" "useră" ;

--for subGroups 13-14

affixSgPP3 : Affixe = afixe "easem" "easeşi" "ease" ;
affixPlPP3 : Affixe = afixe "easerăm" "easerăţi" "easeră" ;


-- functions that build a tense table for a verb :

 
-- worst case : we need 5 forms and an affixe -
-- root, 1st Sg, 2nd Sg, 3rd Sg, 3rd Pl and affixe
                     
mkTab : (a,b,c,d,e : Str) -> Affixe -> Number => Person => Str =
\lua -> \iau -> \iei -> \ia -> \iaP -> \aff ->
table {Sg => table {P1 => iau; P2 => iei; P3 => ia};
       Pl => table {P3 => iaP; p => lua + aff ! p} 
       };


-- regular case : we need just the root and affixes for Singular and Plural

mkFromAffix : Str -> Affixe -> Affixe -> Number => Person => Str = \ar,affSg,affPl ->
 table {Sg => table {p => ar + affSg ! p};
        Pl => table {p => ar + affPl ! p}
        };

-- case where we need 2 roots and two affixes 


mkFromAffixes1 : Str -> Str -> Affixe -> Affixe -> Number => Person => Str =
\ar,arr,affSg, affPl ->
table {Sg => table {p => ar + affSg ! p };
       Pl => table {P3 => ar + affSg ! P3 ;
                    p  => arr + affPl ! p 
                    } 
       };
 
       
mkFromAffixes2 : Str -> Str -> Affixe -> Affixe -> Number => Person => Str =
\ar,arr,affSg, affPl ->
table {Sg => table {p => ar + affSg ! p};
       Pl => table {P3 => ar + affPl ! P3;
                    p => arr + affPl ! p
                    }
      };      

-- cases where the 3rd Person Singular is formed with a different root :

mkAffixSpec1 : Str -> Str -> Affixe -> Affixe -> Number => Person => Str = 
\ar, arr, affSg, affPl ->
table {Sg => table {P3 => arr + affSg ! P3 ;
                    p  => ar + affSg ! p
                    };
       Pl => table {P3 => arr + affSg ! P3 ;
                    p  => ar + affPl ! p 
                    } 
      };
      
mkAffixSpec2 : Str -> Str -> Affixe -> Affixe -> Number => Person => Str = 
\ar, arr, affSg, affPl ->
table {Sg => table {P3 => arr + affSg ! P3 ;
                    p  => ar + affSg ! p
                    };
       Pl => table {P3 => ar + affSg ! P1 ;
                    p  => ar + affPl ! p 
                    } 
      };      
     
     
-- case where the 2nd person Singular has a different form, than the usual one :      
      
changeP2 : Str -> (Number => Person => Str) -> Number => Person => Str =
\ari -> \pres ->
table {Sg => table {P2 => ari;
                    p => pres ! Sg ! p};
       Pl => \\p => pres ! Pl ! p             
      };       
     
-- case where the 1st person Singular has a different form than the usual one :      
      
changeP1 : Str -> (Number => Person => Str) -> Number => Person => Str =
\ari -> \pres ->
table {Sg => table {P1 => ari;
                    p => pres ! Sg ! p};
       Pl => \\p => pres ! Pl ! p             
      };       
             
             
--subGroup 1
mkV6: Str -> Verbe = \lucra ->
   let  root = init lucra in
verbAffixes lucra (mkFromAffix root affixSgGr1Ez affixPlGr1Ez) 
               (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
                  (mkFromAffix root affixSgPP affixPlPP) (root + "eze") (mkAdjReg(root + "at")) 
                        (root + "ând") (root + "ează") ;


mkV7 : Str -> Verbe = \crea ->
     mkV6 crea ;
     
mkV8 : Str -> Verbe = \parca ->
    let   r = init parca ;
          root = r + "h"
              in
verbAffixes parca (mkFromAffixes1 r root  affixSgGr1Ez affixPlGr1Ez)
          (mkFromAffix r affixSgI affixPlI) (mkFromAffix r affixSgPS1 affixPlPS1)
             (mkFromAffix r affixSgPP affixPlPP) (root + "eze") (mkAdjReg (r + "at"))
                    (r + "ând") (root + "ează") ;
                    
mkV9 : Str -> Verbe = \divaga ->
          mkV8 divaga ;                    


--subGroup 2

mkV10 : Str -> Verbe = \studia ->
    let root = init studia in
 verbAffixes studia (mkFromAffix root affixSgGr1EzI affixPlGr1EzI) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS2 affixPlPS2)
             (mkFromAffix root affixSgPP affixPlPP) (root + "eze") (mkAdjReg (root + "at"))
                    (root + "ind") (root + "ază") ;

--subGroup 3 

mkV11 : Str -> Verbe = \ardeia ->
    let root = init ardeia in
    verbAffixes ardeia (mkFromAffix root affixSgGr1EzI affixPlGr1EzI) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS2 affixPlPS2)
             (mkFromAffix root affixSgPP affixPlPP) (root + "eze") (mkAdjReg (root + "at"))
                    (root + "nd") (root + "ază") ;

--subGroup 4

mkV12 : Str -> Verbe = \speria ->
   let root = init speria in
   verbAffixes speria (mkFromAffix root affixSgGr1I affixPlGr1I) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS2 affixPlPS2)
             (mkFromAffix root affixSgPP affixPlPP) (root + "e") (mkAdjReg (root + "at"))
                    (root + "ind") (root + "e") ;
                    
--subGroup 5

mkV13 : Str -> Verbe = \incuia -> 
         let root = init incuia in
   verbAffixes incuia (mkFromAffix root affixSgGr1VI affixPlGr1VI) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS2 affixPlPS2)
             (mkFromAffix root affixSgPP affixPlPP) (root + "e") (mkAdjReg (root + "at"))
                    (root + "nd") (root + "e") ;
                             
mkV14 : Str -> Verbe = \taia ->
        let root = init taia ;
            r = modA root
               in
verbAffixes taia (mkFromAffixes1 r root affixSgGr1VI affixPlGr1VI) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS2 affixPlPS2)
             (mkFromAffix root affixSgPP affixPlPP) (r + "e") (mkAdjReg (root + "at"))
                    (root + "nd") (r + "e") ;
                               
mkV15 : Str -> Verbe = \infoia ->
    let root = init infoia ;
        r = mkStemMutO root 
        in
 verbAffixes infoia (mkAffixSpec1 root r affixSgGr1VI affixPlGr1VI) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS2 affixPlPS2)
             (mkFromAffix root affixSgPP affixPlPP) (r + "e") (mkAdjReg (root + "at"))
                    (root + "nd") (r + "e") ;       
                               
mkV16 : Str -> Verbe = \muia ->
     let root = init muia ;
         r1   = modU root ;
         r2   = mkStemMutO r1
         in
 verbAffixes muia (mkTab root r1 r1 (r2 + "e") (r2+"e") affixPlGr1VI) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS2 affixPlPS2)
             (mkFromAffix root affixSgPP affixPlPP) (r2 + "e") (mkAdjReg (root + "at"))
                    (root + "nd") (r2 + "e") ;       
                        
--subGroup 6 

mkV17 : Str -> Verbe = \acuza ->
   let root = init acuza
    in
  verbAffixes acuza (mkFromAffix root affixSgGr1 affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (root + "e") (mkAdjReg (root + "at"))
                    (root + "ând") (root + "ă") ;       
                    
mkV18 : Str -> Verbe = \ajuta ->
   let root = init ajuta ;
       newF = mkStemPlReg root;                    
       pres = changeP2 newF (mkFromAffix root affixSgGr1 affixPlGr1)
in
verbAffixes ajuta pres 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (root + "e") (mkAdjReg (root + "at"))
                    (root + "ând") (root + "ă") ;  


mkV19 : Str -> Verbe = \acorda ->
  mkV18 acorda ;
   
mkV20 : Str -> Verbe = \asista ->
  mkV18 asista ;
  
  
  
mkV21 : Str -> Verbe = \risca ->
      let root = init risca ;
       newF = mkStemPlReg root ;                    
       newP = init newF + "e" ;
       pres = changeP2 newF (mkFromAffix root affixSgGr1 affixPlGr1)
in
verbAffixes risca pres 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) newP (mkAdjReg (root + "at"))
                    (root + "ând") (root + "ă") ;  

 
 mkV22 : Str -> Verbe = \misca ->
   mkV21 misca ;
   
 mkV23 : Str -> Verbe = \calca ->
   let root = init calca ;
       r    = modA root 
       in  
   verbAffixes calca (mkFromAffixes1 r root affixSgGr1 affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (r + "e") (mkAdjReg (root + "at"))
                    (root + "ând") (r + "ă") ;  

mkV24 : Str -> Verbe = \cauta ->
    let root = init cauta ;
        r    = modA root ;
        newF = mkStemPlReg r ;                    
        pres = changeP2 newF (mkFromAffixes1 r root  affixSgGr1 affixPlGr1)
     in
   verbAffixes cauta pres 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (r + "e") (mkAdjReg (root + "at"))
                    (root + "ând") (r + "ă") ;  

mkV25 : Str -> Verbe = \lauda ->
   mkV24 lauda ;

mkV26 : Str -> Verbe = \lasa ->
   mkV24 lasa ;
   
mkV27 : Str -> Verbe = \adasta ->
  mkV24 adasta ;
  
mkV28 : Str -> Verbe = \casca ->
   let root = init casca ;
       r    = modA root ; 
       newF = mkStemPlReg r ;                  
       newP = init newF + "e"
       in
  verbAffixes casca (changeP2 newF (mkFromAffixes1 r root  affixSgGr1 affixPlGr1)) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) newP (mkAdjReg (root + "at"))
                    (root + "ând") (r + "ă") ;  
                    
 mkV29 : Str -> Verbe = \chema ->
  let root = init chema ;
      r    = mkMutE root
      in
    verbAffixes chema (mkAffixSpec1 root r affixSgGr1 affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (root+"e") (mkAdjReg (root + "at"))
                    (root + "ând") (r + "ă") ; 
                    
  mkV30 : Str -> Verbe = \certa ->
   let root = init certa ;
       newF = mkStemPlReg root ;
       newP = mkMutE root + "ă"
       in
     verbAffixes certa (mkTab root root newF newP newP affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (root+"e") (mkAdjReg (root + "at"))
                    (root + "ând") newP ;
                    
 mkV31 : Str -> Verbe = \toca ->
  let root = init toca ;
      r    = mkStemMutO root
      in
    verbAffixes toca (mkAffixSpec1 root r affixSgGr1 affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (root+"e") (mkAdjReg (root + "at"))
                    (root + "ând") (r + "ă") ; 
                                              
  mkV32 : Str -> Verbe = \inota -> 
   let root = init inota ;
       newF = mkStemPlReg root ;
       newP = mkStemMutO root + "ă"
       in
     verbAffixes inota (mkTab root root newF newP newP affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (root+"e") (mkAdjReg (root + "at"))
                    (root + "ând") newP ;
                             
  mkV33 : Str -> Verbe = \innoda ->
     mkV32 innoda ;
     
  mkV34 : Str -> Verbe = \improsca ->
    let root = init improsca ;
        newF = mkStemPlReg root ;                  
        newS = mkStemMutO (init newF) + "e" ;
        newP = mkStemMutO root + "ă"
       in
  verbAffixes improsca (mkTab root root newF newP newP affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) newS (mkAdjReg (root + "at"))
                    (root + "ând") newP ;  
        
 mkV35 : Str -> Verbe = \apara ->
    let root = init apara ;
        newP = mkStemMutA root ;
        pres = changeP2 (newP + "i") (mkFromAffix root affixSgGr1 affixPlGr1)
          in
  verbAffixes apara pres 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (newP + "e") (mkAdjReg (root + "at"))
                    (root + "ând") (root + "ă") ;  
                
  mkV36 : Str -> Verbe = \semana -> 
     let root = init semana ;          
         newP = mkStemMutA root ;
         newF = mkMutE root + "ă" 
         in                           
  verbAffixes semana (mkTab root root (newP+"i") newF newF affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (newP + "e") (mkAdjReg (root + "at"))
                    (root + "ând") newF ;  
                         
   mkV37 : Str -> Verbe = \fremata ->
       let root = init fremata ;
           r    = mkMutE root ;
           newC = (mkStemMutA root) + "e" ;
           newP = mkStemPlReg r ;
           newF = r + "ă" 
           in                      
  verbAffixes fremata (mkTab root r newP newF newF affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) newC (mkAdjReg (root + "at"))
                    (root + "ând") newF ;
                    
  mkV38 : Str -> Verbe = \lepada -> 
    mkV37 lepada ;
    
  mkV39 : Str -> Verbe = \scapara ->
     let root = init scapara ;
         r    = modAFirst root ;
         newP = mkStemMutA r ;
         newF = r + "ă"
         in
    verbAffixes scapara (mkTab root r (newP + "i") newF newF affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (newP + "e") (mkAdjReg (root + "at"))
                    (root + "ând") newF ;     
         
  mkV40 : Str -> Verbe = \capata ->
  let root = init capata ;
         r    = modAFirst root ;
         newC = mkStemMutA r + "e" ;
         newP = mkStemPlReg(mkStemMutA r)  ;
         newF = r + "ă"
         in
    verbAffixes capata (mkTab root r newP newF newF affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) newC (mkAdjReg (root + "at"))
                    (root + "ând") newF ;            
         
  mkV41 : Str -> Verbe = \aseza ->
     let root = init aseza ;
         r    = genMut root "e" "a"  
           in                                           
  verbAffixes aseza (mkAffixSpec1 root r  affixSgGr1 affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (root+"e") (mkAdjReg (root + "at"))
                    (root + "ând") (r +"ă") ;
        
 mkV42 : Str -> Verbe = \ierta ->
    mkV30 ierta ;
    
 mkV43 : Str -> Verbe = \dezmierda ->
    mkV30 dezmierda ;
    
 mkV44 : Str -> Verbe = \pieptana ->
    mkV36 pieptana ;
    
 mkV45 : Str -> Verbe = \invata ->
   let root = init invata ;
       newP = mkStemMutA root ;
       r   = genMut root "ă" "a"       
         in
   verbAffixes invata (mkTab root root (newP + "i") (r+"ă") (r+"ă") affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (newP +"e") (mkAdjReg (root + "at"))
                    (root + "ând") (r +"ă") ;      
   
 mkV46 : Str -> Verbe = \imbata ->
   let root = init imbata ;
       newP = mkStemMutA root ;
       r   = genMut root "ă" "a"       
         in
   verbAffixes imbata (mkTab root root (mkStemPlReg newP) (r+"ă") (r+"ă") affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (newP +"e") (mkAdjReg (root + "at"))
                    (root + "ând") (r +"ă") ;      
                    
 mkV47 : Str -> Verbe = \varsa ->
      mkV46 varsa ;
      
 mkV48 : Str -> Verbe = \juca ->
    let root = init juca ;
         r1   = modU root ;
         r2   = mkStemMutO r1
         in                      
   verbAffixes juca (mkTab root r1 (mkStemPlReg r1)  (r2+"ă") (r2+"ă") affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (r2 +"e") (mkAdjReg (root + "at"))
                    (root + "ând") (r2 +"ă") ;      
                    
 mkV49 : Str -> Verbe = \purta ->
     mkV48 purta ;
     
 mkV50 : Str -> Verbe = \prezenta ->
    let root = init prezenta ;
        r1   = genMut root "e" "i" 
        in
  verbAffixes prezenta (mkTab root r1 (mkStemPlReg r1)  (r1+"ă") (r1+"ă") affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (r1 +"e") (mkAdjReg (root + "at"))
                    (root + "ând") (r1 +"ă") ; 
           
  mkV51 : Str -> Verbe = \usca ->
     let root = init usca ;
          r   = "usuc"
      in
    verbAffixes usca (mkTab root r (r + "i") (r+"ă") (r+"ă") affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (r +"e") (mkAdjReg (root + "at"))
                    (root + "ând") (r +"ă") ;          
        
   mkV52 : Str -> Verbe = \manca ->
      let root = init manca ;     
          r    = "mănânc"   
        in
   verbAffixes manca (mkTab root r (r + "i") (r+"ă") (r+"ă") affixPlGr1) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (r +"e") (mkAdjReg (root + "at"))
                    (root + "ând") (r +"ă") ; 
     
 --subGroup 7                   
  mkV53 : Str -> Verbe = \preceda ->
        let root = init preceda ;
            newP = mkStemPlReg root ;
            newC = mkMutE root
            in
   verbAffixes preceda (changeP2 newP (mkFromAffix root affixSgGr1 affixPlGr1)) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (newC +"ă") (mkAdjReg (root + "at"))
                    (root + "ând") (root +"ă") ;          
                               
  mkV54 : Str -> Verbe = \ploua ->
          let root = init ploua
          in
    verbAffixes ploua (specTab (root + "ă") (root + "ă")) (specTab ploua (ploua+ "u")) 
      (specTab (root + "ă") (root + "ară")) (specTab (root + "ase") (root + "aseră")) 
       (root + "ă") (mkAdjReg (root + "at")) (root + "ând") (root + "ă") ;     
                                           
 --subGroup8
   mkV55 : Str -> Verbe = \umbla ->
        let root = init umbla
        in
   verbAffixes umbla (mkFromAffix root affixSgGr1U affixPlGr1U) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (root +"e") (mkAdjReg (root + "at"))
                    (root + "ând") (root +"ă") ;          
                                      
   mkV56 : Str -> Verbe = \latra ->
         let root = init latra ;
             r    = genMut root "ă" "a"
             in
   verbAffixes latra (mkFromAffixes1 r root  affixSgGr1U affixPlGr1U) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (r +"e") (mkAdjReg (root + "at"))
                    (root + "ând") (r +"ă") ;          
     
  --subGroup 9 
                                  
  mkV57 : Str -> Verbe = \reda -> 
          let root = init reda
            in          
   verbAffixes reda (mkFromAffix root affixSgGr1AU affixPlGr1AU) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (root +"ea") (mkAdjReg (root + "at"))
                    (root + "ând") (root +"ă") ;          
  
  --subGroup 10
  mkV58 : Str -> Verbe = \lua ->
      let root = init lua ;
          r = Predef.tk 2 root + "i" 
          in
   verbAffixes lua (mkFromAffixes1 r root  affixSgGr1EU affixPlGr1EU) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS1 affixPlPS1)
             (mkFromAffix root affixSgPP affixPlPP) (r +"a") (mkAdjReg (root + "at"))
                    (root + "ând") (r +"a") ;          
                                                                         
  --subGroup 11
  mkV59 : Str -> Verbe = \sta ->
       let root = init sta ;
           r    = Predef.tk 2 root + "stăt" 
           in
   verbAffixes sta (mkFromAffix root  affixSgGr1AU affixPlGr1AU) 
        (mkFromAffix r affixSgII affixPlII) (mkFromAffix r affixSgPS3 affixPlPS3)
             (mkFromAffix r affixSgPP2 affixPlPP2) (root +"ea") (mkAdjReg (root + "at"))
                    (root + "ând") (root +"ai") ;          
                                             
 --subGroups 12
 mkV60 : Str -> Verbe = \da ->
      let root = init da ;
          r    = init root + "dăd"
          in
   verbAffixes da (mkFromAffix root  affixSgGr1AU affixPlGr1AU) 
        (mkFromAffix r affixSgII affixPlII) (mkFromAffix r affixSgPS3 affixPlPS3)
             (mkFromAffix r affixSgPP2 affixPlPP2) (root +"ea") (mkAdjReg (root + "at"))
                    (root + "ând") (root +"ai") ;          
                                   
 --subGroups 13 
 mkV61 : Str -> Verbe = \veghea ->
    let root = Predef.tk 2 veghea 
    in
     verbAffixes veghea (mkFromAffix root  affixSgGr1Ez affixPlGr1Ez) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS4 affixPlPS4)
             (mkFromAffix root affixSgPP3 affixPlPP3) (root +"eze") (mkAdjReg (root + "eat"))
                    (root + "ind") (root +"ează") ;          
            
--subGroups 14                 
mkV62 : Str -> Verbe = \deochea ->
   let root = Predef.tk 2 deochea ;
       newP = mkMutO root                                     
     in
   verbAffixes deochea (mkAffixSpec1 root newP  affixSgGr1CI affixPlGr1CI) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS4 affixPlPS4)
             (mkFromAffix root affixSgPP3 affixPlPP3) (newP +"e") (mkAdjReg (root + "eat"))
                    (root + "ind") (newP + "e") ;          
     
-----------------------------------
---------GROUP 2 -- verbs ending in -ea (same syllable)
-----------------------------------
----------
--Present
----------

--subGroup 1-2
affixSgGr21  : Affixe = afixe "" "i" "e" ;
affixPlGr21  : Affixe = afixe "em" "eţi" "" ;

--subGroup 3
affixSgGr23  : Affixe = afixe "eau" "ei" "ea" ;
affixPlGr23  : Affixe = afixe "em" "eţi" "eau" ;

--subGroup 4 
affixSgGr24  : Affixe = afixe "eau" "ei" "ea" ; 
affixPlGr24  : Affixe = afixe "em" "eţi" "" ;

----------
--Imperf
----------

--subGroups 1-3
--affixSgII and affixPlII

--subGroup 4
affixSgI2 : Affixe = afixe "iam" "iai" "ia" ;
affixPlI2 : Affixe = afixe "iam" "iaţi" "iau" ;

---------------
--Past Simple
--------------
--affixSgPS3 and affixPlPS3

--------------
--Past Perfect
--------------
-- for subGroups 1-3
-- affixSgPP2 and affixPlPP2

--for subGroup 4 
affixSgPP4 : Affixe = afixe "usem" "useşi" "use" ;
affixPlPP4 : Affixe = afixe "useserăm" "useserăţi" "useseră" ;


-----------------

-- subGroup 1

mkV64 : Str -> Verbe = \aparea ->
   let root = Predef.tk 2 aparea ;
       r    = genMut root "ă" "a"
       in
   verbAffixes aparea (mkFromAffixes2 r root   affixSgGr21 affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS3 affixPlPS3)
             (mkFromAffix r affixSgPP2 affixPlPP2) (r +"ă") (mkAdjReg (root + "ut"))
                    (root + "ând") (r + "i") ;            

mkV65 : Str -> Verbe = \cadea ->
    let root = Predef.tk 2 cadea ;
        r    = genMut root "ă" "a";
        rad  = init (mkStemPlReg root) 
      in
   verbAffixes cadea (changeP2 (mkStemPlReg r) (mkFromAffixes2 r root  affixSgGr21 affixPlGr21) )
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix rad affixSgPS3 affixPlPS3)
             (mkFromAffix rad affixSgPP2 affixPlPP2) (r +"ă") (mkAdjReg (rad + "ut"))
                    (rad + "ând") (mkStemPlReg r) ;
                    
mkV66 : Str -> Verbe = \sedea ->
     let root = Predef.tk 2 sedea ;
         r    = genMut root "e" "a";                                
         rad  = init (mkStemPlReg root)
       in
   verbAffixes sedea (mkTab root root (mkStemPlReg root) (r + "e") root affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix rad affixSgPS3 affixPlPS3)
             (mkFromAffix rad affixSgPP2 affixPlPP2) (r +"ă") (mkAdjReg (rad + "ut"))
                    (rad + "ând") (rad + "i") ;            
   
mkV67 : Str -> Verbe = \vedea ->
     let root = Predef.tk 2 vedea ;
         r    = genMut root "e" "ă" ;
         newC = genMut root "e" "a" ;
         rad  = init (mkStemPlReg r)
        in
  verbAffixes vedea (mkTab root r (mkStemPlReg root) (root + "e") r affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix rad affixSgPS3 affixPlPS3)
             (mkFromAffix rad affixSgPP2 affixPlPP2) (newC +"ă") (mkAdjReg (rad + "ut"))
                    (rad + "ând") (mkStemPlReg root) ;
                    
mkV68 : Str -> Verbe = \putea ->
      let root = Predef.tk 2 putea ;
          r    = modU root ;
          newP = mkMutO r 
       in
   verbAffixes putea (mkTab root r (mkStemPlReg r) (newP + "e") r affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS3 affixPlPS3)
             (mkFromAffix root affixSgPP2 affixPlPP2) (newP +"ă") (mkAdjReg (root + "ut"))
                    (root + "ând") (mkStemPlReg r) ;

--subGroup 2
                    
 mkV69 : Str -> Verbe = \scadea ->
   let root = Predef.tk 2 scadea ;
       r    = genMut root "ă" "a";
       rad  = init (mkStemPlReg root) 
      in
   verbAffixes scadea (changeP2 (mkStemPlReg r) (mkFromAffixes2 r root  affixSgGr21 affixPlGr21) )
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix rad affixSgPS3 affixPlPS3)
             (mkFromAffix rad affixSgPP2 affixPlPP2) (r +"ă") (mkAdjReg (rad + "ut"))
                    (rad + "ând") (r + "e") ;
      
  mkV70 : Str -> Verbe = \prevedea ->
     let root = Predef.tk 2 prevedea ;
         r    = genMut root "e" "ă" ;
         newC = genMut root "e" "a" ;
         rad  = init (mkStemPlReg r)
        in
  verbAffixes prevedea (mkTab root r (mkStemPlReg root) (root + "e") r affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix rad affixSgPS3 affixPlPS3)
             (mkFromAffix rad affixSgPP2 affixPlPP2) (newC +"ă") (mkAdjReg (rad + "ut"))
                    (rad + "ând") (root + "e") ;
                    
  mkV71 : Str -> Verbe = \placea ->
     let root = Predef.tk 2 placea ;
         r    = genMut root "ă" "a"
       in
   verbAffixes placea (mkFromAffixes2 r root affixSgGr21 affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS3 affixPlPS3)
             (mkFromAffix r affixSgPP2 affixPlPP2) (r +"ă") (mkAdjReg (root + "ut"))
                    (root + "ând") (r + "e") ;       
                    
  mkV72 : Str -> Verbe = \durea ->
                  mkV68 durea ;

--subGroup 3 
                  
  mkV73 : Str -> Verbe = \bea ->
      let root = Predef.tk 2 bea ;
          r    = root + "ă"                
     in              
    verbAffixes bea (mkFromAffix root affixSgGr23 affixPlGr23) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS3 affixPlPS3)
             (mkFromAffix r affixSgPP2 affixPlPP2) (root +"ea") (mkAdjReg (r + "ut"))
                    (root + "ând") (root + "ea") ;

--subGroup 4
                    
   mkV74 : Str -> Verbe = \vrea ->
     let root = Predef.tk 2 vrea ;                                                                          
         r    = root + "o"
      in
       verbAffixes vrea (mkTab root (root+"eau") (root+"ei")(root +"ea") (init root + "or")  affixPlGr24) 
        (mkFromAffix r affixSgI2 affixPlI2) (mkFromAffix root affixSgPS3 affixPlPS3)
             (mkFromAffix root affixSgPP4 affixPlPP4) (root +"ea") (mkAdjReg (root + "ut"))
                    (root + "ând") (root + "ei") ;
                    
  ----------------------------------------------------------------------
  -------Group 3 -- verbs ending in -e
  -------------------------------------------------------------------------
  -----------------------
  --Present
  -----------------------                  
--subGroups 1-6
--affixSgGr21 + affixPlGr21

--subGroup 7-8
affixSgGr31 : Affixe = afixe "u" "i" "e" ;
affixPlGr31 : Affixe = afixe "em" "eţi" "u" ;

----------------
--Imperfect
----------------
--subGroups 1-6  affixSgII affixPlII

--subGroups 7-8 affixSgI affixPlI

----------------
--Past Simple
----------------
--subGroups 1-4,8
affixSgPS5 : Affixe = afixe "sei" "seşi" "se" ;
affixPlPS5 : Affixe = afixe "serăm" "serăţi" "seră" ;

--subGroups 5-7 affixSgPS3 + affixPlPS3

---------------
--P Perfect 
---------------
--subGroups 1-4,8
affixSgPP5 : Affixe = afixe "sesem" "seseşi" "sese" ;
affixPlPP5 : Affixe = afixe "seserăm" "seserăţi" "seseră" ;

--subGroups 5-7
--affixSgPP2 and affixPlPP2 

--subGroup 1

mkV76 : Str -> Verbe = \pune ->
   let root = init pune ;
       r    = init root
       in
verbAffixes pune (changeP2 (r+"i") (mkFromAffix root affixSgGr21 affixPlGr21) )
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "s"))
                    (root + "ând") (root + "e") ;
       
mkV77 : Str -> Verbe = \atinge ->
    let root = init atinge ;
        r    = init root 
        in
verbAffixes atinge (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "s"))
                    (root + "ând") (root + "e") ;
                    
mkV78 : Str -> Verbe = \trage ->                    
     let root = init trage ;
         rad1  = genMut root "a" "ă" ;
         r    = init root ;
         rad2 = genMut r "a" "ă"
        in
verbAffixes trage (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix rad1 affixSgII affixPlII) 
        (mkTab rad2 (r + "ei") (r + "seşi") (rad2 + "e") (rad2 + "eră") affixPlPS5)
             (mkFromAffix rad2 affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "s"))
                    (rad1 + "ând") (root + "e") ;
              
mkV79 : Str -> Verbe = \decide ->
     let root = init decide ;
         r    = init root 
         in
verbAffixes decide (changeP2 (mkStemPlReg root) (mkFromAffix root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "s"))
                    (r + "zând") (root + "e") ;
                    
mkV80 : Str -> Verbe = \rade ->
      let root = init rade ;
          rad1  = genMut root "a" "ă" ;
          r    = init root ;
          rad2 = genMut r "a" "ă"
        in
verbAffixes rade (changeP2 (mkStemPlReg root) (mkFromAffix root affixSgGr21 affixPlGr21)) 
        (mkFromAffix rad1 affixSgII affixPlII) 
        (mkTab rad2 (r + "ei") (r + "seşi") (rad2 + "e") (rad2 + "eră") affixPlPS5)
             (mkFromAffix rad2 affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "s"))
                    (rad2 + "zând") (root + "e") ;

mkV81 : Str -> Verbe = \ucide ->
     let root = init ucide ;
         r    = init root 
         in
verbAffixes ucide (changeP2 (mkStemPlReg root) (mkFromAffix root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "s"))
                    (r + "gând") (root + "e") ;

mkV82 : Str -> Verbe = \admite ->
    let root = init admite ;
         r    = init root 
         in
verbAffixes admite (changeP2 (mkStemPlReg root) (mkFromAffix root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "s"))
                    (r + "ţând") (root + "e") ;

mkV83 : Str -> Verbe = \alege ->
    let root = init alege ;
        r    = init root ;
        newP = mkMutE root 
        in
verbAffixes alege (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (newP +"ă") (mkAdjRegE (r + "s"))
                    (root + "ând") (root + "e") ;

mkV84 : Str -> Verbe = \sumete ->
	let root = init sumete ;
		r    = init root ;
		newP = mkMutE root 
			in
verbAffixes sumete (changeP2 (mkStemPlReg root) (mkAffixSpec2 root newP affixSgGr21 affixPlGr21)) 
			(mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
				 (mkFromAffix r affixSgPP5 affixPlPP5) (newP +"ă") (mkAdjRegE (r + "s"))
						(r + "ţând") (root + "e") ;

mkV85 : Str -> Verbe = \scoate ->
    let root = init scoate ;
        r    = mkStemMutOa root ;
        rad  = init r ;
        rad1 = init root 
           in 
verbAffixes scoate (mkTab root r (mkStemPlReg r) scoate r affixPlGr21) 
	    	(mkFromAffix r affixSgII affixPlII) 
	    	(mkTab rad1 (rad + "sei") (rad + "seşi") (rad1 + "se") (rad1 + "eră") affixPlPS5)
    			 (mkFromAffix rad affixSgPP5 affixPlPP5) (root +"ă") (mkAdjRegO (rad + "s"))
						(rad + "ţând") (root + "e") ;
     
        
mkV86 : Str -> Verbe = \roade ->
	let root = init roade ;
		r    = mkStemMutOa root ;
		rad  = init r ;
		rad1 = init root
		   in 
verbAffixes roade (mkTab root r (mkStemPlReg r) roade r affixPlGr21) 
	    		(mkFromAffix r affixSgII affixPlII) 
	    		(mkTab rad1 (rad + "sei") (rad + "seşi") (rad1 + "se") (rad1 + "eră") affixPlPS5)
    				 (mkFromAffix rad affixSgPP5 affixPlPP5) (root +"ă") (mkAdjRegO (rad + "s"))
							(rad + "zând") (root + "e") ;
	     

mkV87 : Str -> Verbe = \purcede ->
     let root = init purcede ;
         r    = init root ;
         newP = mkMutE root
           in
verbAffixes purcede (changeP2 (mkStemPlReg root) (mkFromAffix root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (newP +"ă") (mkAdjRegE (r + "s"))
                    (r + "zând") (root + "e") ;


mkV88 : Str -> Verbe = \toarce ->
	let root = init toarce ;
	    r    = mkStemMutOa root ;
		rad  = init r ;
        rad1 = init root
				   in 
verbAffixes toarce (mkTab root r (mkStemPlReg r) toarce r affixPlGr21) 
	    (mkFromAffix r affixSgII affixPlII) 
	    (mkTab rad1 (rad + "sei") (rad + "seşi") (rad1 + "se") (rad1 + "eră") affixPlPS5)
    			 (mkFromAffix rad affixSgPP5 affixPlPP5) (root +"ă") (mkAdjRegO (rad + "s"))
						(rad + "când") (root + "e") ;

--subGroup 2

mkV89 : Str -> Verbe = \curge ->
	let root = init curge ;
		r    = init root 
			in
	verbAffixes curge (mkFromAffix root affixSgGr21 affixPlGr21) 
			(mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
				 (mkFromAffix r affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "s"))
						(root + "ând") (root + "i") ;
						
mkV90 : Str -> Verbe = \merge ->
let root = init merge ;
    r    = init root ;
    newP = mkMutE root 
        in
verbAffixes merge (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (newP +"ă") (mkAdjRegE (r + "s"))
                    (root + "ând") (root + "i") ;

mkV91 : Str -> Verbe = \ride ->
let root = init ride ;
     r    = init root 
         in
verbAffixes ride (changeP2 (mkStemPlReg root) (mkFromAffix root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "s"))
                    (r + "zând") (mkStemPlReg root) ;
                    

mkV92 : Str -> Verbe = \ramane ->
let root = init ramane ;
    r    = init root ;
    r1   = genMut root "â" "ă" ;
    r2   = genMut root "â" "a"
       in
verbAffixes ramane (changeP2 (r + "i") (mkFromAffix root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) 
        (mkTab (init r2) (init r1 + "sei") (init r1 + "seşi") (init r2 + "se") (init r2 + "seră")  affixPlPS5)
             (mkFromAffix (init r1) affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (init r2 + "s"))
                    (root + "ând") (r + "i") ;       

--subGroup 3 :

mkV93 : Str -> Verbe = \zice ->
 let root = init zice ;
        r    = init root 
        in
verbAffixes zice (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "s"))
                    (root + "ând") r ;
                    
--subGroup 4 :
                    
mkV94 : Str -> Verbe = \rupe ->
  let root = init rupe 
  in 
verbAffixes rupe (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS5 affixPlPS5)
             (mkFromAffix root affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (root + "t"))
                    (root + "ând") rupe ;  

mkV95 : Str -> Verbe = \frige ->
   let root = init frige ;
       r    = init root + "p"
       in
verbAffixes frige (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "t"))
                    (root + "ând") frige ;


mkV96 : Str -> Verbe = \frange ->
 let root = init frange ;
       r  = init root 
       in
verbAffixes frange (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "t"))
                    (root + "ând") frange ;

mkV97 : Str -> Verbe = \sparge ->
  let root = init sparge ;
      r    = init root ;
      r1   = genMut root "a" "ă";
      r2   = genMut r "a" "ă"
      in
verbAffixes sparge (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix r1 affixSgII affixPlII) 
        (mkTab r2 (init r1 + "sei") (init r1 + "seşi") (r2 + "se") (r2 + "seră")  affixPlPS5)
             (mkFromAffix r2 affixSgPP5 affixPlPP5) (root +"ă") (mkAdjReg (r + "t"))
                    (r1 + "ând") sparge ;

mkV98 : Str -> Verbe = \fierbe ->
  let root = init fierbe ;
      r    = init root ;
      r1   = genMut root "e" "a"
      in
verbAffixes fierbe (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS5 affixPlPS5)
             (mkFromAffix r affixSgPP5 affixPlPP5) (r1 +"ă") (mkAdjRegE (r + "t"))
                    (root + "ând") fierbe ;      

mkV99 : Str -> Verbe = \coace ->
   let root = init coace ;
       r    = genMut2 root "oa" "o" ;
       r1   = init r + "p"
       in
verbAffixes coace (mkTab root r1 (r1+"i") (root+"e") r1 affixPlGr21) 
        (mkFromAffix r affixSgII affixPlII) (mkFromAffix r1 affixSgPS5 affixPlPS5)
             (mkFromAffix r1 affixSgPP5 affixPlPP5) (root +"ă") (mkAdjRegO (r1 + "t"))
                    (r + "ând") coace ;       
--subGroup 5 :

mkV100 : Str -> Verbe = \cere ->
  let root = init cere ;
      r    = mkMutE root 
      in
verbAffixes cere (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS3 affixPlPS3)
             (mkFromAffix r affixSgPP2 affixPlPP2) (r +"ă") (mkAdjReg (root + "ut"))
                    (root + "ând") cere ;
    

mkV101 : Str -> Verbe = \crede ->
   let root = init crede ;
       newP = init (mkStemPlReg root) ;
       r    = mkMutE root
       in
verbAffixes crede (changeP2 (newP + "i") (mkFromAffix root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix newP affixSgPS3 affixPlPS3)
             (mkFromAffix newP affixSgPP2 affixPlPP2) (r +"ă") (mkAdjReg (newP + "ut"))
                    (newP + "ând") crede ;  

mkV102 : Str -> Verbe = \tese ->
   let root = init tese ;
       newP = init (mkStemPlReg root) ;
       r    = mkMutE root
       in
verbAffixes tese (changeP2 (newP + "i") (mkFromAffix root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS3 affixPlPS3)
             (mkFromAffix root affixSgPP2 affixPlPP2) (r +"ă") (mkAdjReg (root + "ut"))
                    (root + "ând") tese ;  

mkV103 : Str -> Verbe = \creste ->
  let root = init creste ;
      r    = Predef.tk 2 root + "sc" ;
      newC = mkMutE r 
      in
verbAffixes creste (changeP1 r (mkFromAffix  root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS3 affixPlPS3)
             (mkFromAffix r affixSgPP2 affixPlPP2) (newC +"ă") (mkAdjReg (r + "ut"))
                    (r + "ând") creste ;
      

mkV104 : Str -> Verbe = \investe ->
  let root = init investe ;
      r    = Predef.tk 2 root + "sc" ;
      newC = mkMutE r ;
      rad  = genMut r "e" "ă" 
      in
verbAffixes investe (changeP1 r (mkFromAffix  root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix rad affixSgPS3 affixPlPS3)
             (mkFromAffix rad affixSgPP2 affixPlPP2) (newC +"ă") (mkAdjReg (rad + "ut"))
                    (rad + "ând") investe ;


mkV105 : Str -> Verbe = \bate ->
 let root = init bate ;
     r    = genMut root "a" "ă"
     in
verbAffixes bate (changeP2 (mkStemPlReg root) (mkFromAffix  root affixSgGr21 affixPlGr21)) 
        (mkFromAffix r affixSgII affixPlII) (mkFromAffix r affixSgPS3 affixPlPS3)
             (mkFromAffix r affixSgPP2 affixPlPP2) (root +"ă") (mkAdjReg (r + "ut"))
                    (r + "ând") bate ;

mkV106 : Str -> Verbe = \naste ->
  let root = init naste ;
      r    = Predef.tk 2 root + "sc" ;
      rad  = genMut r "a" "ă" 
      in
verbAffixes naste (changeP1 r (mkFromAffix  root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix rad affixSgPS3 affixPlPS3)
             (mkFromAffix rad affixSgPP2 affixPlPP2) (r +"ă") (mkAdjReg (rad + "ut"))
                    (rad + "ând") naste ;

--mkV107 : Str -> Verbe = \rage ->

  
mkV108 : Str -> Verbe = \tine ->
let root = init tine ;
     r    = init root + "i"
     in
verbAffixes tine (changeP2 r (mkFromAffix  root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS3 affixPlPS3)
             (mkFromAffix root affixSgPP2 affixPlPP2) (root +"ă") (mkAdjReg (root + "ut"))
                    (root + "ând") tine ;

mkV109 : Str -> Verbe = \cunoaste ->
let   root = init cunoaste ;
      newC = Predef.tk 2 root + "sc" ;
      r    = mkStemMutOa newC ;
      rad  = mkStemMutOa root
      in
verbAffixes cunoaste (mkTab root r (mkStemPlReg r) cunoaste r affixPlGr21) 
        (mkFromAffix rad affixSgII affixPlII) (mkFromAffix r affixSgPS3 affixPlPS3)
             (mkFromAffix r affixSgPP2 affixPlPP2) (newC +"ă") (mkAdjReg (r + "ut"))
                    (r + "ând") cunoaste ;    

mkV110 : Str -> Verbe = \coase ->
let root = init coase ;
    r    = mkStemMutOa root ;
    rad  = genMut2 root "oa" "u" 
    in
verbAffixes coase (mkTab root r (mkStemPlReg r) coase r affixPlGr21) 
        (mkFromAffix r affixSgII affixPlII) (mkFromAffix rad affixSgPS3 affixPlPS3)
             (mkFromAffix rad affixSgPP2 affixPlPP2) (root +"ă") (mkAdjReg (rad + "ut"))
                    (r + "ând") coase ;     
    
mkV111 : Str -> Verbe = \divide ->
let root = init divide ;
    newP = mkStemPlReg root
    in
verbAffixes divide (changeP2 newP (mkFromAffix root affixSgGr21 affixPlGr21)) 
        empty empty empty (root +"ă") (variants{})
                    (root + "ând") divide ;
                       
mkV112 : Str -> Verbe = \vinde ->
let root = init vinde ;
    r    = genMut root "i" "â" ;
    in
verbAffixes vinde (mkTab root r (mkStemPlReg root) vinde r affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix r affixSgPS3 affixPlPS3)
             (mkFromAffix r affixSgPP2 affixPlPP2) (root +"ă") (mkAdjReg (r + "ut"))
                    (init r + "zând") vinde ;   
   
mkV113 : Str -> Verbe = \pierde ->
let root = init pierde ;
    r    = mkMutE root ;
    rad  = init (mkStemPlReg root)
    in
verbAffixes pierde (changeP2 (rad + "i") (mkFromAffix root affixSgGr21 affixPlGr21)) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS3 affixPlPS3)
             (mkFromAffix root affixSgPP2 affixPlPP2) (r +"ă") (mkAdjReg (root + "ut"))
                    (rad + "ând") pierde ;

--mkV114 : Str -> Verbe = \exige ->


--subGroup 6

mkV115 : Str -> Verbe = \face -> 
let root = init face ;
    r    = genMut root "a" "ă" 
    in
verbAffixes face (mkFromAffix root affixSgGr21 affixPlGr21) 
        (mkFromAffix r affixSgII affixPlII) (mkFromAffix r affixSgPS3 affixPlPS3)
             (mkFromAffix r affixSgPP2 affixPlPP2) (root +"ă") (mkAdjReg (r + "ut"))
                    (r + "ând") (init r) ;
--subGroup 7
mkV116 : Str -> Verbe = \umple ->
let root = init umple 
     in
verbAffixes umple (mkFromAffix root affixSgGr31 affixPlGr31) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS3 affixPlPS3)
             (mkFromAffix root affixSgPP2 affixPlPP2) (root +"e") (mkAdjReg (root + "ut"))
                    (root + "ând") umple ;   

--subGroup 8
mkV117 : Str -> Verbe = \scrie ->
let root = init scrie 
   in 
verbAffixes scrie (mkFromAffix root affixSgGr31 affixPlGr31) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS5 affixPlPS5)
             (mkFromAffix root affixSgPP5 affixPlPP5) (root +"e") (mkAdjReg (root + "s"))
                    (root + "ind") scrie ;

------------------------------------
---GROUP 4 -- verbs ending in -i/-î
------------------------------------
--------------
--Present 
--------------

--subGroups 1-2
affixSgGr41 : Affixe = afixe "esc" "eşti" "eşte" ;
affixPlGr41 : Affixe = afixe "im" "iţi" "esc" ;

--subGroup 3

affixSgGr43 : Affixe = afixe "iesc" "ieşti" "ieşte" ;
affixPlGr43 : Affixe = afixe "im" "iţi" "iesc" ;

--subGroup 4

affixSgGr44 : Affixe = afixe "iu" "ii" "ie" ;
affixPlGr44 : Affixe = afixe "im" "iţi" "iu" ;

--subGroup 5 

affixSgGr45 : Affixe = afixe "i" "i" "ie" ;
affixPlGr45 : Affixe = afixe "im" "iţi" "ie" ;

--subGroups 6 -8

affixSgGr468 : Affixe = afixe "" "i" "e" ;
affixPlGr468 : Affixe = afixe "im" "iţi" "" ;

--subGroup 9 

affixSgGr49 : Affixe = afixe "" "i" "ă" ;
affixPlGr49 : Affixe = afixe "im" "iţi" "ă" ;

--subGroup 10

affixSgGr410 : Affixe = afixe "" "i" "e" ;
affixPlGr410 : Affixe = afixe "im" "iţi" "e" ;

--subGroup 11

affixSgGr411 : Affixe = afixe "" "" "ie" ;
affixPlGr411 : Affixe = afixe "" "" "ie" ;

--subGroup 12 

affixSgGr412 : Affixe = afixe "ăsc" "ăşti" "ăşte" ;
affixPlGr412 : Affixe = afixe "âm" "âţi" "ăsc" ;

--subGroup 13

affixSgGr413 : Affixe = afixe "" "i" "ă" ;
affixPlGr413 : Affixe = afixe "âm" "âţi" "ă" ;


-------------------------
--Imperfect
-------------------------

--subGroup 1,6-10
--affixSgII + affixPlII

--subGroup 2, 12-13
--affixSgI + affixPlI

--subGroups 3-5
--affixSgI2 + affixPlI2

--subGroup 11
affixSgI4 : Affixe = afixe "" "" "ia" ;
affixPlI4 : Affixe = afixe "" "" "iau" ;

------------------------
--Past Simple
------------------------
--subGroups 1-3,5-10
affixSgPS6 : Affixe = afixe "ii" "işi" "i" ;
affixPlPS6 : Affixe = afixe "irăm" "irăţi" "iră" ;

--subGroup 4
affixSgPS7 : Affixe = afixe "iui" "iuşi" "iu" ;
affixPlPS7 : Affixe = afixe "iurăm" "iurăţi" "iură" ;

--subGroup 11
affixSgPS8 : Affixe = afixe "" "" "i" ;
affixPlPS8 : Affixe = afixe "" "" "iră" ;

--subGroup 12-13
affixSgPS9 : Affixe = afixe "âi" "âşi" "î" ;
affixPlPS9 : Affixe = afixe "ârăm" "ârăţi" "âră" ;

-----------------------
--Past Perfect
-----------------------
--subGroups 1-3,5 + 10
affixSgPP6 : Affixe = afixe "isem" "iseşi" "ise" ;
affixPlPP6 : Affixe = afixe "iserăm" "iserăţi" "iseră" ;

--subGroup 4

affixSgPP7 : Affixe = afixe "iusem" "iuseşi" "iuse" ;
affixPlPP7 : Affixe = afixe "iuserăm" "iuserăţi" "iuseră" ;

--subGroup 11
affixSgPP8 : Affixe = afixe "" "" "ise" ;
affixPlPP8 : Affixe = afixe "" "" "iseră" ;

--subGroup 12-13
affixSgPP9 : Affixe = afixe "âsem" "âseşi" "âse" ;
affixPlPP9 : Affixe = afixe "âserăm" "âserăţi" "âseră" ;


--subGroup 1 



mkV119 : Str -> Verbe = \povesti ->
 let root = init povesti 
 in
verbAffixes povesti (mkFromAffix root affixSgGr41 affixPlGr41) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (root +"ească") (mkAdjReg (root + "it"))
                    (root + "ind") (root + "eşte") ;
--subGroup 2
mkV120 : Str -> Verbe = \pustii ->
let root = init pustii
in 
verbAffixes pustii (mkFromAffix root affixSgGr41 affixPlGr41) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (root +"ască") (mkAdjReg (root + "it"))
                    (root + "ind") (root + "eşte") ;
--subGroup 3
mkV121 : Str -> Verbe = \locui ->
let root = init locui
in
verbAffixes locui (mkFromAffix root affixSgGr43 affixPlGr44) 
        (mkFromAffix root affixSgI2 affixPlI2) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (root +"iască") (mkAdjReg (root + "it"))
                    (root + "ind") (root + "eşte") ;
--subGroup 4
mkV122 : Str -> Verbe = \sti ->
let root = init sti 
in
verbAffixes sti (mkFromAffix root affixSgGr44 affixPlGr44) 
        (mkFromAffix root affixSgI2 affixPlI2) (mkFromAffix root affixSgPS7 affixPlPS7)
             (mkFromAffix root affixSgPP7 affixPlPP7) (root +"ie") (mkAdjReg (root + "iut"))
                    (root + "iind") "ştii" ;
--subGroup 5
mkV123 : Str -> Verbe = \sui ->
let root = init sui
in
verbAffixes sui (mkFromAffix root affixSgGr45 affixPlGr45) 
        (mkFromAffix root affixSgI2 affixPlI2) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (root +"ie") (mkAdjReg (root + "it"))
                    (root + "ind") (sui+"e") ;

mkV124 : Str -> Verbe = \indoi ->
let root = init indoi ;
    r    = init (mkMutO indoi)
    in
verbAffixes indoi (mkAffixSpec1 root r affixSgGr45 affixPlGr45) 
        (mkFromAffix root affixSgI2 affixPlI2) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r +"ie") (mkAdjReg (root + "it"))
                    (root + "ind") (r+"ie") ;
                 
mkV125 : Str -> Verbe = \jupui ->
let root = init jupui ;
    r1   = genMut jupui "u" "o" ;
    r2   = genMut jupui "u" "oa"
in
verbAffixes jupui (mkTab root r1 r1 (r2+"e") (r2+"e") affixPlGr45) 
        (mkFromAffix root affixSgI2 affixPlI2) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r2 +"e") (mkAdjReg (root + "it"))
                    (root + "ind") (r2+"e") ;

--subGroup 6
mkV126 : Str -> Verbe = \fugi ->
let root = init fugi
in
verbAffixes fugi (mkFromAffix root affixSgGr468 affixPlGr468) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (root +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") fugi ;

mkV127 : Str -> Verbe = \auzi ->
let root = init auzi ;
    r    = init root + "d"
    in
verbAffixes auzi (mkTab root r auzi (r+"e") r affixPlGr468) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") auzi ;

mkV128 : Str -> Verbe = \dormi ->
let root = init dormi ;
    r    = mkMutO root 
    in
verbAffixes dormi (mkAffixSpec2 root r affixSgGr468 affixPlGr468) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") dormi ;
                    
mkV129 : Str -> Verbe = \muri ->
let root = init muri ;
    r1   = modU root ;
    r2   = mkStemMutO r1
         in                  
verbAffixes muri (mkTab root r1 (r1 + "i") (r2 + "e") r1  affixPlGr468) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r2 +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") (r1 + "i") ;
--subGroup 7
mkV130 : Str -> Verbe = \simti ->
let root = init simti ;
    r    = init root + "t"
    in
verbAffixes simti (mkTab root r (mkStemPlReg r) (r+"e") r affixPlGr468) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") (r+"e") ;
                    
mkV131 : Str -> Verbe = \sorbi ->
let root = init sorbi ;
    r    = mkMutO root 
    in
verbAffixes sorbi (mkAffixSpec2 root r affixSgGr468 affixPlGr468) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") (r + "e") ;
                    
mkV132 : Str -> Verbe = \slobozi ->
let root = init slobozi ;
    rad  = init root + "d" ;
    r    = mkMutO rad 
    in
verbAffixes slobozi (mkTab root rad root (r+"e") rad affixPlGr468) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") (r+"e") ;
                    
mkV133 : Str -> Verbe = \mirosi ->
let root = init mirosi ;
    r    = mkMutO root
    in
verbAffixes mirosi (mkAffixSpec2 root r  affixSgGr468 affixPlGr468) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") (r+"e") ;
                    
mkV134 : Str -> Verbe = \imparti ->
let root = init imparti ;
    rad  = init root + "t" ;
    r    = genMut rad "ă" "a"
    in
verbAffixes imparti (mkFromAffixes1 r root  affixSgGr468 affixPlGr468) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") (r+"e") ;
                    
mkV118 : Str -> Verbe = \sari ->
let root = init sari ;
    r    = genMut root "ă" "a"
    in
verbAffixes sari (mkFromAffixes2 r root  affixSgGr468 affixPlGr468) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") (r+"i") ;
                    
                    
mkV135 : Str -> Verbe = \repezi ->
let root = init repezi ;
    rad  = init root + "d" ;
    r    = mkMutE rad
    in
verbAffixes repezi (mkTab root rad repezi (rad + "e") r affixPlGr468)
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") (rad + "e") ;

--subGroup 8
mkV136 : Str -> Verbe = \veni ->
let root = init veni ;
    rad  = init root ;
    r    = genMut root "e" "i"
    in
verbAffixes veni (mkTab root r (init r + "i") (r + "e") r affixPlGr468) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (r +"ă") (mkAdjReg (root + "it"))
                    (root + "ind") (r + "o") ;
--subGroup 9
mkV137 : Str -> Verbe = \oferi ->
let root = init oferi
in
verbAffixes oferi (mkFromAffix root affixSgGr49 affixPlGr49) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (root +"e") (mkAdjReg (root + "it"))
                    (root + "ind") (root + "ă") ;

mkV138 : Str -> Verbe = \acoperi ->
let root = init acoperi;
    r    = genMut root "e" "ă" 
    in
verbAffixes acoperi (mkTab root r acoperi (root + "ă") (root + "ă")  affixPlGr49) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (root +"e") (mkAdjReg (root + "it"))
                    (root + "ind") (root + "ă") ;

--subGroup 10
mkV139 : Str -> Verbe = \bombani ->
let root = init bombani
in
verbAffixes bombani (mkFromAffix root affixSgGr410 affixPlGr410) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS6 affixPlPS6)
             (mkFromAffix root affixSgPP6 affixPlPP6) (root +"e") (mkAdjReg (root + "it"))
                    (root + "ind") (root + "e") ;

--subGroup 11 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
mkV140 : Str -> Verbe = \trebui ->
let root = init trebui
in
verbAffixes trebui (mkFromAffix root affixSgGr411 affixPlGr411) 
        (mkFromAffix root affixSgI4 affixPlI4) (mkFromAffix root affixSgPS8 affixPlPS8)
             (mkFromAffix root affixSgPP8 affixPlPP8) (root +"iască") (mkAdjReg (root + "it"))
                    (root + "ind") "" ;

--subGroup 12
mkV141 : Str -> Verbe = \uri ->
let root = init uri
in
verbAffixes uri (mkFromAffix root affixSgGr412 affixPlGr412) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS9 affixPlPS9)
             (mkFromAffix root affixSgPP9 affixPlPP9) (root +"ască") (mkAdjReg (root + "ât"))
                    (root + "ând") (root + "ăşte") ;
--subGroup 13

mkV142 : Str -> Verbe = \vari ->
let root = init vari
in
verbAffixes vari (mkFromAffix root affixSgGr413 affixPlGr413) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS9 affixPlPS9)
             (mkFromAffix root affixSgPP9 affixPlPP9) (root +"e") (mkAdjReg (root + "ât"))
                    (root + "ând") (root + "ă") ;

mkV143 : Str -> Verbe = \cobori ->
let root = init cobori ;
    r    = mkMutO root
    in
verbAffixes cobori (mkAffixSpec1 root r affixSgGr413 affixPlGr413) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS9 affixPlPS9)
             (mkFromAffix root affixSgPP9 affixPlPP9) (r +"e") (mkAdjReg (root + "ât"))
                    (root + "ând") (r + "ă") ;
                 
mkV144 : Str -> Verbe = \tabari ->
let root = init tabari ;
    rad  = modAFirst root ;
    r    = mkStemPlReg rad
    in
verbAffixes tabari (mkTab root rad r (rad + "ă") (rad + "ă") affixPlGr413) 
        (mkFromAffix root affixSgI affixPlI) (mkFromAffix root affixSgPS9 affixPlPS9)
             (mkFromAffix root affixSgPP9 affixPlPP9) (init r +"e") (mkAdjReg (root + "ât"))
                    (root + "ând") (rad + "ă") ;


---------------------------------------
--Special verbs :

--to have :

mkV1 : Str -> Verbe = \avea ->
let root = Predef.tk 2 avea
  in
verbAffixes avea (mkTab root "am" "ai" "are" "au" affixPlGr21) 
        (mkFromAffix root affixSgII affixPlII) (mkFromAffix root affixSgPS3 affixPlPS3)
             (mkFromAffix root affixSgPP2 affixPlPP2) "aibă" (mkAdjReg (root + "ut"))
                    (root + "ând") "ai" ;
                    

 

};
