Download
language Essence 1.3
$ prob001.essence: Car Sequencing
$ Problem details available at http://www.csplib.org/prob/prob001/

given n_cars, n_classes, n_options, n_upperBound : int(1..)

letting Slots  be domain int(1..n_cars),
        Class  be domain int(1..n_classes),
        Option be domain int(1..n_options)

$ giving an n_upperBound here lets us use more than one representation for the functions.
given quantity : function (total) Class  --> int(1..n_upperBound),
      maxcars  : function (total) Option --> int(1..n_upperBound),
      blksize  : function (total) Option --> int(1..n_upperBound),
      usage    : relation of ( Class * Option )

find car : function (total) Slots --> Class

such that
    forAll c : Class . |preImage(car,c)| = quantity(c),
    forAll opt : Option .
        forAll s : int(1..n_cars+1-blksize(opt)) .
            (sum i : int(s..s+blksize(opt)-1) . toInt(usage(car(i),opt))) <= maxcars(opt)