From 3ffe3a98e7e0cacf68aaac3f3b72a6baf889157f Mon Sep 17 00:00:00 2001 From: Ian Denhardt Date: Wed, 14 Oct 2020 14:26:01 -0400 Subject: [PATCH 1/6] Specify buzhash --- spec.md | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 113 insertions(+), 3 deletions(-) diff --git a/spec.md b/spec.md index ee3ba97..8296d3c 100644 --- a/spec.md +++ b/spec.md @@ -35,12 +35,13 @@ This section discusses notation used in this specification. We define the following sets: -- $U_{32}$, The set of integers in the range $[0, 2^{32})$ +- $U_{32}$, The set of integers in the range $[0, 2^{32})$. - $U_8$, The set of integers in the range $[0, 2^8)$, aka bytes. - $V_8$, The set of *sequences* of bytes, i.e. sequences of $U_8$. - $V_v$, The set of *sequences* of *sequences* of bytes, i.e. sequences of elements of $V_8$. +- $V_{32}$, The set of sequences of elements of $U_{32}$. All arithmetic operations in this document are implicitly performed modulo $2^{32}$. We use standard mathematical notation for addition, @@ -56,16 +57,33 @@ elements it contains. We also use the following operators and functions: - $x \wedge y$ denotes the bitwise AND of $x$ and $y$ -- $x \vee y$ denotes the bitwise OR of $x$ and $y$ +- $x \vee y$ denotes the bitwise *inclusive* OR of $x$ and $y$ +- $x \oplus y$ denotes the bitwise *exclusive* OR of $x$ and $y$ - $x \ll n$ denotes shifting $x$ to the left $n$ bits, i.e. $x \ll n = x2^{n}$ - $x \gg n$ denotes a *logical* right shift -- it shifts $x$ to the right by $n$ bits, i.e. $x \gg n = x / 2^n$ -- $X \mathbin{\|} Y$ denotes the concatenation of two sequences $X$ and $Y$, +- $X \mathbin{\|} Y$ denotes the concatenation of two sequences $X$ and + $Y$, i.e. if $X = \langle X_0, \dots, X_N \rangle$ and $Y = \langle Y_0, \dots, Y_M \rangle$ then $X \mathbin{\|} Y = \langle X_0, \dots, X_N, Y_0, \dots, Y_M \rangle$ - $\operatorname{min}(x, y)$ denotes the minimum of $x$ and $y$. +- $\operatorname{ROT}_L(x, n)$ denotes the rotation of $x$ to the left + by $n$ bits, i.e. $\operatorname{ROT}_L(x, n) = (x \ll n) \vee (x \gg + (32 - n))$ + +We use standard mathematical notation for summation. For example: + +$\sum_{i = 0}^{n} i$ + +denotes the sum of integers in the range $[0, n]$. + +We define a similar notation for exclusive or: + +$\bigoplus_{i = 0}^{n} i$ + +denotes the bitwise exclusive or of theintegers in $[0, n]$. # Splitting @@ -193,6 +211,98 @@ To “close” a node $N_i$: # Rolling Hash Functions +## CP32 + +The `cp32` hash function is based on cyclic polynomials. The family of +related functions is sometimes also called "buzhash." `cp32` is the +recommended hash function for use with hashsplit; use it unless you have +clear reasons for doing otherwise. + +### Definition + +We define the function $\operatorname{CP32} \in V_8 \rightarrow U_{32}$ +as: + +$\operatorname{CP32}(X) = \bigoplus_{i = 0}^{|X| - 1} +\operatorname{ROT}_L(g(X_i), |X| - i + 1)$ + +Where $g(n) = G_n$ and $G \in V_{32}$ is the sequence: + +$\langle$ +1798466244, 335077821, 492897903, 2272477127, 924078993, +470900288, 3538556835, 2253448369, 3901930249, 1082788922, 1010874156, +714641328, 4136751352, 2988471001, 1873327877, 1925014406, 3717225155, +2144051386, 1334093084, 500713342, 1872178988, 2899116430, 3801501459, +2055021448, 3958647975, 2833424546, 2394367699, 3436276150, 1413805598, +3782782330, 3579224461, 3133673204, 885754503, 2000724393, 1650724833, +2984658034, 3739408072, 662999316, 3056811851, 3138083869, 1474639442, +4259649945, 4017566483, 465238337, 781885572, 928545464, 2787015764, +3078209121, 3631832061, 386384374, 1358863444, 855586437, 2499107874, +707972634, 194016939, 339095673, 2929281836, 1250797697, 1198569924, +4107355101, 1890126859, 2694076458, 1260735760, 609497694, 388343177, +2587066586, 2492394206, 2046329380, 2072888184, 3255373238, 1106749356, +3571012236, 2131471591, 3541399572, 3614800836, 3022576390, 774577410, +77184245, 823105086, 3857914499, 3771555855, 2336796436, 1452192314, +30479627, 871710755, 2699403231, 2367144669, 4219196231, 1301074994, +1716369630, 3566152300, 381894957, 2268738300, 276392481, 3980456184, +1554573746, 259052121, 234173122, 23950250, 1165367973, 412829095, +1254938419, 1679790307, 1496242670, 1260221101, 1124019412, 106214921, +2039485120, 1499412132, 137092054, 58056147, 3245088693, 1464413688, +2731895448, 3753028136, 925430623, 3695831665, 2599322487, 3593331371, +742039893, 1081974509, 3160094770, 1117133092, 345511722, 3339872022, +2504608598, 3557049083, 2989113041, 181657774, 2007372650, 4212900848, +443636792, 3434861085, 102756407, 2245460171, 2324673430, 2506866248, +4065685208, 857327755, 3772175337, 1199813398, 61289795, 624682477, +1093806826, 3753905274, 2536215571, 3435807477, 169664309, 2732339640, +4102264811, 3191810878, 3532983199, 3436341711, 1369853097, 3930511726, +3404499246, 1068382818, 4046345179, 928204364, 558874001, 1620894455, +1633203276, 2806743079, 2045995282, 382386530, 1584848719, 3158410491, +2435624061, 4185806596, 1716376159, 2105767941, 1401343968, 1314413943, +2700759678, 3948708865, 2709965905, 99565343, 3253716852, 947063852, +2912703801, 667765048, 1930933490, 2234259567, 2764681460, 4120047632, +4143875827, 2974525548, 118528551, 218125965, 3643729055, 3697557171, +2374091571, 3441261501, 2281675994, 2163884677, 623218011, 3655599706, +2023054360, 2223459370, 4256043883, 1223603155, 3261217112, 1517615469, +197872117, 809619196, 2779816360, 757709542, 2439696019, 242243149, +2722665646, 2560033869, 3416882218, 1386419121, 831440001, 3295846081, +3641366410, 1441505168, 1326817242, 2836380996, 3502924296, 1549365865, +3764012830, 648405540, 2534689092, 3974284422, 4133264030, 2191784891, +2455575138, 3603219099, 1639524653, 370485705, 930165312, 1760334651, +3984631013, 45275969, 1204803190, 3219286849, 1585735867, 1846351268, +1077427956, 2179343099, 424359820, 206584565, 2382377895, 3844702, +2642110243, 117631095, 884429158, 3518666968, 2610894740, 3902151812, +2641836823, 4185407209, 3757119320, 1237230287, 2699069567 +$\rangle$ + +(The sequence $G$ was chosen at random). Note that $|G| = 256$, so +$g(n)$ is always defined. + +### Implementation + +## Rolling + +$\operatorname{CP32}$ can be computed in a rolling fashion; for +sequences + +$X = \langle X_0, \dots, X_N \rangle$ + +and + +$Y = \langle X_1, \dots, X_N, y \rangle$ + +Given $\operatorname{CP32}(X)$, $X_0$ and $y$, we can compute +$\operatorname{CP32}(Y)$ as: + +$\operatorname{CP32}(Y) = \operatorname{ROT}_L(\operatorname{CP32}(X), +1) \oplus \operatorname{ROT}_L(g(X_0), |X|) \oplus g(y)$. + +Note that the splitting algorithm only computes hashes on sequences of +size $W = 64$, and since 64 is a multiple of 32 this means that for the +purposes of splitting, the above can be simplified to: + +$\operatorname{CP32}(Y) = \operatorname{ROT}_L(\operatorname{CP32}(X), +1) \oplus g(X_0) \oplus g(y)$. + ## The RRS Rolling Checksums The `rrs` family of checksums is based on an algorithm first used From 3c0495184e29cbf384e5bdff2aec7f7ef58dafe0 Mon Sep 17 00:00:00 2001 From: Ian Denhardt Date: Wed, 14 Oct 2020 16:19:49 -0400 Subject: [PATCH 2/6] Explicitly state |X| \mod 32. --- spec.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec.md b/spec.md index 8296d3c..ed26160 100644 --- a/spec.md +++ b/spec.md @@ -294,7 +294,7 @@ Given $\operatorname{CP32}(X)$, $X_0$ and $y$, we can compute $\operatorname{CP32}(Y)$ as: $\operatorname{CP32}(Y) = \operatorname{ROT}_L(\operatorname{CP32}(X), -1) \oplus \operatorname{ROT}_L(g(X_0), |X|) \oplus g(y)$. +1) \oplus \operatorname{ROT}_L(g(X_0), |X| \mod 32) \oplus g(y)$. Note that the splitting algorithm only computes hashes on sequences of size $W = 64$, and since 64 is a multiple of 32 this means that for the From d6506f617090ce13580e24196a2f55eec9561d6b Mon Sep 17 00:00:00 2001 From: Ian Denhardt Date: Wed, 14 Oct 2020 16:24:57 -0400 Subject: [PATCH 3/6] Move G to an appendix, use a monospace font. --- spec.md | 103 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 55 insertions(+), 48 deletions(-) diff --git a/spec.md b/spec.md index ed26160..f35f708 100644 --- a/spec.md +++ b/spec.md @@ -226,55 +226,10 @@ as: $\operatorname{CP32}(X) = \bigoplus_{i = 0}^{|X| - 1} \operatorname{ROT}_L(g(X_i), |X| - i + 1)$ -Where $g(n) = G_n$ and $G \in V_{32}$ is the sequence: +Where $g(n) = G_n$ and the sequence $G \in V_{32}$ is defined in the +appendix. -$\langle$ -1798466244, 335077821, 492897903, 2272477127, 924078993, -470900288, 3538556835, 2253448369, 3901930249, 1082788922, 1010874156, -714641328, 4136751352, 2988471001, 1873327877, 1925014406, 3717225155, -2144051386, 1334093084, 500713342, 1872178988, 2899116430, 3801501459, -2055021448, 3958647975, 2833424546, 2394367699, 3436276150, 1413805598, -3782782330, 3579224461, 3133673204, 885754503, 2000724393, 1650724833, -2984658034, 3739408072, 662999316, 3056811851, 3138083869, 1474639442, -4259649945, 4017566483, 465238337, 781885572, 928545464, 2787015764, -3078209121, 3631832061, 386384374, 1358863444, 855586437, 2499107874, -707972634, 194016939, 339095673, 2929281836, 1250797697, 1198569924, -4107355101, 1890126859, 2694076458, 1260735760, 609497694, 388343177, -2587066586, 2492394206, 2046329380, 2072888184, 3255373238, 1106749356, -3571012236, 2131471591, 3541399572, 3614800836, 3022576390, 774577410, -77184245, 823105086, 3857914499, 3771555855, 2336796436, 1452192314, -30479627, 871710755, 2699403231, 2367144669, 4219196231, 1301074994, -1716369630, 3566152300, 381894957, 2268738300, 276392481, 3980456184, -1554573746, 259052121, 234173122, 23950250, 1165367973, 412829095, -1254938419, 1679790307, 1496242670, 1260221101, 1124019412, 106214921, -2039485120, 1499412132, 137092054, 58056147, 3245088693, 1464413688, -2731895448, 3753028136, 925430623, 3695831665, 2599322487, 3593331371, -742039893, 1081974509, 3160094770, 1117133092, 345511722, 3339872022, -2504608598, 3557049083, 2989113041, 181657774, 2007372650, 4212900848, -443636792, 3434861085, 102756407, 2245460171, 2324673430, 2506866248, -4065685208, 857327755, 3772175337, 1199813398, 61289795, 624682477, -1093806826, 3753905274, 2536215571, 3435807477, 169664309, 2732339640, -4102264811, 3191810878, 3532983199, 3436341711, 1369853097, 3930511726, -3404499246, 1068382818, 4046345179, 928204364, 558874001, 1620894455, -1633203276, 2806743079, 2045995282, 382386530, 1584848719, 3158410491, -2435624061, 4185806596, 1716376159, 2105767941, 1401343968, 1314413943, -2700759678, 3948708865, 2709965905, 99565343, 3253716852, 947063852, -2912703801, 667765048, 1930933490, 2234259567, 2764681460, 4120047632, -4143875827, 2974525548, 118528551, 218125965, 3643729055, 3697557171, -2374091571, 3441261501, 2281675994, 2163884677, 623218011, 3655599706, -2023054360, 2223459370, 4256043883, 1223603155, 3261217112, 1517615469, -197872117, 809619196, 2779816360, 757709542, 2439696019, 242243149, -2722665646, 2560033869, 3416882218, 1386419121, 831440001, 3295846081, -3641366410, 1441505168, 1326817242, 2836380996, 3502924296, 1549365865, -3764012830, 648405540, 2534689092, 3974284422, 4133264030, 2191784891, -2455575138, 3603219099, 1639524653, 370485705, 930165312, 1760334651, -3984631013, 45275969, 1204803190, 3219286849, 1585735867, 1846351268, -1077427956, 2179343099, 424359820, 206584565, 2382377895, 3844702, -2642110243, 117631095, 884429158, 3518666968, 2610894740, 3902151812, -2641836823, 4185407209, 3757119320, 1237230287, 2699069567 -$\rangle$ - -(The sequence $G$ was chosen at random). Note that $|G| = 256$, so +The sequence $G$ was chosen at random. Note that $|G| = 256$, so $g(n)$ is always defined. ### Implementation @@ -370,6 +325,58 @@ operators: $s(k, l) = b(k, l) \vee (a(k, l) \ll 16)$ +# Appendix + +The definition of $G$ as used by $\operatorname{CP32}$ is: + +$\langle$ +``` +1798466244, 335077821, 492897903, 2272477127, 924078993, +470900288, 3538556835, 2253448369, 3901930249, 1082788922, 1010874156, +714641328, 4136751352, 2988471001, 1873327877, 1925014406, 3717225155, +2144051386, 1334093084, 500713342, 1872178988, 2899116430, 3801501459, +2055021448, 3958647975, 2833424546, 2394367699, 3436276150, 1413805598, +3782782330, 3579224461, 3133673204, 885754503, 2000724393, 1650724833, +2984658034, 3739408072, 662999316, 3056811851, 3138083869, 1474639442, +4259649945, 4017566483, 465238337, 781885572, 928545464, 2787015764, +3078209121, 3631832061, 386384374, 1358863444, 855586437, 2499107874, +707972634, 194016939, 339095673, 2929281836, 1250797697, 1198569924, +4107355101, 1890126859, 2694076458, 1260735760, 609497694, 388343177, +2587066586, 2492394206, 2046329380, 2072888184, 3255373238, 1106749356, +3571012236, 2131471591, 3541399572, 3614800836, 3022576390, 774577410, +77184245, 823105086, 3857914499, 3771555855, 2336796436, 1452192314, +30479627, 871710755, 2699403231, 2367144669, 4219196231, 1301074994, +1716369630, 3566152300, 381894957, 2268738300, 276392481, 3980456184, +1554573746, 259052121, 234173122, 23950250, 1165367973, 412829095, +1254938419, 1679790307, 1496242670, 1260221101, 1124019412, 106214921, +2039485120, 1499412132, 137092054, 58056147, 3245088693, 1464413688, +2731895448, 3753028136, 925430623, 3695831665, 2599322487, 3593331371, +742039893, 1081974509, 3160094770, 1117133092, 345511722, 3339872022, +2504608598, 3557049083, 2989113041, 181657774, 2007372650, 4212900848, +443636792, 3434861085, 102756407, 2245460171, 2324673430, 2506866248, +4065685208, 857327755, 3772175337, 1199813398, 61289795, 624682477, +1093806826, 3753905274, 2536215571, 3435807477, 169664309, 2732339640, +4102264811, 3191810878, 3532983199, 3436341711, 1369853097, 3930511726, +3404499246, 1068382818, 4046345179, 928204364, 558874001, 1620894455, +1633203276, 2806743079, 2045995282, 382386530, 1584848719, 3158410491, +2435624061, 4185806596, 1716376159, 2105767941, 1401343968, 1314413943, +2700759678, 3948708865, 2709965905, 99565343, 3253716852, 947063852, +2912703801, 667765048, 1930933490, 2234259567, 2764681460, 4120047632, +4143875827, 2974525548, 118528551, 218125965, 3643729055, 3697557171, +2374091571, 3441261501, 2281675994, 2163884677, 623218011, 3655599706, +2023054360, 2223459370, 4256043883, 1223603155, 3261217112, 1517615469, +197872117, 809619196, 2779816360, 757709542, 2439696019, 242243149, +2722665646, 2560033869, 3416882218, 1386419121, 831440001, 3295846081, +3641366410, 1441505168, 1326817242, 2836380996, 3502924296, 1549365865, +3764012830, 648405540, 2534689092, 3974284422, 4133264030, 2191784891, +2455575138, 3603219099, 1639524653, 370485705, 930165312, 1760334651, +3984631013, 45275969, 1204803190, 3219286849, 1585735867, 1846351268, +1077427956, 2179343099, 424359820, 206584565, 2382377895, 3844702, +2642110243, 117631095, 884429158, 3518666968, 2610894740, 3902151812, +2641836823, 4185407209, 3757119320, 1237230287, 2699069567 +``` +$\rangle$ + [rsync]: https://rsync.samba.org/tech_report/node3.html [bup]: https://bup.github.io/ [perkeep]: https://perkeep.org/ From 12810b29d0caf18203d8be5959eb055c93d0661e Mon Sep 17 00:00:00 2001 From: Ian Denhardt Date: Wed, 14 Oct 2020 16:30:55 -0400 Subject: [PATCH 4/6] Display G in hexidecimal --- spec.md | 89 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/spec.md b/spec.md index f35f708..7f31a32 100644 --- a/spec.md +++ b/spec.md @@ -48,6 +48,9 @@ modulo $2^{32}$. We use standard mathematical notation for addition, subtraction, multiplication, and exponentiation. Division always denotes integer division, i.e. any remainder is dropped. +Numerals staring with the prefix `0x` are hexadecimal, e.g. `0xfe` +for the (decimal) number 254 + We use the notation $\langle X_0, X_1, \dots, X_k \rangle$ to denote an ordered sequence of values. @@ -331,49 +334,49 @@ The definition of $G$ as used by $\operatorname{CP32}$ is: $\langle$ ``` -1798466244, 335077821, 492897903, 2272477127, 924078993, -470900288, 3538556835, 2253448369, 3901930249, 1082788922, 1010874156, -714641328, 4136751352, 2988471001, 1873327877, 1925014406, 3717225155, -2144051386, 1334093084, 500713342, 1872178988, 2899116430, 3801501459, -2055021448, 3958647975, 2833424546, 2394367699, 3436276150, 1413805598, -3782782330, 3579224461, 3133673204, 885754503, 2000724393, 1650724833, -2984658034, 3739408072, 662999316, 3056811851, 3138083869, 1474639442, -4259649945, 4017566483, 465238337, 781885572, 928545464, 2787015764, -3078209121, 3631832061, 386384374, 1358863444, 855586437, 2499107874, -707972634, 194016939, 339095673, 2929281836, 1250797697, 1198569924, -4107355101, 1890126859, 2694076458, 1260735760, 609497694, 388343177, -2587066586, 2492394206, 2046329380, 2072888184, 3255373238, 1106749356, -3571012236, 2131471591, 3541399572, 3614800836, 3022576390, 774577410, -77184245, 823105086, 3857914499, 3771555855, 2336796436, 1452192314, -30479627, 871710755, 2699403231, 2367144669, 4219196231, 1301074994, -1716369630, 3566152300, 381894957, 2268738300, 276392481, 3980456184, -1554573746, 259052121, 234173122, 23950250, 1165367973, 412829095, -1254938419, 1679790307, 1496242670, 1260221101, 1124019412, 106214921, -2039485120, 1499412132, 137092054, 58056147, 3245088693, 1464413688, -2731895448, 3753028136, 925430623, 3695831665, 2599322487, 3593331371, -742039893, 1081974509, 3160094770, 1117133092, 345511722, 3339872022, -2504608598, 3557049083, 2989113041, 181657774, 2007372650, 4212900848, -443636792, 3434861085, 102756407, 2245460171, 2324673430, 2506866248, -4065685208, 857327755, 3772175337, 1199813398, 61289795, 624682477, -1093806826, 3753905274, 2536215571, 3435807477, 169664309, 2732339640, -4102264811, 3191810878, 3532983199, 3436341711, 1369853097, 3930511726, -3404499246, 1068382818, 4046345179, 928204364, 558874001, 1620894455, -1633203276, 2806743079, 2045995282, 382386530, 1584848719, 3158410491, -2435624061, 4185806596, 1716376159, 2105767941, 1401343968, 1314413943, -2700759678, 3948708865, 2709965905, 99565343, 3253716852, 947063852, -2912703801, 667765048, 1930933490, 2234259567, 2764681460, 4120047632, -4143875827, 2974525548, 118528551, 218125965, 3643729055, 3697557171, -2374091571, 3441261501, 2281675994, 2163884677, 623218011, 3655599706, -2023054360, 2223459370, 4256043883, 1223603155, 3261217112, 1517615469, -197872117, 809619196, 2779816360, 757709542, 2439696019, 242243149, -2722665646, 2560033869, 3416882218, 1386419121, 831440001, 3295846081, -3641366410, 1441505168, 1326817242, 2836380996, 3502924296, 1549365865, -3764012830, 648405540, 2534689092, 3974284422, 4133264030, 2191784891, -2455575138, 3603219099, 1639524653, 370485705, 930165312, 1760334651, -3984631013, 45275969, 1204803190, 3219286849, 1585735867, 1846351268, -1077427956, 2179343099, 424359820, 206584565, 2382377895, 3844702, -2642110243, 117631095, 884429158, 3518666968, 2610894740, 3902151812, -2641836823, 4185407209, 3757119320, 1237230287, 2699069567 +0x6b326ac4, 0x13f8e1bd, 0x1d61066f, 0x87733fc7, 0x37145391, 0x1c115e40, +0xd2ea17a3, 0x8650e4b1, 0xe892bb09, 0x408a0c3a, 0x3c40b72c, 0x2a988fb0, +0xf691d0f8, 0xb22072d9, 0x6fa8b705, 0x72bd6386, 0xdd905ac3, 0x7fcba0ba, +0x4f84a51c, 0x1dd8477e, 0x6f972f2c, 0xaccd018e, 0xe2964f13, 0x7a7d2388, +0xebf42ca7, 0xa8e2a0a2, 0x8eb726d3, 0xccd169b6, 0x5444f61e, 0xe178ad7a, +0xd556a18d, 0xbac80ef4, 0x34cb8a87, 0x7740a1a9, 0x62640fe1, 0xb1e64472, +0xdee2d6c8, 0x27849114, 0xb6333f4b, 0xbb0b5c1d, 0x57e53652, 0xfde51999, +0xef773313, 0x1bbaf941, 0x2e9aa084, 0x37587ab8, 0xa61e7c54, 0xb779be61, +0xd8795bfd, 0x1707c1f6, 0x50fe9c54, 0x32ff3685, 0x94f55c22, 0x2a32ce1a, +0x0b9076ab, 0x14363079, 0xae994b2c, 0x4a8da881, 0x4770b9c4, 0xf4d143dd, +0x70a90c0b, 0xa094582a, 0x4b254d10, 0x2454325e, 0x1725a589, 0x9a3380da, +0x948eeade, 0x79f88224, 0x7b8dc378, 0xc2090db6, 0x41f7a7ac, 0xd4d9528c, +0x7f0bace7, 0xd3157814, 0xd7757bc4, 0xb428db06, 0x2e2b1d02, 0x0499bcf5, +0x310f963e, 0xe5f31a83, 0xe0cd600f, 0x8b48af14, 0x568eb23a, 0x01d1150b, +0x33f54023, 0xa0e59fdf, 0x8d17c2dd, 0xfb7bd347, 0x4d8cd432, 0x664db8de, +0xd48f2a6c, 0x16c3412d, 0x873a32fc, 0x10796a21, 0xed40f0f8, 0x5ca8e9b2, +0x0f70d259, 0x0df532c2, 0x016d73aa, 0x45761aa5, 0x189b45a7, 0x4accd733, +0x641f90e3, 0x592ed9ee, 0x4b1d72ad, 0x42ff2cd4, 0x0654b609, 0x799012c0, +0x595f36a4, 0x082bdbd6, 0x0375ddd3, 0xc16c1fb5, 0x57492df8, 0xa2d56a98, +0xdfb2aa28, 0x3728f35f, 0xdc49ea71, 0x9aee8377, 0xd62de2ab, 0x2c3aa155, +0x407d9eed, 0xbc5b3832, 0x42961924, 0x1498172a, 0xc7126716, 0x95494b56, +0xd40442fb, 0xb22a3ed1, 0x0ad3e0ae, 0x77a6136a, 0xfb1bc3f0, 0x1a715c38, +0xccbbd21d, 0x061ff037, 0x85d700cb, 0x8a8fb396, 0x956bbe48, 0xf2556ed8, +0x3319c88b, 0xe0d6d3e9, 0x4783b316, 0x03a73543, 0x253be5ed, 0x41322aea, +0xdfc00c7a, 0x972b9413, 0xccca42f5, 0x0a1cdf35, 0xa2dc31b8, 0xf48397eb, +0xbe3f2b3e, 0xd2950b9f, 0xccd269cf, 0x51a64ca9, 0xea46d96e, 0xcaec892e, +0x3fae3a62, 0xf12e53db, 0x3753464c, 0x214fbd91, 0x609ce2f7, 0x6158b44c, +0xa74b8027, 0x79f36912, 0x16cac162, 0x5e76df4f, 0xbc4184fb, 0x912cac7d, +0xf97e5704, 0x664dd25f, 0x7d837805, 0x5386cfe0, 0x4e585d77, 0xa0fa527e, +0xeb5c8401, 0xa186cc51, 0x05ef3f1f, 0xc1efc774, 0x38730c2c, 0xad9c5539, +0x27cd4938, 0x7317b4f2, 0x852c186f, 0xa4c9b0f4, 0xf592f010, 0xf6fe86f3, +0xb14ba86c, 0x07109a27, 0x0d00568d, 0xd92ee49f, 0xdc643eb3, 0x8d81c333, +0xcd1d7bbd, 0x87ff9cda, 0x80fa4285, 0x25258d5b, 0xd9e4065a, 0x78955c18, +0x84874c2a, 0xfdae136b, 0x48eeb3d3, 0xc2623958, 0x5a74f96d, 0x0bcb49f5, +0x3041cefc, 0xa5b0a1a8, 0x2d29bae6, 0x916ace93, 0x0e70564d, 0xa24894ae, +0x9897044d, 0xcba97c2a, 0x52a313b1, 0x318ec481, 0xc4729ec1, 0xd90ad78a, +0x55eb9f90, 0x4f159fda, 0xa90fbd44, 0xd0ca6208, 0x5c597269, 0xe05a471e, +0x26a5e224, 0x97144944, 0xece2c486, 0xf65c9a9e, 0x82a3fbbb, 0x925d1a62, +0xd6c4c29b, 0x61b9292d, 0x161529c9, 0x37713240, 0x68ec933b, 0xed80a4e5, +0x02b2db41, 0x47cfd676, 0xbfe26b41, 0x5e8468bb, 0x6e0d15a4, 0x40383ef4, +0x81e622fb, 0x194b378c, 0x0c503af5, 0x8e0033a7, 0x003aaa5e, 0x9d7b6723, +0x0702e877, 0x34b75166, 0xd1ba98d8, 0x9b9f1794, 0xe8961c84, 0x9d773b17, +0xf9783ee9, 0xdff11758, 0x49bea2cf, 0xa0e0887f ``` $\rangle$ From 0bb9d97451d80d35b0b127b9a6d302081f33b2bb Mon Sep 17 00:00:00 2001 From: Ian Denhardt Date: Sun, 18 Oct 2020 15:19:15 -0400 Subject: [PATCH 5/6] Fix typo. Thanks to @bobg for spotting this. Co-authored-by: Bob Glickstein --- spec.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec.md b/spec.md index 7f31a32..9e5e736 100644 --- a/spec.md +++ b/spec.md @@ -86,7 +86,7 @@ We define a similar notation for exclusive or: $\bigoplus_{i = 0}^{n} i$ -denotes the bitwise exclusive or of theintegers in $[0, n]$. +denotes the bitwise exclusive or of the integers in $[0, n]$. # Splitting From 9e0af82cfcc9330e57c0781da8feb32ee60b81cb Mon Sep 17 00:00:00 2001 From: Ian Denhardt Date: Wed, 28 Oct 2020 23:17:59 -0400 Subject: [PATCH 6/6] Clarify "summation style" xor notation with an example. --- spec.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec.md b/spec.md index d4294ba..201cc89 100644 --- a/spec.md +++ b/spec.md @@ -88,7 +88,9 @@ We define a similar notation for exclusive or: $\bigoplus_{i = 0}^{n} i$ -denotes the bitwise exclusive or of the integers in $[0, n]$. +denotes the bitwise exclusive or of the integers in $[0, n]$, i.e. + +$\bigoplus_{i = 0}^{n} i = 0 \oplus 1 \oplus \dots \oplus n$ Finally, we define the “prefix” $\mathbb{P}_q(X)$ of a non-empty sequence $X$