Algorithme :
On ordonne les df de F. Soit F=(X1→Y1, X2→Y2, ... Xn→Yn)
Étape 1 : on décompose les membres droits Yi des df de F
POUR i de 1 à n FAIRE
Si Yi=A1A2...As avec s>1 Alors
F:= F-(Xi→Yi)∪(Xi→A1, Xi→A2, ... Xi→As)
On suppose que par la suite on a : F=(X1→A1, X2→A2, ... Xp→Ap)
Étape 2 : on regarde si on peut enlever des df de F sans modifier sa fermeture
POUR i de 1 à p FAIRE
Si F-(Xi→Ai) ⇒ (Xi→Ai) Alors F:=F-(Xi→Ai)
On suppose que par la suite on a : F=(X1→A1, X2→A2, ... Xq→Aq)
Étape 3 : On cherche à réduire le nombre d'attributs des membres gauches.
POUR i de 1 à q FAIRE
Si Xi=B1B2...Br avec r>1 Alors
POUR j de 1 à r FAIRE
Si F ⇒ (Xi-Bj)→ Ai Alors
Xi := Xi-Bj