Peres 33-Vector Kochen-Specker Set (3D)
Source
Extracted from: A. Peres, Quantum Theory: Concepts and Methods (Kluwer, 1993), Chapter 7: Contextuality, pages 197–200.
The Kochen-Specker Theorem via Peres' 33 Vectors
The Peres 33-vector construction provides one of the most elegant proofs of the Kochen-Specker theorem in 3 dimensions. The argument uses 33 rays in \(\mathbb{R}^3\), arranged into 16 orthogonal triads (complete sets of 3 mutually orthogonal rays). Each ray appears in multiple triads, and this overlap makes any noncontextual \(\{0,1\}\)-assignment impossible.
The noncontextuality assumption is that the value assigned to a projection operator \(P_\mu = u_\mu u_\mu^*\) depends only on the projector itself, not on which orthogonal basis it is measured alongside. Peres showed this assumption leads to a contradiction using only 33 carefully chosen rays.
The 33 vectors use unnormalized integer coordinates from \(\{0, \pm 1, \pm \sqrt{2}\}\). In Peres' compact notation, \(\bar{1}\) denotes \(-1\) and \(\bar{2}\) denotes \(-\sqrt{2}\). Opposite rays (e.g., \(10\bar{2}\) and \(\bar{1}02\)) are counted once since they define the same projector. The values 1 and 0 are called green and red respectively (green = "yes," the system is in this state; red = "no").
Exercises (page 197)
Exercise 7.6 Show that the 33 rays form 16 orthogonal triads (with each ray appearing in the same number of triads).
Exercise 7.7 Show that the squares of the direction cosines of each ray are:
and all components are rational.
Complete List of All 33 Vectors with Coordinates
All vectors use unnormalized components from {0, ±1, ±√2}. Opposite rays (differing by overall sign) are counted once.
Type I: Coordinate Axes (3 vectors, norm² = 1)
| # | Coordinates (x, y, z) |
|---|---|
| 1 | (1, 0, 0) |
| 2 | (0, 1, 0) |
| 3 | (0, 0, 1) |
Type II: Face Diagonals (6 vectors, norm² = 2)
| # | Coordinates (x, y, z) |
|---|---|
| 4 | (1, 1, 0) |
| 5 | (1, −1, 0) |
| 6 | (1, 0, 1) |
| 7 | (1, 0, −1) |
| 8 | (0, 1, 1) |
| 9 | (0, 1, −1) |
Type III: Mixed √2–1–0 Vectors (12 vectors, norm² = 3)
| # | Coordinates (x, y, z) |
|---|---|
| 10 | (√2, 1, 0) |
| 11 | (√2, −1, 0) |
| 12 | (1, √2, 0) |
| 13 | (1, −√2, 0) |
| 14 | (√2, 0, 1) |
| 15 | (√2, 0, −1) |
| 16 | (1, 0, √2) |
| 17 | (1, 0, −√2) |
| 18 | (0, √2, 1) |
| 19 | (0, √2, −1) |
| 20 | (0, 1, √2) |
| 21 | (0, 1, −√2) |
Type IV: √2–1–1 Vectors (12 vectors, norm² = 4)
| # | Coordinates (x, y, z) |
|---|---|
| 22 | (1, 1, √2) |
| 23 | (1, −1, √2) |
| 24 | (1, 1, −√2) |
| 25 | (1, −1, −√2) |
| 26 | (1, √2, 1) |
| 27 | (1, √2, −1) |
| 28 | (1, −√2, 1) |
| 29 | (1, −√2, −1) |
| 30 | (√2, 1, 1) |
| 31 | (√2, 1, −1) |
| 32 | (√2, −1, 1) |
| 33 | (√2, −1, −1) |
Direction Cosines²
Each ray's squared direction cosines take one of four forms (all rational):
| Type | Squared direction cosines | Example |
|---|---|---|
| I | (1, 0, 0) | (1, 0, 0) |
| II | (1/2, 1/2, 0) | (1, 1, 0)/√2 |
| III | (2/3, 1/3, 0) | (√2, 1, 0)/√3 |
| IV | (1/4, 1/4, 1/2) | (1, 1, √2)/2 |
The 16 Orthogonal Triads
| Triad | Vector #s | Coordinates | Type |
|---|---|---|---|
| T1 | {1, 2, 3} | {(1,0,0), (0,1,0), (0,0,1)} | (I, I, I) |
| T2 | {1, 8, 9} | {(1,0,0), (0,1,1), (0,1,−1)} | (I, II, II) |
| T3 | {2, 6, 7} | {(0,1,0), (1,0,1), (1,0,−1)} | (I, II, II) |
| T4 | {3, 4, 5} | {(0,0,1), (1,1,0), (1,−1,0)} | (I, II, II) |
| T5 | {1, 18, 21} | {(1,0,0), (0,√2,1), (0,1,−√2)} | (I, III, III) |
| T6 | {1, 19, 20} | {(1,0,0), (0,√2,−1), (0,1,√2)} | (I, III, III) |
| T7 | {2, 14, 17} | {(0,1,0), (√2,0,1), (1,0,−√2)} | (I, III, III) |
| T8 | {2, 15, 16} | {(0,1,0), (√2,0,−1), (1,0,√2)} | (I, III, III) |
| T9 | {3, 10, 13} | {(0,0,1), (√2,1,0), (1,−√2,0)} | (I, III, III) |
| T10 | {3, 11, 12} | {(0,0,1), (√2,−1,0), (1,√2,0)} | (I, III, III) |
| T11 | {4, 23, 25} | {(1,1,0), (1,−1,√2), (1,−1,−√2)} | (II, IV, IV) |
| T12 | {5, 22, 24} | {(1,−1,0), (1,1,√2), (1,1,−√2)} | (II, IV, IV) |
| T13 | {6, 27, 29} | {(1,0,1), (1,√2,−1), (1,−√2,−1)} | (II, IV, IV) |
| T14 | {7, 26, 28} | {(1,0,−1), (1,√2,1), (1,−√2,1)} | (II, IV, IV) |
| T15 | {8, 31, 32} | {(0,1,1), (√2,1,−1), (√2,−1,1)} | (II, IV, IV) |
| T16 | {9, 30, 33} | {(0,1,−1), (√2,1,1), (√2,−1,−1)} | (II, IV, IV) |
Triad multiplicity per vector
| Type | Vectors | Triads per vector |
|---|---|---|
| I (axes) | #1–3 | 4 each |
| II (face diagonals) | #4–9 | 2 each |
| III (mixed √2–1–0) | #10–21 | 1 each |
| IV (√2–1–1) | #22–33 | 1 each |
Total: 3×4 + 6×2 + 12×1 + 12×1 = 12 + 12 + 12 + 12 = 48 = 16 triads × 3 vectors.
Symmetry
The set is invariant under all permutations of the x, y, z axes and under reversal of any axis direction. This symmetry group (S₃ × Z₂³, order 48) acts on the 33 vectors, organizing them into the four orbits (Types I–IV).
Fig. 7.2 — The 33 Rays and the Cube Diagram (page 198)

