- From: <bugzilla@wiggum.w3.org>
- Date: Thu, 14 Jul 2005 23:56:34 +0000
- To: public-qt-comments@w3.org
- Cc:
http://www.w3.org/Bugs/Public/show_bug.cgi?id=1605
Summary: The inference engine is not specified (only the rule
base it uses is)
Product: XPath / XQuery / XSLT
Version: Last Call drafts
Platform: PC
OS/Version: Windows 2000
Status: NEW
Severity: normal
Priority: P2
Component: Formal Semantics
AssignedTo: simeon@us.ibm.com
ReportedBy: fred.zemke@oracle.com
QAContact: public-qt-comments@w3.org
2.1.3 Notations for inference rules
It says "Inference rules express the logical relation between
judgments and describe how complex judgments can be concluded from
simpler premise judgments." This tells when an inference CAN be
made, but it does not tell me when an inference MUST be made.
There are a few places where you want the application of
inferences to be nondeterminstic, for example, whether an "and"
or "or" expression raises an error, or which error is propagated
from a function invocation with multiple errors. However, for
the most part, you do not intend to leave the selection of which
inferences to draw entirely to the implementation's discretion.
Otherwise an implementation could simply refuse to draw some
conclusions and (for example) not complete the evaluation of
some evaluatable expression, perhaps raising a gratuitous
error, and still claim compliance. This should be clarified.
Here are some general principles you might consider:
a) Any inference whose conclusion is of the form
statEnv |- Expr : Type that can be drawn during static analysis,
must be drawn during static analysis.
b) If the Static Typing Feature is supported, then any inference
whose conclusion is of the form
statEnv |- Expr raises TypeError that can be drawn during static
analysis, must be drawn during static analysis.
c) Any inference whose conclusion is of the form
dynEnv |- ... that can be drawn during dynamic evaluation, must be
drawn during dynamic evaluation.
Principle c) would seem to exclude certain desired nondeterminisms.
I think the solution is to build the nondeterminism into the
judgment through an "implementation-dependent choice" operator. Thus
dynEnv |- Expr1 raises Error
dynEnv |- Expr2 => false
----------------------------
dynEnv |- choice (Expr1 and Expr2 => false,
Expr1 and Expr2 raises Error)
An alternative approach would be, instead of rule c), say
"if an Expr passes static analysis phase, then the dynamic
evaluation phase must draw inferences until either a judgment
of the form 'dynEnv |- Expr => Value' or a judgment of the form
'dynEnv |- Expr raises an error' is reached."
Received on Thursday, 14 July 2005 23:56:37 UTC