docs← Back to article

Markdown for LLMs

LDC-E4125 — A closure over a round-dependent relation

The source Markdown for this article. Copy it into your assistant or download it as a text file.

Download this articlePlain text ↗
# LDC-E4125 — A closure over a round-dependent relation

## What it means

A closure materializes the full extent of one relation, but a relation
that depends on staged rounds has no single extent: each round computes
its own slice. Closing over such a relation is not supported, and the
compiler refuses the closure by name.

Close a relation that stands outside the rounds instead, or drop the
closure.

## Example

```law
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";

relation counter(i: Integer) kind institutional;
relation probe(i: Integer) kind institutional;
stage R { index i: Integer from 1 to 5; bind counter index 1; }
closure C { predicate counter; domain probe; snapshot "urn:law:demo:snap"; complete_as_of @2026-01-01T00:00:00Z; derive_explicit_negative true; }
```

## Fix

```law
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";

relation counter(i: Integer) kind institutional;
relation probe(i: Integer) kind institutional;
stage R { index i: Integer from 1 to 5; bind counter index 1; }
closure C { predicate probe; domain probe; snapshot "urn:law:demo:snap"; complete_as_of @2026-01-01T00:00:00Z; derive_explicit_negative true; }
```

## Engine message

The engine reports this in its own wording:

```text
example.law:8:9: error LDC-E4125: STAGE_CLOSURE_UNSUPPORTED: §70 closure "C" over relation "counter" depending on rounds is not supported in 0.3 (§111.2 item 1)
```

## Related

- [Time](/constructs/time/) — how rounds and indices are written.