Skip to content

Commit

Permalink
Haah's cubic code via LP construction method
Browse files Browse the repository at this point in the history
  • Loading branch information
Fe-r-oz committed Dec 2, 2024
1 parent 5fcf353 commit fb79c3e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
2 changes: 1 addition & 1 deletion ext/QuantumCliffordHeckeExt/QuantumCliffordHeckeExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ using DocStringExtensions
import QuantumClifford, LinearAlgebra
import Hecke: Group, GroupElem, AdditiveGroup, AdditiveGroupElem,
GroupAlgebra, GroupAlgebraElem, FqFieldElem, representation_matrix, dim, base_ring,
multiplication_table, coefficients, abelian_group, group_algebra, rand
multiplication_table, coefficients, abelian_group, group_algebra, rand, gens
import Nemo
import Nemo: characteristic, matrix_repr, GF, ZZ, lift

Expand Down
31 changes: 31 additions & 0 deletions ext/QuantumCliffordHeckeExt/lifted_product.jl
Original file line number Diff line number Diff line change
Expand Up @@ -331,3 +331,34 @@ function haah_cubic_codes(a_shifts::Array{Int}, b_shifts::Array{Int}, l::Int)
b = sum(GA[n%dim(GA)+1] for n in b_shifts)
two_block_group_algebra_codes(a, b)
end

"""
Haah’s cubic code is defined as \$\\text{LP}(1 + x + y + z, 1 + xy + xz + yz)\$
where \$\\text{LP}\$ is the lifted product code, and `x`, `y`, `z` are elements
of the ring \$R = \\mathbb{F}_2[x, y, z] / (x^L - 1, y^L - 1, z^L - 1)\$. Here
\$\\mathbb{F}_2\$ is the finite field of order `2` and `L` is the lattice size.
The ring \$R\$ is the group algebra \$\\mathbb{F}_qG\$ of a finite group `G`, where
\$G = (C_L)^3\$ and \$C_L\$ is the cyclic group of order `L`. This method of Haah's
cubic code construction is outlined in Appendix B of [panteleev2022asymptotically](@cite).
Here is an example of a [[1024, 30, 13 ≤ d ≤ 32]] Haah's cubic code from Appendix B,
code D of [panteleev2021degenerate](@cite) on the `8 × 8 × 8` Lattice.
```jldoctest
julia> l = 8;
julia> c = haah_cubic_codes(l);
julia> code_n(c), code_k(c)
(1024, 30)
```
See also: [`bicycle_codes`](@ref), [`generalized_bicycle_codes`](@ref), [`two_block_group_algebra_codes`](@ref).
"""
function haah_cubic_codes(l::Int)
GA = group_algebra(GF(2), abelian_group([l,l,l]))
x, y, z = gens(GA)
c = [1 + x + y + z;;]
d = [1 + x*y + x*z + y*z;;]
LPCode(c,d)
end

0 comments on commit fb79c3e

Please sign in to comment.