Solution (source code)

= Solution

The remaining classification rule is
$$
\boxed{\mathit{Year}(x)\land\operatorname{not}\mathit{Leap}(x)\to\mathit{Common}(x).}
$$
The positive premise restricts the rule to years. Its <negation as failure> premise is evaluated by <stable model semantics>; it does not assert a separately stored negative fact. This gives a <stratified Datalog> program: divisibility and year facts are inputs, leap status is computed next, and common status last.