TL;DR
在上一篇文章Hello, OlaVM! 中提到,OlaVM 的願景是建立一個高性能的ZKVM,本文將重點介紹使得OlaVM 獲得高性能的工具之一,Lookup argument。 Lookup argument 對縮減電路規模,以提高ZK 效率有很重要的作用,在ZKVM 的電路設計中被廣泛應用,通過本篇文章你可以了解到:
1.Lookup argument 在ZKVM 中將發揮著怎樣的角色?
2.Plookup 協議原理。
一級標題
一級標題
The roles in ZKVM
所謂的ZKVM,其實就是用ZK 約束VM 所有的執行過程,VM 的執行過程一般可以分為:指令執行,內存訪問,內置函數執行等。在一個trace 裡執行對這些操作的約束看起來有點不切實際,首先,不同操作類型的約束對應不同的trace 的寬度,如果其中一個約束對應的trace 寬度特別大,就會造成其餘約束對應trace 的浪費;然後,一個trace 裡有太多不同的操作類型,就會引入更多的selector,不僅會增加多項式的個數,而且還會增加約束的階;最後,由於群的階限制,trace 的行數不能超過這個群的階,因此,應該盡量減少某種類型的操作所佔用的trace 行數。
因此,為了簡單,我們需要:
a.把不同的操作類型分成多個子trace,然後分別證明,主trace 和子trace 之間需要通過Lookup argument 來保證數據的一致性。
圖片描述
二級標題
Lookup between trace tables
圖片描述

二級標題
二級標題
Lookup for ZK-unfriendly operations
如前面所述,每個子trace 的證明是獨立的,所以獲得一個盡可能小的trace,會提高prover 的效率。以bitwise 為例,bitwise 操作包含AND, XOR, NOT 三種操作。如果想通過電路單純的實現對bitwise 操作的約束,那需要做的可能是,把每個op 拆成多個2 進制的limbs,如果這些op 是3 2bit 位寬,那就會拆分成32個limbs。然後,你需要約束:

圖片描述
圖片描述

一級標題
一級標題
二級標題
二級標題

二級標題

二級標題

二級標題

一級標題




二級標題
二級標題

二級標題

一級標題

Extend - 1 : Vector Lookup

Extend - 2 : Multi-tables

Links between Plookup and Lookup
Plookup 協議與Halo 2 的lookup 協議都能證明f⊂t ,但兩個協議的思想是不同的,區別如下:
Plookup 需要使用f 和t 構建一個新的數列s , f 和t 中的元素都在s 中至少出現一次,接著通過比較s 和t 中元素的非零距離集合是相等的來證明s⊂t,最終f⊂s⊂t→f⊂t 。
一級標題
一級標題
參考
1.Hello, OlaVM!:https://hackmd.io/@sin 7 y/H 1 yPj_J 8 i
2.OlaVM:https://olavm.org/
關於我們https://eprint.iacr.org/2020/315.pdf
關於我們https://zcash.github.io/halo 2/design/proving-system/lookup.html
關於我們
社群:http://t.me/sin 7 y_labs
官網:https://sin 7 y.org/
白皮書:https://olavm.org/
社群:http://t.me/sin 7 y_labs
微信公眾號:Sin 7 y
微信公眾號:Sin 7 y
郵箱:contact@sin 7 y.org
研究文章(EN):https://hackmd.io/@sin 7 y
Github:Sin 7 y