Fig. 7.2. The 33 rays used in the proof of the Kochen-Specker theorem are obtained by connecting the center of the cube to the black dots on its faces and edges. Compare this construction with Plate II, page 114.
The cube has coordinate values labelled on the vertical axis: \(\sqrt{2}\), \(1\), \(0\), \(-1\), \(-\sqrt{2}\).
Symmetry Property
An important property of this set of rays is its invariance under interchange of the \(x\), \(y\) and \(z\) axes, and under a reversal of the direction of each axis. This allows us to assign arbitrarily — without loss of generality — the value 1 to some of the rays, because giving them the value 0 instead of 1 would be equivalent to renaming the axes, or reversing one of them. For example, one can impose that ray 001 is green, while 100 and 010 are red.
Table 7-1: Proof of Kochen-Specker Theorem in 3 Dimensions (page 198)
| Orthogonal triad | Other rays | The first ray is green because of |
|---|---|---|
| 001 100 010 | 110 110 | arbitrary choice of \(z\) axis |
| 101 101 010 | arbitrary choice of \(x\) vs \(-x\) | |
| 011 011 100 | arbitrary choice of \(y\) vs \(-y\) | |
| 1\(\bar{1}\)2 112 1\(\bar{1}\)0 | 201 021 | arbitrary choice of \(x\) vs \(y\) |
| 102 \(\bar{2}\)01 010 | 211 | orthogonality to 2nd and 3rd rays |
| 211 011 \(\bar{2}\)11 | 102 | orthogonality to 2nd and 3rd rays |
| 201 010 10\(\bar{2}\) | 1\(\bar{1}\)2 | orthogonality to 2nd and 3rd rays |
| 112 1\(\bar{1}\)0 1\(\bar{1}\)\(\bar{2}\) | 0\(\bar{2}\)1 | orthogonality to 2nd and 3rd rays |
| 012 100 0\(\bar{2}\)1 | 1\(\bar{2}\)1 | orthogonality to 2nd and 3rd rays |
| 121 101 1\(\bar{2}\)1 | 012 | orthogonality to 2nd and 3rd rays |
The proof of the Kochen-Specker theorem entirely holds in Table 7-1 (the table has to be read from top to bottom). In each line, the first ray, printed in boldface characters, is green. The second and third rays form, together with the first one, an orthogonal triad. Therefore they are red. Additional rays in the same line are also orthogonal to the first ray; therefore they too are red (only the rays that will be needed for further work are listed). When a red ray is printed in italic characters, this means that it is an "old" ray, that was found red in a preceding line. The choice of colors for the new rays appearing in each line is explained in the last column.
The first, fourth and last lines contain rays 100, 021, and 012, respectively. These three rays are red and mutually orthogonal. It is so even if the deleted ray is explicitly shown in that set of three rays. This is the Kochen-Specker contradiction: it cannot be that a single ray is deleted from that set of three, because the symmetry disappears. It is so even if the deleted ray dissatisfies the examination of alternative choices. That a contradiction can then be avoided is not as simple as in Table 7-1 (a computer program in the Appendix may help).
Orthogonal Pairs and the Full KS Constraint
The 16 triads capture only part of the orthogonality structure. The full set of 33 vectors contains 72 orthogonal pairs — far more than the 48 triad-slots. These additional pairwise orthogonalities are what make the set KS-uncolorable.
The KS coloring constraints are: 1. Triad rule: Each orthogonal triad has exactly 1 green ray and 2 red rays. 2. Pair rule: No two orthogonal rays can both be green (since any orthogonal pair in R³ extends to a complete basis).
Orthogonal neighbor counts
| Type | Vectors | Orthogonal neighbors each |
|---|---|---|
| I (axes) | #1–3 | 8 |
| II (face diagonals) | #4–9 | 4 |
| III (mixed √2–1–0) | #10–21 | 4 |
| IV (√2–1–1) | #22–33 | 4 |
The axis vectors are the most constrained: each is orthogonal to 8 other rays.
Computational Verification: KS-Uncolorability
An exhaustive backtracking search over all possible {green, red} assignments confirms:
No valid KS coloring exists for the Peres 33-vector set.
The search explored 47 branches and hit 47 dead ends. Every attempted coloring violates either the triad rule or the pair rule. This is verified by verify_peres33.py.
Constructive Proof of the KS Contradiction
The following proof traces through forced assignments step by step, reaching a contradiction on every branch. It uses three WLOG symmetry choices (justified by the cubic symmetry group of the set) and a single binary case split.
Step 1: Choose v3 = (0,0,1) as GREEN
By the cubic symmetry of the 33-vector set (invariance under axis permutations), we may assume without loss of generality that the z-axis ray v3 is green.
Forced by pair rule (all rays orthogonal to v3 must be red):
| Vector | Coordinates | Color | Reason |
|---|---|---|---|
| v3 | (0, 0, 1) | GREEN | WLOG by cubic symmetry |
| v1 | (1, 0, 0) | RED | orthogonal to v3 |
| v2 | (0, 1, 0) | RED | orthogonal to v3 |
| v4 | (1, 1, 0) | RED | orthogonal to v3 |
| v5 | (1, −1, 0) | RED | orthogonal to v3 |
| v10 | (√2, 1, 0) | RED | orthogonal to v3 |
| v11 | (√2, −1, 0) | RED | orthogonal to v3 |
| v12 | (1, √2, 0) | RED | orthogonal to v3 |
| v13 | (1, −√2, 0) | RED | orthogonal to v3 |
All 8 vectors with z-component = 0 are forced red. (9 of 33 assigned.)
Step 2: Choose v6 = (1,0,1) as GREEN
Triad T3 = {v2(R), v6, v7} has v2 red, so one of v6 or v7 must be green. By z → −z reflection symmetry, choose v6 = (1,0,1) green WLOG.
| Vector | Coordinates | Color | Reason |
|---|---|---|---|
| v6 | (1, 0, 1) | GREEN | WLOG by z-reflection |
| v7 | (1, 0, −1) | RED | orthogonal to v6 |
| v27 | (1, √2, −1) | RED | orthogonal to v6 |
| v29 | (1, −√2, −1) | RED | orthogonal to v6 |
(13 of 33 assigned.)
Step 3: Choose v8 = (0,1,1) as GREEN
Triad T2 = {v1(R), v8, v9} has v1 red, so one of v8 or v9 must be green. By y → −y reflection symmetry, choose v8 = (0,1,1) green WLOG.
| Vector | Coordinates | Color | Reason |
|---|---|---|---|
| v8 | (0, 1, 1) | GREEN | WLOG by y-reflection |
| v9 | (0, 1, −1) | RED | orthogonal to v8 |
| v31 | (√2, 1, −1) | RED | orthogonal to v8 |
| v32 | (√2, −1, 1) | RED | orthogonal to v8 |
After three symmetry choices and propagation: 17 of 33 assigned, 16 free.
Step 4: Case split on v16 = (1, 0, √2)
The remaining 16 free vectors are: {v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v28, v30, v33}.
We split on v16, which participates in triad T8 = {v2(R), v15, v16} where v2 is already red.
Case A: v16 = GREEN
| Vector | Coordinates | Color | Reason |
|---|---|---|---|
| v16 | (1, 0, √2) | GREEN | case assumption |
| v15 | (√2, 0, −1) | RED | orthogonal to v16 |
| v33 | (√2, −1, −1) | RED | orthogonal to v16 |
| v30 | (√2, 1, 1) | GREEN | T16 = {v9(R), v30, v33(R)}: only option |
| v17 | (1, 0, −√2) | RED | orthogonal to v30 |
| v14 | (√2, 0, 1) | GREEN | T7 = {v2(R), v14, v17(R)}: only option |
| v24 | (1, 1, −√2) | RED | orthogonal to v14 |
| v25 | (1, −1, −√2) | RED | orthogonal to v14 |
| v23 | (1, −1, √2) | GREEN | T11 = {v4(R), v23, v25(R)}: only option |
| v22 | (1, 1, √2) | GREEN | T12 = {v5(R), v22, v24(R)}: only option |
| v19 | (0, √2, −1) | RED | orthogonal to v22 |
| v18 | (0, √2, 1) | RED | orthogonal to v23 |
| v21 | (0, 1, −√2) | GREEN | T5 = {v1(R), v18(R), v21}: only option |
| v20 | (0, 1, √2) | GREEN | T6 = {v1(R), v19(R), v20}: only option |
| v28 | (1, −√2, 1) | RED | orthogonal to v20 |
| v26 | (1, √2, 1) | RED | orthogonal to v21 |
CONTRADICTION: T14 = {v7(R), v26(R), v28(R)} — all three rays are RED. No green ray in this triad.
Case B: v16 = RED
| Vector | Coordinates | Color | Reason |
|---|---|---|---|
| v16 | (1, 0, √2) | RED | case assumption |
| v15 | (√2, 0, −1) | GREEN | T8 = {v2(R), v15, v16(R)}: only option |
| v22 | (1, 1, √2) | RED | orthogonal to v15 |
| v23 | (1, −1, √2) | RED | orthogonal to v15 |
| v25 | (1, −1, −√2) | GREEN | T11 = {v4(R), v23(R), v25}: only option |
| v24 | (1, 1, −√2) | GREEN | T12 = {v5(R), v22(R), v24}: only option |
| v14 | (√2, 0, 1) | RED | orthogonal to v24 |
| v18 | (0, √2, 1) | RED | orthogonal to v24 |
| v19 | (0, √2, −1) | RED | orthogonal to v25 |
| v21 | (0, 1, −√2) | GREEN | T5 = {v1(R), v18(R), v21}: only option |
| v20 | (0, 1, √2) | GREEN | T6 = {v1(R), v19(R), v20}: only option |
| v17 | (1, 0, −√2) | GREEN | T7 = {v2(R), v14(R), v17}: only option |
| v30 | (√2, 1, 1) | RED | orthogonal to v17 |
| v28 | (1, −√2, 1) | RED | orthogonal to v20 |
| v26 | (1, √2, 1) | RED | orthogonal to v21 |
CONTRADICTION: T14 = {v7(R), v26(R), v28(R)} — all three rays are RED. No green ray in this triad.
Conclusion
Both cases lead to the same contradiction at triad T14 = {v7, v26, v28}. The mechanism is identical in both branches: vectors v20 and v21 are always forced green (by the triad rule, as the last remaining option in T5 and T6), and their orthogonality to v28 and v26 respectively forces those red, leaving T14 with no green ray.
By cubic symmetry (Step 1) and reflection symmetry (Steps 2–3), these three WLOG choices cover all possible colorings. Therefore:
No noncontextual {0,1}-assignment consistent with the orthogonality structure of the Peres 33-vector set exists. This proves the Kochen-Specker theorem in dimension 3.
Physical Interpretation (page 199)
Since our present Hilbert space is isomorphic to \(\mathbb{R}^3\), the abstract vectors in it become ordinary Euclidean vectors. We shall therefore denote them by boldface letters, m, n, etc. A simple physical interpretation of the projection operator can be given in terms of the angular momentum components of a spin 1 particle. It is convenient to use a representation where
(as usual with \(j = 1\)). These matrices satisfy \([J_k, J_l] = i\epsilon_{klm} J_m\), and cyclic permutations thereof. With this representation, we have
These three matrices commute, so that the corresponding observables can be simultaneously measured. One may actually consider all the \(J_\mu^2\) as functions of a single nondegenerate operator.
Equations and Further Development (page 200)
Exercise 7.9 Show that \(J_x^2 = \mathbf{1} + (K - K^2)/2\), and write likewise \(J_y^2\) and \(J_z^2\) as functions of \(K\).
Exercise 7.10 Write explicitly the three matrices \(J_k J_l + J_l J_k\) (for \(k \neq l\)) and show that, for any real unit vector m, the matrix
has components \((\mathbf{P_m})_{rs} = m_r m_s\), and therefore is a projection operator.
A measurement of the projector \(\mathbf{P_m}\) is a test of whether the spin component along the unit vector m is equal to zero. The eigenvalue 1 corresponds to the answer "yes," and the degenerate eigenvalues 0 to the answer "no." Note that this test is essentially different from an ordinary Stern-Gerlach experiment which would measure the spin component along m, because the degenerate matrix \(\mathbf{P_m}\) makes no distinction between \(-1\) and \(+1\) of \(\mathbf{m} \cdot \mathbf{J}\).
A generalization of (7.28), for two orthogonal unit vectors m and n, is:
This operator has eigenvalues \(-1\), \(0\), and \(1\). A direct measurement of \(K(\mathbf{m}, \mathbf{n})\) is difficult, but it is technically possible, and a single operation can thereby determine the "colors" of the triad m, n and m \(\times\) n.
The 33 rays that were used in the proof of the Kochen-Specker theorem form 16 orthogonal triads (see Exercise 7.8). These triads correspond to 16 different and noncommuting operators of the same type as \(K(\mathbf{m}, \mathbf{n})\). Any one of them, but only one, can actually be measured. The results of the other measurements are counterfactual — and mutually contradictory.
Twenty Rays in \(\mathbb{R}^4\) (page 200)
Consider again our pair of spin \(\frac{1}{2}\) particles. Recall that in array (7.1), each row and each column is a complete set of commuting operators. The product of the three operators in each row or column is \(\mathbf{1} \otimes \mathbf{1}\), except for those of the third column, whose product is \(-\mathbf{1} \otimes \mathbf{1}\). It is obviously impossible to associate, with each one of these nine operators, numerical values 1 or \(-1\), that would obey the same multiplication rule as the operators themselves.
This algebraic impossibility will now be rephrased in the geometric language of the Kochen-Specker theorem. The common eigenvectors of the commuting operators in each row and each column of (7.1) form a complete orthogonal basis. We thus have 6 orthogonal bases, with a total of 24 vectors. The impossible assignment is to "paint" them in such a way that one vector of each basis is green.
Recent Research (2026)
Rigidity Analysis
The Peres 33-vector set is infinitesimally flexible but finitely rigid:
| Property | Value |
|---|---|
| Orthogonal pairs | 72 |
| Null space dim | 42 |
| Symmetry dim | 41 |
| Deformation modes | 1 (flex) |
| Finitely rigid? | Yes (2nd-order blocked) |
The single infinitesimal flex is blocked at second order (cokernel component 0.075). The Trandafir-Cabello analysis confirms: Peres-33 is "not rigid" in the infinitesimal sense but admits no finite deformations.
Three Distinct 33-Vector KS Sets
There are now three known structurally distinct KS sets with exactly 33 vectors in 3D:
| Set | Ring | Pairs | Rigid? | Graph type |
|---|---|---|---|---|
| Peres-33 | \(\mathbb{Z}[\sqrt{2}]\) | 72 | Flex | Peres graph |
| Eisenstein-33 | \(\mathbb{Z}[\omega]\) | 78 | Rigid | Eisenstein graph |
| CK-33 | \(\mathbb{Z}\) | 76 | Rigid | CK-33 graph |
The Eisenstein-33 set has 6 more orthogonal pairs (78 vs 72), which kill the flex mode. CK-33 (Conway-Kochen, communicated to Peres ~1990) has 76 pairs and a different graph entirely. The Penrose-33 set shares the Peres graph but is unitarily inequivalent.
The Flex Belongs to the Graph
The \(\mathbb{Z}[\sqrt{-2}]\) 33-vector set — using complex coordinates instead of real — has the same orthogonality graph as Peres and exhibits the same 1-dimensional flex. This proves the deformation mode is a property of the graph structure (72 pairs), not of the algebraic field used for coordinates.
BPQS
Exact bipartite perfect quantum strategy, verified computationally.
References
- A. Peres, Quantum Theory: Concepts and Methods, Kluwer Academic Publishers (1993), Chapter 7
- A. Peres, "Two simple proofs of the Kochen-Specker theorem," J. Phys. A: Math. Gen. 24, L175 (1991)
- S. Kochen and E. P. Specker, "The Problem of Hidden Variables in Quantum Mechanics," J. Math. Mech. 17, 59–87 (1967)
- M. Kernaghan, "Bell-Kochen-Specker theorem for 20 vectors," J. Phys. A: Math. Gen. 27, L829 (1994)
- M. Kernaghan, "The Algebraic Landscape of Kochen-Specker Sets in Dimension Three" (2026)
- S. Trandafir and A. Cabello, rigidity of KS sets (2024)
Cross-Links
- Conway-Kochen 31-Vector KS Set (3D) — The minimal integer KS set
- Eisenstein 33-Vector KS Set (3D) — Rigid 33-vector set with different graph
- \(\mathbb{Z}[\sqrt{-2}]\) 33-Vector KS Set (3D) — Graph-isomorphic complex realization
- The Six Algebraic Islands — Full classification