# From Small-step Semantics to Big-step Semantics, Automatically

Small-step semantics and big-step semantics are two styles for

operationally defining the meaning of programming

languages. Small-step semantics are given as a relation between

program configurations that denotes one computational step; big-step

semantics are given as a relation directly associating to each program

configuration the corresponding final configuration. Small-step

semantics are useful for making precise reasonings about programs, but

reasoning in big-step semantics is easier and more intuitive. When

both small-step and big-step semantics are needed for the same

language, a proof of the fact that the two semantics are equivalent

should also be provided in order to trust that they both define the

same language. We show that the big-step semantics can be

automatically obtained from the small-step semantics when the

small-step semantics are given by inference rules satisfying certain

assumptions that we identify. The transformation that we propose is

very simple and we show that when the identified assumptions are met,

it is sound and complete in the sense that the two semantics are

equivalent. For a strict subset of the identified assumptions, we show

that the resulting big-step semantics is sound but not necessarily

complete. We discuss our transformation on a number of examples.