Rete.IR.CompoundNegation (Rete v0.2.0)

Copy Markdown View Source

The negation of a conjunction: "no match satisfies all of these at once".

Never rewritten with De Morgan's law, because the conjuncts share existentially quantified variables. {:nand, [{:order, x}, {:refund, x}]} means "there is no x with both". The De Morgan form would mean "there are no orders at all, or no refunds at all" instead — false whenever one x has an order and a different x has a refund.

Rete.Compiler.Negation extracts this into a helper production whose RHS inserts a marker fact. Nothing else in the pipeline can evaluate one. It binds nothing downstream. But its inner conditions are still classified, because the helper needs their join keys.

Summary

Types

t()

@type t() :: %Rete.IR.CompoundNegation{conditions: [Rete.IR.condition()]}