module CLineaire :
sig
type t = {
	k : int;
	n : int;
	g : Math.matrice;
	h : Math.matrice; }
type code_lineaire = t
exception PasDansLeCodeException
exception IndecodableException

val antecedent : code_lineaire -> Math.vecteur -> Math.vecteur
val encoder : code_lineaire -> Math.vecteur -> Math.vecteur
val systematiqueFromRedondance : int -> int -> Math.matrice  -> code_lineaire
val distance_minimale : code_lineaire -> int
val decoder : code_lineaire -> Math.vecteur -> Math.vecteur
val appartenir : code_lineaire -> Math.vecteur -> bool

type classesLaterales = {
  syndr : Math.vecteur -> Math.vecteur;
  erreur : Math.vecteur -> Math.vecteur;
  babr : Math.vecteur Math.binabr;
}
val genererClasses : t -> classesLaterales
val decoder2 : classesLaterales -> Math.vecteur -> Math.vecteur

end

module CCyclique :
sig
	type t = { 
		k : int;
		n : int;
		pol : Math.polynome; }
	
	val get : int -> int -> Math.polynome -> t
end

val cycliqueVersLineaire : CCyclique.t -> CLineaire.t
