eyeling 1.14.13 → 1.15.0

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.
Files changed (29) hide show
  1. package/examples/check/input/deep-taxonomy-100000.c +20 -0
  2. package/examples/check/input/gps.c +127 -0
  3. package/examples/check/input/high-trust-rdf-bloom-envelope.c +148 -0
  4. package/examples/check/input/high-trust-rdf-bloom-tamper-contrast.c +247 -0
  5. package/examples/check/input/odrl-dpv-risk-ranked.c +275 -0
  6. package/examples/check/output/deep-taxonomy-100000.n3 +300004 -0
  7. package/examples/check/output/gps.n3 +6 -0
  8. package/examples/check/output/high-trust-rdf-bloom-envelope.n3 +7 -0
  9. package/examples/check/output/high-trust-rdf-bloom-tamper-contrast.n3 +27 -0
  10. package/examples/check/output/odrl-dpv-risk-ranked.n3 +13 -0
  11. package/examples/decimal-ebike-motor-thermal-envelope.n3 +286 -0
  12. package/examples/decimal-transcendental-servo-envelope.n3 +197 -0
  13. package/examples/deck/high-trust-rdf-bloom-envelope.md +371 -0
  14. package/examples/deck/schema-foaf-mapping.md +3 -1
  15. package/examples/high-trust-rdf-bloom-envelope.n3 +281 -0
  16. package/examples/high-trust-rdf-bloom-tamper-contrast.n3 +395 -0
  17. package/examples/integer-first-control-tank-level.n3 +209 -0
  18. package/examples/integer-first-sqrt2-mediants.n3 +174 -0
  19. package/examples/output/decimal-ebike-motor-thermal-envelope.n3 +25 -0
  20. package/examples/output/decimal-transcendental-servo-envelope.n3 +29 -0
  21. package/examples/output/high-trust-rdf-bloom-envelope.n3 +7 -0
  22. package/examples/output/high-trust-rdf-bloom-tamper-contrast.n3 +27 -0
  23. package/examples/output/integer-first-control-tank-level.n3 +70 -0
  24. package/examples/output/integer-first-sqrt2-mediants.n3 +57 -0
  25. package/eyeling.js +90 -1
  26. package/lib/lexer.js +90 -1
  27. package/package.json +3 -2
  28. package/test/api.test.js +221 -0
  29. package/test/check.test.js +174 -0
