Source/Packages

Realization.Nvidia.SM86.GreedyArgmaxSM86

packages/realizations/cooperative/nvidia-sm86/src/Realization/Nvidia/SM86/GreedyArgmaxSM86.alpha

1,978 lines222 declarations72.8 KiBSHA-256 b399c7cf28cc

Complete file · line 410

GreedyArgmaxSM86.alpha

Definition view
1module Realization.Nvidia.SM86.GreedyArgmaxSM86
2
3import Accelerator.SM86.Control
4import Accelerator.SM86.Immediate
5import Accelerator.SM86.Instruction
6import Accelerator.SM86.InstructionEncoding
7import Accelerator.SM86.Program
8import Accelerator.SM86.Types
9import Data.SHA256Digest
10import Std.Natural
11import Accelerator.SM86.NumericSemantics
12
13family GreedyArgmaxSM86ExecutionContract : Type 0
14constructor GreedyArgmaxSM86NativeOnly
15
16end-family
17
18family GreedyArgmaxSM86FailureCode : Type 0
19constructor GreedyArgmaxSM86VocabularyZero
20constructor GreedyArgmaxSM86VocabularyTooLarge
21constructor GreedyArgmaxSM86InstructionCountMismatch
22constructor GreedyArgmaxSM86EncodedInstructionCountMismatch
23constructor GreedyArgmaxSM86EncodedByteCountMismatch
24constructor GreedyArgmaxSM86RegisterCountMismatch
25constructor GreedyArgmaxSM86SharedByteCountMismatch
26constructor GreedyArgmaxSM86GridCountMismatch
27constructor GreedyArgmaxSM86ThreadCountMismatch
28constructor GreedyArgmaxSM86ImageEncodingFailed
29constructor GreedyArgmaxSM86ImageIdentityFailed
30constructor GreedyArgmaxSM86ImageIdentityLengthInvalid
31constructor GreedyArgmaxSM86HostFallbackDetected
32
33end-family
34
35family GreedyArgmaxSM86Validation : Type 0
36constructor GreedyArgmaxSM86ValidationAccepted
37constructor GreedyArgmaxSM86ValidationRejected
38field unrestricted greedyArgmaxSM86ValidationFailure : (family GreedyArgmaxSM86FailureCode)
39
40end-family
41
42family GreedyArgmaxSM86OutputReceipt : Type 0
43constructor GreedyArgmaxSM86OutputReceiptValue
44field unrestricted greedyArgmaxSM86ReceiptTokenOffset : Nat
45field unrestricted greedyArgmaxSM86ReceiptValidityOffset : Nat
46field unrestricted greedyArgmaxSM86ReceiptWordBytes : Nat
47field unrestricted greedyArgmaxSM86ReceiptValidValue : Nat
48field unrestricted greedyArgmaxSM86ReceiptInvalidValue : Nat
49
50end-family
51
52family GreedyArgmaxSM86ABI : Type 0
53constructor GreedyArgmaxSM86ABIValue
54field unrestricted greedyArgmaxSM86ABIConstantBank : Nat
55field unrestricted greedyArgmaxSM86ABIOutputPointerOffset : Nat
56field unrestricted greedyArgmaxSM86ABILogitsPointerOffset : Nat
57field unrestricted greedyArgmaxSM86ABILogitElementBytes : Nat
58field unrestricted greedyArgmaxSM86ABIReceipt : (family GreedyArgmaxSM86OutputReceipt)
59
60end-family
61
62family GreedyArgmaxSM86Manifest : Type 0
63constructor GreedyArgmaxSM86ManifestValue
64field unrestricted greedyArgmaxSM86ManifestVocabulary : Nat
65field unrestricted greedyArgmaxSM86ManifestFullSlots : Nat
66field unrestricted greedyArgmaxSM86ManifestTailLanes : Nat
67field unrestricted greedyArgmaxSM86ManifestExpectedInstructions : Nat
68field unrestricted greedyArgmaxSM86ManifestExpectedBytes : Nat
69field unrestricted greedyArgmaxSM86ManifestRegisters : Nat
70field unrestricted greedyArgmaxSM86ManifestSharedBytes : Nat
71field unrestricted greedyArgmaxSM86ManifestGridX : Nat
72field unrestricted greedyArgmaxSM86ManifestThreadsPerBlock : Nat
73field unrestricted greedyArgmaxSM86ManifestActiveLogitLoads : Nat
74field unrestricted greedyArgmaxSM86ManifestActiveFiniteChecks : Nat
75field unrestricted greedyArgmaxSM86ManifestInactiveFiniteChecks : Nat
76field unrestricted greedyArgmaxSM86ManifestTailMaskWrites : Nat
77field unrestricted greedyArgmaxSM86ManifestTieReductionStages : Nat
78field unrestricted greedyArgmaxSM86ManifestTokenWrites : Nat
79field unrestricted greedyArgmaxSM86ManifestValidityWrites : Nat
80field unrestricted greedyArgmaxSM86ManifestHostLogitReads : Nat
81field unrestricted greedyArgmaxSM86ManifestHostFallbackOperations : Nat
82field unrestricted greedyArgmaxSM86ManifestABI : (family GreedyArgmaxSM86ABI)
83
84end-family
85
86family GreedyArgmaxSM86Telemetry : Type 0
87constructor GreedyArgmaxSM86TelemetryValue
88field unrestricted greedyArgmaxSM86TelemetryContract : (family GreedyArgmaxSM86ExecutionContract)
89field unrestricted greedyArgmaxSM86TelemetryManifest : (family GreedyArgmaxSM86Manifest)
90field unrestricted greedyArgmaxSM86TelemetryObservedInstructions : Nat
91field unrestricted greedyArgmaxSM86TelemetryObservedBytes : Nat
92field unrestricted greedyArgmaxSM86TelemetryEncodingFields : Nat
93field unrestricted greedyArgmaxSM86TelemetryEncodingBits : Nat
94field unrestricted greedyArgmaxSM86TelemetryHighestEncodedBit : Nat
95field unrestricted greedyArgmaxSM86TelemetryIdentityInputBytes : Nat
96field unrestricted greedyArgmaxSM86TelemetryIdentityOutputBytes : Nat
97field unrestricted greedyArgmaxSM86TelemetryTailValidationSeparated : Nat
98field unrestricted greedyArgmaxSM86TelemetryLowestTokenTieBreak : Nat
99field unrestricted greedyArgmaxSM86TelemetryHostFallbackOperations : Nat
100
101end-family
102
103family GreedyArgmaxSM86Artifact : Type 0
104constructor GreedyArgmaxSM86ArtifactReady
105field unrestricted greedyArgmaxSM86ArtifactProgram : (family SM86Program)
106field unrestricted greedyArgmaxSM86ArtifactImage : Bytes
107field unrestricted greedyArgmaxSM86ArtifactImageSHA256 : Bytes
108field unrestricted greedyArgmaxSM86ArtifactManifest : (family GreedyArgmaxSM86Manifest)
109field unrestricted greedyArgmaxSM86ArtifactEncodingTelemetry : (family SM86ProgramEncodingTelemetry)
110field unrestricted greedyArgmaxSM86ArtifactIdentityTelemetry : (family SHA256DigestTelemetry)
111field unrestricted greedyArgmaxSM86ArtifactTelemetry : (family GreedyArgmaxSM86Telemetry)
112constructor GreedyArgmaxSM86ArtifactFailed
113field unrestricted greedyArgmaxSM86ArtifactFailure : (family GreedyArgmaxSM86FailureCode)
114field unrestricted greedyArgmaxSM86ArtifactFailureOrdinal : Nat
115field unrestricted greedyArgmaxSM86ArtifactFailureDetail : Bytes
116field unrestricted greedyArgmaxSM86ArtifactFailureTelemetry : (family GreedyArgmaxSM86Telemetry)
117
118end-family
119
120def greedyArgmaxSM86N1 =
121  (succ zero)
122
123def greedyArgmaxSM86N2 =
124  (byte-to-nat (byte 2))
125
126def greedyArgmaxSM86N4 =
127  (byte-to-nat (byte 4))
128
129def greedyArgmaxSM86N5 =
130  (byte-to-nat (byte 5))
131
132def greedyArgmaxSM86N7 =
133  (byte-to-nat (byte 7))
134
135def greedyArgmaxSM86N8 =
136  (byte-to-nat (byte 8))
137
138def greedyArgmaxSM86N12 =
139  (byte-to-nat (byte 12))
140
141def greedyArgmaxSM86N16 =
142  (byte-to-nat (byte 16))
143
144def greedyArgmaxSM86N23 =
145  (byte-to-nat (byte 23))
146
147def greedyArgmaxSM86N30 =
148  (byte-to-nat (byte 30))
149
150def greedyArgmaxSM86N31 =
151  (byte-to-nat (byte 31))
152
153def greedyArgmaxSM86N32 =
154  (byte-to-nat (byte 32))
155
156def greedyArgmaxSM86N33 =
157  (byte-to-nat (byte 33))
158
159def greedyArgmaxSM86N64 =
160  (byte-to-nat (byte 64))
161
162def greedyArgmaxSM86N96 =
163  (byte-to-nat (byte 96))
164
165def greedyArgmaxSM86N115 =
166  (byte-to-nat (byte 115))
167
168def greedyArgmaxSM86N251 =
169  (byte-to-nat (byte 251))
170
171def greedyArgmaxSM86N254 =
172  (byte-to-nat (byte 254))
173
174def greedyArgmaxSM86N255 =
175  (byte-to-nat (byte 255))
176
177def greedyArgmaxSM86N256 =
178  (succ greedyArgmaxSM86N255)
179
180def greedyArgmaxSM86N277 =
181  (naturalAdd
182    greedyArgmaxSM86N256
183    (naturalAdd greedyArgmaxSM86N16 greedyArgmaxSM86N5))
184
185def greedyArgmaxSM86N352 =
186  (naturalAdd greedyArgmaxSM86N256 greedyArgmaxSM86N96)
187
188def greedyArgmaxSM86N360 =
189  (naturalAdd greedyArgmaxSM86N352 greedyArgmaxSM86N8)
190
191def greedyArgmaxSM86N12288 =
192  (naturalMultiply (byte-to-nat (byte 48)) greedyArgmaxSM86N256)
193
194def greedyArgmaxSM86N49152 =
195  (naturalMultiply greedyArgmaxSM86N12288 greedyArgmaxSM86N4)
196
197def greedyArgmaxSM86N1717 =
198  (naturalAdd (naturalMultiply (byte-to-nat (byte 48)) greedyArgmaxSM86N30) greedyArgmaxSM86N277)
199
200def greedyArgmaxSM86N27472 =
201  (naturalMultiply greedyArgmaxSM86N1717 greedyArgmaxSM86N16)
202
203def greedyArgmaxSM86N10 =
204  (byte-to-nat (byte 10))
205
206def greedyArgmaxSM86MaximumVocabulary =
207  greedyArgmaxSM86N12288
208
209def greedyArgmaxSM86PromotedVocabulary =
210  greedyArgmaxSM86N12288
211
212def greedyArgmaxSM86PromotedInstructions =
213  greedyArgmaxSM86N1717
214
215def greedyArgmaxSM86PromotedBytes =
216  greedyArgmaxSM86N27472
217
218def greedyArgmaxSM86Registers =
219  greedyArgmaxSM86N32
220
221def greedyArgmaxSM86SharedBytes =
222  greedyArgmaxSM86N96
223
224def greedyArgmaxSM86GridX =
225  greedyArgmaxSM86N1
226
227def greedyArgmaxSM86ThreadsPerBlock =
228  greedyArgmaxSM86N256
229
230def greedyArgmaxSM86InstructionBytes =
231  greedyArgmaxSM86N16
232
233def greedyArgmaxSM86HostLogitReads =
234  zero
235
236def greedyArgmaxSM86HostFallbackOperations =
237  zero
238
239def greedyArgmaxSM86U0 =
240  sm86Unsigned32Zero
241
242def greedyArgmaxSM86U1 =
243  sm86Unsigned32One
244
245def greedyArgmaxSM86U4 =
246  (sm86Unsigned32 (byte 4) (byte 0) (byte 0) (byte 0))
247
248def greedyArgmaxSM86U7 =
249  (sm86Unsigned32 (byte 7) (byte 0) (byte 0) (byte 0))
250
251def greedyArgmaxSM86U8 =
252  (sm86Unsigned32 (byte 8) (byte 0) (byte 0) (byte 0))
253
254def greedyArgmaxSM86U12 =
255  (sm86Unsigned32 (byte 12) (byte 0) (byte 0) (byte 0))
256
257def greedyArgmaxSM86U31 =
258  (sm86Unsigned32 (byte 31) (byte 0) (byte 0) (byte 0))
259
260def greedyArgmaxSM86U254 =
261  (sm86Unsigned32 (byte 254) (byte 0) (byte 0) (byte 0))
262
263def greedyArgmaxSM86U352 =
264  (sm86Unsigned32 (byte 96) (byte 1) (byte 0) (byte 0))
265
266def greedyArgmaxSM86U356 =
267  (sm86Unsigned32 (byte 100) (byte 1) (byte 0) (byte 0))
268
269def greedyArgmaxSM86U360 =
270  (sm86Unsigned32 (byte 104) (byte 1) (byte 0) (byte 0))
271
272def greedyArgmaxSM86UFloatZero =
273  greedyArgmaxSM86U0
274
275def greedyArgmaxSM86UFloatOne =
276  (sm86Unsigned32 (byte 0) (byte 0) (byte 128) (byte 63))
277
278def greedyArgmaxSM86UFloatNegativeInfinity =
279  (sm86Unsigned32 (byte 0) (byte 0) (byte 128) (byte 255))
280
281def greedyArgmaxSM86UAbsMask =
282  (sm86Unsigned32 (byte 255) (byte 255) (byte 255) (byte 127))
283
284def greedyArgmaxSM86UByteMask =
285  (sm86Unsigned32 (byte 255) (byte 0) (byte 0) (byte 0))
286
287def greedyArgmaxSM86UMaximumToken =
288  (sm86Unsigned32 (byte 255) (byte 255) (byte 255) (byte 255))
289
290def greedyArgmaxSM86ByteLoopBackOffset =
291  (sm86Unsigned32 (byte 64) (byte 255) (byte 255) (byte 255))
292
293def greedyArgmaxSM86BackwardBranchDescriptor =
294  (sm86Unsigned32 (byte 255) (byte 255) (byte 131) (byte 3))
295
296def greedyArgmaxSM86R0 =
297  (sm86Register (byte 0))
298
299def greedyArgmaxSM86R1 =
300  (sm86Register (byte 1))
301
302def greedyArgmaxSM86R2 =
303  (sm86Register (byte 2))
304
305def greedyArgmaxSM86R3 =
306  (sm86Register (byte 3))
307
308def greedyArgmaxSM86R4 =
309  (sm86Register (byte 4))
310
311def greedyArgmaxSM86R6 =
312  (sm86Register (byte 6))
313
314def greedyArgmaxSM86R7 =
315  (sm86Register (byte 7))
316
317def greedyArgmaxSM86R8 =
318  (sm86Register (byte 8))
319
320def greedyArgmaxSM86R9 =
321  (sm86Register (byte 9))
322
323def greedyArgmaxSM86R10 =
324  (sm86Register (byte 10))
325
326def greedyArgmaxSM86R11 =
327  (sm86Register (byte 11))
328
329def greedyArgmaxSM86R12 =
330  (sm86Register (byte 12))
331
332def greedyArgmaxSM86R13 =
333  (sm86Register (byte 13))
334
335def greedyArgmaxSM86R14 =
336  (sm86Register (byte 14))
337
338def greedyArgmaxSM86R15 =
339  (sm86Register (byte 15))
340
341def greedyArgmaxSM86R16 =
342  (sm86Register (byte 16))
343
344def greedyArgmaxSM86R17 =
345  (sm86Register (byte 17))
346
347def greedyArgmaxSM86R18 =
348  (sm86Register (byte 18))
349
350def greedyArgmaxSM86R19 =
351  (sm86Register (byte 19))
352
353def greedyArgmaxSM86R20 =
354  (sm86Register (byte 20))
355
356def greedyArgmaxSM86R21 =
357  (sm86Register (byte 21))
358
359def greedyArgmaxSM86R22 =
360  (sm86Register (byte 22))
361
362def greedyArgmaxSM86R23 =
363  (sm86Register (byte 23))
364
365def greedyArgmaxSM86R24 =
366  (sm86Register (byte 24))
367
368def greedyArgmaxSM86R25 =
369  (sm86Register (byte 25))
370
371def greedyArgmaxSM86R26 =
372  (sm86Register (byte 26))
373
374def greedyArgmaxSM86R27 =
375  (sm86Register (byte 27))
376
377def greedyArgmaxSM86R28 =
378  (sm86Register (byte 28))
379
380def greedyArgmaxSM86R29 =
381  (sm86Register (byte 29))
382
383def greedyArgmaxSM86P0 : (family SM86Predicate) =
384  (constructor SM86Predicate SM86Predicate0)
385
386def greedyArgmaxSM86P1 : (family SM86Predicate) =
387  (constructor SM86Predicate SM86Predicate1)
388
389def greedyArgmaxSM86P2 : (family SM86Predicate) =
390  (constructor SM86Predicate SM86Predicate2)
391
392def greedyArgmaxSM86P3 : (family SM86Predicate) =
393  (constructor SM86Predicate SM86Predicate3)
394
395def greedyArgmaxSM86FloatMaximum : (family SM86FloatExtremum) =
396  (constructor SM86FloatExtremum SM86FloatMaximum)
397
398def greedyArgmaxSM86FloatMinimum : (family SM86FloatExtremum) =
399  (constructor SM86FloatExtremum SM86FloatMinimum)
400
401def greedyArgmaxSM86ShuffleButterfly : (family SM86ShuffleMode) =
402  (constructor SM86ShuffleMode SM86ShuffleButterfly)
403
404def greedyArgmaxSM86Set0 =
405  (sm86SetBarrierControl (constructor SM86Barrier SM86Barrier0))
406
407def greedyArgmaxSM86Set1 =
408  (sm86SetBarrierControl (constructor SM86Barrier SM86Barrier1))
409
410def greedyArgmaxSM86Set2 =
411  (sm86SetBarrierControl (constructor SM86Barrier SM86Barrier2))
412
413def greedyArgmaxSM86Wait0 =
414  (sm86WaitBarrierControl (constructor SM86WaitBarrier SM86WaitBarrier0))
415
416def greedyArgmaxSM86Wait1 =
417  (sm86WaitBarrierControl (constructor SM86WaitBarrier SM86WaitBarrier1))
418
419def greedyArgmaxSM86Wait2 =
420  (sm86WaitBarrierControl (constructor SM86WaitBarrier SM86WaitBarrier2))
421
422def greedyArgmaxSM86Next =
423  (lambda unrestricted body : (family SM86InstructionBody) .
424    (lambda unrestricted tail : (family SM86Program) .
425      (constructor SM86Program SM86ProgramNext (sm86Instruction body) tail)))
426
427def greedyArgmaxSM86When =
428  (lambda unrestricted predicate : (family SM86Predicate) .
429    (lambda unrestricted body : (family SM86InstructionBody) .
430      (lambda unrestricted tail : (family SM86Program) .
431        (constructor SM86Program SM86ProgramNext (sm86PredicatedInstruction predicate body) tail))))
432
433def greedyArgmaxSM86WhenNot =
434  (lambda unrestricted predicate : (family SM86Predicate) .
435    (lambda unrestricted body : (family SM86InstructionBody) .
436      (lambda unrestricted tail : (family SM86Program) .
437        (constructor
438          SM86Program
439          SM86ProgramNext
440          (sm86NegatedPredicatedInstruction predicate body)
441          tail))))
442
443def greedyArgmaxSM86Unsigned32FromNatural =
444  (lambda unrestricted value : Nat .
445    (app
446      (lambda unrestricted quotient1 : Nat .
447        (app
448          (lambda unrestricted quotient2 : Nat .
449            (app
450              (lambda unrestricted quotient3 : Nat .
451                (sm86Unsigned32
452                  (nat-to-byte (naturalModuloUnchecked value greedyArgmaxSM86N256))
453                  (nat-to-byte (naturalModuloUnchecked quotient1 greedyArgmaxSM86N256))
454                  (nat-to-byte (naturalModuloUnchecked quotient2 greedyArgmaxSM86N256))
455                  (nat-to-byte (naturalModuloUnchecked quotient3 greedyArgmaxSM86N256))))
456              (naturalDivideUnchecked quotient2 greedyArgmaxSM86N256)))
457          (naturalDivideUnchecked quotient1 greedyArgmaxSM86N256)))
458      (naturalDivideUnchecked value greedyArgmaxSM86N256)))
459
460def greedyArgmaxSM86ReceiptValue =
461  (constructor
462    GreedyArgmaxSM86OutputReceipt
463    GreedyArgmaxSM86OutputReceiptValue
464    zero
465    greedyArgmaxSM86N4
466    greedyArgmaxSM86N4
467    greedyArgmaxSM86N1
468    zero)
469
470def greedyArgmaxSM86ABIValue =
471  (constructor
472    GreedyArgmaxSM86ABI
473    GreedyArgmaxSM86ABIValue
474    zero
475    greedyArgmaxSM86N352
476    greedyArgmaxSM86N360
477    greedyArgmaxSM86N4
478    greedyArgmaxSM86ReceiptValue)
479
480def greedyArgmaxSM86FailureCodeBytes =
481  (lambda unrestricted code : (family GreedyArgmaxSM86FailureCode) .
482    (eliminate
483      GreedyArgmaxSM86FailureCode
484      (lambda unrestricted current : (family GreedyArgmaxSM86FailureCode) . Bytes)
485      code
486      (branch GreedyArgmaxSM86VocabularyZero . b"ALPHA-SM86-GREEDY-001")
487      (branch GreedyArgmaxSM86VocabularyTooLarge . b"ALPHA-SM86-GREEDY-002")
488      (branch GreedyArgmaxSM86InstructionCountMismatch . b"ALPHA-SM86-GREEDY-003")
489      (branch GreedyArgmaxSM86EncodedInstructionCountMismatch . b"ALPHA-SM86-GREEDY-004")
490      (branch GreedyArgmaxSM86EncodedByteCountMismatch . b"ALPHA-SM86-GREEDY-005")
491      (branch GreedyArgmaxSM86RegisterCountMismatch . b"ALPHA-SM86-GREEDY-006")
492      (branch GreedyArgmaxSM86SharedByteCountMismatch . b"ALPHA-SM86-GREEDY-007")
493      (branch GreedyArgmaxSM86GridCountMismatch . b"ALPHA-SM86-GREEDY-008")
494      (branch GreedyArgmaxSM86ThreadCountMismatch . b"ALPHA-SM86-GREEDY-009")
495      (branch GreedyArgmaxSM86ImageEncodingFailed . b"ALPHA-SM86-GREEDY-010")
496      (branch GreedyArgmaxSM86ImageIdentityFailed . b"ALPHA-SM86-GREEDY-011")
497      (branch GreedyArgmaxSM86ImageIdentityLengthInvalid . b"ALPHA-SM86-GREEDY-012")
498      (branch GreedyArgmaxSM86HostFallbackDetected . b"ALPHA-SM86-GREEDY-013")))
499
500def greedyArgmaxSM86ValidateVocabulary =
501  (lambda unrestricted vocabulary : Nat .
502    (nat-eliminate
503      (lambda unrestricted positive : Nat . (family GreedyArgmaxSM86Validation))
504      (constructor
505        GreedyArgmaxSM86Validation
506        GreedyArgmaxSM86ValidationRejected
507        (constructor GreedyArgmaxSM86FailureCode GreedyArgmaxSM86VocabularyZero))
508      (lambda unrestricted positivePredecessor : Nat .
509        (lambda unrestricted positiveInduction : (family GreedyArgmaxSM86Validation) .
510          (nat-eliminate
511            (lambda unrestricted bounded : Nat . (family GreedyArgmaxSM86Validation))
512            (constructor
513              GreedyArgmaxSM86Validation
514              GreedyArgmaxSM86ValidationRejected
515              (constructor GreedyArgmaxSM86FailureCode GreedyArgmaxSM86VocabularyTooLarge))
516            (lambda unrestricted boundedPredecessor : Nat .
517              (lambda unrestricted boundedInduction : (family GreedyArgmaxSM86Validation) .
518                (constructor GreedyArgmaxSM86Validation GreedyArgmaxSM86ValidationAccepted)))
519            (naturalLessOrEqual vocabulary greedyArgmaxSM86MaximumVocabulary))))
520      (naturalNonzero vocabulary)))
521
522def greedyArgmaxSM86InitialProgram : (family SM86Program) =
523  (greedyArgmaxSM86Next
524    (constructor
525      SM86InstructionBody
526      SM86SpecialToRegister
527      greedyArgmaxSM86R0
528      (constructor SM86SpecialRegister SM86ThreadIdX)
529      greedyArgmaxSM86Set0)
530    (greedyArgmaxSM86Next
531      (constructor
532        SM86InstructionBody
533        SM86MoveImmediate
534        greedyArgmaxSM86R4
535        greedyArgmaxSM86U4
536        greedyArgmaxSM86Wait0)
537      (greedyArgmaxSM86Next
538        (constructor
539          SM86InstructionBody
540          SM86MoveImmediate
541          greedyArgmaxSM86R7
542          greedyArgmaxSM86UFloatNegativeInfinity
543          sm86SafeControl)
544        (greedyArgmaxSM86Next
545          (constructor
546            SM86InstructionBody
547            SM86MoveImmediate
548            greedyArgmaxSM86R8
549            greedyArgmaxSM86UMaximumToken
550            sm86SafeControl)
551          (greedyArgmaxSM86Next
552            (constructor
553              SM86InstructionBody
554              SM86MoveImmediate
555              greedyArgmaxSM86R9
556              greedyArgmaxSM86UAbsMask
557              sm86SafeControl)
558            (greedyArgmaxSM86Next
559              (constructor
560                SM86InstructionBody
561                SM86MoveImmediate
562                greedyArgmaxSM86R12
563                greedyArgmaxSM86UFloatZero
564                sm86SafeControl)
565              (greedyArgmaxSM86Next
566                (constructor
567                  SM86InstructionBody
568                  SM86MoveImmediate
569                  greedyArgmaxSM86R11
570                  greedyArgmaxSM86UByteMask
571                  sm86SafeControl)
572                sm86ProgramEmpty)))))))
573
574def greedyArgmaxSM86ValidateCandidateProgram : (family SM86Program) =
575  (greedyArgmaxSM86Next
576    (constructor
577      SM86InstructionBody
578      SM86ShiftRightImmediate
579      greedyArgmaxSM86R14
580      greedyArgmaxSM86R10
581      (byte 23)
582      sm86SafeControl)
583    (greedyArgmaxSM86Next
584      (constructor
585        SM86InstructionBody
586        SM86LogicThreeInputTruthTable
587        greedyArgmaxSM86R14
588        greedyArgmaxSM86R14
589        greedyArgmaxSM86R11
590        (byte 192)
591        sm86SafeControl)
592      (greedyArgmaxSM86Next
593        (constructor
594          SM86InstructionBody
595          SM86PredicateGreaterThanImmediate
596          greedyArgmaxSM86P1
597          greedyArgmaxSM86R14
598          greedyArgmaxSM86U254
599          sm86SafeControl)
600        (greedyArgmaxSM86Next
601          (constructor
602            SM86InstructionBody
603            SM86MoveImmediate
604            greedyArgmaxSM86R13
605            greedyArgmaxSM86UFloatZero
606            sm86SafeControl)
607          (greedyArgmaxSM86When
608            greedyArgmaxSM86P1
609            (constructor
610              SM86InstructionBody
611              SM86MoveImmediate
612              greedyArgmaxSM86R13
613              greedyArgmaxSM86UFloatOne
614              sm86SafeControl)
615            (greedyArgmaxSM86Next
616              (constructor
617                SM86InstructionBody
618                SM86FloatAdd
619                greedyArgmaxSM86R12
620                greedyArgmaxSM86R12
621                greedyArgmaxSM86R13
622                sm86SafeControl)
623              (greedyArgmaxSM86When
624                greedyArgmaxSM86P1
625                (constructor
626                  SM86InstructionBody
627                  SM86MoveImmediate
628                  greedyArgmaxSM86R10
629                  greedyArgmaxSM86UFloatNegativeInfinity
630                  sm86SafeControl)
631                sm86ProgramEmpty)))))))
632
633def greedyArgmaxSM86CandidateProgram : (family SM86Program) =
634  (greedyArgmaxSM86Next
635    (constructor
636      SM86InstructionBody
637      SM86FloatMinimumOrMaximum
638      greedyArgmaxSM86R14
639      greedyArgmaxSM86R7
640      greedyArgmaxSM86R10
641      greedyArgmaxSM86FloatMaximum
642      sm86SafeControl)
643    (greedyArgmaxSM86Next
644      (constructor
645        SM86InstructionBody
646        SM86FloatNegate
647        greedyArgmaxSM86R15
648        greedyArgmaxSM86R14
649        sm86SafeControl)
650      (greedyArgmaxSM86Next
651        (constructor
652          SM86InstructionBody
653          SM86FloatAdd
654          greedyArgmaxSM86R16
655          greedyArgmaxSM86R7
656          greedyArgmaxSM86R15
657          sm86SafeControl)
658        (greedyArgmaxSM86Next
659          (constructor
660            SM86InstructionBody
661            SM86LogicThreeInputTruthTable
662            greedyArgmaxSM86R16
663            greedyArgmaxSM86R16
664            greedyArgmaxSM86R9
665            (byte 192)
666            sm86SafeControl)
667          (greedyArgmaxSM86Next
668            (constructor
669              SM86InstructionBody
670              SM86PredicateGreaterThanImmediate
671              greedyArgmaxSM86P2
672              greedyArgmaxSM86R16
673              greedyArgmaxSM86U0
674              sm86SafeControl)
675            (greedyArgmaxSM86When
676              greedyArgmaxSM86P2
677              (constructor
678                SM86InstructionBody
679                SM86IntegerAddThreeImmediate
680                greedyArgmaxSM86R8
681                greedyArgmaxSM86R3
682                greedyArgmaxSM86U0
683                sm86SafeControl)
684              (greedyArgmaxSM86Next
685                (constructor
686                  SM86InstructionBody
687                  SM86FloatAdd
688                  greedyArgmaxSM86R17
689                  greedyArgmaxSM86R10
690                  greedyArgmaxSM86R15
691                  sm86SafeControl)
692                (greedyArgmaxSM86Next
693                  (constructor
694                    SM86InstructionBody
695                    SM86LogicThreeInputTruthTable
696                    greedyArgmaxSM86R17
697                    greedyArgmaxSM86R17
698                    greedyArgmaxSM86R9
699                    (byte 192)
700                    sm86SafeControl)
701                  (greedyArgmaxSM86Next
702                    (constructor
703                      SM86InstructionBody
704                      SM86PredicateGreaterThanImmediate
705                      greedyArgmaxSM86P3
706                      greedyArgmaxSM86R17
707                      greedyArgmaxSM86U0
708                      sm86SafeControl)
709                    (greedyArgmaxSM86When
710                      greedyArgmaxSM86P3
711                      (constructor
712                        SM86InstructionBody
713                        SM86IntegerAddThreeImmediate
714                        greedyArgmaxSM86R3
715                        greedyArgmaxSM86R8
716                        greedyArgmaxSM86U0
717                        sm86SafeControl)
718                      (greedyArgmaxSM86Next
719                        (constructor
720                          SM86InstructionBody
721                          SM86IntegerToFloat
722                          greedyArgmaxSM86R23
723                          greedyArgmaxSM86R8
724                          sm86SafeControl)
725                        (greedyArgmaxSM86Next
726                          (constructor
727                            SM86InstructionBody
728                            SM86IntegerToFloat
729                            greedyArgmaxSM86R24
730                            greedyArgmaxSM86R3
731                            sm86SafeControl)
732                          (greedyArgmaxSM86Next
733                            (constructor
734                              SM86InstructionBody
735                              SM86FloatMinimumOrMaximum
736                              greedyArgmaxSM86R25
737                              greedyArgmaxSM86R23
738                              greedyArgmaxSM86R24
739                              greedyArgmaxSM86FloatMinimum
740                              sm86SafeControl)
741                            (greedyArgmaxSM86Next
742                              (constructor
743                                SM86InstructionBody
744                                SM86FloatNegate
745                                greedyArgmaxSM86R26
746                                greedyArgmaxSM86R25
747                                sm86SafeControl)
748                              (greedyArgmaxSM86Next
749                                (constructor
750                                  SM86InstructionBody
751                                  SM86FloatAdd
752                                  greedyArgmaxSM86R27
753                                  greedyArgmaxSM86R23
754                                  greedyArgmaxSM86R26
755                                  sm86SafeControl)
756                                (greedyArgmaxSM86Next
757                                  (constructor
758                                    SM86InstructionBody
759                                    SM86LogicThreeInputTruthTable
760                                    greedyArgmaxSM86R27
761                                    greedyArgmaxSM86R27
762                                    greedyArgmaxSM86R9
763                                    (byte 192)
764                                    sm86SafeControl)
765                                  (greedyArgmaxSM86Next
766                                    (constructor
767                                      SM86InstructionBody
768                                      SM86PredicateGreaterThanImmediate
769                                      greedyArgmaxSM86P1
770                                      greedyArgmaxSM86R27
771                                      greedyArgmaxSM86U0
772                                      sm86SafeControl)
773                                    (greedyArgmaxSM86When
774                                      greedyArgmaxSM86P1
775                                      (constructor
776                                        SM86InstructionBody
777                                        SM86IntegerAddThreeImmediate
778                                        greedyArgmaxSM86R8
779                                        greedyArgmaxSM86R3
780                                        greedyArgmaxSM86U0
781                                        sm86SafeControl)
782                                      (greedyArgmaxSM86Next
783                                        (constructor
784                                        SM86InstructionBody
785                                        SM86IntegerAddThreeImmediate
786                                        greedyArgmaxSM86R7
787                                        greedyArgmaxSM86R14
788                                        greedyArgmaxSM86U0
789                                        sm86SafeControl)
790                                        sm86ProgramEmpty)))))))))))))))))))
791
792def greedyArgmaxSM86ByteVocabularyInitialProgram : (family SM86Program) =
793  (greedyArgmaxSM86Next
794    (constructor
795      SM86InstructionBody
796      SM86MoveImmediate
797      greedyArgmaxSM86R3
798      greedyArgmaxSM86U0
799      sm86SafeControl)
800    (greedyArgmaxSM86Next
801      (constructor
802        SM86InstructionBody
803        SM86MoveImmediate
804        greedyArgmaxSM86R4
805        greedyArgmaxSM86U4
806        sm86SafeControl)
807      (greedyArgmaxSM86Next
808        (constructor
809          SM86InstructionBody
810          SM86MoveImmediate
811          greedyArgmaxSM86R7
812          greedyArgmaxSM86UFloatNegativeInfinity
813          sm86SafeControl)
814        (greedyArgmaxSM86Next
815          (constructor
816            SM86InstructionBody
817            SM86MoveImmediate
818            greedyArgmaxSM86R8
819            greedyArgmaxSM86UMaximumToken
820            sm86SafeControl)
821          sm86ProgramEmpty))))
822
823def greedyArgmaxSM86AscendingCandidateProgram : (family SM86Program) =
824  (greedyArgmaxSM86Next
825    (constructor
826      SM86InstructionBody
827      SM86FloatMinimumOrMaximum
828      greedyArgmaxSM86R14
829      greedyArgmaxSM86R7
830      greedyArgmaxSM86R10
831      greedyArgmaxSM86FloatMaximum
832      sm86SafeControl)
833    (greedyArgmaxSM86Next
834      (constructor
835        SM86InstructionBody
836        SM86FloatNegate
837        greedyArgmaxSM86R15
838        greedyArgmaxSM86R14
839        sm86SafeControl)
840      (greedyArgmaxSM86Next
841        (constructor
842          SM86InstructionBody
843          SM86FloatAdd
844          greedyArgmaxSM86R16
845          greedyArgmaxSM86R7
846          greedyArgmaxSM86R15
847          sm86SafeControl)
848        (greedyArgmaxSM86Next
849          (constructor
850            SM86InstructionBody
851            SM86PredicateGreaterThanImmediate
852            greedyArgmaxSM86P2
853            greedyArgmaxSM86R16
854            greedyArgmaxSM86U0
855            sm86SafeControl)
856          (greedyArgmaxSM86When
857            greedyArgmaxSM86P2
858            (constructor
859              SM86InstructionBody
860              SM86IntegerAddThreeImmediate
861              greedyArgmaxSM86R8
862              greedyArgmaxSM86R3
863              greedyArgmaxSM86U0
864              sm86SafeControl)
865            (greedyArgmaxSM86Next
866              (constructor
867                SM86InstructionBody
868                SM86IntegerAddThreeImmediate
869                greedyArgmaxSM86R7
870                greedyArgmaxSM86R14
871                greedyArgmaxSM86U0
872                sm86SafeControl)
873              sm86ProgramEmpty))))))
874
875-- Bob uses one thread and one native backward branch to scan all 256 byte
876-- logits.  The twelve-instruction loop advances R3 from 0 through 255, so the
877-- branch offset is -192 bytes from the instruction following BRA.
878def greedyArgmaxSM86ByteVocabularyLoopProgram : (family SM86Program) =
879  (sm86ProgramAppend
880    (greedyArgmaxSM86Next
881      (constructor
882        SM86InstructionBody
883        SM86IntegerMultiplyAddWideConstant
884        greedyArgmaxSM86R24
885        greedyArgmaxSM86R3
886        greedyArgmaxSM86R4
887        (byte 0)
888        greedyArgmaxSM86U360
889        sm86SafeControl)
890      (greedyArgmaxSM86Next
891        (constructor
892          SM86InstructionBody
893          SM86LoadGlobal
894          greedyArgmaxSM86R10
895          greedyArgmaxSM86R24
896          greedyArgmaxSM86U0
897          greedyArgmaxSM86Set0)
898        (greedyArgmaxSM86Next
899          (constructor
900            SM86InstructionBody
901            SM86IntegerAddThreeImmediate
902            greedyArgmaxSM86R10
903            greedyArgmaxSM86R10
904            greedyArgmaxSM86U0
905            greedyArgmaxSM86Wait0)
906          sm86ProgramEmpty)))
907    (sm86ProgramAppend
908      greedyArgmaxSM86AscendingCandidateProgram
909      (greedyArgmaxSM86Next
910        (constructor
911          SM86InstructionBody
912          SM86IntegerAddThreeImmediate
913          greedyArgmaxSM86R3
914          greedyArgmaxSM86R3
915          greedyArgmaxSM86U1
916          sm86SafeControl)
917        (greedyArgmaxSM86Next
918          (constructor
919            SM86InstructionBody
920            SM86PredicateGreaterThanImmediate
921            greedyArgmaxSM86P0
922            greedyArgmaxSM86R3
923            greedyArgmaxSM86UByteMask
924            sm86SafeControl)
925          (greedyArgmaxSM86WhenNot
926            greedyArgmaxSM86P0
927            (constructor
928              SM86InstructionBody
929              SM86Branch
930              greedyArgmaxSM86ByteLoopBackOffset
931              greedyArgmaxSM86BackwardBranchDescriptor
932              sm86BranchControl)
933            sm86ProgramEmpty)))))
934
935def greedyArgmaxSM86FullSlotProgram =
936  (lambda unrestricted slot : Nat .
937    (app
938      (lambda unrestricted base : Nat .
939        (sm86ProgramAppend
940          (greedyArgmaxSM86Next
941            (constructor
942              SM86InstructionBody
943              SM86IntegerAddThreeImmediate
944              greedyArgmaxSM86R3
945              greedyArgmaxSM86R0
946              (greedyArgmaxSM86Unsigned32FromNatural base)
947              sm86SafeControl)
948            (greedyArgmaxSM86Next
949              (constructor
950                SM86InstructionBody
951                SM86IntegerMultiplyAddWideConstant
952                greedyArgmaxSM86R28
953                greedyArgmaxSM86R3
954                greedyArgmaxSM86R4
955                (byte 0)
956                greedyArgmaxSM86U360
957                sm86SafeControl)
958              (greedyArgmaxSM86Next
959                (constructor
960                  SM86InstructionBody
961                  SM86LoadGlobal
962                  greedyArgmaxSM86R10
963                  greedyArgmaxSM86R28
964                  greedyArgmaxSM86U0
965                  greedyArgmaxSM86Set0)
966                (greedyArgmaxSM86Next
967                  (constructor
968                    SM86InstructionBody
969                    SM86IntegerAddThreeImmediate
970                    greedyArgmaxSM86R10
971                    greedyArgmaxSM86R10
972                    greedyArgmaxSM86U0
973                    greedyArgmaxSM86Wait0)
974                  sm86ProgramEmpty))))
975          (sm86ProgramAppend
976            greedyArgmaxSM86ValidateCandidateProgram
977            greedyArgmaxSM86CandidateProgram)))
978      (naturalMultiply slot greedyArgmaxSM86N256)))
979
980def greedyArgmaxSM86PartialSlotProgram =
981  (lambda unrestricted slot : Nat .
982    (lambda unrestricted lastLane : Nat .
983      (app
984        (lambda unrestricted base : Nat .
985          (sm86ProgramAppend
986            (greedyArgmaxSM86Next
987              (constructor
988                SM86InstructionBody
989                SM86PredicateGreaterThanImmediate
990                greedyArgmaxSM86P0
991                greedyArgmaxSM86R0
992                (greedyArgmaxSM86Unsigned32FromNatural lastLane)
993                sm86SafeControl)
994              (greedyArgmaxSM86Next
995                (constructor
996                  SM86InstructionBody
997                  SM86IntegerAddThreeImmediate
998                  greedyArgmaxSM86R3
999                  greedyArgmaxSM86R0
1000                  (greedyArgmaxSM86Unsigned32FromNatural base)
1001                  sm86SafeControl)
1002                (greedyArgmaxSM86Next
1003                  (constructor
1004                    SM86InstructionBody
1005                    SM86IntegerMultiplyAddWideConstant
1006                    greedyArgmaxSM86R28
1007                    greedyArgmaxSM86R3
1008                    greedyArgmaxSM86R4
1009                    (byte 0)
1010                    greedyArgmaxSM86U360
1011                    sm86SafeControl)
1012                  (greedyArgmaxSM86Next
1013                    (constructor
1014                      SM86InstructionBody
1015                      SM86MoveImmediate
1016                      greedyArgmaxSM86R10
1017                      greedyArgmaxSM86UFloatZero
1018                      sm86SafeControl)
1019                    (greedyArgmaxSM86WhenNot
1020                      greedyArgmaxSM86P0
1021                      (constructor
1022                        SM86InstructionBody
1023                        SM86LoadGlobal
1024                        greedyArgmaxSM86R10
1025                        greedyArgmaxSM86R28
1026                        greedyArgmaxSM86U0
1027                        greedyArgmaxSM86Set0)
1028                      (greedyArgmaxSM86WhenNot
1029                        greedyArgmaxSM86P0
1030                        (constructor
1031                          SM86InstructionBody
1032                          SM86IntegerAddThreeImmediate
1033                          greedyArgmaxSM86R10
1034                          greedyArgmaxSM86R10
1035                          greedyArgmaxSM86U0
1036                          greedyArgmaxSM86Wait0)
1037                        sm86ProgramEmpty))))))
1038            (sm86ProgramAppend
1039              greedyArgmaxSM86ValidateCandidateProgram
1040              (greedyArgmaxSM86When
1041                greedyArgmaxSM86P0
1042                (constructor
1043                  SM86InstructionBody
1044                  SM86MoveImmediate
1045                  greedyArgmaxSM86R10
1046                  greedyArgmaxSM86UFloatNegativeInfinity
1047                  sm86SafeControl)
1048                greedyArgmaxSM86CandidateProgram))))
1049        (naturalMultiply slot greedyArgmaxSM86N256))))
1050
1051def greedyArgmaxSM86FullSlotPrograms =
1052  (lambda unrestricted count : Nat .
1053    (nat-eliminate
1054      (lambda unrestricted current : Nat . (family SM86Program))
1055      sm86ProgramEmpty
1056      (lambda unrestricted predecessor : Nat .
1057        (lambda unrestricted induction : (family SM86Program) .
1058          (sm86ProgramAppend induction (greedyArgmaxSM86FullSlotProgram predecessor))))
1059      count))
1060
1061def greedyArgmaxSM86SlotPrograms =
1062  (lambda unrestricted vocabulary : Nat .
1063    (app
1064      (lambda unrestricted fullSlots : Nat .
1065        (app
1066          (lambda unrestricted remainder : Nat .
1067            (app
1068              (lambda unrestricted fullProgram : (family SM86Program) .
1069                (nat-eliminate
1070                  (lambda unrestricted tailLanes : Nat . (family SM86Program))
1071                  fullProgram
1072                  (lambda unrestricted lastLane : Nat .
1073                    (lambda unrestricted tailInduction : (family SM86Program) .
1074                      (sm86ProgramAppend
1075                        fullProgram
1076                        (greedyArgmaxSM86PartialSlotProgram fullSlots lastLane))))
1077                  remainder))
1078              (greedyArgmaxSM86FullSlotPrograms fullSlots)))
1079          (naturalModuloUnchecked vocabulary greedyArgmaxSM86N256)))
1080      (naturalDivideUnchecked vocabulary greedyArgmaxSM86N256)))
1081
1082def greedyArgmaxSM86PairStage =
1083  (lambda unrestricted lane : Byte .
1084    (greedyArgmaxSM86Next
1085      (constructor
1086        SM86InstructionBody
1087        SM86WarpShuffle
1088        greedyArgmaxSM86R17
1089        greedyArgmaxSM86R7
1090        lane
1091        greedyArgmaxSM86U31
1092        greedyArgmaxSM86ShuffleButterfly
1093        greedyArgmaxSM86Set0)
1094      (greedyArgmaxSM86Next
1095        (constructor
1096          SM86InstructionBody
1097          SM86WarpShuffle
1098          greedyArgmaxSM86R18
1099          greedyArgmaxSM86R8
1100          lane
1101          greedyArgmaxSM86U31
1102          greedyArgmaxSM86ShuffleButterfly
1103          greedyArgmaxSM86Set1)
1104        (greedyArgmaxSM86Next
1105          (constructor
1106            SM86InstructionBody
1107            SM86IntegerAddThreeImmediate
1108            greedyArgmaxSM86R18
1109            greedyArgmaxSM86R18
1110            greedyArgmaxSM86U0
1111            greedyArgmaxSM86Wait1)
1112          (greedyArgmaxSM86Next
1113          (constructor
1114            SM86InstructionBody
1115            SM86FloatMinimumOrMaximum
1116            greedyArgmaxSM86R19
1117            greedyArgmaxSM86R7
1118            greedyArgmaxSM86R17
1119            greedyArgmaxSM86FloatMaximum
1120            greedyArgmaxSM86Wait0)
1121          (greedyArgmaxSM86Next
1122            (constructor
1123              SM86InstructionBody
1124              SM86FloatNegate
1125              greedyArgmaxSM86R20
1126              greedyArgmaxSM86R19
1127              sm86SafeControl)
1128            (greedyArgmaxSM86Next
1129              (constructor
1130                SM86InstructionBody
1131                SM86FloatAdd
1132                greedyArgmaxSM86R21
1133                greedyArgmaxSM86R7
1134                greedyArgmaxSM86R20
1135                sm86SafeControl)
1136              (greedyArgmaxSM86Next
1137                (constructor
1138                  SM86InstructionBody
1139                  SM86LogicThreeInputTruthTable
1140                  greedyArgmaxSM86R21
1141                  greedyArgmaxSM86R21
1142                  greedyArgmaxSM86R9
1143                  (byte 192)
1144                  sm86SafeControl)
1145                (greedyArgmaxSM86Next
1146                  (constructor
1147                    SM86InstructionBody
1148                    SM86PredicateGreaterThanImmediate
1149                    greedyArgmaxSM86P1
1150                    greedyArgmaxSM86R21
1151                    greedyArgmaxSM86U0
1152                    sm86SafeControl)
1153                  (greedyArgmaxSM86Next
1154                    (constructor
1155                      SM86InstructionBody
1156                      SM86FloatAdd
1157                      greedyArgmaxSM86R22
1158                      greedyArgmaxSM86R17
1159                      greedyArgmaxSM86R20
1160                      sm86SafeControl)
1161                    (greedyArgmaxSM86Next
1162                      (constructor
1163                        SM86InstructionBody
1164                        SM86LogicThreeInputTruthTable
1165                        greedyArgmaxSM86R22
1166                        greedyArgmaxSM86R22
1167                        greedyArgmaxSM86R9
1168                        (byte 192)
1169                        sm86SafeControl)
1170                      (greedyArgmaxSM86Next
1171                        (constructor
1172                          SM86InstructionBody
1173                          SM86PredicateGreaterThanImmediate
1174                          greedyArgmaxSM86P2
1175                          greedyArgmaxSM86R22
1176                          greedyArgmaxSM86U0
1177                          sm86SafeControl)
1178                        (greedyArgmaxSM86When
1179                          greedyArgmaxSM86P1
1180                          (constructor
1181                            SM86InstructionBody
1182                            SM86IntegerAddThreeImmediate
1183                            greedyArgmaxSM86R8
1184                            greedyArgmaxSM86R18
1185                            greedyArgmaxSM86U0
1186                            sm86SafeControl)
1187                          (greedyArgmaxSM86When
1188                            greedyArgmaxSM86P2
1189                            (constructor
1190                              SM86InstructionBody
1191                              SM86IntegerAddThreeImmediate
1192                              greedyArgmaxSM86R18
1193                              greedyArgmaxSM86R8
1194                              greedyArgmaxSM86U0
1195                              sm86SafeControl)
1196                            (greedyArgmaxSM86Next
1197                              (constructor
1198                                SM86InstructionBody
1199                                SM86IntegerToFloat
1200                                greedyArgmaxSM86R23
1201                                greedyArgmaxSM86R8
1202                                sm86SafeControl)
1203                              (greedyArgmaxSM86Next
1204                                (constructor
1205                                  SM86InstructionBody
1206                                  SM86IntegerToFloat
1207                                  greedyArgmaxSM86R24
1208                                  greedyArgmaxSM86R18
1209                                  sm86SafeControl)
1210                                (greedyArgmaxSM86Next
1211                                  (constructor
1212                                    SM86InstructionBody
1213                                    SM86FloatMinimumOrMaximum
1214                                    greedyArgmaxSM86R25
1215                                    greedyArgmaxSM86R23
1216                                    greedyArgmaxSM86R24
1217                                    greedyArgmaxSM86FloatMinimum
1218                                    sm86SafeControl)
1219                                  (greedyArgmaxSM86Next
1220                                    (constructor
1221                                      SM86InstructionBody
1222                                      SM86FloatNegate
1223                                      greedyArgmaxSM86R26
1224                                      greedyArgmaxSM86R25
1225                                      sm86SafeControl)
1226                                    (greedyArgmaxSM86Next
1227                                      (constructor
1228                                        SM86InstructionBody
1229                                        SM86FloatAdd
1230                                        greedyArgmaxSM86R27
1231                                        greedyArgmaxSM86R23
1232                                        greedyArgmaxSM86R26
1233                                        sm86SafeControl)
1234                                      (greedyArgmaxSM86Next
1235                                        (constructor
1236                                        SM86InstructionBody
1237                                        SM86LogicThreeInputTruthTable
1238                                        greedyArgmaxSM86R27
1239                                        greedyArgmaxSM86R27
1240                                        greedyArgmaxSM86R9
1241                                        (byte 192)
1242                                        sm86SafeControl)
1243                                        (greedyArgmaxSM86Next
1244                                        (constructor
1245                                        SM86InstructionBody
1246                                        SM86PredicateGreaterThanImmediate
1247                                        greedyArgmaxSM86P3
1248                                        greedyArgmaxSM86R27
1249                                        greedyArgmaxSM86U0
1250                                        sm86SafeControl)
1251                                        (greedyArgmaxSM86When
1252                                        greedyArgmaxSM86P3
1253                                        (constructor
1254                                        SM86InstructionBody
1255                                        SM86IntegerAddThreeImmediate
1256                                        greedyArgmaxSM86R8
1257                                        greedyArgmaxSM86R18
1258                                        greedyArgmaxSM86U0
1259                                        sm86SafeControl)
1260                                        (greedyArgmaxSM86Next
1261                                        (constructor
1262                                        SM86InstructionBody
1263                                        SM86IntegerAddThreeImmediate
1264                                        greedyArgmaxSM86R7
1265                                        greedyArgmaxSM86R19
1266                                        greedyArgmaxSM86U0
1267                                        sm86SafeControl)
1268                                        (greedyArgmaxSM86Next
1269                                        (constructor
1270                                        SM86InstructionBody
1271                                        SM86WarpShuffle
1272                                        greedyArgmaxSM86R17
1273                                        greedyArgmaxSM86R12
1274                                        lane
1275                                        greedyArgmaxSM86U31
1276                                        greedyArgmaxSM86ShuffleButterfly
1277                                        greedyArgmaxSM86Set2)
1278                                        (greedyArgmaxSM86Next
1279                                        (constructor
1280                                        SM86InstructionBody
1281                                        SM86FloatAdd
1282                                        greedyArgmaxSM86R12
1283                                        greedyArgmaxSM86R12
1284                                        greedyArgmaxSM86R17
1285                                        greedyArgmaxSM86Wait2)
1286                                        sm86ProgramEmpty)))))))))))))))))))))))))
1287
1288def greedyArgmaxSM86WarpReduceProgram : (family SM86Program) =
1289  (sm86ProgramAppend
1290    (greedyArgmaxSM86PairStage (byte 16))
1291    (sm86ProgramAppend
1292      (greedyArgmaxSM86PairStage (byte 8))
1293      (sm86ProgramAppend
1294        (greedyArgmaxSM86PairStage (byte 4))
1295        (sm86ProgramAppend
1296          (greedyArgmaxSM86PairStage (byte 2))
1297          (greedyArgmaxSM86PairStage (byte 1))))))
1298
1299def greedyArgmaxSM86BlockReduceProgram : (family SM86Program) =
1300  (sm86ProgramAppend
1301    greedyArgmaxSM86WarpReduceProgram
1302    (greedyArgmaxSM86Next
1303      (constructor
1304        SM86InstructionBody
1305        SM86MoveImmediate
1306        greedyArgmaxSM86R1
1307        greedyArgmaxSM86U31
1308        sm86SafeControl)
1309      (greedyArgmaxSM86Next
1310        (constructor
1311          SM86InstructionBody
1312          SM86LogicThreeInputTruthTable
1313          greedyArgmaxSM86R2
1314          greedyArgmaxSM86R0
1315          greedyArgmaxSM86R1
1316          (byte 192)
1317          sm86SafeControl)
1318        (greedyArgmaxSM86Next
1319          (constructor
1320            SM86InstructionBody
1321            SM86PredicateGreaterThanImmediate
1322            greedyArgmaxSM86P0
1323            greedyArgmaxSM86R2
1324            greedyArgmaxSM86U0
1325            sm86SafeControl)
1326          (greedyArgmaxSM86Next
1327            (constructor
1328              SM86InstructionBody
1329              SM86ShiftRightImmediate
1330              greedyArgmaxSM86R3
1331              greedyArgmaxSM86R0
1332              (byte 5)
1333              sm86SafeControl)
1334            (greedyArgmaxSM86Next
1335              (constructor
1336                SM86InstructionBody
1337                SM86IntegerMultiplyAddImmediate
1338                greedyArgmaxSM86R4
1339                greedyArgmaxSM86R3
1340                greedyArgmaxSM86U12
1341                sm86ZeroRegister
1342                sm86SafeControl)
1343              (greedyArgmaxSM86WhenNot
1344                greedyArgmaxSM86P0
1345                (constructor
1346                  SM86InstructionBody
1347                  SM86StoreShared
1348                  greedyArgmaxSM86R4
1349                  greedyArgmaxSM86R7
1350                  greedyArgmaxSM86U0
1351                  sm86SafeControl)
1352                (greedyArgmaxSM86WhenNot
1353                  greedyArgmaxSM86P0
1354                  (constructor
1355                    SM86InstructionBody
1356                    SM86StoreShared
1357                    greedyArgmaxSM86R4
1358                    greedyArgmaxSM86R8
1359                    greedyArgmaxSM86U4
1360                    sm86SafeControl)
1361                  (greedyArgmaxSM86WhenNot
1362                    greedyArgmaxSM86P0
1363                    (constructor
1364                      SM86InstructionBody
1365                      SM86StoreShared
1366                      greedyArgmaxSM86R4
1367                      greedyArgmaxSM86R12
1368                      greedyArgmaxSM86U8
1369                      sm86SafeControl)
1370                    (greedyArgmaxSM86Next
1371                      (constructor SM86InstructionBody SM86BarrierSynchronize sm86SafeControl)
1372                      (greedyArgmaxSM86Next
1373                        (constructor
1374                          SM86InstructionBody
1375                          SM86MoveImmediate
1376                          greedyArgmaxSM86R7
1377                          greedyArgmaxSM86UFloatNegativeInfinity
1378                          sm86SafeControl)
1379                        (greedyArgmaxSM86Next
1380                          (constructor
1381                            SM86InstructionBody
1382                            SM86MoveImmediate
1383                            greedyArgmaxSM86R8
1384                            greedyArgmaxSM86UMaximumToken
1385                            sm86SafeControl)
1386                          (greedyArgmaxSM86Next
1387                            (constructor
1388                              SM86InstructionBody
1389                              SM86MoveImmediate
1390                              greedyArgmaxSM86R12
1391                              greedyArgmaxSM86UFloatZero
1392                              sm86SafeControl)
1393                            (greedyArgmaxSM86Next
1394                              (constructor
1395                                SM86InstructionBody
1396                                SM86PredicateGreaterThanImmediate
1397                                greedyArgmaxSM86P0
1398                                greedyArgmaxSM86R0
1399                                greedyArgmaxSM86U7
1400                                sm86SafeControl)
1401                              (greedyArgmaxSM86Next
1402                                (constructor
1403                                  SM86InstructionBody
1404                                  SM86IntegerMultiplyAddImmediate
1405                                  greedyArgmaxSM86R4
1406                                  greedyArgmaxSM86R0
1407                                  greedyArgmaxSM86U12
1408                                  sm86ZeroRegister
1409                                  sm86SafeControl)
1410                                (greedyArgmaxSM86WhenNot
1411                                  greedyArgmaxSM86P0
1412                                  (constructor
1413                                    SM86InstructionBody
1414                                    SM86LoadShared
1415                                    greedyArgmaxSM86R7
1416                                    greedyArgmaxSM86R4
1417                                    greedyArgmaxSM86U0
1418                                    greedyArgmaxSM86Set0)
1419                                  (greedyArgmaxSM86WhenNot
1420                                    greedyArgmaxSM86P0
1421                                    (constructor
1422                                      SM86InstructionBody
1423                                      SM86LoadShared
1424                                      greedyArgmaxSM86R8
1425                                      greedyArgmaxSM86R4
1426                                      greedyArgmaxSM86U4
1427                                      greedyArgmaxSM86Set1)
1428                                    (greedyArgmaxSM86WhenNot
1429                                      greedyArgmaxSM86P0
1430                                      (constructor
1431                                        SM86InstructionBody
1432                                        SM86LoadShared
1433                                        greedyArgmaxSM86R12
1434                                        greedyArgmaxSM86R4
1435                                        greedyArgmaxSM86U8
1436                                        greedyArgmaxSM86Set2)
1437                                      (greedyArgmaxSM86WhenNot
1438                                        greedyArgmaxSM86P0
1439                                        (constructor
1440                                        SM86InstructionBody
1441                                        SM86IntegerAddThreeImmediate
1442                                        greedyArgmaxSM86R7
1443                                        greedyArgmaxSM86R7
1444                                        greedyArgmaxSM86U0
1445                                        greedyArgmaxSM86Wait0)
1446                                        (greedyArgmaxSM86WhenNot
1447                                        greedyArgmaxSM86P0
1448                                        (constructor
1449                                        SM86InstructionBody
1450                                        SM86IntegerAddThreeImmediate
1451                                        greedyArgmaxSM86R8
1452                                        greedyArgmaxSM86R8
1453                                        greedyArgmaxSM86U0
1454                                        greedyArgmaxSM86Wait1)
1455                                        (greedyArgmaxSM86WhenNot
1456                                        greedyArgmaxSM86P0
1457                                        (constructor
1458                                        SM86InstructionBody
1459                                        SM86FloatAdd
1460                                        greedyArgmaxSM86R12
1461                                        greedyArgmaxSM86R12
1462                                        greedyArgmaxSM86R13
1463                                        greedyArgmaxSM86Wait2)
1464                                        (greedyArgmaxSM86Next
1465                                        (constructor
1466                                        SM86InstructionBody
1467                                        SM86BarrierSynchronize
1468                                        sm86SafeControl)
1469                                        greedyArgmaxSM86WarpReduceProgram))))))))))))))))))))))
1470
1471def greedyArgmaxSM86SuffixProgram : (family SM86Program) =
1472  (greedyArgmaxSM86Next
1473    (constructor
1474      SM86InstructionBody
1475      SM86MoveConstant
1476      greedyArgmaxSM86R28
1477      (byte 0)
1478      greedyArgmaxSM86U352
1479      sm86SafeControl)
1480    (greedyArgmaxSM86Next
1481      (constructor
1482        SM86InstructionBody
1483        SM86MoveConstant
1484        greedyArgmaxSM86R29
1485        (byte 0)
1486        greedyArgmaxSM86U356
1487        sm86SafeControl)
1488      (greedyArgmaxSM86Next
1489        (constructor
1490          SM86InstructionBody
1491          SM86MoveImmediate
1492          greedyArgmaxSM86R27
1493          greedyArgmaxSM86U1
1494          sm86SafeControl)
1495        (greedyArgmaxSM86Next
1496          (constructor
1497            SM86InstructionBody
1498          SM86PredicateGreaterThanImmediate
1499          greedyArgmaxSM86P1
1500          greedyArgmaxSM86R12
1501          greedyArgmaxSM86U0
1502          sm86SafeControl)
1503        (greedyArgmaxSM86When
1504          greedyArgmaxSM86P1
1505          (constructor
1506            SM86InstructionBody
1507            SM86MoveImmediate
1508            greedyArgmaxSM86R27
1509            greedyArgmaxSM86U0
1510            sm86SafeControl)
1511          (greedyArgmaxSM86Next
1512            (constructor
1513              SM86InstructionBody
1514              SM86PredicateGreaterThanImmediate
1515              greedyArgmaxSM86P0
1516              greedyArgmaxSM86R0
1517              greedyArgmaxSM86U0
1518              sm86SafeControl)
1519                (greedyArgmaxSM86WhenNot
1520                  greedyArgmaxSM86P0
1521                  (constructor
1522                    SM86InstructionBody
1523                    SM86StoreGlobal
1524                    greedyArgmaxSM86R28
1525                    greedyArgmaxSM86R8
1526                    greedyArgmaxSM86U0
1527                    sm86SafeControl)
1528                  (greedyArgmaxSM86WhenNot
1529                    greedyArgmaxSM86P0
1530                    (constructor
1531                      SM86InstructionBody
1532                      SM86StoreGlobal
1533                      greedyArgmaxSM86R28
1534                      greedyArgmaxSM86R27
1535                      greedyArgmaxSM86U4
1536                      sm86SafeControl)
1537                    (greedyArgmaxSM86Next
1538                      (constructor SM86InstructionBody SM86Exit sm86SafeControl)
1539                      sm86ProgramEmpty)))))))))
1540
1541-- Bob's byte reference schedule has one thread, hence one writer.
1542def greedyArgmaxSM86ByteVocabularySuffixProgram : (family SM86Program) =
1543  (greedyArgmaxSM86Next
1544    (constructor
1545      SM86InstructionBody
1546      SM86MoveConstant
1547      greedyArgmaxSM86R28
1548      (byte 0)
1549      greedyArgmaxSM86U352
1550      sm86SafeControl)
1551    (greedyArgmaxSM86Next
1552      (constructor
1553        SM86InstructionBody
1554        SM86MoveConstant
1555        greedyArgmaxSM86R29
1556        (byte 0)
1557        greedyArgmaxSM86U356
1558        sm86SafeControl)
1559      (greedyArgmaxSM86Next
1560        (constructor
1561          SM86InstructionBody
1562          SM86MoveImmediate
1563          greedyArgmaxSM86R27
1564          greedyArgmaxSM86U1
1565          sm86SafeControl)
1566        (greedyArgmaxSM86Next
1567          (constructor
1568            SM86InstructionBody
1569            SM86StoreGlobal
1570            greedyArgmaxSM86R28
1571            greedyArgmaxSM86R8
1572            greedyArgmaxSM86U0
1573            sm86SafeControl)
1574          (greedyArgmaxSM86Next
1575            (constructor
1576              SM86InstructionBody
1577              SM86StoreGlobal
1578              greedyArgmaxSM86R28
1579              greedyArgmaxSM86R27
1580              greedyArgmaxSM86U4
1581              sm86SafeControl)
1582            (greedyArgmaxSM86Next
1583              (constructor SM86InstructionBody SM86Exit sm86SafeControl)
1584              sm86ProgramEmpty))))))
1585
1586def greedyArgmaxSM86ProgramFor =
1587  (lambda unrestricted vocabulary : Nat .
1588    (sm86ProgramAppend
1589      greedyArgmaxSM86InitialProgram
1590      (sm86ProgramAppend
1591        (greedyArgmaxSM86SlotPrograms vocabulary)
1592        (sm86ProgramAppend greedyArgmaxSM86BlockReduceProgram greedyArgmaxSM86SuffixProgram))))
1593
1594def greedyArgmaxSM86ByteVocabularyProgram : (family SM86Program) =
1595  (sm86ProgramAppend
1596    greedyArgmaxSM86ByteVocabularyInitialProgram
1597    (sm86ProgramAppend
1598      greedyArgmaxSM86ByteVocabularyLoopProgram
1599      greedyArgmaxSM86ByteVocabularySuffixProgram))
1600
1601def greedyArgmaxSM86HasTail =
1602  (lambda unrestricted vocabulary : Nat .
1603    (naturalNonzero (naturalModuloUnchecked vocabulary greedyArgmaxSM86N256)))
1604
1605def greedyArgmaxSM86ExpectedInstructions =
1606  (lambda unrestricted vocabulary : Nat .
1607    (naturalAdd
1608      greedyArgmaxSM86N277
1609      (naturalAdd
1610        (naturalMultiply
1611          (naturalDivideUnchecked vocabulary greedyArgmaxSM86N256)
1612          greedyArgmaxSM86N30)
1613        (naturalMultiply (greedyArgmaxSM86HasTail vocabulary) greedyArgmaxSM86N33))))
1614
1615def greedyArgmaxSM86TailMaskWrites =
1616  (lambda unrestricted vocabulary : Nat .
1617    (naturalMultiply
1618      (greedyArgmaxSM86HasTail vocabulary)
1619      (naturalSaturatingSubtract
1620        greedyArgmaxSM86N256
1621        (naturalModuloUnchecked vocabulary greedyArgmaxSM86N256))))
1622
1623def greedyArgmaxSM86ManifestFor =
1624  (lambda unrestricted vocabulary : Nat .
1625    (app
1626      (lambda unrestricted expectedInstructions : Nat .
1627        (constructor
1628          GreedyArgmaxSM86Manifest
1629          GreedyArgmaxSM86ManifestValue
1630          vocabulary
1631          (naturalDivideUnchecked vocabulary greedyArgmaxSM86N256)
1632          (naturalModuloUnchecked vocabulary greedyArgmaxSM86N256)
1633          expectedInstructions
1634          (naturalMultiply expectedInstructions greedyArgmaxSM86InstructionBytes)
1635          greedyArgmaxSM86Registers
1636          greedyArgmaxSM86SharedBytes
1637          greedyArgmaxSM86GridX
1638          greedyArgmaxSM86ThreadsPerBlock
1639          vocabulary
1640          vocabulary
1641          zero
1642          (greedyArgmaxSM86TailMaskWrites vocabulary)
1643          greedyArgmaxSM86N10
1644          greedyArgmaxSM86N1
1645          greedyArgmaxSM86N1
1646          greedyArgmaxSM86HostLogitReads
1647          greedyArgmaxSM86HostFallbackOperations
1648          greedyArgmaxSM86ABIValue))
1649      (greedyArgmaxSM86ExpectedInstructions vocabulary)))
1650
1651def greedyArgmaxSM86TelemetryFor =
1652  (lambda unrestricted manifest : (family GreedyArgmaxSM86Manifest) .
1653    (lambda unrestricted observedInstructions : Nat .
1654      (lambda unrestricted observedBytes : Nat .
1655        (lambda unrestricted fields : Nat .
1656          (lambda unrestricted bits : Nat .
1657            (lambda unrestricted highest : Nat .
1658              (lambda unrestricted identityInput : Nat .
1659                (lambda unrestricted identityOutput : Nat .
1660                  (constructor
1661                    GreedyArgmaxSM86Telemetry
1662                    GreedyArgmaxSM86TelemetryValue
1663                    (constructor GreedyArgmaxSM86ExecutionContract GreedyArgmaxSM86NativeOnly)
1664                    manifest
1665                    observedInstructions
1666                    observedBytes
1667                    fields
1668                    bits
1669                    highest
1670                    identityInput
1671                    identityOutput
1672                    greedyArgmaxSM86N1
1673                    greedyArgmaxSM86N1
1674                    greedyArgmaxSM86HostFallbackOperations)))))))))
1675
1676def greedyArgmaxSM86EmptyTelemetry =
1677  (lambda unrestricted manifest : (family GreedyArgmaxSM86Manifest) .
1678    (lambda unrestricted observedInstructions : Nat .
1679      (lambda unrestricted observedBytes : Nat .
1680        (greedyArgmaxSM86TelemetryFor
1681          manifest
1682          observedInstructions
1683          observedBytes
1684          zero
1685          zero
1686          zero
1687          zero
1688          zero))))
1689
1690def greedyArgmaxSM86Failed =
1691  (lambda unrestricted manifest : (family GreedyArgmaxSM86Manifest) .
1692    (lambda unrestricted code : (family GreedyArgmaxSM86FailureCode) .
1693      (lambda unrestricted ordinal : Nat .
1694        (lambda unrestricted observedInstructions : Nat .
1695          (lambda unrestricted observedBytes : Nat .
1696            (constructor
1697              GreedyArgmaxSM86Artifact
1698              GreedyArgmaxSM86ArtifactFailed
1699              code
1700              ordinal
1701              (greedyArgmaxSM86FailureCodeBytes code)
1702              (greedyArgmaxSM86EmptyTelemetry manifest observedInstructions observedBytes)))))))
1703
1704def greedyArgmaxSM86BuildIdentity =
1705  (lambda unrestricted program : (family SM86Program) .
1706    (lambda unrestricted image : Bytes .
1707      (lambda unrestricted manifest : (family GreedyArgmaxSM86Manifest) .
1708        (lambda unrestricted encodingTelemetry : (family SM86ProgramEncodingTelemetry) .
1709          (eliminate
1710            SM86ProgramEncodingTelemetry
1711            (lambda unrestricted current : (family SM86ProgramEncodingTelemetry) .
1712              (family GreedyArgmaxSM86Artifact))
1713            encodingTelemetry
1714            (branch
1715              SM86ProgramEncodingTelemetryValue
1716              instructions
1717              encodedBytes
1718              fields
1719              bits
1720              highest
1721              .
1722              (eliminate
1723                SHA256HexResult
1724                (lambda unrestricted current : (family SHA256HexResult) .
1725                  (family GreedyArgmaxSM86Artifact))
1726                (sha256Hex image)
1727                (branch
1728                  SHA256HexSucceeded
1729                  identity
1730                  digestTelemetry
1731                  .
1732                  (nat-eliminate
1733                    (lambda unrestricted exactLength : Nat . (family GreedyArgmaxSM86Artifact))
1734                    (greedyArgmaxSM86Failed
1735                      manifest
1736                      (constructor
1737                        GreedyArgmaxSM86FailureCode
1738                        GreedyArgmaxSM86ImageIdentityLengthInvalid)
1739                      (bytes-length identity)
1740                      instructions
1741                      encodedBytes)
1742                    (lambda unrestricted predecessor : Nat .
1743                      (lambda unrestricted induction : (family GreedyArgmaxSM86Artifact) .
1744                        (constructor
1745                          GreedyArgmaxSM86Artifact
1746                          GreedyArgmaxSM86ArtifactReady
1747                          program
1748                          image
1749                          identity
1750                          manifest
1751                          encodingTelemetry
1752                          digestTelemetry
1753                          (greedyArgmaxSM86TelemetryFor
1754                            manifest
1755                            instructions
1756                            encodedBytes
1757                            fields
1758                            bits
1759                            highest
1760                            (bytes-length image)
1761                            (bytes-length identity)))))
1762                    (naturalEqual (bytes-length identity) greedyArgmaxSM86N64)))
1763                (branch
1764                  SHA256HexFailed
1765                  failure
1766                  hexFailureOrdinal
1767                  digestTelemetry
1768                  .
1769                  (greedyArgmaxSM86Failed
1770                    manifest
1771                    (constructor GreedyArgmaxSM86FailureCode GreedyArgmaxSM86ImageIdentityFailed)
1772                    zero
1773                    instructions
1774                    encodedBytes)))))))))
1775
1776def greedyArgmaxSM86BuildEncoded =
1777  (lambda unrestricted program : (family SM86Program) .
1778    (lambda unrestricted manifest : (family GreedyArgmaxSM86Manifest) .
1779      (eliminate
1780        SM86ProgramEncodingResult
1781        (lambda unrestricted current : (family SM86ProgramEncodingResult) .
1782          (family GreedyArgmaxSM86Artifact))
1783        (sm86EncodeProgram program)
1784        (branch
1785          SM86ProgramEncodingSucceeded
1786          image
1787          telemetry
1788          .
1789          (eliminate
1790            SM86ProgramEncodingTelemetry
1791            (lambda unrestricted current : (family SM86ProgramEncodingTelemetry) .
1792              (family GreedyArgmaxSM86Artifact))
1793            telemetry
1794            (branch
1795              SM86ProgramEncodingTelemetryValue
1796              instructions
1797              encodedBytes
1798              fields
1799              bits
1800              highest
1801              .
1802              (eliminate
1803                GreedyArgmaxSM86Manifest
1804                (lambda unrestricted current : (family GreedyArgmaxSM86Manifest) .
1805                  (family GreedyArgmaxSM86Artifact))
1806                manifest
1807                (branch
1808                  GreedyArgmaxSM86ManifestValue
1809                  vocabulary
1810                  fullSlots
1811                  tailLanes
1812                  expectedInstructions
1813                  expectedBytes
1814                  registers
1815                  sharedBytes
1816                  gridX
1817                  threads
1818                  activeLoads
1819                  activeFinite
1820                  inactiveFinite
1821                  tailMasks
1822                  tieStages
1823                  tokenWrites
1824                  validityWrites
1825                  hostReads
1826                  fallbacks
1827                  abi
1828                  .
1829                  (nat-eliminate
1830                    (lambda unrestricted instructionsExact : Nat .
1831                      (family GreedyArgmaxSM86Artifact))
1832                    (greedyArgmaxSM86Failed
1833                      manifest
1834                      (constructor
1835                        GreedyArgmaxSM86FailureCode
1836                        GreedyArgmaxSM86EncodedInstructionCountMismatch)
1837                      instructions
1838                      instructions
1839                      encodedBytes)
1840                    (lambda unrestricted instructionPredecessor : Nat .
1841                      (lambda unrestricted instructionInduction : (family GreedyArgmaxSM86Artifact) .
1842                        (nat-eliminate
1843                          (lambda unrestricted bytesExact : Nat . (family GreedyArgmaxSM86Artifact))
1844                          (greedyArgmaxSM86Failed
1845                            manifest
1846                            (constructor
1847                              GreedyArgmaxSM86FailureCode
1848                              GreedyArgmaxSM86EncodedByteCountMismatch)
1849                            encodedBytes
1850                            instructions
1851                            encodedBytes)
1852                          (lambda unrestricted bytePredecessor : Nat .
1853                            (lambda unrestricted byteInduction : (family GreedyArgmaxSM86Artifact) .
1854                              (greedyArgmaxSM86BuildIdentity program image manifest telemetry)))
1855                          (naturalEqual encodedBytes expectedBytes))))
1856                    (naturalEqual instructions expectedInstructions)))))))
1857        (branch
1858          SM86ProgramEncodingFailed
1859          instructionIndex
1860          failure
1861          telemetry
1862          .
1863          (greedyArgmaxSM86Failed
1864            manifest
1865            (constructor GreedyArgmaxSM86FailureCode GreedyArgmaxSM86ImageEncodingFailed)
1866            instructionIndex
1867            (sm86ProgramCount program)
1868            zero)))))
1869
1870def greedyArgmaxSM86BuildValidated =
1871  (lambda unrestricted vocabulary : Nat .
1872    (app
1873      (lambda unrestricted program : (family SM86Program) .
1874        (app
1875          (lambda unrestricted manifest : (family GreedyArgmaxSM86Manifest) .
1876            (eliminate
1877              GreedyArgmaxSM86Manifest
1878              (lambda unrestricted current : (family GreedyArgmaxSM86Manifest) .
1879                (family GreedyArgmaxSM86Artifact))
1880              manifest
1881              (branch
1882                GreedyArgmaxSM86ManifestValue
1883                manifestVocabulary
1884                fullSlots
1885                tailLanes
1886                expectedInstructions
1887                expectedBytes
1888                registers
1889                sharedBytes
1890                gridX
1891                threads
1892                activeLoads
1893                activeFinite
1894                inactiveFinite
1895                tailMasks
1896                tieStages
1897                tokenWrites
1898                validityWrites
1899                hostReads
1900                fallbacks
1901                abi
1902                .
1903                (nat-eliminate
1904                  (lambda unrestricted fallbackFree : Nat . (family GreedyArgmaxSM86Artifact))
1905                  (greedyArgmaxSM86Failed
1906                    manifest
1907                    (constructor GreedyArgmaxSM86FailureCode GreedyArgmaxSM86HostFallbackDetected)
1908                    fallbacks
1909                    (sm86ProgramCount program)
1910                    zero)
1911                  (lambda unrestricted fallbackPredecessor : Nat .
1912                    (lambda unrestricted fallbackInduction : (family GreedyArgmaxSM86Artifact) .
1913                      (nat-eliminate
1914                        (lambda unrestricted programExact : Nat . (family GreedyArgmaxSM86Artifact))
1915                        (greedyArgmaxSM86Failed
1916                          manifest
1917                          (constructor
1918                            GreedyArgmaxSM86FailureCode
1919                            GreedyArgmaxSM86InstructionCountMismatch)
1920                          (sm86ProgramCount program)
1921                          (sm86ProgramCount program)
1922                          zero)
1923                        (lambda unrestricted programPredecessor : Nat .
1924                          (lambda unrestricted programInduction : (family GreedyArgmaxSM86Artifact) .
1925                            (greedyArgmaxSM86BuildEncoded program manifest)))
1926                        (naturalEqual (sm86ProgramCount program) expectedInstructions))))
1927                  (naturalEqual fallbacks zero)))))
1928          (greedyArgmaxSM86ManifestFor vocabulary)))
1929      (greedyArgmaxSM86ProgramFor vocabulary)))
1930
1931def greedyArgmaxSM86Build =
1932  (lambda unrestricted vocabulary : Nat .
1933    (eliminate
1934      GreedyArgmaxSM86Validation
1935      (lambda unrestricted current : (family GreedyArgmaxSM86Validation) .
1936        (family GreedyArgmaxSM86Artifact))
1937      (greedyArgmaxSM86ValidateVocabulary vocabulary)
1938      (branch GreedyArgmaxSM86ValidationAccepted . (greedyArgmaxSM86BuildValidated vocabulary))
1939      (branch
1940        GreedyArgmaxSM86ValidationRejected
1941        failure
1942        .
1943        (greedyArgmaxSM86Failed (greedyArgmaxSM86ManifestFor vocabulary) failure zero zero zero))))
1944
1945def greedyArgmaxSM86BuildPromoted =
1946  (greedyArgmaxSM86Build greedyArgmaxSM86PromotedVocabulary)
1947
1948def greedyArgmaxSM86ByteVocabularyManifest : (family GreedyArgmaxSM86Manifest) =
1949  (app
1950    (lambda unrestricted expectedInstructions : Nat .
1951      (constructor
1952        GreedyArgmaxSM86Manifest
1953        GreedyArgmaxSM86ManifestValue
1954        greedyArgmaxSM86N256
1955        greedyArgmaxSM86N256
1956        zero
1957        expectedInstructions
1958        (naturalMultiply expectedInstructions greedyArgmaxSM86InstructionBytes)
1959        greedyArgmaxSM86Registers
1960        zero
1961        greedyArgmaxSM86GridX
1962        greedyArgmaxSM86N1
1963        greedyArgmaxSM86N256
1964        zero
1965        zero
1966        zero
1967        zero
1968        greedyArgmaxSM86N1
1969        greedyArgmaxSM86N1
1970        greedyArgmaxSM86HostLogitReads
1971        greedyArgmaxSM86HostFallbackOperations
1972        greedyArgmaxSM86ABIValue))
1973    (sm86ProgramCount greedyArgmaxSM86ByteVocabularyProgram))
1974
1975def greedyArgmaxSM86BuildByteVocabulary : (family GreedyArgmaxSM86Artifact) =
1976  (greedyArgmaxSM86BuildEncoded
1977    greedyArgmaxSM86ByteVocabularyProgram
1978    greedyArgmaxSM86ByteVocabularyManifest)

The compiler supplied declaration spans and resolved links from this source snapshot. This page does not assert that this file belongs to a checked closure.