‖A_f‖ = lambda(f) #
Conjugating an eigenvector by the sign pattern x ↦ (-1)^{f x} turns an eigenvector for μ
into an eigenvector for -μ (BSLambda.exists_neg_eigenvector), because every edge of the
sensitivity graph flips the sign. Hence |μ| ≤ lambda(f) for every eigenvalue μ
(BSLambda.abs_eigenvalues_adj_le_lam) and therefore ‖A_f‖ = lambda(f)
(BSLambda.l2_opNorm_adj_eq_lam). This upgrades the inequality
BSLambda.lam_le_l2_opNorm_adj of Section 11.1 of bs_lambda.txt to an equality, which is
what the composition theorem of Section 14 needs.
The consequences used later are the operator bound
BSLambda.sum_sq_adj_mulVec_le : ∑ x, (A_f *ᵥ v) x ^ 2 ≤ lambda(f)^2 * ∑ x, v x ^ 2
and the existence of a top eigenvector BSLambda.exists_top_eigenvector.
Adapted for Lean Pool from Timeroot/BS_Lam at commit
7bd39a8d41ee7910d3296d0477ad18f8fff9d870; ported to Lean Pool with proof and dependency cleanup.
The sign flip x ↦ (-1)^{f x} conjugates an eigenvector for μ into one for -μ: every
edge of the sensitivity graph joins inputs with different f-values.
Every eigenvalue of A_f is at most lambda(f) in absolute value.
The operator bound restricted to one side of the bipartition: A_f *ᵥ v reads v only on
the other side, so only the other side's coordinates appear on the right.
A sensitivity graph all of whose vertices have degree k has lambda = k: the row sums
give lam f ≤ k, and the all-ones vector is an eigenvector for k.