Closure, keys, BCNF splits, and lossless joins are recomputed before rendering.

highlighted = computed this step

Honest by construction

The author supplies schemas, dependencies, starting attribute sets, and optional expected facts. The engine recomputes closure traces, candidate keys, BCNF splits, and lossless-join checks before rendering. An expected fact can reject a mismatch, but it cannot become the displayed answer. Note: the lesson self-test deliberately checks wrong expected facts.

recompute boundary\text{recompute boundary}

Compiled facts

The closure has size 3, the BCNF decomposition has 2 pieces, and the lossless check uses an intersection of size 1. Note: each number is read from compiled output.

X+=3,pieces=2\left|X^+\right|=3,\quad \text{pieces}=2

FD closure, candidate keys, BCNF decomposition, and lossless-join checks are exact finite computations on tiny schemas; dependency inference beyond these traces and physical schema design tradeoffs are beyond this book - no product claims.

Honest closure: A+=ABCroundfdaddsclosure1A->BBAB1B->CCABC
Honest BCNFABCB->CBCBCNFABBCNF decompositionschemaABBC
lossless: yespartattrsR1BCR2ABintersectionBclosureBC

Wrong result reject

A wrong expected closure or wrong expected decomposition is rejected during the lesson self-test. Note: the rejection happens before any inconsistent diagram can be generated.

reject mismatch\text{reject mismatch}

Summary

Normalization and BCNF stay honest because each closure, key, violation, split, and lossless verdict is recomputed from pinned dependencies. Note: FD closure, candidate keys, BCNF decomposition, and lossless-join checks are exact finite computations on tiny schemas; dependency inference beyond these traces and physical schema design tradeoffs are beyond this book.

honest normalization\text{honest normalization}