Skip to content

Commit 61dc9c8

Browse files
committed
Add "even" and "odd" parts of folding
1 parent fad5cbf commit 61dc9c8

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

ArkLib/Data/CodingTheory/ProximityGap/Folding.lean

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,31 @@ theorem foldWord_k_1 [NeZero n] {i : Fin (2 ^ (n - 1))} {α : F} :
225225
((f i + f i') / 2) + α * ((f i - f i') / (2 * x)) := by
226226
simp [foldWord, foldValue_k_1]
227227

228+
/-- The "even" part of the folding function. -/
229+
def foldWordEven [NeZero n] (domain : SmoothCosetFftDomain n F)
230+
(f : Word F (Fin (2 ^ n))) (i : Fin (2 ^ (n - 1))) : F :=
231+
let x : domain := CosetFftDomain.twoNthRoot (i := 1)
232+
⟨domain.subdomain 1 i, by simp⟩
233+
let i := domain.log x
234+
let i' := domain.log ⟨-x.1, by obtain ⟨x, hx⟩ := x; simpa using hx⟩
235+
(f i + f i') / 2
236+
237+
/-- The "odd" part of the folding function. -/
238+
def foldWordOdd [NeZero n] (domain : SmoothCosetFftDomain n F)
239+
(f : Word F (Fin (2 ^ n))) (i : Fin (2 ^ (n - 1))) : F :=
240+
let x : domain := CosetFftDomain.twoNthRoot (i := 1)
241+
⟨domain.subdomain 1 i, by simp⟩
242+
let i := domain.log x
243+
let i' := domain.log ⟨-x.1, by obtain ⟨x, hx⟩ := x; simpa using hx⟩
244+
(f i - f i') / (2 * x)
245+
246+
/-- `foldWord` equals the natural linear combination
247+
of its even and odd parts. -/
248+
lemma foldWord_k_1_eq_foldWordEven_add_foldWordOdd [NeZero n] {α : F} :
249+
foldWord domain f 1 α =
250+
foldWordEven domain f + α • foldWordOdd domain f := by
251+
aesop (add simp [foldWord_k_1, foldWordEven, foldWordOdd])
252+
228253
/-- An explicit formula for `foldWord` when `k = 1` that
229254
does not use Lagrange interpolation and avoids using `log`. -/
230255
theorem foldWord_k_1_of_sq_roots {i : Fin (2 ^ (n - 1))} {α : F}

0 commit comments

Comments
 (0)