@c Language: Brazilian Portuguese, Encoding: iso-8859-1
@c /Atensor.texi/1.9/Sat Jun  2 00:12:32 2007//
@menu
* Introdu@value{cedilha}@~{a}o ao Pacote atensor::
* Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para o Pacote atensor::
@end menu

@node Introdu@value{cedilha}@~{a}o ao Pacote atensor, Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para o Pacote atensor, Pacote atensor, Pacote atensor
@section Introdu@value{cedilha}@~{a}o ao Pacote atensor

@code{atensor} @'{e} um pacote de manipul@value{cedilha}@~{a}o de tensores alg@'{e}bricos.  Para usar @code{atensor},
digite @code{load(atensor)}, seguido por uma chamada @`a fun@value{cedilha}@~{a}o 
@code{init_atensor}.

A ess@^{e}ncia de @code{atensor} @'{e} um conjunto de regras de simplifica@value{cedilha}@~{a}o para o operador
de produto (ponto) n@~{a}o comutativo ("@code{.}").  @code{atensor} reconhece
muitos tipos de @'{a}lgebra; as regras de simplifica@value{cedilha}@~{a}o correspondentes s@~{a}o ativadas quando
a fun@value{cedilha}@~{a}o @code{init_atensor} @'{e} chamada.

A compatibilidade de @code{atensor} pode ser demonstrada pela defini@value{cedilha}@~{a}o da
@'{a}lgebra de quat@'{e}rnios como uma @'{a}lgera-Clifford Cl(0,2) com dois vetores
fundamentais.  As tr@^{e}s unidades quaterni@^{o}nicas imagin@'{a}rias fundamentais s@~{a}o ent@~{a}o os dois
vetores base  e seu produto, i.e.:

@example
    i = v     j = v     k = v  .  v
         1         2         1    2
@end example

Embora o pacote @code{atensor} tenha uma defini@value{cedilha}@~{a}o interna para a
@'{a}lgebra dos quat@'{e}rnios, isso n@~{a}o foi usado nesse exemplo, no qual n@'{o}s
nos esfor@value{cedilha}amos para construir a tabela de multiplica@value{cedilha}@~{a}o dos quat@'{e}rnios como uma matriz:

@example

(%i1) load(atensor);
(%o1)       /share/tensor/atensor.mac
(%i2) init_atensor(clifford,0,0,2);
(%o2)                                done
(%i3) atensimp(v[1].v[1]);
(%o3)                                 - 1
(%i4) atensimp((v[1].v[2]).(v[1].v[2]));
(%o4)                                 - 1
(%i5) q:zeromatrix(4,4);
                                [ 0  0  0  0 ]
                                [            ]
                                [ 0  0  0  0 ]
(%o5)                           [            ]
                                [ 0  0  0  0 ]
                                [            ]
                                [ 0  0  0  0 ]
(%i6) q[1,1]:1;
(%o6)                                  1
(%i7) for i thru adim do q[1,i+1]:q[i+1,1]:v[i];
(%o7)                                done
(%i8) q[1,4]:q[4,1]:v[1].v[2];
(%o8)                               v  .  v
                                     1    2
(%i9) for i from 2 thru 4 do for j from 2 thru 4 do
      q[i,j]:atensimp(q[i,1].q[1,j]);
(%o9)                                done
(%i10) q;
                   [    1        v         v      v  .  v  ]
                   [              1         2      1    2 ]
                   [                                      ]
                   [   v         - 1     v  .  v    - v    ]
                   [    1                 1    2      2   ]
(%o10)             [                                      ]
                   [   v      - v  .  v     - 1      v     ]
                   [    2        1    2              1    ]
                   [                                      ]
                   [ v  .  v      v        - v       - 1   ]
                   [  1    2      2          1            ]
@end example

@code{atensor} reconhece como bases vetoriais s@'{i}mbolos indexados, onde o s@'{i}mbolo 
@'{e} aquele armazenado em @code{asymbol} e o i@'{i}ndice est@'{a} entre 1 e @code{adim}.
Para s@'{i}mbolos indexado, e somente para s@'{i}mbolos indexados, as formas bilineares
@code{sf}, @code{af}, e @code{av} s@~{a}o avaliadas.  A avalia@value{cedilha}@~{a}o
substitui os valores  de @code{aform[i,j]} em lugar de @code{fun(v[i],v[j])}
onde @code{v} representa o valor de @code{asymbol} e @code{fun} @'{e}
ainda @code{af} ou @code{sf}; ou, isso substitui @code{v[aform[i,j]]}
em lugar de @code{av(v[i],v[j])}.

Desnecess@'{a}rio dizer, as fun@value{cedilha}@~{o}es @code{sf}, @code{af} e @code{av}
podem ser redefinidas.

Quando o pacote @code{atensor} @'{e} chamado, os seguintes sinalizadores s@~{a}o configurados:

@example
dotscrules:true;
dotdistrib:true;
dotexptsimp:false;
@end example

Se voc@^{e} deseja experimentar com uma @'{a}lgebra n@~{a}o associativa, voc@^{e} pode tamb@'{e}m
considerar a configura@value{cedilha}@~{a}o de @code{dotassoc} para @code{false}.  Nesse caso, todavia,
@code{atensimp} n@~{a}o star@'{a} sempre habilitado a obter as simplifica@value{cedilha}@~{o}es
desejadas.


@c end concepts atensor
@node Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para o Pacote atensor,  , Introdu@value{cedilha}@~{a}o ao Pacote atensor, Pacote atensor

@section Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para o Pacote atensor

@deffn {Fun@value{cedilha}@~{a}o} init_atensor (@var{alg_type}, @var{opt_dims})
@deffnx {Fun@value{cedilha}@~{a}o} init_atensor (@var{alg_type})

Inicializa o pacote @code{atensor} com o tipo especificado de @'{a}lgebra.  @var{alg_type}
pode ser um dos seguintes:

@code{universal}: A @'{a}lgebra universal tendo regras n@~{a}o comutativas.

@code{grassmann}: A @'{a}lgebra de Grassman @'{e} definida pela rela@value{cedilha}@~{a}o de 
comuta@value{cedilha}@~{a}o @code{u.v+v.u=0}.

@code{clifford}: A @'{a}lgebra de Clifford @'{e} definida pela rela@value{cedilha}@~{a}o
de comuta@value{cedilha}@~{a}o @code{u.v+v.u=-2*sf(u,v)} onde @code{sf} @'{e} a fun@value{cedilha}@~{a}o
valor-escalar sim@'{e}trico.  Para essa @'{a}lgebra, @var{opt_dims} pode ser acima de tr@^{e}s 
inteiros n@~{a}o negativos, representando o n@'{u}mero de dimens@~{o}es positivas,
dimens@~{o}es degeneradas, e dimens@~{o}es negativas da @'{a}lgebra, respectivamente.  Se
quaisquer valores @var{opt_dims} s@~{a}o fornecidos, @code{atensor} ir@'{a} configurar os
valores de @code{adim} e @code{aform} apropriadamente.  Caso contr@'{a}rio,
@code{adim} ir@'{a} por padr@~{a}o para 0 e @code{aform} n@~{a}o ser@'{a} definida.

@code{symmetric}: A @'{a}lgebra sim@'{e}trica @'{e} definida pela rela@value{cedilha}@~{a}o de 
comuta@value{cedilha}@~{a}o @code{u.v-v.u=0}.

@code{symplectic}: A @'{a}lgebra simpl@'{e}tica @'{e} definida pela rela@value{cedilha}@~{a}o de 
comuta@value{cedilha}@~{a}o @code{u.v-v.u=2*af(u,v)} onde @code{af} @'{e} uma fun@value{cedilha}@~{a}o valor-escalar 
antisim@'{e}trica.  Para a @'{a}lgebra simpl@'{e}tica, @var{opt_dims} pode
mais de dois inteiros n@~{a}o negativos, representando a dimens@~{a}o n@~{a}o degenerada e
e a dimens@~{a}o degenerada, respectivamente.  Se quaisquer valores @var{opt_dims} s@~{a}o
fornecidos, @code{atensor} ir@'{a} configurar os valores de @code{adim} e @code{aform}
apropriadamente.  Caso contr@'{a}rio, @code{adim} ir@'{a} por padr@~{a}o para 0 e @code{aform}
n@~{a}o ser@'{a} definida.

@code{lie_envelop}: O inv@'{o}lucro da @'{a}lgebra de Lie @'{e} definido pela 
rela@value{cedilha}@~{a}o de comuta@value{cedilha}@~{a}o @code{u.v-v.u=2*av(u,v)} onde @code{av} @'{e}
uma fun@value{cedilha}@~{a}o antisim@'{e}trica.

A fun@value{cedilha}@~{a}o @code{init_atensor} tamb@'{e}m reconhece muitos tipos pr@'{e}-definidos de 
@'{a}lgebra:

@code{complex} implementa a @'{a}lgebra de n@'{u}meros complexos como a
@'{a}lgebra de Clifford Cl(0,1).  A chamada @code{init_atensor(complex)} @'{e}
equivalente a @code{init_atensor(clifford,0,0,1)}.

@code{quaternion} implementa a @'{a}lgebra de quat@'{e}rnios.  A chamada
@code{init_atensor(quaternion)} @'{e} equivalente a 
@code{init_atensor(clifford,0,0,2)}.

@code{pauli} implementa a @'{a}lgebra de Pauli-spinors como a Clifford-@'{a}lgebra
Cl(3,0).  Uma chamada a @code{init_atensor(pauli)} @'{e} equivalente a
@code{init_atensor(clifford,3)}.

@code{dirac} implementa a @'{a}lgebra de Dirac-spinors como a Clifford-@'{a}lgebra
Cl(3,1).  Uma chamada a @code{init_atensor(dirac)} @'{e} equivalente a
@code{init_atensor(clifford,3,0,1)}.

@end deffn


@deffn {Fun@value{cedilha}@~{a}o} atensimp (@var{expr})

Simplifica a express@~{a}o alg@'{e}brica de tensores @var{expr} conforme as regras
configuradas por uma chamada a @code{init_atensor}.  Simplifica@value{cedilha}@~{o}es incluem
aplica@value{cedilha}@~{a}o recursiva de rela@value{cedilha}@~{o}es comutativas e resolu@value{cedilha}@~{o}es de chamadas a
@code{sf}, @code{af}, e @code{av} onde for aplic@'{a}vel.  Uma
salvaguarda @'{e} usada para garantir que a fun@value{cedilha}@~{a}o sempre termine, mesmo para
express@~{o}es complexas.

@end deffn

@deffn {Fun@value{cedilha}@~{a}o} alg_type

O tipo de @'{a}lgebra.  Valores v@'{a}lidos s@'{a}o @code{universal}, @code{grassmann},
@code{clifford}, @code{symmetric}, @code{symplectic} e @code{lie_envelop}.

@end deffn

@defvr {Vari@'{a}vel} adim
Valor padr@~{a}o: 0

A dimensionalidade da @'{a}lgebra.  @code{atensor} usa o valor de @code{adim}
para determinar se um objeto indexado @'{e} uma base vetorial v@'{a}lida. Veja @code{abasep}.

@end defvr

@defvr {Vari@'{a}vel} aform

Valor padr@~{a}o para as formas bilineares @code{sf}, @code{af}, e
@code{av}.  O padr@~{a}o @'{e} a matriz identidade @code{ident(3)}.

@end defvr

@defvr {Vari@'{a}vel} asymbol
Valor padr@~{a}o: @code{v}

O s@'{i}mbolo para bases vetoriais.

@end defvr

@deffn {Fun@value{cedilha}@~{a}o} sf (@var{u}, @var{v})

@'{E} uma fun@value{cedilha}@~{a}o escalar sim@'{e}trica que @'{e} usada em rela@value{cedilha}@~{o}es comutativas.
A implementa@value{cedilha}@~{a}o padr@~{a}o verifica se ambos os argumentos s@~{a}o bases vetoriais
usando @code{abasep} e se esse for o caso, substitui o valor 
correspondente da matriz @code{aform}.

@end deffn

@deffn {Fun@value{cedilha}@~{a}o} af (@var{u}, @var{v})

@'{E} uma fun@value{cedilha}@~{a}o escalar antisim@'{e}trica que @'{e} usada em rela@value{cedilha}@~{o}es comutativas.
A implementa@value{cedilha}@~{a}o padr@~{a}o verifica se ambos os argumentos s@~{a}o bases vetoriais
usando @code{abasep} e se esse for o caso, substitui o
valor correspondente da matriz @code{aform}.

@end deffn

@deffn {Fun@value{cedilha}@~{a}o} av (@var{u}, @var{v})

@'{E} uma fun@value{cedilha}@~{a}o antisim@'{e}trica que @'{e} usada em rela@value{cedilha}@~{o}es comutativas.
A implementa@value{cedilha}@~{a}o padr@~{a}o verifica se ambos os argumentos s@~{a}o bases vetoriais
usando @code{abasep} e se esse for o caso, substitui o
valor correspondente da matriz @code{aform}.

Por exemplo:

@example
(%i1) load(atensor);
(%o1)       /share/tensor/atensor.mac
(%i2) adim:3;
(%o2)                                  3
(%i3) aform:matrix([0,3,-2],[-3,0,1],[2,-1,0]);
                               [  0    3   - 2 ]
                               [               ]
(%o3)                          [ - 3   0    1  ]
                               [               ]
                               [  2   - 1   0  ]
(%i4) asymbol:x;
(%o4)                                  x
(%i5) av(x[1],x[2]);
(%o5)                                 x
                                       3
@end example

@end deffn


@deffn {Fun@value{cedilha}@~{a}o} abasep (@var{v})

Verifica se esse argumento @'{e} uma base vetorial @code{atensor} .  E ser@'{a}, se ele for
um s@'{i}mbolo indexado, com o s@'{i}mbolo sendo o mesmo que o valor de
@code{asymbol}, e o @'{i}ndice tiver o mesmo valor num@'{e}rico entre 1
e @code{adim}.

@end deffn
