Source: https://www.itu.dk/~sestoft/plc/lecture02.pdf