constraints.hoon 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /= z /common/zeke
  2. /= nock-common /common/nock-common
  3. =< preprocess-data
  4. |%
  5. :: +preprocess-data: precompute all data necessary to run the prover/verifier
  6. ++ preprocess-data
  7. ^- preprocess-0:z
  8. |^
  9. ~& %computing-preprocess-data
  10. =/ cd compute-table-to-constraint-degree
  11. =/ constraints compute-constraints
  12. =/ count-map count-constraints
  13. :* %0
  14. cd
  15. constraints
  16. count-map
  17. ==
  18. ::
  19. :: compute max degree of the constraints for each table
  20. ++ compute-table-to-constraint-degree
  21. ^- table-to-constraint-degree:z
  22. %- ~(gas by *(map @ constraint-degrees:z))
  23. %+ iturn:z all-verifier-funcs:nock-common
  24. |= [i=@ funcs=verifier-funcs:z]
  25. ^- [@ constraint-degrees:z]
  26. [i (compute-constraint-degree funcs)]
  27. ::
  28. ++ compute-constraint-degree
  29. |= funcs=verifier-funcs:z
  30. ^- constraint-degrees:z
  31. =- [(snag 0 -) (snag 1 -) (snag 2 -) (snag 3 -) (snag 4 -)]
  32. %+ turn
  33. :~ (unlabel-constraints:constraint-util:z boundary-constraints:funcs)
  34. (unlabel-constraints:constraint-util:z row-constraints:funcs)
  35. (unlabel-constraints:constraint-util:z transition-constraints:funcs)
  36. (unlabel-constraints:constraint-util:z terminal-constraints:funcs)
  37. (unlabel-constraints:constraint-util:z extra-constraints:funcs)
  38. ==
  39. |= l=(list mp-ultra:z)
  40. %+ roll
  41. l
  42. |= [constraint=mp-ultra:z d=@]
  43. %+ roll
  44. (mp-degree-ultra:z constraint)
  45. |= [a=@ d=_d]
  46. (max d a)
  47. ::
  48. ++ compute-constraints
  49. ^- (map @ constraints:z)
  50. |^
  51. %- ~(gas by *(map @ constraints:z))
  52. %+ iturn:z all-verifier-funcs:nock-common
  53. |= [i=@ funcs=verifier-funcs:z]
  54. :- i
  55. :* (build-constraint-data boundary-constraints:funcs)
  56. (build-constraint-data row-constraints:funcs)
  57. (build-constraint-data transition-constraints:funcs)
  58. (build-constraint-data terminal-constraints:funcs)
  59. (build-constraint-data extra-constraints:funcs)
  60. ==
  61. ::
  62. ++ build-constraint-data
  63. |= cs=(map term mp-ultra:z)
  64. ^- (list constraint-data:z)
  65. %+ turn (unlabel-constraints:constraint-util:z cs)
  66. |= c=mp-ultra:z
  67. [c (mp-degree-ultra:z c)]
  68. --
  69. ::
  70. ++ count-constraints
  71. ^- (map @ constraint-counts:z)
  72. |^
  73. =/ vrf-funcs all-verifier-funcs:nock-common
  74. %- ~(gas by *(map @ constraint-counts:z))
  75. %+ iturn:z
  76. all-verifier-funcs:nock-common
  77. |= [i=@ funcs=verifier-funcs:z]
  78. :- i
  79. :* (count (unlabel-constraints:constraint-util:z boundary-constraints:funcs))
  80. (count (unlabel-constraints:constraint-util:z row-constraints:funcs))
  81. (count (unlabel-constraints:constraint-util:z transition-constraints:funcs))
  82. (count (unlabel-constraints:constraint-util:z terminal-constraints:funcs))
  83. (count (unlabel-constraints:constraint-util:z extra-constraints:funcs))
  84. ==
  85. ::
  86. ++ count
  87. |= cs=(list mp-ultra:z)
  88. ^- @
  89. %+ roll
  90. cs
  91. |= [mp=mp-ultra:z num=@]
  92. ?- -.mp
  93. %mega +(num)
  94. %comp (add num (lent com.mp))
  95. ==
  96. --
  97. -- :: |^
  98. --