Comments on (W)DTR 13211-3:2012-07-13 and changelist:2012-06-13

Ulrich Neumerkel, 2012-08-12 history
These comments refer to 13211-3 draft dated 2012-06-13 (filename) and 2012-07-13 (content) and a changelist of 2012-06-13.
The working draft for TR 13211-3 of 2012-07-13 remains internally inconsistent, introduces a new inaccurate translation, and contains many formulations unsuited for a normative document. Its very late publication (originally scheduled 2011-11-01, effectively distributed 2012-06-13), makes more thorough comments impossible.

Previous comments on version of 2010-04-01 and on version of 2010-07-18 have been ignored for many issues. That is, the new editor did not take into account those comments within more than two years.

The current version also ignores or incompletely follows the resolutions of Lexington 2011 and Edinburgh 2010. In particular A3:2011 (incomplete, a rule is missing), A4:2011 (ignored), A5:2011 (incomplete, e.g. ('|')//2 is missing).

  1. Unchanged: No specification of relevant properties. The notion of steadfastness is absent. The comments on version 2010-04-01 and the comments on version of 2010-07-18 have been entirely ignored. In the current version of the document, the second "alternative" expansion of phrase1//0 in 7.14.3.3 is not steadfast. So the document contains incorrect examples.
  2. Unchanged: The notion of difference, list difference, or difference list is absent.
  3. The numbering of subclauses is unclear: Sometimes it tries to complement 13211-1, sometimes not. Also, the document does not use the standard terminology clause/subclause.
  4. The document uses wrong syntax for predicate indicators, non-terminal indicators and functors. It should use (-->)/2, {}/1, (;)//2, (->)//2, !//0, (\+)//1 but it uses often a different, sometimes even syntactically invalid notation. E.g. 6.3, 7.14.2, 7.14.5.1, 7.14.6.2, 7.14.6.3, 7.14.6.4, 7.14.6.5.
  5. The document uses in addition to "non-terminal" which is consistent with 13211-1, sometimes "nonterminal" and sometimes "non terminal".
  6. Introduction: replace "technical recommendation" by "technical report".
  7. Introduction: Remove "worthy extension" and other judgmental phrases.
  8. 1 Scope: different numbering, why? Also, this TR changes both 13211-1 and 13211-2.
  9. 1 Scope: Notes missing to clarify what this standard does not define.
  10. 2 Normative references: All references are missing. The NOTE is inaccurate. IS 13211-1:1995, Cor.2 13211-1:2012, IS 13211-2:2000 should be mentioned explicitly.
  11. 3.17: change "A variable that is not an element of the variable set of T": to "a member". This is the terminological convention in IS 13211-1:1995.
  12. 3.19: Reference needed to 7.14.4
  13. 3.24: replace "section" by "subclause" (and in many other places).
  14. 3.25: "covered by" this notion is not defined. There are 3 uses of it (3.25, 3.26, 7.14.5.2).
  15. 5.5: "undefined in this TR or on the ISO/IEC 13211-1 Prolog standard".
  16. 6.1.3: replace "In this notation, the variables , S1, ..., S can be regarded ..." by "In this notation, the variables S0, S1, ..., S can be regarded ..."
  17. 6.2.1:
    Syntactically, there are no changes w.r.t. the ISO/IEC 13211-1 Prolog standard
    There are changes w.r.t. the operator syntax. That's why there has been Cor.2.
  18. 6.3: The operator op(1105,xfy,'|') is still missing.

    Add in Table 7 - The operator table:
    Priority Specifier Operator(s)
    1105 xfy '|'
  19. 7.4.2:
    dynamic/1 : Grammar rules shall not be misused to generate clauses of predicates, which then shall be subject to database manipulation, although this is part of the reality. ...
    This is not a normative text. Same for the entire 7.4.2. What means "shall not be misused". What means misused?
  20. 7.4.2:
    multifile/1 : To distribute grammar rules with some nonterminal indicator over several files is legal. A nonterminal indicator is therefore a legal argument to multifile/1.
    "legal"?, and what about several non-terminal indicators, and what about mixing them with predicate indicators?
  21. 7.13 Predicate properties: There is no subclause 7.13 in 13211-1. And there is now a change for 13211-2.
  22. 7.14.1: It is necessary to insist here that the empty list is possible. However, it is not clear what it is: A terminal or a non-terminal?
  23. 7.14.3.2: The syntax is a mix of concrete syntax and abstract syntax. However, only abstract syntax should be used. The current syntax does not permit a comma between NonTerminal and RightHandContext.
  24. 7.14.3.3: The variable names in the expansion phrase1/2 contradicts the convention established in 6.1.3.
  25. 7.14.3.3: The "alternative" expansion is not steadfast. Consider: the goals phrase(phrase1, _, []) and phrase(phrase1, _, S), S = []. The first goal will silently fail, while the second goal will execute phrase2/2. The Edinburgh 2010 minutes emphasize that "10 b. The translations should be steadfast".
  26. 7.14.3.3 NOTES: There are much too many unnecessary notes that contain normative formulations. E.g., in note 5: "shall be implementation dependent". Notes are not normative. Formulations like "by the way" are not helpful in a normative document.
  27. 7.14.4.1 Examples
    ... Assuming a public/1 directive for declaring predicate scope, we could write:
    :- public(sentence//0).
    
    A more precise reference to 3.142 is needed. Also, public/1 directives had a different meaning in DECsystem 10 version 3.47. It was used "to make a compiled procedure accessible from interpreted code (including directives) [...]." IS 13211-1:1995 has a note in 7.5.3:
    NOTE — An additional directive public/1 that specifies some user-defined procedures to be public would be an extension.
  28. 7.14.6.1 The nonterminal (',')//2.

    The title should rather read (',')//2 — concatenation. The format of presentation should be more similar to 7.8.5 (',')/2 - conjunction. There should be a declarative and a procedural description. The procedural description might simply refer to the expansion. Cut-transparency remains unexplained. The variable names are used without showing where they appear in a goal.

    Same remarks for the other non-terminals.

  29. 7.14.6.3 The nonterminals ('->')//2 (choice) and (';')//2.

    Apart from syntax: The name choice is inappropriate and only the principal functor should be mentioned.

  30. 7.14.6.4:
    Implementations conforming to this DTR 13211-3 shall not define or use a predicate ('!')/2
    This is also true for all the other constructs.
  31. 8.1.1.5 NOTE. This note shows that the notion of right-hand context is not understood by the author. It might fail, but can equally well produce an exception or loop, or produce side-effects and then fail.
  32. 11 Logical Expansion:
    Used the corrected latest version of Ulrich Neumerkel
    This is inaccurate. The program lacks the following crucial clause in dcg_cbody/4!
    dcg_cbody(( GREither ; GROr ), S0, S, ( Either ; Or )) :-
       \+ subsumes_term((_->_),GREither),
       dcg_body(GREither, S0, S, Either),
       dcg_body(GROr, S0, S, Or).
    

    The program assumes that there is no control construct (->)//2. However, this WDTR seems to define such a control construct in 7.14.6.3. Also, the font used in this clause is not suited to represent Prolog text and in particular (-->)/2 accurately.

For all further comments, see 2012-04-01 comments, 2012-07-18 comments.
Validated HTML