1

I am searching for an implementation of generating Kakeya Sets in Finite fields as defined in Dvirs proof of the finite field kakeya conjecture. I search for an implementation, which gives me precisely the points of the Kakeya set $ K \subset \mathbb{F}^n_q$ as listed like the following: $ K = \{ (1,2),(0,2),\dots \}$

EDIT: so by $ K = \{ \dots \} $ I mean the points, lets call them $p$, for which the following holds: $ p \in K $

So and to answer Jean Marie's question. I will now construct a Kakeya Set for $\mathbb{F}^2_3$ this is by far easy and an amusement to build.

Ok, we know, there are $4$ directional vectors mainly because of the fact, that for the number of vectors, lets call them $n_v$, holds the following equation: $n_v = \frac{q^n-1}{q-1}$. Ok lets call the Set of vectors: $N_v$ and define them: $N_v = \{(0,1)^T,(1,0)^T,(1,1)^T,(1,2)^T\}$ Note, that we are in $\mathbb{F_3}$

Therefore (I assume, that you all know how to construct such simple example) the Kakeya Set $K \subset \mathbb{F}^n_q$ is (also now we will write down the points of this set and not explicit the lines (because I am interested in the points) as we would see the lattice of points as a "cartesian system" (I hope you know what I mean with this)) $K = \{(1,0),(2,0),(0,1),(1,1),(2,0),(2,1)\}$ which is only one possibility of a Kakeya Set.

So what I am now really interested in is an algorithm, which already exists (if not I have to implement one myself), so that I get the points of my generated Kakeya Set.

Thanks for your help and I hope you understand now even if my english is not the best.

  • Welcome to MSE. Your question is phrased as an isolated problem, without any further information or context. This does not match many users' quality standards, so it may attract downvotes, or closed. To prevent that, please [edit] the question. This will help you recognise and resolve the issues. Concretely: please provide context, and include your work and thoughts on the problem. These changes can help in formulating more appropriate answers. – José Carlos Santos Aug 17 '21 at 08:07
  • What do you mean by (1,2) for example ? Hopefully the line joining point 1 to point 2 ? Say how you "label/rank" your points ; is point 2 for example associated with (2,0,...0) ? – Jean Marie Aug 17 '21 at 14:11
  • Show you have worked on your issue by attempting to produce a Kakeya set for $q=3^2$ and $n=3$ for example... – Jean Marie Aug 17 '21 at 14:27
  • Hello Jean Marie, I hope that you now know what I wrongly described.... excuse me for that informal error – LogicTheorist Aug 18 '21 at 15:15

1 Answers1

0

For fields of prime orders (this is far from optimal, doing a lot of redundant checks):

import itertools

q = 3 # size of field
n = 3 # dimension of vector space

def line(b, m):
    return set(tuple((bi + t*mi)%q for bi, mi in zip(b, m)) for t in range(q))

def is_kakeya(K, Fnq):
    for m in Fnq:
        for b in Fnq:
            if K.issuperset(line(b, m)):
                break
        else:
            return False
    return True

Fnq = set(itertools.product(range(q), repeat=n)) # vector space F_n^q

for K_len in range(len(Fnq)-1, 0, -1):
    print(f'{q}, {n}, {K_len} / {len(Fnq)}')
    for K in itertools.combinations(Fnq, K_len):
        K = set(K)
        if is_kakeya(K, Fnq):
            print(f'{(q,n,K_len)} - {K}')
            break
    else:
        break

Slightly faster/better version: finite_kakeya.py

idanp
  • 101