constraints.hoon 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 -)]
  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. ==
  38. |= l=(list mp-ultra:z)
  39. %+ roll
  40. l
  41. |= [constraint=mp-ultra:z d=@]
  42. %+ roll
  43. (mp-degree-ultra:z constraint)
  44. |= [a=@ d=_d]
  45. (max d a)
  46. ::
  47. ++ compute-constraints
  48. ^- (map @ constraints:z)
  49. |^
  50. %- ~(gas by *(map @ constraints:z))
  51. %+ iturn:z all-verifier-funcs:nock-common
  52. |= [i=@ funcs=verifier-funcs:z]
  53. :- i
  54. :* (build-constraint-data boundary-constraints:funcs)
  55. (build-constraint-data row-constraints:funcs)
  56. (build-constraint-data transition-constraints:funcs)
  57. (build-constraint-data terminal-constraints:funcs)
  58. ==
  59. ::
  60. ++ build-constraint-data
  61. |= cs=(map term mp-ultra:z)
  62. ^- (list constraint-data:z)
  63. %+ turn (unlabel-constraints:constraint-util:z cs)
  64. |= c=mp-ultra:z
  65. [c (mp-degree-ultra:z c)]
  66. --
  67. ::
  68. ++ count-constraints
  69. ^- (map @ constraint-counts:z)
  70. |^
  71. =/ vrf-funcs all-verifier-funcs:nock-common
  72. %- ~(gas by *(map @ constraint-counts:z))
  73. %+ iturn:z
  74. all-verifier-funcs:nock-common
  75. |= [i=@ funcs=verifier-funcs:z]
  76. :- i
  77. :* (count (unlabel-constraints:constraint-util:z boundary-constraints:funcs))
  78. (count (unlabel-constraints:constraint-util:z row-constraints:funcs))
  79. (count (unlabel-constraints:constraint-util:z transition-constraints:funcs))
  80. (count (unlabel-constraints:constraint-util:z terminal-constraints:funcs))
  81. ==
  82. ::
  83. ++ count
  84. |= cs=(list mp-ultra:z)
  85. ^- @
  86. %+ roll
  87. cs
  88. |= [mp=mp-ultra:z num=@]
  89. ?- -.mp
  90. %mega +(num)
  91. %comp (add num (lent com.mp))
  92. ==
  93. --
  94. -- :: |^
  95. -- :: %pre