add denotational semantics