#21062: How to store information on codes build from other ones
---------------------------------+------------------------
       Reporter:  jlavauzelle    |        Owner:
           Type:  task           |       Status:  new
       Priority:  major          |    Milestone:  sage-7.3
      Component:  coding theory  |   Resolution:
       Keywords:                 |    Merged in:
        Authors:                 |    Reviewers:
Report Upstream:  N/A            |  Work issues:
         Branch:                 |       Commit:
   Dependencies:                 |     Stopgaps:
---------------------------------+------------------------
Changes (by jlavauzelle):

 * cc: dlucas, jsrn, cpernet (added)


Comment:

 If I understand it well, the new coding theory framework aims at keeping
 as much information as possible on the (algebraic) structure of the
 manipulated codes. I also noticed that this structure is memorized even
 after building a new code from older ones (I'll call this a "code
 derivation"). For instance, puncturing (resp. extension) is made in a way
 that the punctured (resp. extended) code keeps a pointer to the original
 code (and this is useful for decoding, or getting bounds on the
 parameters).

 It's natural to think that in the future, Sage intents to have many other
 linear code derivations (dual code, sum, product or intersection of two
 codes, concatenation, trace code, subfield subcode, etc.). But I find a
 bit messy to define a class for each kind of derivation, especially for
 the sum and the dual code (I can't imagine a DualCode or a SumCode class).

 If you agree with my feeling (of course it's arguable), maybe it would be
 better to instanciate these derivations in a different way.

 I propose the following. Let `C` be a derived code (e.g. the dual of the
 intersection of two codes). When the user does this derivation, `C` won't
 be a `DualCode` object, but an instance of the `LinearCode` class. Now, to
 memorize where the derived code comes from, we could add to the
 `(Abstract)LinearCode` class:
   - an attribute `_derivation_tree` which stores the tree of operations
 (the internal nodes of the tree) made on original codes (the leaves of the
 tree) in order to get the derived code.
   - a method `reduce()`, or `get_structured_representation()`, which
 flattens the tree, that is, which builds an instance of a specific family
 of code (e.g. `GRS` code) corresponding to the derivation.

 For instance, if `C` is the dual code of the intersection of two codes,
 then the attribute `_derivation_tree` will store the following tree :
 {{{
         Dual
           |
      intersection
       |        |
      C_1      C_2
 }}}
 and the `reduce()` method will recursively try to give a structure to the
 intersection of the two codes and to the dual of the resulting code (if
 there is nothing to say, it outputs a `LinearCode` without specific
 structure, that is, with an empty tree).

 Well, maybe these considerations come a bit early in the development, but
 I'll be glad to read your ideas about them.

 Julien

--
Ticket URL: <https://trac.sagemath.org/ticket/21062#comment:1>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-trac.
For more options, visit https://groups.google.com/d/optout.

Reply via email to