proper abstract syntax