nb-15 solutions — Quantities and dimensions
Checkable against law test packs/examples/language-demo/math02
(42 checked, 42 passed), law test packs/examples/language-demo/boundaries (21 checked, 21 passed),
law engine check on the math02 package and on the frozen refusal
snippets. Identifiers and code as written.
1. load_q(5 km) versus load_q(22 kW) for heavy_load()
Section titled “1. load_q(5 km) versus load_q(22 kW) for heavy_load()”Answer: 5 km gives TRUE_ONLY (melded scalar 5000/1); 22 kW
gives NEITHER — no scalar is melded at all.
LoadScalar divides each reading’s magnitude by magnitude(1 m)
and applies scalar_of: 5 km becomes the Rational 5000/1, which
clears the (44/1) bar in HeavyLoad — the rule fires. For
22 kW the suite shows heavy_load() NEITHER but pins no
load_scalar value itself; a scratch probe outside the suite
settles it — truth(load_scalar(22/1)) given load_q(22 kW)
returns NEITHER while load_q(22 m) returns TRUE_ONLY — so the
metre-divisor meld accepted nothing (the silent UNIT_UNKNOWN
mode from the article’s Limits). No rule derives heavy_load()
and the status is NEITHER, not false. The suite’s test names say
exactly this: scalar of five kilometres in metres versus load scalar below the threshold is not derived.
2. load_q(5 km) versus load_q(0.5 km) for long_trip()
Section titled “2. load_q(5 km) versus load_q(0.5 km) for long_trip()”Answer: 5 km clears it (5000 m ≥ 1000); 0.5 km does not
(500 m < 1000). The explicit step is unit_convert(magnitude(q), "m") in TripLength.
The target unit "m" is written in the call — kilometres never
meet the metre threshold until converted. 5 km converts to 5000 m
(kilometres converted to metres, TRUE_ONLY); 0.5 km converts to
500 m (short trip fails the threshold, NEITHER). The judging rule
LongTrip is identical in both cases; only the converted scalar
differs.
3. The convert equality and its explicit factor
Section titled “3. The convert equality and its explicit factor”Answer: it establishes conv_ok() (TRUE_ONLY) — 1 km equals
1000 m — and the factor 1000/1 must appear because the engine
performs no silent coercion.
convert(with_unit(1, "km"), 1000, 1, "m") re-expresses the value
with a stated numerator and denominator; the equality against
with_unit(1000, "m") then checks two explicitly constructed
quantities. A bare 1 == 1000 comparison would be meaningless (and
dimensionless); the factor in the call is what makes the claim
checkable rather than assumed. Suite witness: the unit conversion by value ok line.
4. What the tag resolves tests add
Section titled “4. What the tag resolves tests add”Answer: they prove tag resolution works for locally declared units, not just the SI registry.
declared unit tag resolves (with_unit(5, "permit")) and
derived tag resolves (with_unit(2, "permit_rate"), where
permit_rate = permit / permit) run over unit permit = 1
declared in the boundaries package itself — no SI import involved.
The SI-side tests prove registry conversion; these two prove the
construct is general: any package can coin countable tags for
non-physical things (permits, rates) and compare them the same way.
5. The temp02 refusal and the 0.2 alternative
Section titled “5. The temp02 refusal and the 0.2 alternative”Answer: refused with LDC-E2105 (undeclared) plus LDC-E2403
(computability not proved); a 0.2 modeller uses unit_convert,
convert, quantity_of and with_unit.
temp_convert belongs to the 0.7 temperature profile, which this
implementation (law 0.1.0, law.core/0.2) does not execute — so
the checker reports the name unknown and the purity unprovable.
angle_convert fails identically. The refusal is a fact about this
profile, not about the language: stay inside the executable subset
(the ConvOk/QBackOk/ExpoOk rules are the positive pattern)
and leave newer-profile converters to nb-17.
How to verify
Section titled “How to verify”law test packs/examples/language-demo/math02Expected: мир demo.northbridge.math02, units.si, ok lines for
scalar of five kilometres in metres, load scalar below the threshold is not derived, kilometres converted to metres,
short trip fails the threshold, unit conversion by value;
total 42 проверено, 42 прошли, 0 не прошли.
law test packs/examples/language-demo/boundariesExpected: ok lines declared unit tag resolves and derived tag resolves; total 21 проверено, 21 прошли, 0 не прошли.
law engine check packs/examples/language-demo/math02/package.lawExpected: check OK.
law engine check packs/examples/language-demo/boundaries/evidence/snippets/temp02.law.txtExpected: LDC-E2105 and LDC-E2403 (likewise for
angle02.law.txt with angle_convert).
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.