refinement to bnf