concrete IdiomDut of Idiom = CatDut ** 
  open MorphoDut, (P = ParadigmsDut), IrregDut, Prelude in {

  flags optimize=all_subs ;

  lin
    ImpersCl vp = mkClause "'t" (agrP3 Sg) vp ;
    GenericCl vp = mkClause "men" (agrP3 Sg) vp ;

    CleftNP np rs = mkClause "'t" (agrP3 Sg) 
      (insertExtrapos (rs.s ! np.a.g ! np.a.n) ----
        (insertObj (\\_ => np.s ! NPNom) (predV zijn_V))) ;

    CleftAdv ad s = mkClause "'t" (agrP3 Sg) 
      (insertExtrapos (conjThat ++ s.s ! Sub)
        (insertObj (\\_ => ad.s) (predV zijn_V))) ;

    ExistNP np = 
      mkClause "er" (agrP3 np.a.n) 
        (insertObj (\\_ => np.s ! NPNom) 
          (predV zijn_V)) ;

    ExistIP ip = {
      s = \\t,a,p => 
            let 
              cls = 
                (mkClause "er" (agrP3 ip.n)  (predV zijn_V)).s ! t ! a ! p ;
              who = ip.s ! NPNom
            in table {
              QDir   => who ++ cls ! Inv ;
              QIndir => who ++ cls ! Sub
              }
      } ;

    ProgrVP vp = insertAdv ("aan" ++ "het" ++ useInfVP True vp) (predV zijn_V) ;

    ImpPl1 vp =
      let 
        v   = laten_V ;
        vpi = infVP True vp ;
        vvp = insertExtrapos vpi.p3 (
                insertInf vpi.p2 (
                  insertObj vpi.p1 (
                    predVGen True v))) ;
      in 
      {s = (mkClause "we" {g = Utr ; n = Pl ; p = P1} vvp).s ! 
                           Pres ! Simul ! Pos ! Inv 
      } ;

}