@@ -0,0 +1,371 @@
1
+ # High-trust RDF graph lookup with a decimal certificate
2
+
3
+ This deck explains the example `high-trust-rdf-bloom-envelope.n3` ([Playground][1]).
4
+
5
+ The goal is to show that **advanced engineering claims can be expressed and checked in N3**, even when the claim involves a **transcendental quantity** such as `exp(-k*n/m)`.
6
+
7
+ The example is about a **formally specified RDF graph library targeting high-trust environments**.
8
+
9
+ ---
10
+
11
+ ## The problem in plain language
12
+
13
+ Imagine a software component that stores an RDF graph and answers a basic question very quickly:
14
+
15
+ > “Does this triple exist?”
16
+
17
+ In a high-trust setting—critical infrastructure, regulated systems, scientific pipelines, or security-sensitive software—you do not just want the answer to be fast.
18
+
19
+ You also want to know:
20
+
21
+ - what the component is allowed to do,
22
+ - what it is **not** allowed to do,
23
+ - which parts are exact,
24
+ - which parts are approximate,
25
+ - and why the approximation is still safe.
26
+
27
+ That is the spirit of this example.
28
+
29
+ ---
30
+
31
+ ## The engineering story
32
+
33
+ The file models a graph artifact with three parts:
34
+
35
+ 1. a **canonical RDF graph snapshot**,
36
+ 2. a verified **SPO index** for exact lookup,
37
+ 3. a **Bloom filter** used only as a fast prefilter.
38
+
39
+ The important trust rule is simple:
40
+
41
+ - **Exact correctness comes from the canonical graph**.
42
+ - The Bloom filter is used only to avoid unnecessary exact checks.
43
+ - A “maybe present” result from the Bloom filter is **never trusted on its own**.
44
+ - It must be confirmed against the canonical graph.
45
+
46
+ So the Bloom filter is treated as a performance tool, not as the source of truth.
47
+
48
+ ---
49
+
50
+ ## Why Bloom filters matter here
51
+
52
+ A Bloom filter is a compact data structure that can answer:
53
+
54
+ - **definitely not present**, or
55
+ - **maybe present**.
56
+
57
+ That makes it useful for speeding up negative lookups.
58
+
59
+ The trade-off is that Bloom filters can produce **false positives**:
60
+
61
+ > they may say “maybe present” even when the triple is actually absent.
62
+
63
+ That is acceptable in this design, because every maybe-positive answer is checked exactly afterwards.
64
+
65
+ So the real question becomes:
66
+
67
+ > Can we prove that the number of extra exact checks stays within an acceptable budget?
68
+
69
+ ---
70
+
71
+ ## Why this is interesting mathematically
72
+
73
+ The usual false-positive approximation for a Bloom filter involves the term:
74
+
75
+ ```text
76
+ exp(-k*n/m)
77
+ ```
78
+
79
+ where:
80
+
81
+ - `n` = number of stored items,
82
+ - `m` = number of bits in the filter,
83
+ - `k` = number of hash functions.
84
+
85
+ This is where the example becomes interesting.
86
+
87
+ The expression uses **`exp`**, and values involving `exp(...)` are generally **not exact rational numbers**. They are transcendental-style quantities that cannot usually be represented exactly with finite symbolic data inside an ordinary rule engine.
88
+
89
+ ---
90
+
91
+ ## The decimal-first idea
92
+
93
+ Instead of trying to represent the exact real number, the file stores a **trusted decimal interval certificate**:
94
+
95
+ ```text
96
+ 0.5988792348 <= exp(-0.5126953125) <= 0.5988792349
97
+ ```
98
+
99
+ That interval is written using ordinary finite decimal values.
100
+
101
+ This is the key idea:
102
+
103
+ > Use `xsd:decimal` as a practical carrier for trustworthy approximations.
104
+
105
+ A decimal value is still finite, explicit, auditable, and machine-checkable. In that sense it behaves like structured data, not like a vague floating-point guess.
106
+
107
+ ---
108
+
109
+ ## Why `xsd:decimal` is a good fit
110
+
111
+ It helps to think of `xsd:decimal` as:
112
+
113
+ > a number you can write down exactly in base 10.
114
+
115
+ Examples:
116
+
117
+ - `0.5126953125`
118
+ - `0.5988792348`
119
+ - `0.002`
120
+
121
+ These are not “approximate because the computer happened to use binary floating point.” They are **explicit decimal facts** inside the RDF/N3 world.
122
+
123
+ That makes them easier to inspect, easier to serialize, and easier to certify.
124
+
125
+ ---
126
+
127
+ ## What the file proves
128
+
129
+ The example uses these concrete values:
130
+
131
+ - `n = 1200` triples
132
+ - `m = 16384` Bloom-filter bits
133
+ - `k = 7` hash functions
134
+ - `50,000` negative lookups per batch
135
+
136
+ From those, it derives:
137
+
138
+ - the load factor `lambda = k*n/m = 0.5126953125`
139
+ - a decimal interval certificate for `exp(-lambda)`
140
+ - a lower and upper bound for the Bloom false-positive rate
141
+ - an upper bound on the number of extra exact lookups
142
+
143
+ Then it checks whether those results satisfy the deployment policy.
144
+
145
+ ---
146
+
147
+ ## The trust contract, in plain English
148
+
149
+ The file is not just doing arithmetic. It is expressing a **contract**.
150
+
151
+ The contract says:
152
+
153
+ 1. the canonical graph and the SPO index must agree,
154
+ 2. the basic operating parameters must be sane,
155
+ 3. the decimal interval for the transcendental term must be well-formed,
156
+ 4. that interval must match the computed load factor,
157
+ 5. the false-positive rate must stay below a specified budget,
158
+ 6. the expected number of extra exact confirmations must stay below another budget,
159
+ 7. and exact correctness must still come from the canonical graph.
160
+
161
+ Only if all of those hold does the file conclude:
162
+
163
+ ```n3
164
+ :artifact :deploymentDecision :AcceptForHighTrustUse.
165
+ ```
166
+
167
+ That is a nice example of **policy + math + data structure behavior** meeting in one rule system.
168
+
169
+ ---
170
+
171
+ ## Why this counts as high-trust
172
+
173
+ High-trust does **not** mean “no approximation anywhere.”
174
+
175
+ Instead, it means something closer to this:
176
+
177
+ - approximations are clearly identified,
178
+ - their effect is bounded,
179
+ - their use is restricted,
180
+ - malformed inputs do not accidentally pass,
181
+ - and the final correctness claim does not depend on unjustified assumptions.
182
+
183
+ In this example:
184
+
185
+ - the Bloom filter may introduce extra work,
186
+ - but it does not introduce wrong positive answers into the final result,
187
+ - because maybe-positive cases are verified against the exact graph,
188
+ - and the workload argument only goes through when the certificate and parameters are sane.
189
+
190
+ So the approximation affects **performance**, not **truth**.
191
+
192
+ ---
193
+
194
+ ## Why the decimal interval is the essence of the example
195
+
196
+ Many systems are comfortable with exact integers. Fewer are comfortable with real analysis.
197
+
198
+ This example shows a practical middle path:
199
+
200
+ - keep the reasoning engine in a finite symbolic world,
201
+ - represent a transcendental quantity by a decimal interval certificate,
202
+ - and propagate that interval through the rest of the computation.
203
+
204
+ That is powerful because many engineering systems depend on quantities that are not naturally exact integers:
205
+
206
+ - probabilities,
207
+ - exponential decay,
208
+ - control-system envelopes,
209
+ - signal attenuation,
210
+ - error margins,
211
+ - and performance budgets.
212
+
213
+ Using decimal envelopes lets you reason about them without pretending they are exact closed-form objects inside the rule engine.
214
+
215
+ ---
216
+
217
+ ## What is happening rule by rule
218
+
219
+ At a high level, the N3 file does six things.
220
+
221
+ ### 1. Check parameter sanity
222
+
223
+ It first checks that the operational inputs make sense at all.
224
+
225
+ This includes positivity checks on counts, filter size, number of hash functions, batch size, and budgets.
226
+
227
+ That prevents nonsense values from entering the proof path.
228
+
229
+ ### 2. Check structural agreement
230
+
231
+ It verifies that the canonical graph and the SPO index report the same triple count.
232
+
233
+ That gives confidence that the exact index structure is aligned with the exact data source.
234
+
235
+ ### 3. Compute the Bloom load factor
236
+
237
+ It computes:
238
+
239
+ ```text
240
+ lambda = k*n/m
241
+ ```
242
+
243
+ using exact arithmetic over finite numeric literals.
244
+
245
+ ### 4. Certify the transcendental interval
246
+
247
+ It checks that the stored lower and upper bounds for `exp(-lambda)` make sense:
248
+
249
+ - lower < upper,
250
+ - both are between 0 and 1,
251
+ - and the certificate is tied to the same `lambda` that was computed earlier.
252
+
253
+ This is the key guard that stops unrelated or bogus certificates from being reused.
254
+
255
+ ### 5. Derive an envelope for the false-positive rate
256
+
257
+ Using monotonicity, the file turns bounds on `exp(-lambda)` into bounds on:
258
+
259
+ ```text
260
+ (1 - exp(-lambda))^k
261
+ ```
262
+
263
+ That produces a lower and upper bound for the false-positive rate.
264
+
265
+ The important point is that this step happens **only after** certificate validation.
266
+
267
+ ### 6. Compare against operational budgets
268
+
269
+ Finally, it checks:
270
+
271
+ - the false-positive rate is below the configured rate budget,
272
+ - the expected number of extra exact lookups is below the configured workload budget,
273
+ - and those derived quantities are themselves sensible.
274
+
275
+ If all checks pass, the artifact is accepted.
276
+
277
+ ---
278
+
279
+ ## Why the hardening matters
280
+
281
+ This is not just a technical patch. It illustrates a broader lesson for formal engineering.
282
+
283
+ When people first write down a proof-oriented model, they often focus on the intended path:
284
+
285
+ - compute the quantity,
286
+ - compare it with a threshold,
287
+ - derive a conclusion.
288
+
289
+ But in real high-trust work, you also need to think about the _bad path_:
290
+
291
+ - What if the parameters are malformed?
292
+ - What if a certificate is unrelated to the current instance?
293
+ - What if an intermediate result has the right type but the wrong meaning?
294
+
295
+ The hardened example shows how to make those concerns explicit inside the rules.
296
+
297
+ ---
298
+
299
+ ## Why this matters beyond Bloom filters
300
+
301
+ This example is really about something bigger:
302
+
303
+ > Can an RDF/N3 specification describe not just data, but also quantified engineering guarantees with guards against misuse?
304
+
305
+ Here the answer is yes.
306
+
307
+ The same style can be reused for other advanced settings:
308
+
309
+ - approximate indexes,
310
+ - cache hit/miss guarantees,
311
+ - network reliability envelopes,
312
+ - control loops with bounded error,
313
+ - cryptographic or security budget checks,
314
+ - data quality thresholds,
315
+ - probabilistic screening steps followed by exact confirmation.
316
+
317
+ The Bloom-filter story is just a very concrete and easy-to-recognize case.
318
+
319
+ ---
320
+
321
+ ## A good mental model
322
+
323
+ You can think of the example like an airport security line:
324
+
325
+ - the Bloom filter is the fast first screen,
326
+ - the canonical graph is the careful manual check,
327
+ - and the decimal certificate says how often the fast screen may send someone to manual inspection unnecessarily.
328
+
329
+ The hardened version adds one more idea:
330
+
331
+ - it also checks that the calibration sheet belongs to **this** scanner and not to some other machine.
332
+
333
+ That is what the `certifiedLambda` tie-in is doing.
334
+
335
+ ---
336
+
337
+ ## What makes this example special in N3
338
+
339
+ A lot of Semantic Web examples focus on:
340
+
341
+ - class hierarchies,
342
+ - vocabulary mappings,
343
+ - policy matching,
344
+ - or graph transformations.
345
+
346
+ This one goes further.
347
+
348
+ It combines:
349
+
350
+ - RDF structure,
351
+ - exact graph invariants,
352
+ - operational policy,
353
+ - decimal arithmetic,
354
+ - a transcendental approximation certificate,
355
+ - and explicit guards against malformed inputs.
356
+
357
+ So it is a good illustration of N3 as a language for **machine-readable engineering arguments**, not just for linked data publishing.
358
+
359
+ ---
360
+
361
+ ## Takeaway
362
+
363
+ This example shows that a formally specified RDF graph component can make a strong claim like:
364
+
365
+ > “Our fast prefilter is approximate, but its approximation is explicitly bounded, tied to the right operating point, and final correctness still comes from an exact graph.”
366
+
367
+ That is exactly the kind of statement people care about in high-trust software.
368
+
369
+ And the neat part is that the statement is not only written in prose—it is represented as data and rules that a reasoner can check.
370
+
371
+ [1]: https://eyereasoner.github.io/eyeling/demo?url=https://raw.githubusercontent.com/eyereasoner/eyeling/refs/heads/main/examples/high-trust-rdf-bloom-envelope.n3 'Playground'
@@ -4,7 +4,7 @@ When people say “map two data models,” they mean:
4
4
 
