docs← Back to article

Markdown for LLMs

LDC-E1335 — Repeated expansion definition

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

Download this articlePlain text ↗
# LDC-E1335 — Repeated expansion definition

## What it means

An expansion definition owns its name exactly once per package: the
second definition under the same name does not extend or override the
first, it collides. When two definition blocks share a name, the
compiler stops at the repetition and keeps only the first.

The repair is to merge the two blocks into one definition, or to give
each its own name. One name denotes one template.

## Example

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

entity Person;
entity Choice;
entity SpecialChoice : Choice;
entity Other;
const Selected: SpecialChoice = entity_ref("urn:choice:selected");
const Wrong: Other = entity_ref("urn:choice:wrong");
relation eligible(p: Person, choice: Choice) kind empirical;
relation applicable(p: Person, choice: Choice) kind institutional;
expansion fixed {
    params { subject: binder; choice: value; ground: relation(subject, choice); result: relation(subject, choice); }
    emit rule self/result defeasible {
        for subject;
        when ground(subject, choice);
        then result(subject, choice);
        scope from self; effective from self; labels from self; source from self;
    }
}
expansion fixed {
    params { subject: binder; choice: value; ground: relation(subject, choice); result: relation(subject, choice); }
    emit rule self/result defeasible {
        for subject;
        when ground(subject, choice);
        then result(subject, choice);
        scope from self; effective from self; labels from self; source from self;
    }
}
expand fixed Result {
    label en official "Fixed option";
    bind subject = person: Person;
    choice = Selected;
    ground = eligible;
    result = applicable;
    effective [@2026-01-01, @2027-01-01);
}
```

## Fix

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

entity Person;
entity Choice;
entity SpecialChoice : Choice;
entity Other;
const Selected: SpecialChoice = entity_ref("urn:choice:selected");
const Wrong: Other = entity_ref("urn:choice:wrong");
relation eligible(p: Person, choice: Choice) kind empirical;
relation applicable(p: Person, choice: Choice) kind institutional;
expansion fixed {
    params { subject: binder; choice: value; ground: relation(subject, choice); result: relation(subject, choice); }
    emit rule self/result defeasible {
        for subject;
        when ground(subject, choice);
        then result(subject, choice);
        scope from self; effective from self; labels from self; source from self;
    }
}
expand fixed Result {
    label en official "Fixed option";
    bind subject = person: Person;
    choice = Selected;
    ground = eligible;
    result = applicable;
    effective [@2026-01-01, @2027-01-01);
}
```

## Engine message

The engine reports this in its own wording:

```text
example.law:22:11: error LDC-E1335: expansion fixed: repeated definition
```

## Related

- [LDC-E1336](/diagnostics/LDC-E1336/) — an instance must resolve to exactly one definition.
- [LDC-E1337](/diagnostics/LDC-E1337/) — the instance must honor the definition contract.