linear-code: A simple library for linear codes (coding theory, error correction)

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain]

Please see the README on GitHub at https://github.com/wchresta/linear-code#readme


[Skip to ReadMe]

Properties

Versions0.1.0, 0.1.1, 0.1.1, 0.2.0
Change logChangeLog.md
Dependenciesbase (>=4.7 && <5), containers, data-default, ghc-typelits-knownnat, ghc-typelits-natnormalise, HaskellForMaths, matrix, random, random-shuffle [details]
LicenseGPL-3.0-only
Copyright2018, Wanja Chresta
AuthorWanja Chresta
Maintainerwanja dot hs at chrummibei dot ch
CategoryMath
Home pagehttps://github.com/wchresta/linear-code#readme
Bug trackerhttps://github.com/wchresta/linear-code/issues
Source repositoryhead: git clone https://github.com/wchresta/linear-code
UploadedSat Aug 4 13:29:26 UTC 2018 by wchresta

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees


Readme for linear-code-0.1.1

[back to package description]

Hackage Hackage Deps

linear-code

Library to handle linear codes from coding theory.

The library is designed to carry the most important bits of information in the type system while still keeping the types sane.

This library is based roughly on Introduction to Coding Theory by Yehuda Lindell

Usage example

Working with random codes

> :m + Math.Code.Linear System.Random
> :set -XDataKinds
> c <- randomIO :: IO (LinearCode 7 4 F5)
> c
[7,4]_5-Code
> generatorMatrix c
( 1 0 1 0 0 2 0 )
( 0 2 0 0 1 2 0 )
( 0 1 0 1 0 1 0 )
( 1 0 0 0 0 1 1 )
> e1 :: Vector 4 F5
( 1 0 0 0 )
> v = encode c e1
> v
( 1 0 1 0 0 2 0 )
> 2 ^* e4 :: Vector 7 F3
( 0 0 0 2 0 0 0 )
> vWithError = v + 2 ^* e4
> vWithError
( 1 0 1 2 0 2 0 )
> isCodeword c v
True
> isCodeword c vWithError
False
> decode c vWithError
Just ( 1 0 2 2 2 2 0 )

Notice, the returned vector is NOT the one without error. The reason for this is that a random code most likely does not have a distance >2 which would be needed to correct one error. Let's try with a hamming code

Correcting errors with hamming codes

> c = hamming :: BinaryCode 7 4
> generatorMatrix c
( 1 1 0 1 0 0 0 )
( 1 0 1 0 1 0 0 )
( 0 1 1 0 0 1 0 )
( 1 1 1 0 0 0 1 )
> v = encode c e2
> vWithError = v + e3
> Just v' = decode c vWithError
> v' == v
True