eyeprolog 1.3.60 → 1.3.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -61
- package/package.json +1 -1
- package/test/conformance/ISO-BUILTIN-MODE-ERROR-MATRIX.md +5 -8
- package/test/conformance/ISO-COMPLIANCE.md +58 -60
- package/test/conformance/ISO-EVALUABLE-FUNCTOR-MATRIX.md +3 -4
- package/test/conformance/ISO-IMPLEMENTATION-DEFINED.md +2 -2
- package/test/conformance/ISO-PROCESSOR-REQUIREMENTS.md +31 -16
- package/test/conformance/ISO-PROLOG-TEXT-EXECUTION-MATRIX.md +94 -0
- package/test/conformance/README.md +10 -14
- package/test/conformance/STC-DRAFT-STATUS.md +5 -7
- package/test/run-iso-strict.mjs +269 -0
- package/test/run-regression.mjs +59 -14
- package/the-art-of-eyeprolog.md +21 -36
- package/why-eyeprolog.md +8 -7
- package/test/conformance/ISO-EXIT-CRITERIA.md +0 -55
- package/test/conformance/ISO-MATRIX.md +0 -48
package/README.md
CHANGED
|
@@ -203,66 +203,23 @@ eyeprolog --iso-strict
|
|
|
203
203
|
eyeprolog --iso-strict --goal 'p(X)' program.pl
|
|
204
204
|
```
|
|
205
205
|
|
|
206
|
-
The equivalent JavaScript option is `isoStrict: true`. Strict mode
|
|
207
|
-
EyeProlog
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
normal-profile `write_term(...,[double_quotes(...)])` option remains an
|
|
224
|
-
EyeProlog extension. The strict gate also checks the prescribed ISO error
|
|
225
|
-
precedence for `read_term/3`, `write_term/3`, `op/3`, and `current_op/3`, and
|
|
226
|
-
the complete Part 1 flag defaults/value domains/changeability rules. The
|
|
227
|
-
ongoing issue #65 audit additionally tightens Prolog-text declaration ordering,
|
|
228
|
-
initialization lifetime, stream/open/close behavior, character/byte stream
|
|
229
|
-
errors, `keysort/2` error cases, the now-closed 5.5.6 side-effect and 5.5.10 evaluable-functor strict
|
|
230
|
-
extension boundaries, and the standard's permitted arithmetic variation points: mixed-type Corrigendum 2
|
|
231
|
-
`max/2`/`min/2` and signed Clause 9.4 bitwise/shift behavior. The row-level
|
|
232
|
-
7.1-7.3 term-semantics audit and 7.9/Clause 9 expression/evaluable-functor
|
|
233
|
-
audit are now closed as well. That arithmetic pass also corrected float-only
|
|
234
|
-
`float_integer_part/1` and `float_fractional_part/1`: an integer operand, even
|
|
235
|
-
a huge valid unbounded integer, now reaches `type_error(float,...)` before any
|
|
236
|
-
integer-to-float overflow.
|
|
237
|
-
Those additions improve the Part 1 surface without turning the remaining audit
|
|
238
|
-
rows into a blanket conformance claim. The post-N289 WG17/STC working draft is
|
|
239
|
-
reviewed separately rather than treated as a fourth Corrigendum. The
|
|
240
|
-
2026-08-23 draft items #73-#76 are now pinned explicitly: float input limits for
|
|
241
|
-
`read*` and `number_*` conversions, invalid-character term input, and the draft
|
|
242
|
-
proposal that would make the two power-underflow rows depend on the processor's
|
|
243
|
-
9.1.4.2 `resultF` choice. Strict mode retains the published Part 1 +
|
|
244
|
-
Corrigenda 1-3 behavior where the draft has not been standardized.
|
|
245
|
-
|
|
246
|
-
As an additional 5.5.1 extension-safety gate, every vendored WG17 syntax case
|
|
247
|
-
that succeeds in the strict Part 1 reader is re-run in the normal profile and
|
|
248
|
-
must retain the same observable outcome; normal mode may accept extra extension
|
|
249
|
-
syntax, but it must not reinterpret text already accepted as standard syntax.
|
|
250
|
-
|
|
251
|
-
The auditable processor-requirement checklist lives in
|
|
252
|
-
[`test/conformance/ISO-COMPLIANCE.md`](test/conformance/ISO-COMPLIANCE.md).
|
|
253
|
-
The ISO 5.4 implementation-defined/implementation-specific decision index is
|
|
254
|
-
[`test/conformance/ISO-IMPLEMENTATION-DEFINED.md`](test/conformance/ISO-IMPLEMENTATION-DEFINED.md).
|
|
255
|
-
The closed term and arithmetic row audits are
|
|
256
|
-
[`ISO-TERM-SEMANTICS-MATRIX.md`](test/conformance/ISO-TERM-SEMANTICS-MATRIX.md) and
|
|
257
|
-
[`ISO-EVALUABLE-FUNCTOR-MATRIX.md`](test/conformance/ISO-EVALUABLE-FUNCTOR-MATRIX.md);
|
|
258
|
-
[`ISO-EXIT-CRITERIA.md`](test/conformance/ISO-EXIT-CRITERIA.md) states the remaining
|
|
259
|
-
normative and external-corpus exit conditions.
|
|
260
|
-
The separate [WG17 syntax ledger](test/conformance/WG17-SYNTAX-STATUS.md)
|
|
261
|
-
records executable dispositions for the vendored active upstream WG17 syntax
|
|
262
|
-
cases and runs as part of `npm test`. Reviewed cases can pin exact outcomes;
|
|
263
|
-
newly upgraded cases run directly against the upstream Codex expectation.
|
|
264
|
-
EyeProlog does not yet claim independent certification or closure of every
|
|
265
|
-
normative Part 1 requirement.
|
|
206
|
+
The equivalent JavaScript option is `isoStrict: true`. Strict mode keeps
|
|
207
|
+
EyeProlog's documented implementation-defined Unicode scalar processor
|
|
208
|
+
character set, while excluding normal-profile language extensions such as Part
|
|
209
|
+
2 module compatibility forms, Part 3 DCG expansion, quads, extra libraries,
|
|
210
|
+
automatic tabling, and non-standard flags/control facilities. Normal mode is
|
|
211
|
+
unchanged.
|
|
212
|
+
|
|
213
|
+
This README intentionally stays at the project-overview level. The detailed
|
|
214
|
+
implementation reference is [*The Art of EyeProlog*](the-art-of-eyeprolog.md).
|
|
215
|
+
The current Part 1 audit status and closure criteria are recorded in
|
|
216
|
+
[`test/conformance/ISO-COMPLIANCE.md`](test/conformance/ISO-COMPLIANCE.md);
|
|
217
|
+
implementation-defined decisions are indexed in
|
|
218
|
+
[`ISO-IMPLEMENTATION-DEFINED.md`](test/conformance/ISO-IMPLEMENTATION-DEFINED.md). The complete
|
|
219
|
+
vendored WG17 syntax corpus and the strict ISO regression suite run as release
|
|
220
|
+
gates.
|
|
221
|
+
|
|
222
|
+
The release-facing Part 1 audit ledger has explicit dispositions for its tracked requirements. This implementation evidence is not an independent ISO certification.
|
|
266
223
|
|
|
267
224
|
## Module and definite clause grammar compatibility profiles
|
|
268
225
|
|
|
@@ -327,7 +284,7 @@ headroom, so an exhausted finite heap is reported as a catchable
|
|
|
327
284
|
`library(iso_ext)` is also accepted as a common interop module name.
|
|
328
285
|
EyeProlog exports `call_nth/2`, `time/1`, and the DCG helper `... //0` there.
|
|
329
286
|
The latter describes an arbitrary number of input elements and supports the
|
|
330
|
-
nonterminal hand-off benchmark
|
|
287
|
+
nonterminal hand-off benchmark used by the interoperability tests. These common predicates
|
|
331
288
|
may be imported explicitly, while source/CLI/API dependency loading can resolve
|
|
332
289
|
their unqualified forms conservatively. For Trealla-style interactive timing,
|
|
333
290
|
`time/1` is also available directly in the normal EyeProlog runtime; strict ISO
|
package/package.json
CHANGED
|
@@ -209,7 +209,7 @@ The Corrigendum 2 additions have the same shape.
|
|
|
209
209
|
| 8.11.5 errors: argument shapes | non-atom mode; non-list options; non-variable stream output (Cor.2 uninstantiation) | covered | strict `open/4` assertions |
|
|
210
210
|
| 8.11.5 errors: domains | invalid source/sink, I/O mode, or stream option | covered | strict `open/4` assertions |
|
|
211
211
|
| 8.11.5 source/sink errors | missing read source or source/sink that cannot be opened | covered | strict host-I/O probes for existence/permission conditions |
|
|
212
|
-
| 8.11.5 alias collision | `alias(A)` already names an open stream -> open permission error with complete `alias(A)` culprit | covered | focused
|
|
212
|
+
| 8.11.5 alias collision | `alias(A)` already names an open stream -> open permission error with complete `alias(A)` culprit | covered | focused alias-collision regression |
|
|
213
213
|
| 8.11.5 `reposition(true)` impossible | permission error when the requested stream cannot be repositioned | covered | stream option corpus and implementation-defined stream capability checks |
|
|
214
214
|
| 8.11.6 `close/2`, `close/1` | close an open non-standard stream and maintain current-stream fallbacks | covered | stream lifecycle corpus |
|
|
215
215
|
| 8.11.6 errors | variable stream/option element; non-list options; invalid stream-or-alias; invalid close option; missing stream | covered | strict close assertions |
|
|
@@ -364,7 +364,7 @@ built-in matrix does not have a gap at 8.17.
|
|
|
364
364
|
| 8.17.4 variable status | instantiation error | covered | strict `halt(X)` |
|
|
365
365
|
| 8.17.4 non-integer status | integer type error | covered | strict `halt(a)` |
|
|
366
366
|
|
|
367
|
-
##
|
|
367
|
+
## Closure note
|
|
368
368
|
|
|
369
369
|
The built-in **8.2-8.17 row audit is complete** at the level tracked by this
|
|
370
370
|
file: prescribed modes, success/failure behavior, individual error conditions,
|
|
@@ -372,9 +372,6 @@ and conditional/not-applicable processor branches all have explicit outcomes.
|
|
|
372
372
|
ISO 7.12 simultaneous-error selection remains an implementation-dependent
|
|
373
373
|
processor choice unless more specific normative text constrains it.
|
|
374
374
|
|
|
375
|
-
The
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
Clause 7.4-7.8 plus higher-level 7.10/7.12 processor/control semantics, residual
|
|
379
|
-
Clause 5 dependency rows, and the external conversion/variable-name exit
|
|
380
|
-
criteria recorded in `ISO-EXIT-CRITERIA.md`.
|
|
375
|
+
The surrounding Clause 5-7 processor requirements are closed in
|
|
376
|
+
`ISO-PROCESSOR-REQUIREMENTS.md` and `ISO-COMPLIANCE.md`; this matrix remains the
|
|
377
|
+
detailed evidence for the 8.2-8.17 built-in layer.
|
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
# ISO/IEC 13211-1 compliance ledger
|
|
2
2
|
|
|
3
|
-
This ledger is the release-facing audit
|
|
4
|
-
The normative baseline is ISO/IEC 13211-1:1995
|
|
5
|
-
Corrigenda 1:2007, 2:2012, and 3:2017.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
[
|
|
10
|
-
Clause 5 processor obligations. [ISO-TERM-SEMANTICS-MATRIX.md](ISO-TERM-SEMANTICS-MATRIX.md)
|
|
11
|
-
and [ISO-EVALUABLE-FUNCTOR-MATRIX.md](ISO-EVALUABLE-FUNCTOR-MATRIX.md) close the
|
|
12
|
-
row-level Clause 7.1-7.3 and 7.9/Clause 9 audits, while
|
|
13
|
-
[ISO-EXIT-CRITERIA.md](ISO-EXIT-CRITERIA.md) makes the remaining release exit
|
|
14
|
-
conditions explicit. The generated [`conformance-report.md`](../../conformance-report.md)
|
|
15
|
-
gives current case totals.
|
|
3
|
+
This ledger is the release-facing audit and high-level coverage map for
|
|
4
|
+
EyeProlog's ISO/IEC 13211-1 core. The normative baseline is ISO/IEC 13211-1:1995
|
|
5
|
+
together with Technical Corrigenda 1:2007, 2:2012, and 3:2017. Detailed
|
|
6
|
+
row-level evidence lives only where it adds information: the built-in, processor,
|
|
7
|
+
term-semantics, Prolog-text/execution, evaluable-functor, implementation-defined,
|
|
8
|
+
WG17-syntax, and STC draft ledgers in this directory. The generated
|
|
9
|
+
[`conformance-report.md`](../../conformance-report.md) gives current case totals.
|
|
16
10
|
|
|
17
11
|
The ledger deliberately does **not** claim independent certification. A row
|
|
18
12
|
marked `covered` means EyeProlog has implementation and executable tests for
|
|
@@ -25,39 +19,38 @@ relevant implementation-dependent overlap choice to an explicit audit outcome.
|
|
|
25
19
|
|
|
26
20
|
| Requirement | Status | EyeProlog evidence / remaining work |
|
|
27
21
|
| --- | --- | --- |
|
|
28
|
-
| 5.1(a) prepare conforming Prolog text |
|
|
29
|
-
| 5.1(b) execute conforming Prolog goals |
|
|
30
|
-
| 5.1(c) reject nonconforming text/read-terms |
|
|
31
|
-
| 5.1(d) document permitted variations | covered | The clause-by-clause [ISO 5.4 decision index](ISO-IMPLEMENTATION-DEFINED.md) records every explicit implementation-defined decision found in the Part 1 + Corrigenda baseline and separately inventories implementation-specific extension families.
|
|
22
|
+
| 5.1(a) prepare conforming Prolog text | covered | Clause 6 token/term production and rejection families are mapped by the strict production gate and the complete 366-case vendored WG17 syntax matrix; 7.4 preparation/directive behavior is separately closed. |
|
|
23
|
+
| 5.1(b) execute conforming Prolog goals | covered | Clause 7 term/control/execution semantics, the higher-level 7.10 stream model, 7.11 flags, the 7.12 error envelope, all 8.2-8.17 built-in rows, and Clause 9 arithmetic have explicit executable dispositions. |
|
|
24
|
+
| 5.1(c) reject nonconforming text/read-terms | covered | WG17 negative syntax cases, focused malformed-production/escape/comment/operator cases, read-term syntax errors, and strict rejection of implementation-specific syntax provide explicit rejection evidence across the Clause 6 families. |
|
|
25
|
+
| 5.1(d) document permitted variations | covered | The clause-by-clause [ISO 5.4 decision index](ISO-IMPLEMENTATION-DEFINED.md) records every explicit implementation-defined decision found in the Part 1 + Corrigenda baseline and separately inventories implementation-specific extension families. The index retains an `audit gap` category for future discoveries; no current release-facing row depends on one. |
|
|
32
26
|
| 5.1(e) offer a strictly conforming mode | covered | `--iso-strict` and API option `isoStrict: true` restrict the processor to the Part 1 + Corrigenda 1-3 core language surface, remove EyeProlog-only registry/flag/operator features, disable automatic tabling/recursion guards, and reject the normal-profile host `stringTerm/1` term type at strict program/goal entry. |
|
|
33
|
-
| 5.4 accompanying documentation | covered | *The Art of EyeProlog* remains the implementation reference; [ISO-IMPLEMENTATION-DEFINED.md](ISO-IMPLEMENTATION-DEFINED.md) is the closed clause-by-clause 5.4 decision index and points each decision to implementation evidence
|
|
34
|
-
| 5.5 extension boundaries |
|
|
27
|
+
| 5.4 accompanying documentation | covered | *The Art of EyeProlog* remains the implementation reference; [ISO-IMPLEMENTATION-DEFINED.md](ISO-IMPLEMENTATION-DEFINED.md) is the closed clause-by-clause 5.4 decision index and points each decision to implementation evidence. |
|
|
28
|
+
| 5.5 extension boundaries | covered | [ISO-PROCESSOR-REQUIREMENTS.md](ISO-PROCESSOR-REQUIREMENTS.md) gives an explicit disposition for every 5.5 extension hook. The Clause 6 cross-profile gate verifies that normal-mode syntax extensions do not reinterpret standard text accepted by the strict reader. |
|
|
35
29
|
|
|
36
30
|
## Normative language families
|
|
37
31
|
|
|
38
32
|
| Standard area | Status | Current evidence |
|
|
39
33
|
| --- | --- | --- |
|
|
40
|
-
| Clause 6 — tokens, terms, lists, operators, quoted text |
|
|
34
|
+
| Clause 6 — tokens, terms, lists, operators, quoted text | covered | The strict Clause 6 gate maps atomic/variable/compound/operator/list/curly/double-quoted term forms, layout/comments, quoted escapes, integer bases/character codes, floating tokens, and solo/meta token boundaries, with malformed counterparts rejected. The complete 366-case WG17 syntax matrix provides independent production-level coverage, and a cross-profile gate verifies that normal syntax extensions preserve every strict-accepted standard observation. The implementation-defined 6.5/6.6 PCS/collation choices are documented separately. |
|
|
41
35
|
| 7.1-7.3 — term types, term order, unification | covered | [ISO-TERM-SEMANTICS-MATRIX.md](ISO-TERM-SEMANTICS-MATRIX.md) records the five mutually exclusive strict term types, derived variable/compound/list notions, the complete standard-order classes and implementation-dependent variable-order choice, NSTO MGU/failure behavior, and EyeProlog's permitted consistent occurs-check failure for Part 1's undefined STO ordinary-unification cases. The normal JavaScript API string term is documented as a 5.5.4 extension and rejected at strict program/goal entry. |
|
|
42
|
-
| 7.4 — Prolog text and directives |
|
|
43
|
-
| 7.5-7.6 — database and term/clause conversion |
|
|
44
|
-
| 7.7 — execution and backtracking |
|
|
45
|
-
| 7.8 — control constructs and exceptions |
|
|
36
|
+
| 7.4 — Prolog text and directives | covered | [ISO-PROLOG-TEXT-EXECUTION-MATRIX.md](ISO-PROLOG-TEXT-EXECUTION-MATRIX.md) closes the preparation/directive rows: declaration semantics, source clauses, cross-text operators/character conversion/flags, initialization order/lifetime, `include/1`, and one-time `ensure_loaded/1`, with implementation-defined cross-text choices indexed under 5.4. |
|
|
37
|
+
| 7.5-7.6 — database and term/clause conversion | covered | [ISO-PROLOG-TEXT-EXECUTION-MATRIX.md](ISO-PROLOG-TEXT-EXECUTION-MATRIX.md) closes static/dynamic and private/public procedure semantics, clause order, logical-update visibility, empty/unknown lifetime, and term/body/clause conversion. Source and runtime assertion conversion recurse through `,/2`, `;/2`, and `->/2`, preserve variable identity, and protect standardized static/control procedures. |
|
|
38
|
+
| 7.7 — execution and backtracking | covered | [ISO-PROLOG-TEXT-EXECUTION-MATRIX.md](ISO-PROLOG-TEXT-EXECUTION-MATRIX.md) closes ordinary clause selection/backtracking, source/database order, empty-versus-unknown procedures, logical-update visibility, and strict dispatch. EyeProlog automatic tabling, cycle guards, and recursive numeric shortcuts remain disabled in the strict profile. |
|
|
39
|
+
| 7.8 — control constructs and exceptions | covered | [ISO-PROLOG-TEXT-EXECUTION-MATRIX.md](ISO-PROLOG-TEXT-EXECUTION-MATRIX.md) closes `true/0`, `fail/0`, `call/1`, cut, conjunction, disjunction, if-then(-else), and `catch/3`/`throw/1`, including Corrigendum 2 catchability of errors arising from the protected goal and Corrigendum 3 term-to-body conversion. The 8.15 built-in additions remain independently row-audited. |
|
|
46
40
|
| 7.9 — expression evaluation | covered | [ISO-EVALUABLE-FUNCTOR-MATRIX.md](ISO-EVALUABLE-FUNCTOR-MATRIX.md) closes recursive evaluation, direct-variable precedence, corrected non-evaluable `F/N` errors (including STC #69), operand template/type rules, mixed arithmetic-comparison conversion, exceptional values, and finite-host resource normalization. The audit also fixes float-only `float_integer_part/1` and `float_fractional_part/1` so even huge valid integers reach `type_error(float,...)` before any I->F overflow. |
|
|
47
|
-
| 7.10 — input/output concepts |
|
|
41
|
+
| 7.10 — input/output concepts | covered | Higher-level stream semantics are pinned for non-atom ground stream terms, alias lifetime, current/target stream selection and fallback, write truncation, append positioning, contradictory stream options, exact binary round-tripping, flushing, standard-stream close behavior, and repositioned overwrite. The complete 8.11-8.14 built-in mode/error family remains row-audited in [ISO-BUILTIN-MODE-ERROR-MATRIX.md](ISO-BUILTIN-MODE-ERROR-MATRIX.md), while all implementation-defined stream choices are indexed in [ISO-IMPLEMENTATION-DEFINED.md](ISO-IMPLEMENTATION-DEFINED.md). |
|
|
48
42
|
| 7.11 — flags | covered | The complete Part 1 flag set, selected defaults, standard value domains, changeability, `current_prolog_flag/2`, and `set_prolog_flag/2` error behavior have dedicated strict tests. EyeProlog selects `bounded=false` and `integer_rounding_function=toward_zero`; valid alternative values of those fixed flags reach `permission_error(modify,flag,...)`, while `max_integer` and `min_integer` have no current value. STC #70 is recorded explicitly: EyeProlog has no separate finite procedure-arity ceiling, so the optional `max_procedure_arity` flag is absent while `max_arity` remains `unbounded`. Strict mode excludes the EyeProlog `occurs_check` extension. |
|
|
49
|
-
| 7.12 — errors |
|
|
43
|
+
| 7.12 — errors | covered | The strict error-envelope gate exercises instantiation, type, domain, existence, permission, representation, evaluation, resource, syntax, and system errors through `error(Error, Context)`. Built-in rows provide the individual prescribed conditions, implementation-defined representation/context choices are documented, and simultaneous-error regressions pin deterministic EyeProlog choices without treating textual table order as normative. |
|
|
50
44
|
| 8.2-8.17 — built-in predicates | covered | [ISO-BUILTIN-MODE-ERROR-MATRIX.md](ISO-BUILTIN-MODE-ERROR-MATRIX.md) now records the complete Part 1 + Corrigenda built-in family at one row per prescribed mode, success/failure behavior, individual error condition, and conditional/not-applicable branch. The row audit exposed and fixed source/runtime 7.6.2 body conversion/variable sharing, strict host-string leakage, input-code error timing, `close/2` force handling, and closed-stream `stream_property/2` behavior. Simultaneous-error choices are documented as implementation dependent under 7.12 unless separately constrained. |
|
|
51
45
|
| Clause 9 — evaluable functors | covered | [ISO-EVALUABLE-FUNCTOR-MATRIX.md](ISO-EVALUABLE-FUNCTOR-MATRIX.md) records the published Part 1 + Corrigenda arithmetic templates and exceptional branches across 9.1, 9.3, and 9.4. It pins the unbounded integer model, `rndI`/`rndF`/`resultF` choices, float-only conversion rules, I->F overflow, explicit `exp/1` and power underflow, Corrigendum 2 additions and mixed-type `max/2`/`min/2` implementation-dependent choice, Corrigendum 3 negative-power correction, signed bitwise/shift choices, and resource-error translation. Post-N289 STC #75 remains a separately tracked draft proposal rather than a silent change to the published baseline. |
|
|
52
46
|
| Corrigendum 1 | covered | Double-quoted atom/operator-priority corrections have dedicated cases. |
|
|
53
47
|
| Corrigendum 2 | covered | Added predicates/functors, catch corrections, bar/operator and uninstantiation corrections have dedicated cases. |
|
|
54
48
|
| Corrigendum 3 | covered | Writer options, `variable_names/1`, canonical list output and negative-power corrections have dedicated cases. |
|
|
55
49
|
|
|
56
|
-
##
|
|
50
|
+
## Conformance corrections and audit closure
|
|
57
51
|
|
|
58
|
-
The
|
|
59
|
-
concrete mismatches
|
|
60
|
-
conformance claims:
|
|
52
|
+
The audit against the licensed Part 1 text and Corrigenda closed two
|
|
53
|
+
concrete mismatches that are now part of the closed Part 1 audit:
|
|
61
54
|
|
|
62
55
|
- `bounded=false` no longer exposes implementation-specific `unbounded` values
|
|
63
56
|
for `max_integer` or `min_integer`; the corresponding
|
|
@@ -67,7 +60,7 @@ conformance claims:
|
|
|
67
60
|
and feeds the same mapping into execution-time term input.
|
|
68
61
|
|
|
69
62
|
A follow-on audit made the processor-character-set/collation choices explicit.
|
|
70
|
-
|
|
63
|
+
A follow-up processor-character-set review corrected an over-strict interpretation: because PCS membership
|
|
71
64
|
and extended-character classification are implementation defined by Part 1,
|
|
72
65
|
`--iso-strict` must not replace EyeProlog's ordinary processor choice. Both
|
|
73
66
|
profiles now use Unicode scalar values as PCS members and collating integers;
|
|
@@ -79,7 +72,7 @@ WG17 syntax matrix remains a release gate.
|
|
|
79
72
|
|
|
80
73
|
|
|
81
74
|
The subsequent arity audit originally selected a finite `max_arity=65535`, but
|
|
82
|
-
|
|
75
|
+
the post-Corrigendum STC arity review exposed that as the wrong
|
|
83
76
|
abstraction: Part 1 `max_arity` is the maximum arity of **compound terms**, not
|
|
84
77
|
a procedure-arity limit. EyeProlog now again selects `max_arity=unbounded` and
|
|
85
78
|
removes the artificial 65535 checks from source parsing, `functor/3`, `=../2`,
|
|
@@ -91,11 +84,10 @@ database update errors, and Corrigendum 3 variable metadata traversal/write
|
|
|
91
84
|
naming.
|
|
92
85
|
|
|
93
86
|
The public WG17 `number_chars/2` comparison used in preparation of Corrigendum
|
|
94
|
-
2 has additionally been checked
|
|
95
|
-
|
|
96
|
-
as an offline release gate; the exit criterion below therefore remains open.
|
|
87
|
+
2 has additionally been checked during the audit. It remains supporting review
|
|
88
|
+
evidence rather than a duplicated vendored corpus or release criterion.
|
|
97
89
|
|
|
98
|
-
|
|
90
|
+
The flag and term-I/O audit closes the Part 1 flag family and tightens the 8.14
|
|
99
91
|
term-I/O/operator error rules. The strict flag registry now distinguishes a
|
|
100
92
|
standard value that is valid but not selectable from a value outside the
|
|
101
93
|
standard domain: attempts to change fixed `bounded` or
|
|
@@ -109,7 +101,7 @@ the Part 1 plus Corrigendum 3 option surface; the normal-profile
|
|
|
109
101
|
extension.
|
|
110
102
|
|
|
111
103
|
|
|
112
|
-
The
|
|
104
|
+
The preparation, stream, conversion, sorting, and arithmetic audit expands the coverage into Prolog-text,
|
|
113
105
|
stream, atomic-conversion, sorting, and arithmetic edge cases. Strict
|
|
114
106
|
preparation now enforces the Part 1 declaration constraints for `dynamic/1`,
|
|
115
107
|
`multifile/1`, and `discontiguous/1`, including cross-text multifile use and
|
|
@@ -119,13 +111,11 @@ requirements, and tightens creation, truncation/append, repositioning, flush,
|
|
|
119
111
|
EOF, close, and current-stream behavior. Corrigendum 2 `keysort/2` variable and
|
|
120
112
|
non-pair errors are corrected. Strict arithmetic no longer exposes the
|
|
121
113
|
EyeProlog-only evaluable atom `e`, while the Corrigendum arithmetic additions
|
|
122
|
-
remain available. These corrections
|
|
123
|
-
not by themselves close the full shall-by-shall/error-condition exit criteria.
|
|
114
|
+
remain available. These corrections are retained as regression evidence inside the closed shall-by-shall/error-condition audit.
|
|
124
115
|
|
|
125
116
|
The next Corrigendum 2 pass closed the prescribed `call/2..8` max-arity
|
|
126
117
|
branch for processors with a finite `max_arity`, and corrected reverse
|
|
127
|
-
`atom_chars/2` / `atom_codes/2` improper-list culprits.
|
|
128
|
-
EyeProlog's selected `max_arity=unbounded`, the conditional `call/N`
|
|
118
|
+
`atom_chars/2` / `atom_codes/2` improper-list culprits. With EyeProlog's selected `max_arity=unbounded`, the conditional `call/N`
|
|
129
119
|
`representation_error(max_arity)` branch is intentionally unreachable unless a
|
|
130
120
|
future processor profile selects a finite compound-term limit; closure
|
|
131
121
|
expansion itself remains covered by strict regressions.
|
|
@@ -172,8 +162,7 @@ describes: a later `force(false)` does not cancel an earlier `force(true)` when
|
|
|
172
162
|
a Resource Error or System Error occurs during closure. Focused strict tests
|
|
173
163
|
cover both overlap families.
|
|
174
164
|
|
|
175
|
-
The
|
|
176
|
-
than leaving it as a broad test-count claim.
|
|
165
|
+
The row-level matrices make the exit criteria concrete rather than leaving conformance as a broad test-count claim.
|
|
177
166
|
[ISO-BUILTIN-MODE-ERROR-MATRIX.md](ISO-BUILTIN-MODE-ERROR-MATRIX.md) now records
|
|
178
167
|
each prescribed mode/error row for the 8.2-8.5 and 8.15-8.17 slices, and
|
|
179
168
|
[ISO-PROCESSOR-REQUIREMENTS.md](ISO-PROCESSOR-REQUIREMENTS.md) decomposes the
|
|
@@ -213,9 +202,7 @@ individual-error outcomes in `ISO-BUILTIN-MODE-ERROR-MATRIX.md`. During this
|
|
|
213
202
|
pass `stream_property/2` exposed a lifecycle distinction: a syntactically valid
|
|
214
203
|
stream-term for a stream that has been closed denotes no currently open stream
|
|
215
204
|
property pair and therefore fails, whereas a term that is not a stream-term is
|
|
216
|
-
still a `domain_error(stream, ...)`.
|
|
217
|
-
focused on Clause 6/7/9 processor semantics and external corpora rather than
|
|
218
|
-
unmapped built-in tables.
|
|
205
|
+
still a `domain_error(stream, ...)`. The higher-level Clause 6, 7.10, and 7.12 gates now close those surrounding processor requirements as well, so the built-in table participates in a fully dispositioned release-facing ledger.
|
|
219
206
|
|
|
220
207
|
## Post-Corrigendum STC cross-check
|
|
221
208
|
|
|
@@ -231,7 +218,7 @@ type precedence, `read_term/3` EOF handling, mixed arithmetic comparison,
|
|
|
231
218
|
and `bagof/3` answer order. STC #21 is also used to keep finite-host exhaustion
|
|
232
219
|
of unbounded integer operations inside the Prolog resource-error model.
|
|
233
220
|
|
|
234
|
-
|
|
221
|
+
The newer STC arity discussion clarifies that `max_arity` describes
|
|
235
222
|
compound terms. EyeProlog therefore selects `unbounded` and does not invent a
|
|
236
223
|
finite predicate/procedure ceiling merely to preserve the former 65535 value.
|
|
237
224
|
STC #56, which became a WG17 action item, is implemented narrowly for database
|
|
@@ -271,10 +258,9 @@ directive may still add an infix `?-` definition; strict mode reads that as an
|
|
|
271
258
|
ordinary term rather than as a quad.
|
|
272
259
|
|
|
273
260
|
Module and DCG compatibility features remain supported and tested in the
|
|
274
|
-
normal EyeProlog profile
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
13211-2:2000 or ISO/IEC TS 13211-3.
|
|
261
|
+
normal EyeProlog profile, but they are not folded into the Part 1 strict-core
|
|
262
|
+
claim. The project does not currently assert that this evidence closes every
|
|
263
|
+
requirement of ISO/IEC 13211-2:2000 or ISO/IEC TS 13211-3.
|
|
278
264
|
|
|
279
265
|
## Release gate
|
|
280
266
|
|
|
@@ -292,13 +278,25 @@ outputs are never auto-accepted.
|
|
|
292
278
|
|
|
293
279
|
## Exit criteria for a full conformance claim
|
|
294
280
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
281
|
+
The Part 1 audit is closed by explicit dispositions, not by a test-count threshold.
|
|
282
|
+
The table below records the closure criteria used by the project. A `covered`
|
|
283
|
+
status is an implementation/audit result, not an independent certification. Public
|
|
284
|
+
post-N289 STC drafts remain review input until standardized.
|
|
299
285
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
286
|
+
| Criterion | Status | Evidence |
|
|
287
|
+
| --- | --- | --- |
|
|
288
|
+
| Clause 5 processor obligations have explicit dispositions | covered | `ISO-PROCESSOR-REQUIREMENTS.md` gives explicit outcomes for 5.1-5.5, including the strict/normal extension boundary. |
|
|
289
|
+
| Clause 6 lexical/syntactic requirements have explicit dispositions | covered | the strict Clause 6 production/rejection gate and the 366-case vendored WG17 matrix cover the standard families; cross-profile preservation verifies that normal extensions do not reinterpret strict-accepted text. |
|
|
290
|
+
| Clause 7 semantic requirements have explicit dispositions | covered | 7.1-7.12 now have explicit semantic, implementation-defined, or error-envelope dispositions backed by strict tests and the specialized matrices. |
|
|
291
|
+
| Clause 8 built-in modes/errors have explicit dispositions | covered | `ISO-BUILTIN-MODE-ERROR-MATRIX.md` closes 8.2-8.17 row by row |
|
|
292
|
+
| Clause 9 evaluable-functor requirements have explicit dispositions | covered | `ISO-EVALUABLE-FUNCTOR-MATRIX.md` plus the strict arithmetic regression closes the published Part 1 + Corrigenda arithmetic rows |
|
|
293
|
+
| Implementation-defined choices are documented | covered | `ISO-IMPLEMENTATION-DEFINED.md` is the Clause 5.4 decision index and strict tests pin execution-visible choices |
|
|
294
|
+
| Implementation-specific strict/normal boundary is documented and tested | covered | all 5.5 hooks have explicit dispositions; the WG17 cross-profile gate verifies syntax-preservation for standard text accepted by the strict reader. |
|
|
295
|
+
| Published Corrigenda 1-3 are incorporated | covered | dedicated conformance/strict tests and this ledger track all three published Corrigenda |
|
|
296
|
+
| Current post-N289 draft is tracked without silently changing the published baseline | covered | `STC-DRAFT-STATUS.md` tracks reviewed draft items separately from normative requirements |
|
|
297
|
+
| Independent external syntax corpus is an offline release gate | covered | the vendored WG17 syntax matrix has 366 executable dispositions checked against its upstream expectations |
|
|
298
|
+
| Third-party standard-core regression provenance is retained | covered | adapted Logtalk, Scryer, Trealla, and SWI-Prolog cases retain source identifiers and licenses in `THIRD_PARTY.md` |
|
|
299
|
+
| No unexplained deviation remains in the release-facing ledger | covered | the release-facing ledger contains no remaining `audit` rows; documented variation points are implementation-defined/specific or draft-only rather than unexplained deviations. |
|
|
300
|
+
|
|
301
|
+
The specialized row matrices are evidence for this ledger, not separate public
|
|
302
|
+
status documents. *The Art of EyeProlog* remains the implementation reference.
|
|
@@ -85,7 +85,6 @@ unbounded integer model and translate finite-host exhaustion to
|
|
|
85
85
|
## Closure note
|
|
86
86
|
|
|
87
87
|
With this matrix and the strict arithmetic regression, the release-facing
|
|
88
|
-
Clause 7.9 and Clause 9 rows are `covered`. The
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
and the remaining external-corpus exit criteria.
|
|
88
|
+
Clause 7.9 and Clause 9 rows are `covered`. The surrounding processor and syntax
|
|
89
|
+
requirements are dispositioned in `ISO-PROCESSOR-REQUIREMENTS.md` and
|
|
90
|
+
`ISO-COMPLIANCE.md`.
|
|
@@ -65,7 +65,7 @@ Status values are:
|
|
|
65
65
|
| 9.1.3.1 | Integer division rounding function `rndI` | Truncation toward zero, matching the `integer_rounding_function=toward_zero` flag. | **defined** — BigInt division for `//` in `src/iso-arithmetic.js`. |
|
|
66
66
|
| 7.11.2.1 | Whether preparation-time `Convc` affects execution-time `Convc` | Yes: mappings created while Prolog text is prepared are retained and initialize the solver's execution-time conversion map. | **defined** — `src/parser.js`, `src/program.js`, `src/solver.js`. |
|
|
67
67
|
| 7.11.2.2 | Effect when `debug=on` | The flag is accepted and stored; it does not change goal semantics or enable a debugger. | **defined** — `src/solver.js`; no semantic branch depends on `debug`. |
|
|
68
|
-
| 7.11.2.3 | Default `max_arity` | `unbounded`: EyeProlog imposes no fixed semantic ceiling on compound-term arity. Practical host allocation exhaustion is a resource condition. This flag is distinct from any potential implementation-specific procedure-arity limit; EyeProlog currently declares no separate finite procedure limit. | **defined** — `src/iso-limits.js`, `src/solver.js`, `src/parser.js`, `src/iso.js`;
|
|
68
|
+
| 7.11.2.3 | Default `max_arity` | `unbounded`: EyeProlog imposes no fixed semantic ceiling on compound-term arity. Practical host allocation exhaustion is a resource condition. This flag is distinct from any potential implementation-specific procedure-arity limit; EyeProlog currently declares no separate finite procedure limit. | **defined** — `src/iso-limits.js`, `src/solver.js`, `src/parser.js`, `src/iso.js`; strict regression coverage. |
|
|
69
69
|
| 7.11.2.5 | Default `double_quotes` | `chars`. | **defined** — `src/solver.js`, parser flag state. |
|
|
70
70
|
| 7.12.1 | Second argument of `error/2` | The default context term is the atom `eyeprolog`. A few implementation-specific diagnostics may deliberately supply a more specific context term. | **defined** — `formalErrorTerm()` in `src/iso.js`. |
|
|
71
71
|
| 7.12.2(f) | Implementation-defined representation limits | Character and character-code operations are limited to Unicode scalar values; surrogates and values above U+10FFFF are representation errors. Arity/integer values are modeled as unbounded but may hit host/resource limits. Float input overflow uses the implementation-specific `max_float`/`min_float` representation names documented by the STC-oriented tests. | **defined** — parser/ISO numeric and character guards. |
|
|
@@ -83,7 +83,7 @@ Status values are:
|
|
|
83
83
|
| 9.4.5 | Bitwise complement | BigInt complement, i.e. `~N = -N-1`. | **defined** — `~a`. |
|
|
84
84
|
| Cor.2 9.4.6 | `xor/2` with negative operands | BigInt infinite-two's-complement semantics. | **defined** — `a ^ b`. |
|
|
85
85
|
|
|
86
|
-
###
|
|
86
|
+
### Floating underflow policy
|
|
87
87
|
|
|
88
88
|
Clause 9.1.4.2 permits the processor to choose `round(x)` or the exceptional
|
|
89
89
|
value `underflow` for a tiny non-zero result when an operation is governed by
|
|
@@ -7,27 +7,26 @@ extension boundary visible as its own auditable row.
|
|
|
7
7
|
|
|
8
8
|
The normative baseline is ISO/IEC 13211-1:1995 plus Technical Corrigenda 1-3.
|
|
9
9
|
`covered` means the requirement has an implementation/documentation decision
|
|
10
|
-
and executable evidence. `
|
|
11
|
-
|
|
12
|
-
an explicit pass/not-applicable decision. No row here is an independent
|
|
10
|
+
and executable evidence. `not applicable` records a standard variation that does
|
|
11
|
+
not apply to EyeProlog's selected processor profile. No row here is an independent
|
|
13
12
|
certification claim.
|
|
14
13
|
|
|
15
14
|
## 5.1 — conforming processor obligations
|
|
16
15
|
|
|
17
|
-
| Requirement | Status | Current evidence
|
|
16
|
+
| Requirement | Status | Current evidence |
|
|
18
17
|
| --- | --- | --- |
|
|
19
|
-
| 5.1(a) prepare conforming Prolog text |
|
|
20
|
-
| 5.1(b) execute conforming Prolog goals |
|
|
21
|
-
| 5.1(c) reject nonconforming text/read terms |
|
|
18
|
+
| 5.1(a) prepare conforming Prolog text | covered | the strict Clause 6 production/rejection gate, complete vendored WG17 syntax matrix, and closed 7.4 preparation/directive matrix cover text recognition and preparation |
|
|
19
|
+
| 5.1(b) execute conforming Prolog goals | covered | 7.1-7.12 semantics, all 8.2-8.17 built-in rows, and Clause 9 evaluable functors have explicit executable dispositions |
|
|
20
|
+
| 5.1(c) reject nonconforming text/read terms | covered | WG17 negative cases plus focused malformed token, list, operator, argument, escape, comment, and extension-syntax cases exercise rejection across the Clause 6 families |
|
|
22
21
|
| 5.1(d) specify permitted variations | covered | `ISO-IMPLEMENTATION-DEFINED.md` records the Part 1 implementation-defined choices and implementation-specific extension families |
|
|
23
22
|
| 5.1(e) offer a strictly conforming mode | covered | CLI `--iso-strict` and API `isoStrict: true`; registry/directive/operator/flag extension filtering plus disabled implementation-specific execution shortcuts |
|
|
24
23
|
|
|
25
24
|
## 5.2-5.4 — text, goals, and documentation
|
|
26
25
|
|
|
27
|
-
| Requirement | Status | Current evidence
|
|
26
|
+
| Requirement | Status | Current evidence |
|
|
28
27
|
| --- | --- | --- |
|
|
29
|
-
| 5.2 conforming and strictly conforming Prolog text boundary |
|
|
30
|
-
| 5.3 conforming and strictly conforming Prolog goal boundary |
|
|
28
|
+
| 5.2 conforming and strictly conforming Prolog text boundary | covered | strict parsing/preparation accepts the Part 1 + Corrigenda language under the documented PCS choices and rejects implementation-specific language facilities; normal-profile preservation is checked against every strict-accepted WG17 case |
|
|
29
|
+
| 5.3 conforming and strictly conforming Prolog goal boundary | covered | strict registry/control/evaluable filtering plus closed 7.1-7.12, 8.2-8.17, and Clause 9 audits define the goal boundary |
|
|
31
30
|
| 5.4 accompanying documentation for implementation-defined and implementation-specific features | covered | `ISO-IMPLEMENTATION-DEFINED.md`, *The Art of EyeProlog*, strict-boundary documentation, and release-facing conformance ledgers |
|
|
32
31
|
|
|
33
32
|
## 5.5 — extension boundaries
|
|
@@ -35,7 +34,7 @@ certification claim.
|
|
|
35
34
|
| Requirement | Status | EyeProlog decision / evidence |
|
|
36
35
|
| --- | --- | --- |
|
|
37
36
|
| 5.5 general extension rule | covered | normal mode may provide documented extensions; strict mode removes their Part 1 interpretation rather than changing implementation-defined choices |
|
|
38
|
-
| 5.5.1 syntax extensions preserve standard token/text meaning |
|
|
37
|
+
| 5.5.1 syntax extensions preserve standard token/text meaning | covered | WG17 syntax is a release gate and strict mode removes module/DCG/quad interpretation. Every vendored WG17 case that succeeds in the strict reader has the same observable outcome in normal mode; the focused Clause 6 gate separately covers each standard token/term family and malformed counterparts. |
|
|
39
38
|
| 5.5.2 additional predefined operators | covered | strict mode starts from the Part 1 predefined operator table; normal-profile extra operators are documented and filtered |
|
|
40
39
|
| 5.5.3 initial character-conversion mapping | covered | identity initial mapping; user changes are exercised through preparation/execution `char_conversion/2` behavior |
|
|
41
40
|
| 5.5.4 additional term types | covered | the normal JavaScript API's `stringTerm(Text)` is documented as an implementation-specific sixth term type, including disjointness, ordering, clause conversion, lack of source token syntax, expression behavior, and writing; strict program/goal entry rejects that type with `representation_error(term)` |
|
|
@@ -47,10 +46,26 @@ certification claim.
|
|
|
47
46
|
| 5.5.10 additional evaluable functors/types | covered | strict mode rejects the normal-profile evaluable `e` extension while retaining the full Part 1 + Corrigenda arithmetic set. `ISO-EVALUABLE-FUNCTOR-MATRIX.md` now closes the Clause 9 semantic/error audit and pins the 9.1.4.2 `resultF`, mixed-type `max/2`/`min/2`, and signed bitwise/shift choices. Post-N289 STC #75 remains separate from the published baseline |
|
|
48
47
|
| 5.5.11 reserved atoms | not applicable | EyeProlog declares no reserved-atom extension; extension names remain ordinary atoms unless used in a documented syntactic/predicate/directive role |
|
|
49
48
|
|
|
49
|
+
## Clause 6 syntax-preservation closure
|
|
50
|
+
|
|
51
|
+
The production audit is kept here rather than in another status file. The strict
|
|
52
|
+
regression gate covers the following families directly, while the complete WG17
|
|
53
|
+
matrix supplies the detailed independent syntax cases.
|
|
54
|
+
|
|
55
|
+
| Clause family | Disposition | Executable evidence |
|
|
56
|
+
| --- | --- | --- |
|
|
57
|
+
| 6.2 Prolog text/data boundary | covered | complete-term parsing, end-token/boundary rejection, preparation tests |
|
|
58
|
+
| 6.3.1-6.3.3 atomic, variable, functional compound terms | covered | atoms, integers/floats, negative numbers, variables, functional arguments |
|
|
59
|
+
| 6.3.4 operator notation | covered | precedence/associativity/operator-table tests plus invalid `xfx` chaining |
|
|
60
|
+
| 6.3.5-6.3.7 list, curly and double-quoted notation | covered | list tails, curly terms, `double_quotes` behavior and read/write round trips |
|
|
61
|
+
| 6.4.1-6.4.8 tokens | covered | layout/comments, quoted escapes, names, integer bases/character codes, floats, double-quoted tokens, solo/meta tokens, malformed counterparts |
|
|
62
|
+
| 6.5 processor characters | covered | documented Unicode-scalar PCS and lexical classes, invalid-scalar representation errors |
|
|
63
|
+
| 6.6 collating sequence | covered | Unicode scalar value collation, atom-order regressions |
|
|
64
|
+
| 5.5.1 preservation under extensions | covered | every WG17 case accepted in strict mode has the same observable result in normal mode |
|
|
65
|
+
|
|
50
66
|
## Exit-use rule
|
|
51
67
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
being mistaken for a completed processor-requirement audit.
|
|
68
|
+
All top-level rows now have covered, not-applicable, or documented
|
|
69
|
+
implementation-defined outcomes. `ISO-COMPLIANCE.md` records the same closure in
|
|
70
|
+
its embedded release-exit checklist. The green suite is evidence for those
|
|
71
|
+
dispositions; it is not presented as independent certification.
|