Dynamix: A Domain-Specific Language for Dynamic Semantics