diff --git a/docs/Project.toml b/docs/Project.toml index 8ef02232a..6ab639659 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -8,6 +8,7 @@ Graphs = "86223c79-3864-5bf0-83f7-82e725a168b6" Hecke = "3e1990a7-5d81-5526-99ce-9ba3ff248f21" LDPCDecoders = "3c486d74-64b9-4c60-8b1a-13a564e77efb" Nemo = "2edaba10-b0f1-5616-af89-8c11ac63239a" +Oscar = "f1435218-dba5-11e9-1e4d-f1a5fab5fc13" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" PyQDecoders = "17f5de1a-9b79-4409-a58d-4d45812840f7" Quantikz = "b0d11df0-eea3-4d79-b4a5-421488cbf74b" diff --git a/docs/src/references.bib b/docs/src/references.bib index 29500a034..fdcc25706 100644 --- a/docs/src/references.bib +++ b/docs/src/references.bib @@ -487,3 +487,11 @@ @article{anderson2014fault year={2014}, publisher={APS} } + +@article{wang2024coprime, + title={Coprime Bivariate Bicycle Codes and their Properties}, + author={Wang, Ming and Mueller, Frank}, + journal={arXiv preprint arXiv:2408.10001}, + year={2024} +} + diff --git a/docs/src/references.md b/docs/src/references.md index 35e944a21..53ed6aff9 100644 --- a/docs/src/references.md +++ b/docs/src/references.md @@ -40,6 +40,7 @@ For quantum code construction routines: - [steane1999quantum](@cite) - [campbell2012magic](@cite) - [anderson2014fault](@cite) +- [wang2024coprime](@cite) For classical code construction routines: - [muller1954application](@cite) diff --git a/ext/QuantumCliffordHeckeExt/lifted_product.jl b/ext/QuantumCliffordHeckeExt/lifted_product.jl index 97e41b044..14b4975b2 100644 --- a/ext/QuantumCliffordHeckeExt/lifted_product.jl +++ b/ext/QuantumCliffordHeckeExt/lifted_product.jl @@ -70,6 +70,52 @@ julia> code_n(c2), code_k(c2) - When the base matrices of the `LPCode` are 1×1 and their elements are sums of cyclic permutations, the code is called a generalized bicycle code [`generalized_bicycle_codes`](@ref). - When the two matrices are adjoint to each other, the code is called a bicycle code [`bicycle_codes`](@ref). + +# Examples + +The coprime bivariate bicycle (BB) codes are defined by two polynomials `𝑎(𝑥,𝑦)` and `𝑏(𝑥,𝑦)`, where `𝑙` and `𝑚` are coprime, and can be expressed as univariate polynomials `𝑎(𝜋)` and `𝑏(𝜋)`, with `𝜋 = 𝑥𝑦`. They can be viewed as a special case of Lifted Product construction based on abelian group `ℤₗ x ℤₘ` where `ℤⱼ` cyclic group of order `j` with generator `𝜋`. + +[108, 12, 6]] coprime-bivariate bicycle (BB) codes from Table 2 of [wang2024coprime](@cite). + +```jldoctest +julia> import Hecke: group_algebra, GF, abelian_group, gens; import Oscar: SubPcGroup; + +julia> l=2; m=27; + +julia> GA = group_algebra(GF(2), abelian_group(SubPcGroup, [l*m])); + +julia> π = gens(GA)[1]; + +julia> A = reshape([π^2 + π^5 + π^44], (1,1)); + +julia> B = reshape([π^8 + π^14 + π^47], (1,1)); + +julia> c1 = LPCode(A, B); + +julia> code_n(c1), code_k(c1) +(108, 12) +``` + +[126, 12, 10]] coprime-bivariate bicycle (BB) codes from Table 2 of [wang2024coprime](@cite). + +```jldoctest +julia> import Hecke: group_algebra, GF, abelian_group, gens; import Oscar: SubPcGroup; + +julia> l=7; m=9; + +julia> GA = group_algebra(GF(2), abelian_group(SubPcGroup, [l*m])); + +julia> π = gens(GA)[1]; + +julia> A = reshape([1 + π + π^58], (1,1)); + +julia> B = reshape([π^3 + π^16 + π^44], (1,1)); + +julia> c1 = LPCode(A, B); + +julia> code_n(c1), code_k(c1) +(126, 12) +``` ## The representation function We use the default representation function `Hecke.representation_matrix` to convert a `GF(2)`-group algebra element to a binary matrix.