È migliore dell’applicazione indiscriminata degli assiomi di Armstrong per calcolare , ha complessità polinomiale.

Input: una schema di relazione , un insieme di dipendenze funzionali su , un sottoinsieme di .

Output: la chiusura di rispetto ad (restituita nella variabile )

  1. Inizialmente assegniamo stesso all’accumulatore di che useremo nel ciclo.
  2. Scegliamo in modo che sia determinata da un insieme di attributi appartenenti alla chiusura di come calcolata fino a questo momento; poi assegniamola a .
  3. while : Fermiamoci quando non si può scegliere un attributo in modo che non sia già nella chiusura di .
    1. Aggiungiamo alla chiusura di .
  4. return

Nota: Estendere la variabile da cui prendiamo i determinanti nei cicli while successivi equivale ad applicare gli assiomi di Armstrong.

Dimostrazione che l’algoritmo è corretto

Teorema: l’algoritmo calcola correttamente la chiusura di un insieme di attributi rispetto ad un insieme di dipendenze funzionali.

Dimostrazione:

  • valore iniziale di ();
  • valore di dopo l’i-esima iterazione;
  • valore di dopo l’i-esima iterazione.

Per la natura dell’algoritmo, è evidente che ; non eliminiamo mai nessun attributo.

Scegliamo tale che sia il valore di quando il ciclo si interrompe, terminando l’algoritmo: .

La proposizione da dimostrare diventa quindi:

Cioè (l’algoritmo fa effettivamente quello che dice di fare, calcolando tramite la variabile ).

Per induzione,

Vogliamo dimostrare per induzione su che , quindi in particolare .

Caso base

Passo induttivo: ipotesi induttiva

Sia un attributo aggiunto all’i-esima iterazione, cioè .

Sicuramente, per come è definito l’algoritmo, esiste una dipendenza tale che .

Per ipotesi induttiva, , quindi per il Lemma vale .

Per l’assioma della transitività , quindi sempre per il Lemma, .

Dato che allora . Da ciò segue per ipotesi induttiva che (Gli attributi in sono già in per ipotesi induttiva, abbiamo mostrato che ci vanno anche quelli inseriti in all’i-esima iterazione del ciclo).

Per dimostrazione diretta,

Sia . Dobbiamo dimostrare che .

Per il Lemma vale che e per l’uguaglianza tra e vale che , quindi deve essere soddisfatta da ogni istanza legale di , in particolare da definita come segue:

è un’istanza legale di

è un’istanza legale se soddisfa ogni :

  • se , allora le due tuple sono diverse su perché c’è almeno un attributo di contenuto in , quindi la dipendenza è soddisfatta.
  • se i valori delle due tuple sono uguali. Se le due tuple avessero valori diversi su (e quindi se la dipendenza non fosse soddisfatta), si avrebbe e quindi non sarebbe il valore finale di . Questo perché se e avesse degli attributi in allora l’algoritmo non sarebbe ancora finito, perché questi attributi si potrebbero ancora raccogliere in : ciò vorrebbe dire che non è il valore finale di , ma ciò è un assurdo in contraddizione con la costruzione dell’istanza .

Abbiamo dimostrato che è un’istanza legale di .

Considerazione finale

Dato che è legale, deve soddisfare .

Per costruzione, ovviamente esistono due tuple uguali su (perché , parte a destra dello schema con tutti 1): dato che le due tuple sono uguali su tutti gli attributi in , allora devono essere uguali anche su , quindi .