Skip to content
docs
Arxo ↗

TYPE_ERROR — Values of incompatible kinds meet in one computation

For LLMs4 sections

Values carry their kinds: a length in metres is not a length in kilometres until converted, money in one currency does not mix with money in another, dates do not compare with plain numbers. When one computation brings two incompatible kinds together, the engine stops that question instead of silently converting or dropping the mismatch. The report names the clash so the author can see which two values met.

This status is about the values, not the rules. The rule is fine; the facts fed it values its computation cannot combine.

Arxo Law
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";
entity Applicant;
relation distance_to_zone(a: Applicant, d: Quantity) kind empirical { key(a); }
relation far_from_zone(a: Applicant) kind institutional;
rule FarFromZone strict {
for a: Applicant;
for d: Quantity;
when distance_to_zone(a, d) and d >= 2 km;
then far_from_zone(a);
}
lawtest
language "law.core" version "0.2";
package demo.diagnostics version "0.1.0";
namespace "urn:law:demo:diagnostics";
test "different units are not mixed" {
given {
context { legal_time @2026-03-01; decision_time @2026-03-01T09:00:00Z; knowledge_time @2026-03-01T09:00:00Z; timezone "UTC"; }
assert distance_to_zone(entity_ref("urn:demo:diagnostics:bob"), 2500 m) { origin case_input; }
}
evaluate truth(far_from_zone(entity_ref("urn:demo:diagnostics:bob")));
expect evaluation_status == TYPE_ERROR;
}

The rule compares against kilometres while the case states metres. The two never mix silently, so the question ends here.

Make the kinds agree: state the fact in the unit the rule expects, or convert explicitly with an exact factor before comparing. Never rely on silent conversion — the engine has none, on purpose.

Documentation for Arxo. Writings — blog.arxo.io.

Anonymous visit counts on stats.arxo.io, no cookies.