Source: https://www.ics.uci.edu/~wayne/courses/ics6b/Hehner-Boolean-Thynges.pdf