Documentation

LeanPool.NaslundCounterexample.Lift

The lift #

Given an even m and a square-difference-free set B of polynomials of degree below m, the lift is

L_m(B) = { V_s + P·R_r + Q·(b + s_∞ T^m + u T^{m+1}) : s ∈ S, r ∈ F_3^3, u ∈ F_3, b ∈ B },

a set of polynomials of degree below m + 8 with exactly 810 · |B| elements, again square-difference-free.

Three features of the formula do the work. The values of a lifted polynomial at 0, 1, 2 are s_0, s_1, s_2, because P and Q vanish there; its coefficient at T^{m+6} is s_∞, because Q has degree 6 and no T^5 term; and the remaining freedom (r, u, b) is recovered from the polynomial itself, which is what makes the parameter map injective. A square difference of two lifted polynomials therefore has all four coordinates of s' - s in {0, 1}, so the code property gives s = s'; what is left is a square difference inside B, which B does not have.

@[reducible, inline]

A parameter tuple (s, r, u, b): a word of the code, the coefficient vector of R, a scalar, and an element of the base.

Equations
Instances For
    noncomputable def NaslundCounterexample.tail (m : ℕ) (p : Parameters) :

    The tail of a lifted polynomial, b + s_∞ T^m + u T^{m+1}: what the multiplier Q acts on.

    Equations
    Instances For
      noncomputable def NaslundCounterexample.liftMap (m : ℕ) (p : Parameters) :

      The lift of one parameter tuple, V_s + P·R_r + Q·(b + s_∞ T^m + u T^{m+1}).

      Equations
      Instances For
        noncomputable def NaslundCounterexample.lift (m : ℕ) (B : Finset (Polynomial (ZMod 3))) :

        The lifted set L_m(B), the image of the parameter set under the lift.

        Equations
        Instances For

          A tuple is a parameter exactly when its code word and its base element are.

          There are 810 · |B| parameter tuples: 10 · 27 · 3 choices besides the base element.

          theorem NaslundCounterexample.mem_lift {m : ℕ} {B : Finset (Polynomial (ZMod 3))} {f : Polynomial (ZMod 3)} :
          f ∈ lift m B ↔ ∃ p ∈ parameters B, liftMap m p = f

          Membership in the lifted set: the elements of L_m(B) are the lifts of parameter tuples.

          theorem NaslundCounterexample.tail_below (m : ℕ) {p : Parameters} (hb : Below m p.2.2.2) :
          Below (m + 2) (tail m p)

          The tail has degree below m + 2 when its base element has degree below m.

          theorem NaslundCounterexample.liftMap_below (m : ℕ) {p : Parameters} (hb : Below m p.2.2.2) :
          Below (m + 8) (liftMap m p)

          The degree bound: a lift of a tuple whose base element has degree below m has degree below m + 8.

          The value of a lifted polynomial at 0 is the code coordinate s_0.

          The value of a lifted polynomial at 1 is the code coordinate s_1.

          The value of a lifted polynomial at 2 is the code coordinate s_2.

          theorem NaslundCounterexample.coeff_tail_self (m : ℕ) {p : Parameters} (hb : Below m p.2.2.2) :
          (tail m p).coeff m = p.1 3

          The coefficient of the tail at T^m is the code coordinate s_∞: the base element does not reach T^m and the term u T^{m+1} lies above it.

          theorem NaslundCounterexample.coeff_tail_succ (m : ℕ) {p : Parameters} (hb : Below m p.2.2.2) :
          (tail m p).coeff (m + 1) = p.2.2.1

          The coefficient of the tail at T^{m+1} is the scalar u: the base element does not reach T^{m+1} and the term s_∞ T^m lies below it.

          theorem NaslundCounterexample.degree_P_mul_R_sub_lt (r r' : Fin 3 → ZMod 3) :
          (P * (R r - R r')).degree < 6

          A difference P · (R_r - R_{r'}) has degree below 6: this is the part of a difference of two lifted polynomials that lies below the multiplier Q, and it is what forces r = r'.

          theorem NaslundCounterexample.coeff_liftMap_top (m : ℕ) {p : Parameters} (hb : Below m p.2.2.2) :
          (liftMap m p).coeff (m + 6) = p.1 3

          The top coordinate. When the base element has degree below m, the coefficient of a lifted polynomial at T^{m+6} is the code coordinate s_∞: the part V_s + P·R_r has degree at most 5 < m + 6; Q · b has degree below m + 6; Q · s_∞ T^m contributes s_∞ times the leading coefficient of Q; and Q · u T^{m+1} would contribute u times the vanishing coefficient [T^5] Q.

          theorem NaslundCounterexample.code_eq_of_liftMap_eq (m : ℕ) {p p' : Parameters} (hb : Below m p.2.2.2) (hb' : Below m p'.2.2.2) (h : liftMap m p = liftMap m p') :
          p.1 = p'.1

          Evaluations and the top coefficient recover the code word from a lifted polynomial.

          theorem NaslundCounterexample.remainder_and_tail_eq (m : ℕ) {p p' : Parameters} (h : liftMap m p = liftMap m p') (hs : p.1 = p'.1) :
          p.2.1 = p'.2.1 ∧ tail m p' = tail m p

          Equal lifts with equal code words have equal low-degree vectors and equal tails.

          Injectivity of the lift on parameters. Two tuples with base elements of degree below m that lift to the same polynomial are equal. No division algorithm is needed: equal outputs give (V_s + P·R_r) - (V_s' + P·R_r') = Q · (tail' - tail), whose left side has degree below 6, so both sides vanish; evaluating at 0, 1, 2 identifies the code words, cancelling P identifies r, and comparing the coefficients at T^m and T^{m+1} identifies u and b.

          theorem NaslundCounterexample.lift_card (m : ℕ) (B : Finset (Polynomial (ZMod 3))) (hB : AllBelow m B) :
          (lift m B).card = 810 * B.card

          The lift multiplies cardinality by 810.

          theorem NaslundCounterexample.lift_allBelow (m : ℕ) (B : Finset (Polynomial (ZMod 3))) (hB : AllBelow m B) :
          AllBelow (m + 8) (lift m B)

          The lift of a set of polynomials of degree below m has degree below m + 8.

          theorem NaslundCounterexample.square_difference_root_degree (t : ℕ) {p p' : Parameters} {z : Polynomial (ZMod 3)} (hb : Below (t + t) p.2.2.2) (hb' : Below (t + t) p'.2.2.2) (hz : liftMap (t + t) p' - liftMap (t + t) p = z ^ 2) :

          A square difference of lifts from an even degree bound has a bounded-degree square root.

          theorem NaslundCounterexample.code_eq_of_square_difference (t : ℕ) {p p' : Parameters} {z : Polynomial (ZMod 3)} (hp : p.1 ∈ code) (hp' : p'.1 ∈ code) (hb : Below (t + t) p.2.2.2) (hb' : Below (t + t) p'.2.2.2) (hz : liftMap (t + t) p' - liftMap (t + t) p = z ^ 2) :
          p.1 = p'.1

          All four code coordinates of a square difference are squares, so the code words agree.

          theorem NaslundCounterexample.P_dvd_of_square_difference (m : ℕ) {p p' : Parameters} {z : Polynomial (ZMod 3)} (hcode : p.1 = p'.1) (hz : liftMap m p' - liftMap m p = z ^ 2) :
          P ∣ z

          Equal code coordinates force the square root to vanish at every element of F_3.

          theorem NaslundCounterexample.square_eq_tail_difference (m : ℕ) {p p' : Parameters} {z w : Polynomial (ZMod 3)} (hcode : p.1 = p'.1) (hz : liftMap m p' - liftMap m p = z ^ 2) (hw : z = P * w) :
          w ^ 2 = tail m p' - tail m p

          The low-degree part vanishes, allowing cancellation of Q from a square difference.

          theorem NaslundCounterexample.scalar_eq_of_square_tail (t : ℕ) {p p' : Parameters} {w : Polynomial (ZMod 3)} (hb : Below (t + t) p.2.2.2) (hb' : Below (t + t) p'.2.2.2) (hcode : p.1 = p'.1) (hw2 : w ^ 2 = tail (t + t) p' - tail (t + t) p) :
          p'.2.2.1 = p.2.2.1

          A tail difference has odd degree unless its scalar coordinates agree.

          The lift preserves square-difference-freeness for even m. If two lifted polynomials differ by z^2, then the four coordinates of s' - s are squares in F_3, hence in {0, 1}, so the code property gives s = s'; then z vanishes on F_3, so z = P·w, the parts below Q cancel, and w^2 = (b' - b) + (u' - u) T^{m+1}. A nonzero square has even natural degree, while m + 1 is odd, so u' = u; and w^2 = b' - b forces w = 0 because B is square-difference-free.