Source: https://polsys.lip6.fr/~jcf/Papers/CoursSafeyFaugere.pdf