From 101ff05d3a0d261c15c678ff9b9e248e1ed0f3e9 Mon Sep 17 00:00:00 2001 From: Balazs Komuves Date: Thu, 19 Jun 2025 16:13:49 +0200 Subject: [PATCH] fix some typos --- commentary/FRI.md | 4 ++-- commentary/Layout.md | 2 +- commentary/commentary.pdf | Bin 495312 -> 495374 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/commentary/FRI.md b/commentary/FRI.md index b303656..f7b7b62 100644 --- a/commentary/FRI.md +++ b/commentary/FRI.md @@ -13,7 +13,7 @@ When configured for zero-knowledge, each _row_ (Merkle leaf) is "blinded" by the Finally, each row is hashed (well, if the number of columns is at most 4, they are left as they are, but this should never happen in practice), and a Merkle tree is built on the top of these leaf hashes. -WARNING: before building the Merkle tree, the leaves are _reorderd_ by reversing the order of the bits in the index!!!! +WARNING: before building the Merkle tree, the leaves are _reordered_ by reversing the order of the bits in the index!!!! So we get a Merkle tree whose leaves correspond to full rows ($2^{n+3}$ leaves). @@ -41,7 +41,7 @@ struct FriConfig { } ``` -Here the "reduction strategy" defines how to select the layers. For example it can always do 8->1 reduction (instead of the naive 2->1), or optimize and have different layers; also where to stop: If you already reduced to say a degree 3 polynomial, it's much more efficient to just send the 8 coefficients than doing 3 more folding steps. +Here the "reduction strategy" defines how to select the layers. For example it can always do $8\to 1$ reduction (instead of the naive $2\to 1$), or optimize and have different layers; also where to stop: If you already reduced to say a degree 3 polynomial, it's much more efficient to just send the 8 coefficients than doing 3 more folding steps. The "default" `standard_recursion_config` uses rate = $1/8$ (rate_bits = 3), markle cap height = 4, proof of work (grinding) = 16 bits, query rounds = 28, reduction startegy of arity $2^4$ (16->1 folding) and final polynomial having degree (at most) $2^5$. For example for a recursive proof fitting into $2^{12}$ rows, we have the degree sequence $2^{12}\to 2^{8} \to 2^4$, with the final polynomial having degree $2^4 = 16 \le 2^5$ diff --git a/commentary/Layout.md b/commentary/Layout.md index b1f3db7..cfd8faa 100644 --- a/commentary/Layout.md +++ b/commentary/Layout.md @@ -14,7 +14,7 @@ These 4 matrices are committed separately, as you have to commit them in separat For some of them we also need the "next row" opening at $\omega\cdot\zeta$ (namely: ``"zs"``, ``"lookup_zs"``); for the rest we don't. - constant witness permutation qotient + constant witness permutation quotient +---+---+----------+ +----------+--------+ +--+-------+------+ +---------+ | s | k | sigmas | | routed | advice | |zs|partial|lookup| | | | e | s | | | | | | | |R | | | diff --git a/commentary/commentary.pdf b/commentary/commentary.pdf index 89770c9cd91ee8134c808b8591f3c3be4519a6b4..a097b0cbffda28763feacb06409581e500b3ca5a 100644 GIT binary patch delta 10780 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 VZ|UW6&?K;2+;EhX;tCRQ{{z(2k&plY delta 10715 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 Jlu(p}`yW10ldS*%