How would we add concurrent composition to IMP? For example, if $\sigma(x) = \sigma(y) = 0$ and

$$x := y + 1 ; y := y + 1 \ || \ y := y + 1,$$

then what is $\sigma^\prime$?

If we use big-step semantics, it kind of defeats the point of concurrency, where we want multiple computations to be interleaved. For small-step rules, we might say

$$\frac{\langle \sigma, c_1 \rangle \to \langle \sigma^\prime, c_1^\prime\rangle}{\sigma, c_1 \ || c_2 \rangle \to \langle \sigma^\prime, c_1^\prime \ || \ c_2 \rangle}$$

and

$$\frac{\langle \sigma, c_2 \rangle \to \langle \sigma^\prime, c_2^\prime \rangle}{\langle \sigma, c_1 \ || \ c_2 \rangle \to \langle \sigma^\prime, c_1 \ || \ c_2^\prime\rangle}.$$

Here, we have no scheduler, so we’re basically allowing all schedulers.

Additionally, since programs terminate in skip, we should have

$$\frac{}{\langle \sigma, \text{skip} \ || \ \text{skip}\rangle \to \langle \sigma^\prime, \text{skip}\rangle}.$$