BlangBoolean expressions.
A blang is a boolean expression built up by applying the usual boolean operations to properties that evaluate to true or false in some context.
The blang sexp syntax is almost exactly the derived one, except that:
1. Base properties are not marked explicitly. Thus, if your base property type has elements FOO, BAR, etc., then you could write the following Blang s-expressions:
FOO
(and FOO BAR)
(if FOO BAR BAZ)and so on. Note that this gets in the way of using the blang "keywords" in your value language.
2. And and Or take a variable number of arguments, so that one can (and probably should) write
(and FOO BAR BAZ QUX)
instead of
(and FOO (and BAR (and BAZ QUX)))
Note that the sexps are not directly inferred from the type below -- there are lots of fancy shortcuts. Also, the sexps for 'a must not look anything like blang sexps. Otherwise t_of_sexp will fail.
module type Constructors = sig ... endmodule O : sig ... endval eval : 'a t -> ('a -> bool) -> booleval t f evaluates the proposition t relative to an environment f that assigns truth values to base propositions.