5
5
  > **Taking data described using one vocabulary (Model A) and expressing the same meaning using another vocabulary (Model B).**
6
6
 
7
- In the Semantic Web / Linked Data world, a “data model” is often a **set of RDF terms** (classes + properties) defined by an ontology or vocabulary—like **schema.org** or **FOAF**.
7
+ In the Semantic Web / Linked Data world, a “data model” is often a **set of RDF terms** (classes + properties) defined by an ontology or vocabulary—like **schema.org** or **FOAF** ([Playground][1]).
8
8
 
9
9
  ---
10
10
 
@@ -217,3 +217,5 @@ Mapping two models is about **translating meaning across vocabularies**.
217
217
  - You write **N3 rules** that recognize schema.org patterns
218
218
  - You **derive FOAF triples**
219
219
  - The result is data that can be consumed as if it were FOAF, without rewriting your original dataset
220
+
221
+ [1]: https://eyereasoner.github.io/eyeling/demo?url=https://raw.githubusercontent.com/eyereasoner/eyeling/refs/heads/main/examples/schema-foaf-mapping.n3 'Playground'
@@ -0,0 +1,281 @@
1
+ # =============================================================================
2
+ # Decimal transcendental certificate for a high-trust RDF graph artifact
3
+ #
4
+ # Why this example exists:
5
+ # It shows how xsd:decimal can carry a machine-checkable certificate for a
6
+ # transcendental quantity inside a formally specified RDF graph component,
7
+ # while making acceptance depend on explicit sanity and certificate checks.
8
+ #
9
+ # Engineering story:
10
+ # We have one immutable RDF graph snapshot, one verified SPO index snapshot,
11
+ # and one Bloom prefilter used only to accelerate negative membership checks.
12
+ #
13
+ # Trust contract:
14
+ # * correctness never depends on the Bloom filter alone
15
+ # * every maybe-positive answer is confirmed against the canonical graph
16
+ # * the Bloom filter is used only to avoid needless exact lookups on definite
17
+ # negatives
18
+ #
19
+ # The transcendental part:
20
+ # The usual false-positive approximation uses exp(-k*n/m).
21
+ # For n = 1200 triples, m = 16384 bits, k = 7 hash functions,
22
+ # lambda = k*n/m = 0.5126953125 and exp(-lambda) is transcendental.
23
+ #
24
+ # Decimal-first move:
25
+ # We do not ask the engine to know the exact real exp(-lambda).
26
+ # We store a trusted xsd:decimal interval certificate
27
+ #
28
+ # 0.5988792348 <= exp(-0.5126953125) <= 0.5988792349
29
+ #
30
+ # and derive a decimal envelope for the false-positive rate
31
+ #
32
+ # (1 - exp(-lambda))^k
33
+ #
34
+ # together with an operational budget on extra exact lookups.
35
+ #
36
+ # What is certified:
37
+ # * canonical graph and SPO index agree on triple count
38
+ # * the transcendental interval is well-formed and contractive
39
+ # * the Bloom false-positive rate is below 0.002 per negative lookup
40
+ # * over 50,000 negative lookups, expected extra exact confirmations stay
41
+ # below 100, so the artifact is acceptable for high-trust deployment
42
+ # =============================================================================
43
+
44
+ @prefix : <http://example.org/high-trust-rdf#>.
45
+ @prefix math: <http://www.w3.org/2000/10/swap/math#>.
46
+ @prefix log: <http://www.w3.org/2000/10/swap/log#>.
47
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
48
+
49
+ # ----------
50
+ # Parameters
51
+ # ----------
52
+
53
+ :artifact a :HighTrustRdfArtifact;
54
+ :canonicalTripleCount 1200;
55
+ :spoIndexTripleCount 1200;
56
+ :bloomBits 16384;
57
+ :hashFunctions 7;
58
+ :negativeLookupsPerBatch 50000;
59
+ :fpRateBudget 0.002;
60
+ :extraExactLookupsBudget 100.0;
61
+ :exactTranscendentalSymbol "exp(-k*n/m)";
62
+ :certifiedLambda 0.5126953125;
63
+ :expMinusLambdaLower 0.5988792348;
64
+ :expMinusLambdaUpper 0.5988792349;
65
+ :maybePositivePolicy :ConfirmAgainstCanonicalGraph;
66
+ :definiteNegativePolicy :ReturnAbsent.
67
+
68
+ # ----------------
69
+ # Parameter sanity
70
+ # ----------------
71
+
72
+ {
73
+ :artifact :canonicalTripleCount ?n;
74
+ :spoIndexTripleCount ?s;
75
+ :bloomBits ?m;
76
+ :hashFunctions ?k;
77
+ :negativeLookupsPerBatch ?q;
78
+ :fpRateBudget ?r;
79
+ :extraExactLookupsBudget ?e.
80
+ ?n math:greaterThan 0.
81
+ ?s math:greaterThan 0.
82
+ ?m math:greaterThan 0.
83
+ ?k math:greaterThan 0.
84
+ ?q math:greaterThan 0.
85
+ ?r math:greaterThan 0.
86
+ ?e math:greaterThan 0.
87
+ }
88
+ =>
89
+ {
90
+ :artifact :parameterSanity true.
91
+ }.
92
+
93
+ # -------------------------------------------------
94
+ # Exact structural agreement of graph and SPO index
95
+ # -------------------------------------------------
96
+
97
+ {
98
+ :artifact :canonicalTripleCount ?n;
99
+ :spoIndexTripleCount ?n.
100
+ }
101
+ =>
102
+ {
103
+ :artifact :indexAgreement true.
104
+ :artifact :tripleCount ?n.
105
+ }.
106
+
107
+ # -------------------------------------------
108
+ # Exact load factor lambda = k*n/m as decimal
109
+ # -------------------------------------------
110
+
111
+ {
112
+ :artifact :parameterSanity true;
113
+ :tripleCount ?n;
114
+ :hashFunctions ?k;
115
+ :bloomBits ?m.
116
+ ( ?k ?n ) math:product ?kn.
117
+ ( ?kn ?m ) math:quotient ?lambda.
118
+ }
119
+ =>
120
+ {
121
+ :artifact :lambda ?lambda.
122
+ }.
123
+
124
+ # -----------------------------------------------------------
125
+ # The stored decimal interval is a finite certificate for the
126
+ # transcendental quantity exp(-lambda)
127
+ # -----------------------------------------------------------
128
+
129
+ {
130
+ :artifact :lambda ?lambda;
131
+ :certifiedLambda ?lambda;
132
+ :expMinusLambdaLower ?lo;
133
+ :expMinusLambdaUpper ?hi.
134
+ ?lambda math:greaterThan 0.
135
+ ?lo math:lessThan ?hi.
136
+ ?lo math:greaterThan 0.
137
+ ?hi math:lessThan 1.
138
+ }
139
+ =>
140
+ {
141
+ :artifact :expIntervalCertificate :CertifiedDecimalInterval.
142
+ }.
143
+
144
+ # --------------------------------
145
+ # False-positive envelope
146
+ # fp = (1 - exp(-lambda))^k
147
+ # If lo <= exp(-lambda) <= hi then
148
+ # 1-hi <= 1-exp(-lambda) <= 1-lo
149
+ # so
150
+ # (1-hi)^k <= fp <= (1-lo)^k
151
+ # --------------------------------
152
+
153
+ {
154
+ :artifact :expIntervalCertificate :CertifiedDecimalInterval;
155
+ :hashFunctions ?k;
156
+ :expMinusLambdaLower ?eLo;
157
+ :expMinusLambdaUpper ?eHi.
158
+ ( 1.0 ?eHi ) math:difference ?oneMinusLo.
159
+ ( 1.0 ?eLo ) math:difference ?oneMinusHi.
160
+ ( ?oneMinusLo ?k ) math:exponentiation ?fpLo.
161
+ ( ?oneMinusHi ?k ) math:exponentiation ?fpHi.
162
+ }
163
+ =>
164
+ {
165
+ :artifact :fpRateLower ?fpLo;
166
+ :fpRateUpper ?fpHi.
167
+ }.
168
+
169
+ # ----------------------------
170
+ # Rate budget and batch budget
171
+ # ----------------------------
172
+
173
+ {
174
+ :artifact :fpRateUpper ?fpHi;
175
+ :fpRateBudget ?budget.
176
+ ?fpHi math:greaterThan 0.
177
+ ?fpHi math:lessThan ?budget.
178
+ }
179
+ =>
180
+ {
181
+ :artifact :withinFpRateBudget true.
182
+ }.
183
+
184
+ {
185
+ :artifact :negativeLookupsPerBatch ?q;
186
+ :fpRateUpper ?fpHi.
187
+ ( ?q ?fpHi ) math:product ?extraHi.
188
+ }
189
+ =>
190
+ {
191
+ :artifact :expectedExtraExactLookupsUpper ?extraHi.
192
+ }.
193
+
194
+ {
195
+ :artifact :expectedExtraExactLookupsUpper ?extraHi;
196
+ :extraExactLookupsBudget ?budget.
197
+ ?extraHi math:greaterThan 0.
198
+ ?extraHi math:lessThan ?budget.
199
+ }
200
+ =>
201
+ {
202
+ :artifact :withinExactLookupBudget true.
203
+ }.
204
+
205
+ # -----------------------------------------------------------------
206
+ # High-trust acceptability: exact answers come from the canonical
207
+ # graph, while the decimal certificate keeps the prefilter workload
208
+ # inside a specified budget.
209
+ # ----------------------------------------------------------------
210
+
211
+ {
212
+ :artifact :parameterSanity true;
213
+ :indexAgreement true;
214
+ :expIntervalCertificate :CertifiedDecimalInterval;
215
+ :withinFpRateBudget true;
216
+ :withinExactLookupBudget true;
217
+ :maybePositivePolicy :ConfirmAgainstCanonicalGraph;
218
+ :definiteNegativePolicy :ReturnAbsent.
219
+ }
220
+ =>
221
+ {
222
+ :artifact :deploymentDecision :AcceptForHighTrustUse.
223
+ }.
224
+
225
+ # ---------------
226
+ # Readable output
227
+ # ---------------
228
+
229
+ {
230
+ :artifact :parameterSanity ?sanity;
231
+ :indexAgreement ?agreement;
232
+ :lambda ?lambda;
233
+ :certifiedLambda ?certifiedLambda;
234
+ :exactTranscendentalSymbol ?sym;
235
+ :expMinusLambdaLower ?eLo;
236
+ :expMinusLambdaUpper ?eHi;
237
+ :fpRateLower ?fpLo;
238
+ :fpRateUpper ?fpHi;
239
+ :expectedExtraExactLookupsUpper ?extraHi;
240
+ :deploymentDecision ?decision.
241
+ }
242
+ log:query
243
+ {
244
+ :result :summary (
245
+ "parameter-sanity" ?sanity
246
+ "index-agreement" ?agreement
247
+ "transcendental" ?sym
248
+ "lambda" ?lambda
249
+ "certified-lambda" ?certifiedLambda
250
+ "exp-lower" ?eLo
251
+ "exp-upper" ?eHi
252
+ "fp-lower" ?fpLo
253
+ "fp-upper" ?fpHi
254
+ "expected-extra-exact-lookups-upper" ?extraHi
255
+ "decision" ?decision
256
+ ).
257
+ }.
258
+
259
+ {
260
+ :artifact :expIntervalCertificate ?v.
261
+ }
262
+ log:query
263
+ {
264
+ :result :expIntervalCertificate ?v.
265
+ }.
266
+
267
+ {
268
+ :artifact :withinFpRateBudget ?v.
269
+ }
270
+ log:query
271
+ {
272
+ :result :withinFpRateBudget ?v.
273
+ }.
274
+
275
+ {
276
+ :artifact :withinExactLookupBudget ?v.
277
+ }
278
+ log:query
279
+ {
280
+ :result :withinExactLookupBudget ?v.
281
+ }.