Markdown for LLMs
LDC-E1368 — Assertions contradicting a key
The source Markdown for this article. Copy it into your assistant or download it as a text file.
# LDC-E1368 — Assertions contradicting a key
## What it means
A relation can declare a key: the parameters that identify a row.
Two assertions under the same key value must then agree — the same
key, the same tuple. When the package's own assertions yield different
tuples under one key in overlapping applicability windows, the table
contradicts itself, and no later reasoning can decide which row holds.
The compiler stops at the second row.
The repair is to keep one row, or to separate the rows so their
windows no longer overlap. A key promises one answer per value; the
assertions must keep that promise.
## Example
```law
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";
relation koef(klass: Text, value: Decimal) kind empirical {
key(klass);
}
assert koef("K0", 2.30);
assert koef("K0", 1.55);
```
## Fix
```law
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";
relation koef(klass: Text, value: Decimal) kind empirical {
key(klass);
}
assert koef("K0", 2.30);
```
## Engine message
The engine reports this in its own wording:
```text
example.law:9:1: error LDC-E1368: relation koef: the package's own assertions yield different tuples under the same projection onto key(klass) = ("K0") and overlapping §92 applicability windows — the table contradicts its key (SPEC §45.1/§196, errata E-0210); separate the rows by edition or keep one
```
## Related
- [Facts and evidence](/constructs/facts-and-evidence/) — asserting what holds.