Transitive Closure and Minimal Cover for Functional Dependencies

Input

Format: [LHS attribute 1], [LHS attribute 2], … -> [RHS attribute 1], [RHS attribute 2], …
All whitespace between attributes is ignored. Any comma-separated attribute name is allowed but it cannot contain the determines operator, ->. This program is case-sensitive. Blank lines and lines beginning with # are ignored.

Output

Minimal Cover:
All keys:

See also here and here.