eyeprolog 1.5.52 → 1.5.53
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 +1 -1
- package/package.json +1 -1
- package/test/conformance/ISO-BUILTIN-MODE-ERROR-MATRIX.md +11 -11
- package/test/conformance/ISO-COMPLIANCE.md +28 -28
- package/test/conformance/ISO-CORRIGENDA-MATRIX.md +8 -8
- package/test/conformance/ISO-EVALUABLE-FUNCTOR-MATRIX.md +2 -2
- package/test/conformance/ISO-IMPLEMENTATION-DEFINED.md +2 -2
- package/test/conformance/ISO-PART2-AMENDMENT-2013.md +1 -1
- package/test/conformance/ISO-PART2-PART3-SCOPE.md +1 -1
- package/test/conformance/ISO-PROCESSOR-REQUIREMENTS.md +7 -7
- package/test/conformance/ISO-PROLOG-TEXT-EXECUTION-MATRIX.md +5 -5
- package/test/conformance/ISO-TERM-SEMANTICS-MATRIX.md +2 -2
- package/test/conformance/NEUMERKEL-LATEST.md +1 -1
- package/test/conformance/NEUMERKEL-LIVE.md +2 -2
- package/test/conformance/README.md +4 -4
- package/test/conformance/STC-DRAFT-STATUS.md +2 -2
- package/test/neumerkel.mjs +1 -1
- package/test/run-regression.mjs +6 -6
- package/the-art-of-eyeprolog.md +3 -3
- package/why-eyeprolog.md +2 -2
package/README.md
CHANGED
|
@@ -70,7 +70,7 @@ printf 'human(socrates).\nmortal(X) :- human(X).\n' |
|
|
|
70
70
|
- [Introduction to EyeProlog](https://eyereasoner.github.io/eyeprolog/examples/deck/introduction-to-eyeprolog) — short presentation deck for first-time audiences
|
|
71
71
|
- [Symbiotic Knowledge Graphs](https://eyereasoner.github.io/eyeprolog/examples/deck/symbiotic-knowledge-graphs) — RDF ↔ Prolog heatwave-response demo for human/AI/KG co-evolution
|
|
72
72
|
- [rdf-prolog-roundtrip](https://github.com/eyereasoner/rdf-prolog-roundtrip) — standalone RDF 1.2 ↔ ISO Prolog bridge used by the RDF examples
|
|
73
|
-
- [ISO conformance
|
|
73
|
+
- [ISO conformance review](test/conformance/ISO-COMPLIANCE.md) — supported Part 1 profile
|
|
74
74
|
- [Latest Neumerkel conformity](test/conformance/NEUMERKEL-LATEST.md) — tracked result from the current live upstream inventory
|
|
75
75
|
- [Conformance report](conformance-report.md) — generated executable conformance status, local corpus summary, and known deviations
|
|
76
76
|
- [Acknowledgements](ACKNOWLEDGEMENTS.md) — funding, standards consulted, and credits for vendored conformance corpora
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# ISO Part 1 built-in mode/error
|
|
1
|
+
# ISO Part 1 built-in mode/error review
|
|
2
2
|
|
|
3
|
-
This matrix turns the broad built-in
|
|
3
|
+
This matrix turns the broad built-in review in `ISO-COMPLIANCE.md` into smaller,
|
|
4
4
|
release-gated units. The normative baseline is ISO/IEC 13211-1:1995 plus
|
|
5
5
|
Technical Corrigenda 1:2007, 2:2012, and 3:2017.
|
|
6
6
|
|
|
@@ -15,7 +15,7 @@ does not infer a universal priority merely from the textual order of an error
|
|
|
15
15
|
table.
|
|
16
16
|
|
|
17
17
|
The table is intentionally explicit about what has and has not been closed.
|
|
18
|
-
The current
|
|
18
|
+
The current review now covers the complete 8.2-8.17 built-in family at the
|
|
19
19
|
level of prescribed modes, success/failure behavior, individual error
|
|
20
20
|
conditions, and explicit not-applicable processor branches. Closely related
|
|
21
21
|
conditions may share a row only when that row names every condition and the
|
|
@@ -30,9 +30,9 @@ existing file-based cases remain additional regression evidence.
|
|
|
30
30
|
| Clause / predicate | Prescribed row | Status | Executable evidence |
|
|
31
31
|
| --- | --- | --- | --- |
|
|
32
32
|
| 8.2.1 `(=)/2` | `?term, ?term`; succeeds/fails according to Prolog unification; no prescribed errors | covered | existing unification corpus and `term_modes_and_ordering` |
|
|
33
|
-
| 8.2.2 `unify_with_occurs_check/2` | `?term, ?term`; succeeds/fails and never reports a prescribed error | covered | strict row-
|
|
33
|
+
| 8.2.2 `unify_with_occurs_check/2` | `?term, ?term`; succeeds/fails and never reports a prescribed error | covered | strict row-review success assertion plus unification corpus |
|
|
34
34
|
| 8.2.3 `(\=)/2` | `@term, @term`; succeeds/fails for the defined NSTO cases; no prescribed errors | covered | unification/control corpus |
|
|
35
|
-
| Cor.2 8.2.4 `subsumes_term/2` | `@term, @term`; succeeds/fails without binding its arguments; no prescribed errors | covered | strict row-
|
|
35
|
+
| Cor.2 8.2.4 `subsumes_term/2` | `@term, @term`; succeeds/fails without binding its arguments; no prescribed errors | covered | strict row-review success assertion and Corrigendum 2 term-predicate cases |
|
|
36
36
|
|
|
37
37
|
## 8.3 — type testing
|
|
38
38
|
|
|
@@ -147,7 +147,7 @@ The Corrigendum 2 additions have the same shape.
|
|
|
147
147
|
| 8.8.1 error (c) | private procedure -> access/private-procedure permission error | covered | strict static/private tests |
|
|
148
148
|
| 8.8.1 error (d) | fixed non-callable Body -> callable type error | covered | strict dynamic `clause(p(_),4)` coverage |
|
|
149
149
|
| 8.8.1 clause-to-term conversion | source variable goals become `call/1` while preserving sharing with the head | covered | strict `foo(X):-X` -> `clause(foo(C),call(C))`; nested `;/2` and `->/2` regressions |
|
|
150
|
-
| 8.8.2 `current_predicate/1` | enumerate/query user-defined predicate indicators, including empty declared procedures | covered | strict row
|
|
150
|
+
| 8.8.2 `current_predicate/1` | enumerate/query user-defined predicate indicators, including empty declared procedures | covered | strict row review and empty-procedure lifetime tests |
|
|
151
151
|
| 8.8.2 error (a) | fixed non-predicate-indicator -> predicate-indicator type error | covered | strict `current_predicate(4)` |
|
|
152
152
|
|
|
153
153
|
## 8.9 — database modification
|
|
@@ -301,7 +301,7 @@ The Corrigendum 2 additions have the same shape.
|
|
|
301
301
|
|
|
302
302
|
| Clause / predicate | Prescribed row | Status | Executable evidence |
|
|
303
303
|
| --- | --- | --- | --- |
|
|
304
|
-
| 8.16.1 `atom_length/2` | atom -> length / check supplied length | covered | `logtalk_atom_length`, strict row
|
|
304
|
+
| 8.16.1 `atom_length/2` | atom -> length / check supplied length | covered | `logtalk_atom_length`, strict row review |
|
|
305
305
|
| 8.16.1 error: atom variable | required atom unavailable -> instantiation error | covered | strict `atom_length(X,4)` |
|
|
306
306
|
| 8.16.1 error: atom type | first argument non-atom -> atom type error | covered | strict `atom_length(1.2,4)` |
|
|
307
307
|
| 8.16.1 error: length type | non-integer length -> integer type error | covered | strict `atom_length(atom,'4')` |
|
|
@@ -356,9 +356,9 @@ built-in matrix does not have a gap at 8.17.
|
|
|
356
356
|
|
|
357
357
|
| Clause / predicate | Prescribed row | Status | Executable evidence |
|
|
358
358
|
| --- | --- | --- | --- |
|
|
359
|
-
| 8.17.1 `set_prolog_flag/2` | set a supported, changeable flag value | covered | strict flag
|
|
359
|
+
| 8.17.1 `set_prolog_flag/2` | set a supported, changeable flag value | covered | strict flag review |
|
|
360
360
|
| 8.17.1 errors | variable/name type/domain, value type/domain, and non-changeable-flag permission distinctions | covered | `covers the Part 1 flag defaults, value domains, and changeability` plus file-based flag errors |
|
|
361
|
-
| 8.17.2 `current_prolog_flag/2` | enumerate/query current standard flags | covered | strict complete flag
|
|
361
|
+
| 8.17.2 `current_prolog_flag/2` | enumerate/query current standard flags | covered | strict complete flag review |
|
|
362
362
|
| 8.17.2 flag-name type error | fixed non-atom name -> atom type error | covered | strict `current_prolog_flag(1,_)` |
|
|
363
363
|
| 8.17.2 unknown-flag domain error | fixed unsupported flag name -> Prolog-flag domain error | covered | strict `current_prolog_flag(no_such_iso_flag,_)` |
|
|
364
364
|
| 8.17.3 `halt/0` | terminate with implementation-defined successful host status | covered | `halt` conformance case / host runner tests |
|
|
@@ -368,10 +368,10 @@ built-in matrix does not have a gap at 8.17.
|
|
|
368
368
|
|
|
369
369
|
## Closure note
|
|
370
370
|
|
|
371
|
-
The built-in **8.2-8.17 row
|
|
371
|
+
The built-in **8.2-8.17 row review is complete** at the level tracked by this
|
|
372
372
|
file: prescribed modes, success/failure behavior, individual error conditions,
|
|
373
373
|
and conditional/not-applicable processor branches all have explicit outcomes.
|
|
374
|
-
“Row
|
|
374
|
+
“Row review” means condition-by-condition accounting; it does not promise one
|
|
375
375
|
Markdown table row per condition when a grouped row enumerates them all.
|
|
376
376
|
ISO 7.12 simultaneous-error selection remains an implementation-dependent
|
|
377
377
|
processor choice unless more specific normative text constrains it.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ISO/IEC 13211-1 compliance ledger
|
|
2
2
|
|
|
3
|
-
This ledger is the release-facing
|
|
3
|
+
This ledger is the release-facing review and high-level coverage map for
|
|
4
4
|
EyeProlog's ISO/IEC 13211-1 core. The normative baseline is ISO/IEC 13211-1:1995
|
|
5
5
|
together with Technical Corrigenda 1:2007, 2:2012, and 3:2017. Detailed
|
|
6
6
|
row-level evidence lives only where it adds information: the built-in, processor,
|
|
@@ -11,13 +11,13 @@ published-Corrigenda, WG17-syntax, and STC draft ledgers in this directory. The
|
|
|
11
11
|
The ledger deliberately does **not** claim independent certification. A row
|
|
12
12
|
marked `covered` means EyeProlog has implementation and executable tests for
|
|
13
13
|
that family, an explicit disposition for every requirement accounted for by
|
|
14
|
-
the linked
|
|
15
|
-
|
|
14
|
+
the linked review rows, and no known open defect in the listed behavior. An
|
|
15
|
+
review row may group closely related modes or error conditions, but it must name
|
|
16
16
|
each grouped condition and its evidence; `covered` does not imply one Markdown
|
|
17
17
|
row per occurrence of the word `shall`. A row marked
|
|
18
|
-
`
|
|
18
|
+
`review` means the family is implemented and tested, but the project has not yet
|
|
19
19
|
mapped every normative `shall`, option combination, prescribed error, and
|
|
20
|
-
relevant implementation-dependent overlap choice to an explicit
|
|
20
|
+
relevant implementation-dependent overlap choice to an explicit review outcome.
|
|
21
21
|
|
|
22
22
|
## Processor compliance requirements
|
|
23
23
|
|
|
@@ -26,7 +26,7 @@ relevant implementation-dependent overlap choice to an explicit audit outcome.
|
|
|
26
26
|
| 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. |
|
|
27
27
|
| 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. |
|
|
28
28
|
| 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. |
|
|
29
|
-
| 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 `
|
|
29
|
+
| 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 `gap` category for future discoveries; no current release-facing row depends on one. |
|
|
30
30
|
| 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, reject explicit tabling and other normal-profile extensions, and reject the normal-profile host `stringTerm(Text)` term type at strict program/goal entry. |
|
|
31
31
|
| 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. |
|
|
32
32
|
| 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. |
|
|
@@ -40,21 +40,21 @@ relevant implementation-dependent overlap choice to an explicit audit outcome.
|
|
|
40
40
|
| 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. |
|
|
41
41
|
| 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. |
|
|
42
42
|
| 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. The normal-profile `table` declaration, `tnot/1`, and recursive numeric shortcuts remain outside the strict profile. |
|
|
43
|
-
| 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 at `call/1` entry; the regression suite pins the resulting cut scope when an initially unbound variable goal later becomes `!`. The 8.15 built-in additions remain independently row-
|
|
44
|
-
| 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
|
|
45
|
-
| 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. Term-output spelling is also checked lexically where ISO distinguishes token forms: Corrigendum 2 bar operators are written with bare `|`, ordinary atom/functor `|` remains quoted, and the semicolon name token is emitted bare by canonical output. The complete 8.11-8.14 built-in mode/error family remains row-
|
|
43
|
+
| 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 at `call/1` entry; the regression suite pins the resulting cut scope when an initially unbound variable goal later becomes `!`. The 8.15 built-in additions remain independently row-reviewed. |
|
|
44
|
+
| 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 review 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. |
|
|
45
|
+
| 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. Term-output spelling is also checked lexically where ISO distinguishes token forms: Corrigendum 2 bar operators are written with bare `|`, ordinary atom/functor `|` remains quoted, and the semicolon name token is emitted bare by canonical output. The complete 8.11-8.14 built-in mode/error family remains row-reviewed 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). |
|
|
46
46
|
| 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. |
|
|
47
47
|
| 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. |
|
|
48
|
-
| 8.2-8.17 — built-in predicates | covered | [ISO-BUILTIN-MODE-ERROR-MATRIX.md](ISO-BUILTIN-MODE-ERROR-MATRIX.md) accounts for the complete Part 1 + Corrigenda built-in family across prescribed modes, success/failure behavior, individual error conditions, and conditional/not-applicable branches. Closely related conditions may share a row when every condition and its executable evidence are named. The
|
|
48
|
+
| 8.2-8.17 — built-in predicates | covered | [ISO-BUILTIN-MODE-ERROR-MATRIX.md](ISO-BUILTIN-MODE-ERROR-MATRIX.md) accounts for the complete Part 1 + Corrigenda built-in family across prescribed modes, success/failure behavior, individual error conditions, and conditional/not-applicable branches. Closely related conditions may share a row when every condition and its executable evidence are named. The review 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. |
|
|
49
49
|
| 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. |
|
|
50
50
|
| Corrigendum 1 | covered | [ISO-CORRIGENDA-MATRIX.md](ISO-CORRIGENDA-MATRIX.md) dispositions every amendment cluster, including the square-root boundary, double-quoted operator atoms, typed expression errors, clause/operator enumeration, and atomic-conversion corrections; editorial items and the later-superseded set-order example are identified explicitly. |
|
|
51
51
|
| Corrigendum 2 | covered | [ISO-CORRIGENDA-MATRIX.md](ISO-CORRIGENDA-MATRIX.md) tracks the bar/operator changes, new predicates and evaluable functors, catch and uninstantiation corrections, atomic-conversion errors, and every other amendment cluster to executable evidence or an explicit editorial disposition. |
|
|
52
52
|
| Corrigendum 3 | covered | [ISO-CORRIGENDA-MATRIX.md](ISO-CORRIGENDA-MATRIX.md) tracks option-extension/error rules, final layout, term-to-body conversion, metadata traversal, writing rules, stream/built-in corrections, and negative integer powers; editorial changes are dispositioned separately. |
|
|
53
53
|
|
|
54
|
-
## Conformance corrections and
|
|
54
|
+
## Conformance corrections and review closure
|
|
55
55
|
|
|
56
|
-
The
|
|
57
|
-
concrete mismatches that are now part of the closed Part 1
|
|
56
|
+
The review against the licensed Part 1 text and Corrigenda closed two
|
|
57
|
+
concrete mismatches that are now part of the closed Part 1 review:
|
|
58
58
|
|
|
59
59
|
- `bounded=false` no longer exposes implementation-specific `unbounded` values
|
|
60
60
|
for `max_integer` or `min_integer`; the corresponding
|
|
@@ -63,7 +63,7 @@ concrete mismatches that are now part of the closed Part 1 audit:
|
|
|
63
63
|
when the `char_conversion` flag is `on`, leaves quoted characters unchanged,
|
|
64
64
|
and feeds the same mapping into execution-time term input.
|
|
65
65
|
|
|
66
|
-
A follow-on
|
|
66
|
+
A follow-on review made the processor-character-set/collation choices explicit.
|
|
67
67
|
A follow-up processor-character-set review corrected an over-strict interpretation: because PCS membership
|
|
68
68
|
and extended-character classification are implementation defined by Part 1,
|
|
69
69
|
`--iso-strict` must not replace EyeProlog's ordinary processor choice. Both
|
|
@@ -75,7 +75,7 @@ without changing these implementation-defined character choices. The complete
|
|
|
75
75
|
WG17 syntax matrix remains a release gate.
|
|
76
76
|
|
|
77
77
|
|
|
78
|
-
The subsequent arity
|
|
78
|
+
The subsequent arity review originally selected a finite `max_arity=65535`, but
|
|
79
79
|
the post-Corrigendum STC arity review exposed that as the wrong
|
|
80
80
|
abstraction: Part 1 `max_arity` is the maximum arity of **compound terms**, not
|
|
81
81
|
a procedure-arity limit. EyeProlog now again selects `max_arity=unbounded` and
|
|
@@ -88,10 +88,10 @@ database update errors, and Corrigendum 3 variable metadata traversal/write
|
|
|
88
88
|
naming.
|
|
89
89
|
|
|
90
90
|
The public WG17 `number_chars/2` comparison used in preparation of Corrigendum
|
|
91
|
-
2 has additionally been checked during the
|
|
91
|
+
2 has additionally been checked during the review. It remains supporting review
|
|
92
92
|
evidence rather than a duplicated vendored corpus or release criterion.
|
|
93
93
|
|
|
94
|
-
The flag and term-I/O
|
|
94
|
+
The flag and term-I/O review closes the Part 1 flag family and tightens the 8.14
|
|
95
95
|
term-I/O/operator error rules. The strict flag registry now distinguishes a
|
|
96
96
|
standard value that is valid but not selectable from a value outside the
|
|
97
97
|
standard domain: attempts to change fixed `bounded` or
|
|
@@ -105,7 +105,7 @@ the Part 1 plus Corrigendum 3 option surface; the normal-profile
|
|
|
105
105
|
implementation-specific EyeProlog extensions.
|
|
106
106
|
|
|
107
107
|
|
|
108
|
-
The preparation, stream, conversion, sorting, and arithmetic
|
|
108
|
+
The preparation, stream, conversion, sorting, and arithmetic review expands the coverage into Prolog-text,
|
|
109
109
|
stream, atomic-conversion, sorting, and arithmetic edge cases. Strict
|
|
110
110
|
preparation now enforces the Part 1 declaration constraints for `dynamic/1`,
|
|
111
111
|
`multifile/1`, and `discontiguous/1`, including cross-text multifile use and
|
|
@@ -115,7 +115,7 @@ requirements, and tightens creation, truncation/append, repositioning, flush,
|
|
|
115
115
|
EOF, close, and current-stream behavior. Corrigendum 2 `keysort/2` variable and
|
|
116
116
|
non-pair errors are corrected. Strict arithmetic no longer exposes the
|
|
117
117
|
EyeProlog-only evaluable atom `e`, while the Corrigendum arithmetic additions
|
|
118
|
-
remain available. These corrections are retained as regression evidence inside the closed shall-by-shall/error-condition
|
|
118
|
+
remain available. These corrections are retained as regression evidence inside the closed shall-by-shall/error-condition review.
|
|
119
119
|
|
|
120
120
|
The next Corrigendum 2 pass closed the prescribed `call/2..8` max-arity
|
|
121
121
|
branch for processors with a finite `max_arity`, and corrected reverse
|
|
@@ -150,7 +150,7 @@ operation, so an integer outside the selected finite binary64 range reports
|
|
|
150
150
|
result. The explicit underflow clauses for `exp/1`, Part 1 `**/2`, and
|
|
151
151
|
Corrigendum 2 `^/2` are enforced even though EyeProlog retains the
|
|
152
152
|
implementation-defined `round(x)` choice for generic `resultF` arithmetic. The
|
|
153
|
-
power
|
|
153
|
+
power review also preserves the specified negative-base and zero/negative
|
|
154
154
|
exception conditions before any later I->F overflow, including Corrigendum 3's
|
|
155
155
|
correction to the `**/2` operand wording and Corrigendum 2's distinct rule that
|
|
156
156
|
`^/2` may accept an integer-valued float exponent.
|
|
@@ -170,8 +170,8 @@ The row-level matrices make the exit criteria concrete rather than leaving confo
|
|
|
170
170
|
[ISO-BUILTIN-MODE-ERROR-MATRIX.md](ISO-BUILTIN-MODE-ERROR-MATRIX.md) now records
|
|
171
171
|
each prescribed mode/error row for the 8.2-8.5 and 8.15-8.17 slices, and
|
|
172
172
|
[ISO-PROCESSOR-REQUIREMENTS.md](ISO-PROCESSOR-REQUIREMENTS.md) decomposes the
|
|
173
|
-
Clause 5 obligations into covered,
|
|
174
|
-
doing that mapping, the 7.6.2 term-to-clause conversion
|
|
173
|
+
Clause 5 obligations into covered, review, and not-applicable decisions. While
|
|
174
|
+
doing that mapping, the 7.6.2 term-to-clause conversion review exposed a runtime
|
|
175
175
|
assertion defect: variables and invalid terms nested under `;/2` or `->/2` were
|
|
176
176
|
not being recursively converted. `asserta/1` and `assertz/1` now convert all
|
|
177
177
|
three standardized binary control forms `,/2`, `;/2`, and `->/2` recursively,
|
|
@@ -189,7 +189,7 @@ a sixth term type in the Part 1 strict execution domain.
|
|
|
189
189
|
|
|
190
190
|
A row-level 8.6-8.10 pass then turns arithmetic predicates, clause/database
|
|
191
191
|
operations, and all-solutions predicates into explicit mode/error-condition
|
|
192
|
-
entries. During that
|
|
192
|
+
entries. During that review, strict source preparation exposed a 7.6.2 defect:
|
|
193
193
|
a clause such as `foo(X) :- X.` was executed as a variable goal but was not
|
|
194
194
|
stored in the converted `call(X)` form, so `clause(foo(C),call(C))` and the
|
|
195
195
|
corresponding `retract/1` pattern lost the required head/body variable identity.
|
|
@@ -199,7 +199,7 @@ also records the 7.12 rule for simultaneous errors, so deterministic overlap
|
|
|
199
199
|
tests are treated as processor choices unless more specific normative text
|
|
200
200
|
constrains them.
|
|
201
201
|
|
|
202
|
-
The subsequent 8.11-8.14 pass completes the built-in row
|
|
202
|
+
The subsequent 8.11-8.14 pass completes the built-in row review. Stream
|
|
203
203
|
selection/control, character/code input and output, byte I/O, term I/O,
|
|
204
204
|
operators, and character conversion now each have explicit success/mode and
|
|
205
205
|
individual-error outcomes in `ISO-BUILTIN-MODE-ERROR-MATRIX.md`. During this
|
|
@@ -211,7 +211,7 @@ still a `domain_error(stream, ...)`. The higher-level Clause 6, 7.10, and 7.12 g
|
|
|
211
211
|
## Post-Corrigendum STC cross-check
|
|
212
212
|
|
|
213
213
|
The public WG17 STC draft is tracked as useful defect-discovery material, but it
|
|
214
|
-
is not silently treated as a fourth published Corrigendum. The current
|
|
214
|
+
is not silently treated as a fourth published Corrigendum. The current review
|
|
215
215
|
confirms EyeProlog already has the behavior implicated by the substantive STC
|
|
216
216
|
items on negative-number layout/operator syntax, arithmetic instantiation
|
|
217
217
|
precedence, EOF actions/end tokens, character/code/byte output error overlap,
|
|
@@ -297,9 +297,9 @@ conformance outputs are never auto-accepted.
|
|
|
297
297
|
|
|
298
298
|
## Exit criteria for a full conformance claim
|
|
299
299
|
|
|
300
|
-
The Part 1
|
|
300
|
+
The Part 1 review is closed by explicit dispositions, not by a test-count threshold.
|
|
301
301
|
The table below records the closure criteria used by the project. A `covered`
|
|
302
|
-
status is an implementation/
|
|
302
|
+
status is an implementation/review result, not an independent certification. Public
|
|
303
303
|
post-N289 STC drafts remain review input until standardized.
|
|
304
304
|
|
|
305
305
|
| Criterion | Status | Evidence |
|
|
@@ -315,7 +315,7 @@ post-N289 STC drafts remain review input until standardized.
|
|
|
315
315
|
| 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 |
|
|
316
316
|
| Latest Neumerkel conformity is a live release gate | covered | `npm test` fetches and executes the seven current TU Wien conformity sources with dynamic inventories; the vendored WG17 matrix remains an offline reviewed-outcome regression layer |
|
|
317
317
|
| 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` |
|
|
318
|
-
| No unexplained deviation remains in the release-facing ledger | covered | the release-facing ledger contains no remaining `
|
|
318
|
+
| No unexplained deviation remains in the release-facing ledger | covered | the release-facing ledger contains no remaining `review` rows; documented variation points are implementation-defined/specific or draft-only rather than unexplained deviations. |
|
|
319
319
|
|
|
320
320
|
The specialized row matrices are evidence for this ledger, not separate public
|
|
321
321
|
status documents. *The Art of EyeProlog* remains the implementation reference.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ISO/IEC 13211-1 published Corrigenda
|
|
1
|
+
# ISO/IEC 13211-1 published Corrigenda review
|
|
2
2
|
|
|
3
3
|
This matrix records every amendment cluster in Technical Corrigenda 1:2007,
|
|
4
4
|
2:2012, and 3:2017 against EyeProlog's published Part 1 baseline. It separates
|
|
@@ -7,24 +7,24 @@ from text superseded by a later Corrigendum. A `covered` behavior row names
|
|
|
7
7
|
executable evidence; an `editorial` row records that no processor behavior was
|
|
8
8
|
changed; a `superseded` row points to the later published amendment.
|
|
9
9
|
|
|
10
|
-
The stable
|
|
10
|
+
The stable review IDs are checked by the documentation regression suite. They
|
|
11
11
|
make omission detectable without reproducing the licensed standard text here.
|
|
12
12
|
|
|
13
13
|
## Technical Corrigendum 1:2007
|
|
14
14
|
|
|
15
|
-
|
|
|
15
|
+
| Review ID | Clauses / amendment cluster | Disposition | EyeProlog evidence |
|
|
16
16
|
| --- | --- | --- | --- |
|
|
17
17
|
| C1-01 | 3.106, 3.108, 3.125, 3.148 terminology and typography | editorial | Definitions/source typography; no processor behavior changes. |
|
|
18
18
|
| C1-02 | 4.1.3.5 non-negative square-root axiom | covered | Strict test `pins behavior-changing Technical Corrigendum 1 corrections` checks `sqrt(0)`. |
|
|
19
19
|
| C1-03 | 6.3.7 priority of a double-quoted atom that names an operator | covered | Same strict test plus `iso/corrigendum1_double_quote_operator`. |
|
|
20
20
|
| C1-04 | 7.2.5 compound-term ordering wording | editorial | The corrected condition is represented by the Clause 7.2 standard-order tests. |
|
|
21
|
-
| C1-05 | 7.8.5.4, table 35, and 7.8.8.4 control-model/example corrections | editorial | Corrected notation; conjunction and if-then-else behavior is independently covered by the strict 7.8
|
|
21
|
+
| C1-05 | 7.8.5.4, table 35, and 7.8.8.4 control-model/example corrections | editorial | Corrected notation; conjunction and if-then-else behavior is independently covered by the strict 7.8 review. |
|
|
22
22
|
| C1-06 | 7.9.2 integer- and float-operand type errors | covered | Strict Clause 7.9 tests exercise integer-only and float-only templates. |
|
|
23
23
|
| C1-07 | 7.12.2 representation-error metavariable capitalization | editorial | Error-term representation is covered by the 7.12 envelope; this amendment changes notation only. |
|
|
24
24
|
| C1-08 | 8.8.1.1 selected `clause/2` result is unified with head/body | covered | Strict test `pins behavior-changing Technical Corrigendum 1 corrections`. |
|
|
25
25
|
| C1-09 | 8.9.4.1 `abolish/1` note wording | editorial | Singular/plural note correction only. |
|
|
26
26
|
| C1-10 | 8.10.3.4 set-order example | superseded | Corrigendum 3 explicitly restores the original example; current behavior follows Corrigendum 3. |
|
|
27
|
-
| C1-11 | 8.13.3.4 `put_byte/1-2` example values | editorial | Examples corrected; byte-output semantics are covered by the strict 8.13
|
|
27
|
+
| C1-11 | 8.13.3.4 `put_byte/1-2` example values | editorial | Examples corrected; byte-output semantics are covered by the strict 8.13 review. |
|
|
28
28
|
| C1-12 | 8.14.1.4 input-stream names and post-syntax-error example state | editorial | Examples corrected; read-stream behavior is covered by strict term-I/O tests. |
|
|
29
29
|
| C1-13 | 8.14.4.1 selected `current_op/3` result is unified with its arguments | covered | Strict test `pins behavior-changing Technical Corrigendum 1 corrections`. |
|
|
30
30
|
| C1-14 | 8.16.4 `atom_chars/2` accepts a matching supplied list prefix | covered | Strict test `pins behavior-changing Technical Corrigendum 1 corrections`. |
|
|
@@ -35,7 +35,7 @@ make omission detectable without reproducing the licensed standard text here.
|
|
|
35
35
|
|
|
36
36
|
## Technical Corrigendum 2:2012
|
|
37
37
|
|
|
38
|
-
|
|
|
38
|
+
| Review ID | Clauses / amendment cluster | Disposition | EyeProlog evidence |
|
|
39
39
|
| --- | --- | --- | --- |
|
|
40
40
|
| C2-01 | 6.3.4, 6.4, 6.5 bar token/operator rules and protected `[]`/`{}` operators | covered | WG17 lexical output cases, `corrigenda_bar_operator`, and strict `op/3` tests. |
|
|
41
41
|
| C2-02 | 6.3.4.4 predefined unary plus and `div` operators | covered | Strict predefined-operator and arithmetic tests. |
|
|
@@ -53,7 +53,7 @@ make omission detectable without reproducing the licensed standard text here.
|
|
|
53
53
|
| C2-14 | 8.9.3 static `retract/1` uses modify permission | covered | Strict database predicate error tests. |
|
|
54
54
|
| C2-15 | 8.9.5 `retractall/1` | covered | Strict lifetime/error tests and `corrigenda_retractall`. |
|
|
55
55
|
| C2-16 | 8.11.5 non-variable `open/4` stream result | covered | Strict uninstantiation-error test. |
|
|
56
|
-
| C2-17 | 8.14.3 protected operator priority/specifier combinations | covered | Strict `op/3` row
|
|
56
|
+
| C2-17 | 8.14.3 protected operator priority/specifier combinations | covered | Strict `op/3` row review and bar-operator cases. |
|
|
57
57
|
| C2-18 | 8.15.4 `call/2..8` and implementation-dependent higher arities | covered | Strict closure expansion, error, and selected ceiling tests. |
|
|
58
58
|
| C2-19 | 8.15.5 `false/0` | covered | Strict registry, execution, and static-procedure protection tests. |
|
|
59
59
|
| C2-20 | 8.16.4-8.16.8 atomic/number conversion partial-list errors | covered | Individual strict mode/error assertions for all four predicates. |
|
|
@@ -63,7 +63,7 @@ make omission detectable without reproducing the licensed standard text here.
|
|
|
63
63
|
|
|
64
64
|
## Technical Corrigendum 3:2017
|
|
65
65
|
|
|
66
|
-
|
|
|
66
|
+
| Review ID | Clauses / amendment cluster | Disposition | EyeProlog evidence |
|
|
67
67
|
| --- | --- | --- | --- |
|
|
68
68
|
| C3-01 | 5.5.12 implementation-specific options and their error classification | covered | Strict option surfaces reject normal-only options and exercise variable/domain distinctions. |
|
|
69
69
|
| C3-02 | 6.2.1 optional final layout text | covered | Strict test `pins behavior-changing Technical Corrigendum 3 corrections`. |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# ISO Part 1 expression/evaluable-functor
|
|
1
|
+
# ISO Part 1 expression/evaluable-functor coverage matrix
|
|
2
2
|
|
|
3
|
-
This file is the row-level
|
|
3
|
+
This file is the row-level review for Part 1 Clause 7.9 and Clause 9, including
|
|
4
4
|
the arithmetic additions and corrections in Technical Corrigenda 1-3. It is
|
|
5
5
|
paired with the strict regression named `closes the ISO 7.9 and Clause 9
|
|
6
6
|
evaluable-functor rows`.
|
|
@@ -7,7 +7,7 @@ pages at complang.tuwien.ac.at are useful review input, but draft proposals are
|
|
|
7
7
|
not silently treated as normative changes to that licensed baseline.
|
|
8
8
|
|
|
9
9
|
[*The Art of EyeProlog*](../../the-art-of-eyeprolog.md) remains the single
|
|
10
|
-
implementation reference. This file is an
|
|
10
|
+
implementation reference. This file is an review index: it identifies each
|
|
11
11
|
explicitly implementation-defined decision in Part 1, states the EyeProlog
|
|
12
12
|
choice, and points to the implementation boundary that realizes it. Repeated
|
|
13
13
|
references to the same decision are folded into one row. Requirements that the
|
|
@@ -19,7 +19,7 @@ Status values are:
|
|
|
19
19
|
- **defined** — the current behavior is implemented and stated here;
|
|
20
20
|
- **not applicable** — the standard decision is conditional and the condition
|
|
21
21
|
is false for EyeProlog's selected profile;
|
|
22
|
-
- **
|
|
22
|
+
- **gap** — retained for any future implementation-defined choice whose
|
|
23
23
|
code/documentation boundary is still unresolved. Open *normative* shall-by-
|
|
24
24
|
shall work is tracked separately in `ISO-COMPLIANCE.md`.
|
|
25
25
|
|
|
@@ -4,7 +4,7 @@ This ledger maps EyeProlog's normal module profile to the requirements clarified
|
|
|
4
4
|
by the attached 2013 ISO/IEC 13211-2 amendment draft (WG17 N251). It is narrowly
|
|
5
5
|
scoped to that amendment. It does **not** turn the broader ISO/IEC 13211-2:2000
|
|
6
6
|
base document into a release-facing certification claim; unchanged Part 2
|
|
7
|
-
facilities outside the amendment still need their own clause-by-clause
|
|
7
|
+
facilities outside the amendment still need their own clause-by-clause review.
|
|
8
8
|
|
|
9
9
|
Executable evidence lives in `test/run-iso-part2-amendment.mjs` and is included
|
|
10
10
|
in both `npm test` and the conformance aggregate.
|
|
@@ -24,7 +24,7 @@ This amendment coverage is intentionally narrower than a complete Part 2
|
|
|
24
24
|
conformance claim. In particular, the Part 1 strict registry does not enable
|
|
25
25
|
module directives or the Part 2 `:` operator, and the project does not infer
|
|
26
26
|
full Part 2 coverage from interoperability with Scryer, Trealla, or Logtalk. A
|
|
27
|
-
future complete Part 2 claim would require a clause-by-clause
|
|
27
|
+
future complete Part 2 claim would require a clause-by-clause review of the
|
|
28
28
|
unchanged ISO/IEC 13211-2:2000 module-interface and re-export facilities as well
|
|
29
29
|
as the amendment.
|
|
30
30
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# ISO Part 1 processor-requirements
|
|
1
|
+
# ISO Part 1 processor-requirements review
|
|
2
2
|
|
|
3
3
|
This is the clause-level checklist for the processor requirements that sit
|
|
4
4
|
above the individual built-ins. It complements `ISO-COMPLIANCE.md`: the latter
|
|
5
5
|
is release-facing prose, while this file keeps each Clause 5 requirement or
|
|
6
|
-
extension boundary visible as its own
|
|
6
|
+
extension boundary visible as its own reviewable 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
|
|
@@ -26,7 +26,7 @@ certification claim.
|
|
|
26
26
|
| Requirement | Status | Current evidence |
|
|
27
27
|
| --- | --- | --- |
|
|
28
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
|
|
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 reviews define the goal boundary |
|
|
30
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 |
|
|
31
31
|
|
|
32
32
|
## 5.5 — extension boundaries
|
|
@@ -40,15 +40,15 @@ certification claim.
|
|
|
40
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)` |
|
|
41
41
|
| 5.5.5 additional directives | covered | normal module/library directives are documented implementation-specific features and are rejected by strict mode |
|
|
42
42
|
| 5.5.6 additional side effects | covered | normal-profile `statistics/0-2`, cleanup/library state, proof/statistics host instrumentation, and other extension effects are documented outside the Part 1 core; strict registry tests exclude the Prolog-visible statistics/cleanup extensions. Host instrumentation is an embedding observation rather than an extra strict Prolog goal effect |
|
|
43
|
-
| 5.5.7 additional control constructs | covered | `tnot/1`, `wfs_truth/2`, and implementation-specific execution optimizations are absent/disabled in strict mode; standard control constructs remain separately
|
|
44
|
-
| 5.5.8 additional flags | covered | normal `occurs_check` extension is absent from strict mode; the Part 1 flag family is fully
|
|
43
|
+
| 5.5.7 additional control constructs | covered | `tnot/1`, `wfs_truth/2`, and implementation-specific execution optimizations are absent/disabled in strict mode; standard control constructs remain separately reviewed |
|
|
44
|
+
| 5.5.8 additional flags | covered | normal `occurs_check` extension is absent from strict mode; the Part 1 flag family is fully reviewed |
|
|
45
45
|
| 5.5.9 additional built-in predicates and error forms | covered | strict registry excludes normal-profile library/native additions; `ISO-BUILTIN-MODE-ERROR-MATRIX.md` closes the complete 8.2-8.17 family row-by-row; simultaneous-error choices are documented per 7.12 rather than treated as a global table-order mandate |
|
|
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
|
|
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 review 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 |
|
|
47
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 |
|
|
48
48
|
|
|
49
49
|
## Clause 6 syntax-preservation closure
|
|
50
50
|
|
|
51
|
-
The production
|
|
51
|
+
The production review is kept here rather than in another status file. The strict
|
|
52
52
|
regression gate covers the following families directly, while the complete WG17
|
|
53
53
|
matrix supplies detailed externally sourced syntax expectations.
|
|
54
54
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ISO Part 1 Prolog-text, database, and execution matrix
|
|
2
2
|
|
|
3
|
-
This matrix closes the remaining row-level
|
|
3
|
+
This matrix closes the remaining row-level review for ISO/IEC 13211-1:1995
|
|
4
4
|
Clauses 7.4-7.8 against the published Part 1 baseline plus Technical
|
|
5
5
|
Corrigenda 1-3. It complements the built-in mode/error matrix: these rows are
|
|
6
6
|
processor semantics above individual predicate definitions.
|
|
@@ -22,7 +22,7 @@ chosen behavior is also indexed by `ISO-IMPLEMENTATION-DEFINED.md`.
|
|
|
22
22
|
| 7.4.2.6 `initialization/1` | covered | Goals are retained in preparation order and run after preparation. Reusing the same prepared `Program` does not run them again accidentally. |
|
|
23
23
|
| 7.4.2.7 `include/1` | covered | The included text is prepared at the directive position and shares operator/character/flag preparation state with its parent. |
|
|
24
24
|
| 7.4.2.8 `ensure_loaded/1` | covered | A source is prepared at most once in the current load graph, including repeated references and self/top-level references. |
|
|
25
|
-
| 7.4.2.9 `set_prolog_flag/2` | covered | Preparation-time flag changes affect subsequent text and are replayed into execution state; strict flag names/values/changeability remain governed by the closed 7.11
|
|
25
|
+
| 7.4.2.9 `set_prolog_flag/2` | covered | Preparation-time flag changes affect subsequent text and are replayed into execution state; strict flag names/values/changeability remain governed by the closed 7.11 review. |
|
|
26
26
|
| 7.4.3 source clauses | covered | Source heads/bodies are validated like program clauses, standardized static/control procedures are protected, declarations can create empty procedures, and body conversion follows 7.6.2 while preserving head/body variable identity. The built-in restriction applies in every execution mode, so consulting a clause for a built-in predicate or control construct reports the same `permission_error(modify, static_procedure)` as `assert`ing one; EyeProlog's own library and extension predicates are not standard built-ins and stay redefinable. Corpus: `error/iso/consult_redefines_builtin`. |
|
|
27
27
|
|
|
28
28
|
The strict release test `closes ISO 7.4 Prolog-text preparation and directive
|
|
@@ -70,7 +70,7 @@ converted body.
|
|
|
70
70
|
| clause order and re-execution | covered | Clauses are tried in prepared/database order; re-executable predicates expose subsequent solutions on backtracking. |
|
|
71
71
|
| empty versus unknown procedure | covered | A defined procedure with zero clauses fails normally. A missing procedure follows the `unknown` flag (`error` by default in the strict profile). |
|
|
72
72
|
| side effects and database changes | covered | Standard side effects occur at their execution point; successful dynamic changes become visible to later activations while preserving the logical-update view of active calls. |
|
|
73
|
-
| built-in/control delegation | covered | Standardized built-ins dispatch through the strict registry and control constructs through the strict execution path; implementation-specific predicates/shortcuts are excluded by the 5.5 boundary
|
|
73
|
+
| built-in/control delegation | covered | Standardized built-ins dispatch through the strict registry and control constructs through the strict execution path; implementation-specific predicates/shortcuts are excluded by the 5.5 boundary review. |
|
|
74
74
|
|
|
75
75
|
## 7.8 - control constructs and exceptions
|
|
76
76
|
|
|
@@ -88,9 +88,9 @@ converted body.
|
|
|
88
88
|
| 7.8.10 `throw/1` | covered | Throws propagate until a matching catch and use a renamed/fresh term for exception matching. |
|
|
89
89
|
|
|
90
90
|
The strict test `closes ISO 7.8 general control-construct and exception rows`
|
|
91
|
-
keeps the general semantics visible in addition to the 8.15 built-in
|
|
91
|
+
keeps the general semantics visible in addition to the 8.15 built-in review.
|
|
92
92
|
|
|
93
|
-
##
|
|
93
|
+
## Review result
|
|
94
94
|
|
|
95
95
|
Clauses **7.4-7.8 are covered at row level** for the declared strict Part 1
|
|
96
96
|
profile. Remaining Clause 7 exit work is therefore no longer general
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# ISO Part 1 term-semantics
|
|
1
|
+
# ISO Part 1 term-semantics coverage matrix
|
|
2
2
|
|
|
3
|
-
This file closes the Clause 7.1-7.3
|
|
3
|
+
This file closes the Clause 7.1-7.3 review at a finer granularity than the
|
|
4
4
|
release-facing `ISO-COMPLIANCE.md`. The normative baseline is ISO/IEC
|
|
5
5
|
13211-1:1995 plus Technical Corrigenda 1-3.
|
|
6
6
|
|
|
@@ -29,7 +29,7 @@ Counts are output from upstream, not hard-coded test constants.
|
|
|
29
29
|
- [cleanup](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/cleanup)
|
|
30
30
|
|
|
31
31
|
Exact fetched bytes, SHA-256 hashes, fetch timestamps, and HTTP validators remain under
|
|
32
|
-
Git-ignored `.cache/neumerkel/` for local
|
|
32
|
+
Git-ignored `.cache/neumerkel/` for local inspection/reproduction and are intentionally not committed.
|
|
33
33
|
A normal test run warns when this tracked report is stale. Refresh directly from live
|
|
34
34
|
upstream with `npm run conformance:update:neumerkel`, or sync the exact successful
|
|
35
35
|
snapshot already fetched by `npm test` with `npm run conformance:sync:neumerkel`.
|
|
@@ -44,11 +44,11 @@ uses this race-free sync path and stages the generated reports into the release
|
|
|
44
44
|
commit. The tracked report intentionally omits fetch timestamps and HTTP validators,
|
|
45
45
|
so repeated runs against unchanged upstream suites do not dirty the checkout.
|
|
46
46
|
|
|
47
|
-
## Local
|
|
47
|
+
## Local inspection cache
|
|
48
48
|
|
|
49
49
|
Exact downloaded bytes, SHA-256 hashes, fetch timestamps, HTTP validators, and
|
|
50
50
|
machine-readable results are kept under `.cache/neumerkel/`. `.cache/` remains
|
|
51
|
-
Git-ignored: it is an
|
|
51
|
+
Git-ignored: it is an inspection/reproduction cache, not published project evidence.
|
|
52
52
|
|
|
53
53
|
Use:
|
|
54
54
|
|
|
@@ -7,8 +7,8 @@ supported ISO Prolog profile, built-ins, extensions, and reasoner behavior.
|
|
|
7
7
|
|
|
8
8
|
The suite is intentionally file-based. Exact standard output, errors, warnings,
|
|
9
9
|
and proof output test the behavior of the JavaScript implementation.
|
|
10
|
-
[ISO-COMPLIANCE.md](ISO-COMPLIANCE.md) is the high-level Part 1
|
|
11
|
-
tracks the row-by-row built-in
|
|
10
|
+
[ISO-COMPLIANCE.md](ISO-COMPLIANCE.md) is the high-level Part 1 review and coverage map. [ISO-BUILTIN-MODE-ERROR-MATRIX.md](ISO-BUILTIN-MODE-ERROR-MATRIX.md)
|
|
11
|
+
tracks the row-by-row built-in review,
|
|
12
12
|
[ISO-TERM-SEMANTICS-MATRIX.md](ISO-TERM-SEMANTICS-MATRIX.md) closes 7.1-7.3,
|
|
13
13
|
[ISO-PROLOG-TEXT-EXECUTION-MATRIX.md](ISO-PROLOG-TEXT-EXECUTION-MATRIX.md)
|
|
14
14
|
closes 7.4-7.8, [ISO-EVALUABLE-FUNCTOR-MATRIX.md](ISO-EVALUABLE-FUNCTOR-MATRIX.md)
|
|
@@ -31,7 +31,7 @@ review evidence, not normative ISO claims.
|
|
|
31
31
|
profile and implementation extensions. The default registry covers the exact
|
|
32
32
|
predicate indicators listed in Appendix B of the book across the Part 1 strict-core
|
|
33
33
|
target and the normal-mode module/DCG compatibility families. [ISO-COMPLIANCE.md](ISO-COMPLIANCE.md) is the explicit
|
|
34
|
-
release-facing ledger for the Part 1 strict-core
|
|
34
|
+
release-facing ledger for the Part 1 strict-core review. This suite is not an independent certification. The release-facing Part 1
|
|
35
35
|
ledger now has explicit dispositions for Clause 5 processor obligations, Clause 6
|
|
36
36
|
syntax/rejection, Clause 7 semantics, the complete 8.2-8.17 built-in family, and
|
|
37
37
|
Clause 9 evaluable functors. Public comparison material remains supporting review
|
|
@@ -99,7 +99,7 @@ npm run test:wg17 # vendored reviewed WG17 syntax regression
|
|
|
99
99
|
```
|
|
100
100
|
|
|
101
101
|
`test:neumerkel` always fetches the current TU Wien sources. It does not skip a
|
|
102
|
-
fetch because a cache exists. The runner discovers the number of active tests from those sources and fails on any newly introduced case EyeProlog does not pass. If the stable, tracked [NEUMERKEL-LATEST.md](NEUMERKEL-LATEST.md) is stale, normal tests warn rather than turning a passing engine run into a failure. `npm run conformance:update:neumerkel` performs a fresh live run and refreshes the report; after `npm test`, `npm run conformance:sync:neumerkel` refreshes it from the exact successful cached snapshot; and `npm run conformance:check:neumerkel` verifies that snapshot without a second network fetch. Exact bytes, SHA-256 hashes, timestamps, and HTTP validators stay under Git-ignored `.cache/neumerkel/` for
|
|
102
|
+
fetch because a cache exists. The runner discovers the number of active tests from those sources and fails on any newly introduced case EyeProlog does not pass. If the stable, tracked [NEUMERKEL-LATEST.md](NEUMERKEL-LATEST.md) is stale, normal tests warn rather than turning a passing engine run into a failure. `npm run conformance:update:neumerkel` performs a fresh live run and refreshes the report; after `npm test`, `npm run conformance:sync:neumerkel` refreshes it from the exact successful cached snapshot; and `npm run conformance:check:neumerkel` verifies that snapshot without a second network fetch. Exact bytes, SHA-256 hashes, timestamps, and HTTP validators stay under Git-ignored `.cache/neumerkel/` for inspection/reproduction only. See [NEUMERKEL-LIVE.md](NEUMERKEL-LIVE.md).
|
|
103
103
|
|
|
104
104
|
The vendored WG17 syntax snapshot is intentionally secondary. Update all upstream conformance evidence with `npm run conformance:update`, or use the focused commands:
|
|
105
105
|
|
|
@@ -32,11 +32,11 @@ regressions.
|
|
|
32
32
|
| [#49](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#49) | `read_term/3` and EOF | Covered by strict reader/conformance tests and the interactive-read regressions. |
|
|
33
33
|
| [#50](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#50) | mixed integer/float arithmetic comparison | The STC-facing normal-profile case requires exact cross-type ordering and `max/2`/`min/2` use the same comparison. `--iso-strict` deliberately retains the published Part 1 integer-to-float comparison rule; the draft case is not silently substituted for that normative baseline. |
|
|
34
34
|
| [#55](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#55) | integer rounding function | Existing flag conformance verifies `integer_rounding_function = toward_zero`. |
|
|
35
|
-
| [#56](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#56) | protect `(:-)/1` and `(:-)/2` from database modification | **The
|
|
35
|
+
| [#56](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#56) | protect `(:-)/1` and `(:-)/2` from database modification | **The review found a gap.** Strict database operations now treat both functors as static/private for `assert*`, `retract*`, `abolish/1`, declarations, and `clause/2`, while ordinary calls still follow the separate procedure-existence behavior described by the STC item. |
|
|
36
36
|
| [#58](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#58) | `set_prolog_flag/2` instantiation error | Existing strict/error coverage requires an instantiation error when a required flag value is a variable. |
|
|
37
37
|
| [#67](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#67) | `bagof/3` answer-order example | `stc/bagof_answer_order` verifies the proposed clarifying example produces `[2,1]`. |
|
|
38
38
|
| [#68](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#68) | division examples | Existing arithmetic coverage evaluates signed integer `/` through the floating operation; no implementation-defined signed-division result is used. |
|
|
39
|
-
| [#69](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#69) | arithmetic example culprit | **The
|
|
39
|
+
| [#69](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#69) | arithmetic example culprit | **The review found a gap.** Strict expression evaluation now applies 7.9.2(c) to an atomic subexpression such as `foo`: it reports `type_error(evaluable,foo/0)` rather than the misleading `type_error(number,foo)` shown by the old 9.1.7 example. |
|
|
40
40
|
| [#70](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#70) | optional `max_procedure_arity` | Reviewed after the STC arity discussion corrected the earlier #71 pointer. EyeProlog has no declared procedure-arity limit smaller than its `max_arity=unbounded` term model, so the implementation-defined optional flag is intentionally absent. |
|
|
41
41
|
| [#72](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#72) | tentative non-ground stream-term instances | Reviewed as a tentative post-2026 proposal. EyeProlog does not make this draft wording normative in `--iso-strict`; the published Part 1 stream-term/domain rules remain the baseline until WG17 settles the proposal. |
|
|
42
42
|
| [#73](https://www.complang.tuwien.ac.at/ulrich/iso-prolog/stc#73) | `read/1-2` and `read_term/2-3` representation limits | The 2026-08-23 post-N289 draft now explicitly proposes `max_float` / `min_float` alongside the existing representation-limit flags. EyeProlog already reports those errors while reading overflowing positive/negative float tokens; strict regression coverage now exercises both `read/1` and `read_term/2`, and the literal STC cases pin parser preparation. |
|
package/test/neumerkel.mjs
CHANGED
|
@@ -474,7 +474,7 @@ export function formatNeumerkelMarkdown({ summary }) {
|
|
|
474
474
|
lines.push(
|
|
475
475
|
'',
|
|
476
476
|
'Exact fetched bytes, SHA-256 hashes, fetch timestamps, and HTTP validators remain under',
|
|
477
|
-
'Git-ignored `.cache/neumerkel/` for local
|
|
477
|
+
'Git-ignored `.cache/neumerkel/` for local inspection/reproduction and are intentionally not committed.',
|
|
478
478
|
'A normal test run warns when this tracked report is stale. Refresh directly from live',
|
|
479
479
|
'upstream with `npm run conformance:update:neumerkel`, or sync the exact successful',
|
|
480
480
|
'snapshot already fetched by `npm test` with `npm run conformance:sync:neumerkel`.',
|
package/test/run-regression.mjs
CHANGED
|
@@ -5901,7 +5901,7 @@ ${profile}`;
|
|
|
5901
5901
|
},
|
|
5902
5902
|
},
|
|
5903
5903
|
{
|
|
5904
|
-
name: 'published ISO Corrigenda have a complete stable
|
|
5904
|
+
name: 'published ISO Corrigenda have a complete stable review inventory',
|
|
5905
5905
|
run: () => {
|
|
5906
5906
|
const compliance = fs.readFileSync(path.join(testRoot, 'conformance', 'ISO-COMPLIANCE.md'), 'utf8');
|
|
5907
5907
|
const matrix = fs.readFileSync(path.join(testRoot, 'conformance', 'ISO-CORRIGENDA-MATRIX.md'), 'utf8');
|
|
@@ -5913,7 +5913,7 @@ ${profile}`;
|
|
|
5913
5913
|
const rows = matrix.split('\n')
|
|
5914
5914
|
.filter((line) => /^\| C[123]-\d\d \|/.test(line))
|
|
5915
5915
|
.map((line) => line.split('|').slice(1, -1).map((cell) => cell.trim()));
|
|
5916
|
-
assertEqual(rows.map(([id]) => id).join(','), expected.join(','), 'Corrigenda stable
|
|
5916
|
+
assertEqual(rows.map(([id]) => id).join(','), expected.join(','), 'Corrigenda stable review IDs');
|
|
5917
5917
|
for (const [id, clauses, disposition, evidence] of rows) {
|
|
5918
5918
|
assertEqual(Boolean(clauses), true, `${id} clause/amendment cluster`);
|
|
5919
5919
|
assertEqual(['covered', 'editorial', 'superseded'].includes(disposition), true, `${id} disposition`);
|
|
@@ -5981,7 +5981,7 @@ ${profile}`;
|
|
|
5981
5981
|
'| Latest Neumerkel conformity is a live release gate | covered |',
|
|
5982
5982
|
'| No unexplained deviation remains in the release-facing ledger | covered |',
|
|
5983
5983
|
]) assertIncludes(exit, item, item);
|
|
5984
|
-
assertNotIncludes(exit, '|
|
|
5984
|
+
assertNotIncludes(exit, '| gap |', 'no release-facing gap rows remain');
|
|
5985
5985
|
},
|
|
5986
5986
|
},
|
|
5987
5987
|
{
|
|
@@ -5996,13 +5996,13 @@ ${profile}`;
|
|
|
5996
5996
|
'ISO-EVALUABLE-FUNCTOR-MATRIX.md',
|
|
5997
5997
|
]) assertIncludes(book, name, `book ${name}`);
|
|
5998
5998
|
assertIncludes(readme, 'implementation reference is [*The Art of EyeProlog*]', 'README book hand-off');
|
|
5999
|
-
assertIncludes(readme, 'test/conformance/ISO-COMPLIANCE.md', 'README concise
|
|
5999
|
+
assertIncludes(readme, 'test/conformance/ISO-COMPLIANCE.md', 'README concise review link');
|
|
6000
6000
|
for (const heading of ['## Tabling', '## Cleanup-aware control', '## Strict ISO',
|
|
6001
6001
|
'## Module and definite clause grammar', '## Trealla and Scryer interoperability']) {
|
|
6002
6002
|
assertNotIncludes(readme, heading, `README delegates ${heading} to the book`);
|
|
6003
6003
|
}
|
|
6004
|
-
assertEqual(readme.includes('2026-08-23 draft items #73-#76'), false, 'README omits
|
|
6005
|
-
assertIncludes(profile, 'Part 1 processor, syntax, semantic, built-in, and arithmetic', 'Why EyeProlog
|
|
6004
|
+
assertEqual(readme.includes('2026-08-23 draft items #73-#76'), false, 'README omits review-history detail');
|
|
6005
|
+
assertIncludes(profile, 'Part 1 processor, syntax, semantic, built-in, and arithmetic', 'Why EyeProlog review state');
|
|
6006
6006
|
},
|
|
6007
6007
|
},
|
|
6008
6008
|
{
|
package/the-art-of-eyeprolog.md
CHANGED
|
@@ -10403,7 +10403,7 @@ node test/run-conformance-report.mjs
|
|
|
10403
10403
|
```
|
|
10404
10404
|
|
|
10405
10405
|
`test/conformance/ISO-COMPLIANCE.md` is the processor-requirement ledger for the
|
|
10406
|
-
Part 1 conformance
|
|
10406
|
+
Part 1 conformance review. It records explicit dispositions for the tracked processor, syntax, semantic, built-in, and arithmetic requirements. `test/conformance/ISO-COMPLIANCE.md`
|
|
10407
10407
|
maps language families to representative executable cases.
|
|
10408
10408
|
`test/conformance/ISO-IMPLEMENTATION-DEFINED.md` is the ISO 5.4 decision
|
|
10409
10409
|
index: it enumerates the Part 1 implementation-defined decisions and the
|
|
@@ -10416,7 +10416,7 @@ rows. The exit checklist in `ISO-COMPLIANCE.md` records the closure criteria and
|
|
|
10416
10416
|
upstream syntax cases. Reviewed cases can pin exact strict-reader outcomes, while
|
|
10417
10417
|
newly upgraded cases execute directly against the upstream Codex expectation.
|
|
10418
10418
|
|
|
10419
|
-
The syntax
|
|
10419
|
+
The syntax review also cross-checks extension safety: each vendored WG17 case
|
|
10420
10420
|
accepted by the strict Part 1 reader is executed through the normal profile and
|
|
10421
10421
|
must preserve the same observable outcome. Additional normal-mode syntax may
|
|
10422
10422
|
accept texts outside the strict grammar, but it may not reinterpret an accepted
|
|
@@ -10463,7 +10463,7 @@ expansion/`phrase/2-3`, quads, EyeProlog libraries, the `occurs_check` flag,
|
|
|
10463
10463
|
the normal-profile `table` declaration, `call_cleanup/2`, and `setup_call_cleanup/3` are outside
|
|
10464
10464
|
that Part 1 strict surface.
|
|
10465
10465
|
|
|
10466
|
-
The strict-core
|
|
10466
|
+
The strict-core review has explicit dispositions for the Clause 5 processor
|
|
10467
10467
|
obligations, Clause 6 syntax and rejection families, Clause 7 term/execution/I/O
|
|
10468
10468
|
and error semantics, the 8.2-8.17 built-in families, and Clause 9 evaluable
|
|
10469
10469
|
functors. The complete vendored WG17 syntax matrix is checked together with normal-mode safety: each strict-success WG17 observation must keep the same result when normal-mode extensions are enabled. Implementation-defined
|
package/why-eyeprolog.md
CHANGED
|
@@ -235,7 +235,7 @@ tests, and production behavior easier to compare.
|
|
|
235
235
|
EyeProlog targets the ISO Part 1 core together with Technical Corrigenda 1, 2,
|
|
236
236
|
and 3. It provides separately documented compatibility profiles for Part 2
|
|
237
237
|
modules and Part 3 definite clause grammars in normal mode. The post-N289
|
|
238
|
-
WG17/STC working draft is
|
|
238
|
+
WG17/STC working draft is review input, not a published Corrigendum silently
|
|
239
239
|
added to the strict baseline.
|
|
240
240
|
|
|
241
241
|
The executable conformance matrix records explicit dispositions for the
|
|
@@ -288,7 +288,7 @@ documented embedding hook.
|
|
|
288
288
|
It should resist duplicate aliases, hidden execution phases, advisory syntax,
|
|
289
289
|
and integrations that can live outside the reasoning engine. The durable idea
|
|
290
290
|
is that useful, proof-producing reasoning does not require an opaque language
|
|
291
|
-
or an enormous runtime. A carefully
|
|
291
|
+
or an enormous runtime. A carefully reviewed standard core, portable modules,
|
|
292
292
|
and an ordinary JavaScript API can remain both practical and understandable.
|
|
293
293
|
|
|
294
294
|
## References
|