proposition: Lemma addr_closed : addr_closed codebook.
proof: Proof. split; [exact: O_in_codebook | move=> x y]. have [xy|xy] := boolP (x + y == 0); first by rewrite /= (eqP xy) O_in_codebook. rewrite inE => /forallP H1; rewrite inE => /forallP H2. rewrite inE; apply/forallP => i; apply/implyP => i0. rewrite fdcoorD. move: (H1 i) (H2 i); by rewrite i0 2!implyTb => /eqP-> /eqP->; rewrite addr0. Qed.
imports: mathcomp(all_ssreflect ssralg finalg poly polydiv cyclic) mathcomp(perm matrix mxpoly vector mxalgebra zmodp) ssr_ext ssralg_ext poly_ext channel_code decoding linearcode hamming dft poly_decoding euclid grs cyclic_code