9.5. Algebraic immunity
Theorem9.5.1
used by 0✓L∃∀N
Associated Lean declarations
-
CryptBoolean.isSymmetricBooleanFunction_carletStrictMajority[complete] -
CryptBoolean.IsSymmetricBooleanFunction.add_constant_one[complete] -
CryptBoolean.isSymmetricBooleanFunction_carletStrictMajority_add_one[complete] -
CryptBoolean.symmetricWeightProfile_carletStrictMajority_eq_one_iff[complete] -
CryptBoolean.symmetricWeightProfile_carletStrictMajority_add_one_eq_one_iff[complete] -
CryptBoolean.eq_carletStrictMajority_of_symmetricWeightProfile[complete] -
CryptBoolean.eq_carletStrictMajority_add_one_of_symmetricWeightProfile[complete] -
CryptBoolean.eq_carletStrictMajority_or_add_one_iff_weightProfile[complete] -
CryptBoolean.algebraicImmunity_carletStrictMajority_add_one[complete] -
CryptBoolean.symmetric_optimalAlgebraicImmunity_of_eq_carletStrictMajority_or_add_one[complete] -
CryptBoolean.annihilatorEvaluationLinearMap_injective_of_lt_algebraicImmunity[complete] -
CryptBoolean.annihilatorEvaluationLinearMap_injective_pair_of_odd_optimal[complete] -
CryptBoolean.balanced_and_annihilatorEvaluation_injective_of_odd_optimal[complete] -
CryptBoolean.exists_symmetricWeightProfileNat_half_threshold_of_odd_optimal[complete] -
CryptBoolean.symmetric_optimalAlgebraicImmunity_iff_eq_carletStrictMajority_or_add_one[complete]
Optimal algebraic immunity in odd dimension (Carlet, p. 146). Let n>0
be odd and define the majority function \operatorname{Maj}_n by
\operatorname{Maj}_n(x)=1
\quad\Longleftrightarrow\quad
w_H(x)>\frac n2.
For every symmetric Boolean function f:V_n\to\mathbb F_2,
\operatorname{AI}(f)=\frac{n+1}{2}
if and only if
f=\operatorname{Maj}_n
\quad\text{or}\quad
f=\operatorname{Maj}_n+1.
Thus, up to addition of a constant, majority is the unique symmetric
function of optimal algebraic immunity in odd dimension.
Lean code for Theorem9.5.1●15 theorems
Associated Lean declarations
-
CryptBoolean.isSymmetricBooleanFunction_carletStrictMajority[complete]
-
CryptBoolean.IsSymmetricBooleanFunction.add_constant_one[complete]
-
CryptBoolean.isSymmetricBooleanFunction_carletStrictMajority_add_one[complete]
-
CryptBoolean.symmetricWeightProfile_carletStrictMajority_eq_one_iff[complete]
-
CryptBoolean.symmetricWeightProfile_carletStrictMajority_add_one_eq_one_iff[complete]
-
CryptBoolean.eq_carletStrictMajority_of_symmetricWeightProfile[complete]
-
CryptBoolean.eq_carletStrictMajority_add_one_of_symmetricWeightProfile[complete]
-
CryptBoolean.eq_carletStrictMajority_or_add_one_iff_weightProfile[complete]
-
CryptBoolean.algebraicImmunity_carletStrictMajority_add_one[complete]
-
CryptBoolean.symmetric_optimalAlgebraicImmunity_of_eq_carletStrictMajority_or_add_one[complete]
-
CryptBoolean.annihilatorEvaluationLinearMap_injective_of_lt_algebraicImmunity[complete]
-
CryptBoolean.annihilatorEvaluationLinearMap_injective_pair_of_odd_optimal[complete]
-
CryptBoolean.balanced_and_annihilatorEvaluation_injective_of_odd_optimal[complete]
-
CryptBoolean.exists_symmetricWeightProfileNat_half_threshold_of_odd_optimal[complete]
-
CryptBoolean.symmetric_optimalAlgebraicImmunity_iff_eq_carletStrictMajority_or_add_one[complete]
Associated Lean declarations
-
CryptBoolean.isSymmetricBooleanFunction_carletStrictMajority[complete] -
CryptBoolean.IsSymmetricBooleanFunction.add_constant_one[complete] -
CryptBoolean.isSymmetricBooleanFunction_carletStrictMajority_add_one[complete] -
CryptBoolean.symmetricWeightProfile_carletStrictMajority_eq_one_iff[complete] -
CryptBoolean.symmetricWeightProfile_carletStrictMajority_add_one_eq_one_iff[complete] -
CryptBoolean.eq_carletStrictMajority_of_symmetricWeightProfile[complete] -
CryptBoolean.eq_carletStrictMajority_add_one_of_symmetricWeightProfile[complete] -
CryptBoolean.eq_carletStrictMajority_or_add_one_iff_weightProfile[complete] -
CryptBoolean.algebraicImmunity_carletStrictMajority_add_one[complete] -
CryptBoolean.symmetric_optimalAlgebraicImmunity_of_eq_carletStrictMajority_or_add_one[complete] -
CryptBoolean.annihilatorEvaluationLinearMap_injective_of_lt_algebraicImmunity[complete] -
CryptBoolean.annihilatorEvaluationLinearMap_injective_pair_of_odd_optimal[complete] -
CryptBoolean.balanced_and_annihilatorEvaluation_injective_of_odd_optimal[complete] -
CryptBoolean.exists_symmetricWeightProfileNat_half_threshold_of_odd_optimal[complete] -
CryptBoolean.symmetric_optimalAlgebraicImmunity_iff_eq_carletStrictMajority_or_add_one[complete]
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.isSymmetricBooleanFunction_carletStrictMajority {n : ℕ} : CryptBoolean.IsSymmetricBooleanFunction (CryptBoolean.carletStrictMajority n)
theorem CryptBoolean.isSymmetricBooleanFunction_carletStrictMajority {n : ℕ} : CryptBoolean.IsSymmetricBooleanFunction (CryptBoolean.carletStrictMajority n)
Strict majority is a symmetric Boolean function.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.IsSymmetricBooleanFunction.add_constant_one {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hf : CryptBoolean.IsSymmetricBooleanFunction f) : CryptBoolean.IsSymmetricBooleanFunction (f + 1)
theorem CryptBoolean.IsSymmetricBooleanFunction.add_constant_one {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hf : CryptBoolean.IsSymmetricBooleanFunction f) : CryptBoolean.IsSymmetricBooleanFunction (f + 1)
Output complementation preserves symmetry.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.isSymmetricBooleanFunction_carletStrictMajority_add_one {n : ℕ} : CryptBoolean.IsSymmetricBooleanFunction (CryptBoolean.carletStrictMajority n + 1)
theorem CryptBoolean.isSymmetricBooleanFunction_carletStrictMajority_add_one {n : ℕ} : CryptBoolean.IsSymmetricBooleanFunction (CryptBoolean.carletStrictMajority n + 1)
The complement of strict majority is symmetric.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.symmetricWeightProfile_carletStrictMajority_eq_one_iff {n : ℕ} (r : Fin (n + 1)) : CryptBoolean.symmetricWeightProfile (CryptBoolean.carletStrictMajority n) r = 1 ↔ n < 2 * ↑r
theorem CryptBoolean.symmetricWeightProfile_carletStrictMajority_eq_one_iff {n : ℕ} (r : Fin (n + 1)) : CryptBoolean.symmetricWeightProfile (CryptBoolean.carletStrictMajority n) r = 1 ↔ n < 2 * ↑r
The strict-majority weight profile is the strict upper-half threshold.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.symmetricWeightProfile_carletStrictMajority_add_one_eq_one_iff {n : ℕ} (r : Fin (n + 1)) : CryptBoolean.symmetricWeightProfile (CryptBoolean.carletStrictMajority n + 1) r = 1 ↔ 2 * ↑r ≤ n
theorem CryptBoolean.symmetricWeightProfile_carletStrictMajority_add_one_eq_one_iff {n : ℕ} (r : Fin (n + 1)) : CryptBoolean.symmetricWeightProfile (CryptBoolean.carletStrictMajority n + 1) r = 1 ↔ 2 * ↑r ≤ n
The complemented strict-majority profile is the weak lower-half threshold.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.eq_carletStrictMajority_of_symmetricWeightProfile {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hf : CryptBoolean.IsSymmetricBooleanFunction f) (hprofile : ∀ (r : Fin (n + 1)), CryptBoolean.symmetricWeightProfile f r = 1 ↔ n < 2 * ↑r) : f = CryptBoolean.carletStrictMajority n
theorem CryptBoolean.eq_carletStrictMajority_of_symmetricWeightProfile {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hf : CryptBoolean.IsSymmetricBooleanFunction f) (hprofile : ∀ (r : Fin (n + 1)), CryptBoolean.symmetricWeightProfile f r = 1 ↔ n < 2 * ↑r) : f = CryptBoolean.carletStrictMajority n
A symmetric function with the strict upper-half profile is strict majority.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.eq_carletStrictMajority_add_one_of_symmetricWeightProfile {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hf : CryptBoolean.IsSymmetricBooleanFunction f) (hprofile : ∀ (r : Fin (n + 1)), CryptBoolean.symmetricWeightProfile f r = 1 ↔ 2 * ↑r ≤ n) : f = CryptBoolean.carletStrictMajority n + 1
theorem CryptBoolean.eq_carletStrictMajority_add_one_of_symmetricWeightProfile {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hf : CryptBoolean.IsSymmetricBooleanFunction f) (hprofile : ∀ (r : Fin (n + 1)), CryptBoolean.symmetricWeightProfile f r = 1 ↔ 2 * ↑r ≤ n) : f = CryptBoolean.carletStrictMajority n + 1
A symmetric function with the weak lower-half profile is the complement of strict majority.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.eq_carletStrictMajority_or_add_one_iff_weightProfile {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hf : CryptBoolean.IsSymmetricBooleanFunction f) : f = CryptBoolean.carletStrictMajority n ∨ f = CryptBoolean.carletStrictMajority n + 1 ↔ (∀ (r : Fin (n + 1)), CryptBoolean.symmetricWeightProfile f r = 1 ↔ n < 2 * ↑r) ∨ ∀ (r : Fin (n + 1)), CryptBoolean.symmetricWeightProfile f r = 1 ↔ 2 * ↑r ≤ n
theorem CryptBoolean.eq_carletStrictMajority_or_add_one_iff_weightProfile {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hf : CryptBoolean.IsSymmetricBooleanFunction f) : f = CryptBoolean.carletStrictMajority n ∨ f = CryptBoolean.carletStrictMajority n + 1 ↔ (∀ (r : Fin (n + 1)), CryptBoolean.symmetricWeightProfile f r = 1 ↔ n < 2 * ↑r) ∨ ∀ (r : Fin (n + 1)), CryptBoolean.symmetricWeightProfile f r = 1 ↔ 2 * ↑r ≤ n
For a symmetric function, being strict majority up to complementation is equivalent to having one of the two half-threshold profiles.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.algebraicImmunity_carletStrictMajority_add_one {n : ℕ} : CryptBoolean.algebraicImmunity (CryptBoolean.carletStrictMajority n + 1) = (n + 1) / 2
theorem CryptBoolean.algebraicImmunity_carletStrictMajority_add_one {n : ℕ} : CryptBoolean.algebraicImmunity (CryptBoolean.carletStrictMajority n + 1) = (n + 1) / 2
The complement of strict majority has optimal algebraic immunity.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.symmetric_optimalAlgebraicImmunity_of_eq_carletStrictMajority_or_add_one {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hf : f = CryptBoolean.carletStrictMajority n ∨ f = CryptBoolean.carletStrictMajority n + 1) : CryptBoolean.IsSymmetricBooleanFunction f ∧ CryptBoolean.algebraicImmunity f = (n + 1) / 2
theorem CryptBoolean.symmetric_optimalAlgebraicImmunity_of_eq_carletStrictMajority_or_add_one {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hf : f = CryptBoolean.carletStrictMajority n ∨ f = CryptBoolean.carletStrictMajority n + 1) : CryptBoolean.IsSymmetricBooleanFunction f ∧ CryptBoolean.algebraicImmunity f = (n + 1) / 2
Strict majority and its complement are symmetric functions of optimal algebraic immunity.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.annihilatorEvaluationLinearMap_injective_of_lt_algebraicImmunity {n d : ℕ} (f : CryptBoolean.BooleanFunction n) (hd : d < CryptBoolean.algebraicImmunity f) : Function.Injective ⇑(CryptBoolean.annihilatorEvaluationLinearMap f d)
theorem CryptBoolean.annihilatorEvaluationLinearMap_injective_of_lt_algebraicImmunity {n d : ℕ} (f : CryptBoolean.BooleanFunction n) (hd : d < CryptBoolean.algebraicImmunity f) : Function.Injective ⇑(CryptBoolean.annihilatorEvaluationLinearMap f d)
Evaluation of degree-at-most-`d` functions on the support is injective whenever `d` is strictly below the algebraic immunity.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.annihilatorEvaluationLinearMap_injective_pair_of_odd_optimal {n : ℕ} (f : CryptBoolean.BooleanFunction n) (hn : Odd n) (hAI : CryptBoolean.algebraicImmunity f = (n + 1) / 2) : Function.Injective ⇑(CryptBoolean.annihilatorEvaluationLinearMap f ((n - 1) / 2)) ∧ Function.Injective ⇑(CryptBoolean.annihilatorEvaluationLinearMap (f + 1) ((n - 1) / 2))
theorem CryptBoolean.annihilatorEvaluationLinearMap_injective_pair_of_odd_optimal {n : ℕ} (f : CryptBoolean.BooleanFunction n) (hn : Odd n) (hAI : CryptBoolean.algebraicImmunity f = (n + 1) / 2) : Function.Injective ⇑(CryptBoolean.annihilatorEvaluationLinearMap f ((n - 1) / 2)) ∧ Function.Injective ⇑(CryptBoolean.annihilatorEvaluationLinearMap (f + 1) ((n - 1) / 2))
In odd dimension, optimal algebraic immunity makes both half-order annihilator-evaluation maps injective.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.balanced_and_annihilatorEvaluation_injective_of_odd_optimal {n : ℕ} (f : CryptBoolean.BooleanFunction n) (hn : Odd n) (hAI : CryptBoolean.algebraicImmunity f = (n + 1) / 2) : CryptBoolean.IsBalanced f ∧ Function.Injective ⇑(CryptBoolean.annihilatorEvaluationLinearMap f ((n - 1) / 2)) ∧ Function.Injective ⇑(CryptBoolean.annihilatorEvaluationLinearMap (f + 1) ((n - 1) / 2))
theorem CryptBoolean.balanced_and_annihilatorEvaluation_injective_of_odd_optimal {n : ℕ} (f : CryptBoolean.BooleanFunction n) (hn : Odd n) (hAI : CryptBoolean.algebraicImmunity f = (n + 1) / 2) : CryptBoolean.IsBalanced f ∧ Function.Injective ⇑(CryptBoolean.annihilatorEvaluationLinearMap f ((n - 1) / 2)) ∧ Function.Injective ⇑(CryptBoolean.annihilatorEvaluationLinearMap (f + 1) ((n - 1) / 2))
An odd-dimensional function of optimal algebraic immunity is balanced, and its support and complementary support both determine every Boolean function of degree at most `(n-1)/2`.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.exists_symmetricWeightProfileNat_half_threshold_of_odd_optimal {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hn : Odd n) (hf : CryptBoolean.IsSymmetricBooleanFunction f) (hAI : CryptBoolean.algebraicImmunity f = (n + 1) / 2) : ∃ a, ∀ r ≤ n, CryptBoolean.symmetricWeightProfileNat f r = if 2 * r ≤ n then a else a + 1
theorem CryptBoolean.exists_symmetricWeightProfileNat_half_threshold_of_odd_optimal {n : ℕ} {f : CryptBoolean.BooleanFunction n} (hn : Odd n) (hf : CryptBoolean.IsSymmetricBooleanFunction f) (hAI : CryptBoolean.algebraicImmunity f = (n + 1) / 2) : ∃ a, ∀ r ≤ n, CryptBoolean.symmetricWeightProfileNat f r = if 2 * r ≤ n then a else a + 1
An odd-dimensional symmetric function of optimal algebraic immunity has one constant profile value on the lower half of the weight layers and its complementary value on the upper half.
-
theoremdefined in CryptBoolean/Carlet/Chapter10/AlgebraicImmunity.leancomplete
theorem CryptBoolean.symmetric_optimalAlgebraicImmunity_iff_eq_carletStrictMajority_or_add_one {n : ℕ} (f : CryptBoolean.BooleanFunction n) (_hnpos : 0 < n) (hn : Odd n) (hf : CryptBoolean.IsSymmetricBooleanFunction f) : CryptBoolean.algebraicImmunity f = (n + 1) / 2 ↔ f = CryptBoolean.carletStrictMajority n ∨ f = CryptBoolean.carletStrictMajority n + 1
theorem CryptBoolean.symmetric_optimalAlgebraicImmunity_iff_eq_carletStrictMajority_or_add_one {n : ℕ} (f : CryptBoolean.BooleanFunction n) (_hnpos : 0 < n) (hn : Odd n) (hf : CryptBoolean.IsSymmetricBooleanFunction f) : CryptBoolean.algebraicImmunity f = (n + 1) / 2 ↔ f = CryptBoolean.carletStrictMajority n ∨ f = CryptBoolean.carletStrictMajority n + 1
For positive odd dimension, a symmetric Boolean function has optimal algebraic immunity exactly when it is strict majority or its output complement.