[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] [Summer of Code] add a project

From: daly
Subject: [Axiom-developer] [Summer of Code] add a project
Date: Fri, 20 Jan 2006 22:09:11 -0600


<p> Mathematica has a free 'reader' program which is designed to
  show their notebooks. The format for the reader is standard ascii.
  We could develop an Axiom output format that would allow us to 
  create notebooks from Axiom taking advantage of the features of
  the Mathematics notebook.


<p> Reading Soiffer's PhD thesis (The Design of a User Interface for
Computer Algebra Systems) raises an interesting research question.

<p>Assume you're given a standard page size (8 1/2 x 11, A4, display size)
and you have an equation to format in some understandable way 
how can you format the equation to fit on one page.

<p> The underlying "assumption" is that equations longer than one page are
unreadable and useless.

<p>There are a variety of techniques:
<li> line breaks when the equation hits the edge
<li>common subexpression elimination when it can occur
    R = (x+y) * (z+(x*y)) ==>

    let M = (x+y)
        R = M * (z+M)

    so that you can "name" common subexpressions and lift them
<li>function reification

    "name" a subexpression that requires a parameter, 
    lift it out, and substitute a parameterized term.
    in a tree or DAG representation this is node-naming

<li>term reification
    "name" a term, lift it out, and substitute
    in a tree or DAG representation this is node-naming

<li>term summarization
    replacing a (reordered) subset of the terms by a summation

<li>eliding leading, trailing, or middle terms 

     term + term + ... + term

<li>linearizing terms

    terms, such as fractions, can be rewritten in linear form to 
    save lines

<li> constant naming

     long constants replaced by short names:

     R = 3.77612876767 * foo ==>

     let M = 3.77612876767
         R = M * foo

<li>pattern naming

    turn 2D template structures (powers/ratios/matricies/polys) into
    "named" template structures and substitute

    +-   -+   +-   -+ 
    | 1 2 |   | 5 6 |
    |     | * |     |
    | 3 4 |   | 7 8 |
    +-   -+   +-   -+

    turns into 

    A = Matrix((1 2) (3 4))
    B = Matrix((5 6) (7 8))

<li>operator names for all template structures and linear versions
<li>"outer structure" recognition

   is it fundamentally a matrix? a polynomial? an integral?
   the layout techniques could differ based on the outer structure

<li> "inner structure" eliding

   clip out "heavy" element in a matrix so it does not cause
   wide columns

<li>*depth*, *width*, *height* maximums as parameters

<p>Ultimately it seems this boils down to a question of embedding a
tree or a DAG into a planar graph. or perhaps this is an extension
of the TeX layout algorithm with each weights assigned to the boxes?
compute the weight (area?) of a node in the tree or DAG and do some
sort of weight-reduction?


forwarded from

reply via email to

[Prev in Thread] Current Thread [Next in Thread]