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

  flags coding = utf8;

  lin

    UseV v = predV v ;


    ComplVV v vp = 
      insertComplement (\\a => case a of {
        Ag _ n p  => let vo= vp.voice ; as = vp.aspect  in  "να" ++ vp.clit  ++ vp.clit2 ++ vp.v.s ! VPres Con n p vo as ++ vp.comp ! a}) (predV v) ;


    ComplVS v s = 
      insertComplement(\\_ => "ότι" ++ s.s ! Ind) (predV v);
      
    ComplVQ v q = 
      insertComplement  (\\_ => q.s ! QIndir) (predV v) ;


    ComplVA v ap = insertComplement  (\\a => case a of {
      Ag g n _ => ap.s ! Posit ! g ! n ! Nom } ) (predV v) ;

    SlashV2a v =  mkVPSlash v.c2 (predV v)** {n3 = \\_ => [] ;c2 = v.c2 } ;

    Slash2V3 v np = mkVPSlash v.c3 (insertObject v.c2 np (predV v)) ** {n3 = \\_ => [] ;c2 = v.c3 } ;

    Slash3V3 v np = mkVPSlash v.c2 (insertObject v.c3 np (predV v))** {n3 = \\_ => []; c2 = v.c2 } ;

    SlashV2V v vp = mkVPSlash v.c2 ( predV v) ** {
      n3 = \\a =>  
          let agr = clitAgr a ;
          vo = vp.voice ;
          as = vp.aspect  
          in   
            v.c3.s  ++ "να" ++ vp.clit ++ vp.clit2  ++ vp.v.s ! VPres Con agr.n agr.p vo as ++ vp.comp! a  ; 
      c2 = v.c2
      } ;
    

    SlashV2S v s =  mkVPSlash v.c2 (predV v) ** {
      n3 = \\_ => "οτι" ++ s.s ! Ind;
      c2 = v.c2
      }  ;


   SlashV2Q v q =  mkVPSlash v.c2 (predV v )** {
      n3 = \\_ => q.s ! QIndir;
      c2 = v.c2
      } ; 


   SlashV2A v ap =  mkVPSlash v.c2 (predV v )** {
      n3 =\\a => let agr = complAgr a  in  ap.s ! Posit !  agr.g ! agr.n ! Acc ;
      c2 = v.c2
     } ;

   
 
    ComplSlash vp np = insertObject vp.c2 np (insertComplement (\\a => vp.c2.s  ++ vp.n3 ! np.a ) vp )  ;

  
    SlashVV v vp = 
      insertComplement (\\a => case a of {
      Ag _ n p  => let vo=vp.voice ; as =vp.aspect in "να" ++ vp.clit  ++ vp.clit2 ++ vp.v.s ! VPres Con n p vo as++ vp.comp ! a})
      (predV v) ** {n3 = vp.n3 ; c2 = vp.c2} ;


    SlashV2VNP v np vp = 
      mkVPSlash vp.c2( insertObject v.c2 np (predV v)) ** {
      n3 = \\a => 
          let agr = clitAgr a ;
          vo=vp.voice ; 
          as =vp.aspect  
          in   
            v.c2.s  ++ "να" ++ vp.clit ++ vp.clit2  ++ vp.v.s ! VPres Con agr.n agr.p vo as ++ vp.comp! a  ; 
      c2 = v.c2
      } ;

  
     ReflVP v = insertComplement (\\a => v.c2.s ++ reflPron ! a ! Acc) v ;

     UseComp comp = insertComplement comp.s (predV copula) ;

     PassV2 v = let vp = predV v in {
        v = v ; 
        clit = [] ;
        clit2 = [] ; 
        comp   = \\a => [] ;
        isNeg = False; 
        voice = Passive ;
        aspect = vp.aspect;
        } ;

 
     AdvVP vp adv = insertAdv adv.s vp ;

     AdVVP adv vp=  insertAdV adv.s vp ; 

     AdvVPSlash vp adv = insertAdv adv.s vp ** {n3 = \\_ => [] ;c2 = vp.c2} ;

     AdVVPSlash adv vp = insertAdV adv.s vp ** {n3 = \\_ => [] ;c2 = vp.c2} ;

     VPSlashPrep vp prep = vp ** {n3 = \\_ => [] ;
      c2 = {s = prep.s ; c = prep.c ; isDir = False}
      } ;      
   
    
     CompAP ap = {s=\\a => case a of {      
          Ag g n _ => ap.s ! Compar!  g ! n ! Nom
        } 
      } ;

      CompNP np = {s = \\_  => (np.s ! Nom).comp} ;

      CompAdv a = {s = \\_  => a.s} ;      

      CompCN cn = {s=\\a => case a of {      
          Ag _ n p => cn.s !  n ! Nom
         } 
      } ;
    
      UseCopula = predV copula ;

 
}
