intermediate: desugar rules