theorem
BooleanFourier.fourierCoeff_restrictLast
{n : ℕ}
(f : BoolFn (n + 1))
(b : Bool)
(T : Finset (Fin n))
:
fourierCoeff (restrictLast f b) T = fourierCoeff f (Finset.map Fin.castSuccEmb T) + boolToReal b * fourierCoeff f (Finset.map Fin.castSuccEmb T ∪ {Fin.last n})
theorem
BooleanFourier.subtype_map_union_left
{n : ℕ}
(J : Finset (Fin n))
(S : Finset ↥J)
(T : Finset ↥Jᶜ)
:
Finset.subtype (fun (x : Fin n) => x ∈ J)
(Finset.map (Function.Embedding.subtype fun (x : Fin n) => x ∈ J) S ∪ Finset.map (Function.Embedding.subtype fun (x : Fin n) => x ∈ Jᶜ) T) = S
theorem
BooleanFourier.subtype_map_union_right
{n : ℕ}
(J : Finset (Fin n))
(S : Finset ↥J)
(T : Finset ↥Jᶜ)
:
Finset.subtype (fun (x : Fin n) => x ∈ Jᶜ)
(Finset.map (Function.Embedding.subtype fun (x : Fin n) => x ∈ J) S ∪ Finset.map (Function.Embedding.subtype fun (x : Fin n) => x ∈ Jᶜ) T) = T
theorem
BooleanFourier.finset_subtype_map_union
{n : ℕ}
(J U : Finset (Fin n))
:
U = Finset.map (Function.Embedding.subtype fun (x : Fin n) => x ∈ J) (Finset.subtype (fun (x : Fin n) => x ∈ J) U) ∪ Finset.map (Function.Embedding.subtype fun (x : Fin n) => x ∈ Jᶜ) (Finset.subtype (fun (x : Fin n) => x ∈ Jᶜ) U)
theorem
BooleanFourier.fourierCoeff_restrictToSubset
{n : ℕ}
(J : Finset (Fin n))
(f : BoolFn n)
(z : ↥Jᶜ → Bool)
(S : Finset ↥J)
:
fourierCoeffOn J (restrictToSubset J f z) S = ∑ T : Finset ↥Jᶜ,
fourierCoeff f
(Finset.map (Function.Embedding.subtype fun (x : Fin n) => x ∈ J) S ∪ Finset.map (Function.Embedding.subtype fun (x : Fin n) => x ∈ Jᶜ) T) * chiOn Jᶜ T z