**********
Introdução
**********

Este tutorial leva no máximo de 3 a 4 horas para ser percorrido. Você
pode lê-lo em versão HTML ou PDF, ou a partir do Notebook Sage (clique
em ``Help``, então clique em ``Tutorial`` para percorrer o tutorial de
forma interativa).

Embora grande parte do Sage seja implementado em Python, nenhum
conhecimento de Python é necessário para a leitura deste tutorial.
Você vai querer aprender Python (uma linguagem muito divertida!) em
algum momento, e existem diversas opções gratuitas disponíveis para
isso, entre elas [PyT]_ e [Dive]_ (em inglês). Se você quiser
experimentar o Sage rapidamente, este tutorial é o lugar certo para
começar. Por exemplo:

::

    sage: 2 + 2
    4
    sage: factor(-2007)
    -1 * 3^2 * 223

    sage: A = matrix(4,4, range(16)); A
    [ 0  1  2  3]
    [ 4  5  6  7]
    [ 8  9 10 11]
    [12 13 14 15]

    sage: factor(A.charpoly())
    x^2 * (x^2 - 30*x - 80)

    sage: m = matrix(ZZ,2, range(4))
    sage: m[0,0] = m[0,0] - 3
    sage: m
    [-3  1]
    [ 2  3]

    sage: E = EllipticCurve([1,2,3,4,5]);
    sage: E
    Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5
    over Rational Field
    sage: E.anlist(10)
    [0, 1, 1, 0, -1, -3, 0, -1, -3, -3, -3]
    sage: E.rank()
    1

    sage: k = 1/(sqrt(3)*I + 3/4 + sqrt(73)*5/9); k
    36/(20*sqrt(73) + 36*I*sqrt(3) + 27)
    sage: N(k)
    0.165495678130644 - 0.0521492082074256*I
    sage: N(k,30)      # 30 "bits"
    0.16549568 - 0.052149208*I
    sage: latex(k)
    \frac{36}{20 \, \sqrt{73} + 36 i \, \sqrt{3} + 27}

.. _installation:

Instalação
==========

Se você não tem o Sage instalado em um computador e quer apenas
experimentar alguns comandos, use o Sage através do site
http://sagecell.sagemath.org.

Veja o guia de instalação do Sage na seção de documentação na página
principal do Sage [SA]_ para instruções de como instalar o Sage no seu
computador. Aqui faremos apenas alguns comentários.

#. O arquivo para instalação do Sage vem com "baterias incluídas". Em
   outras palavras, embora o Sage use o Python, IPython, PARI, GAP,
   Singular, Maxima, NTL, GMP, e uma série de outros programas, você
   não precisa instalá-los separadamente pois eles estão incluídos no
   Sage. Todavia, para usar alguns recursos, por exemplo, o Macaulay
   ou o KASH, você precisa instalar pacotes de software adicionais ou
   ter os programas necessários já instalados no seu computador. O
   Macaulay e o KASH estão disponíveis como pacotes adicionais do Sage
   (para uma lista de pacotes adicionais, digite ``sage -optional``,
   ou visite a seção "Download" na página do Sage na internet).

#. A versão pré-compilada do Sage (disponível na página do Sage na
   internet) pode ser mais fácil e rápida para instalar do que a
   versão obtida compilando o código fonte.

#. Se você quiser usar o pacote SageTeX (que permite inserir
   cálculos do Sage em um arquivo LaTeX), você deve tornar
   o SageTex disponível para a sua distribuição TeX. Para fazer isso,
   consulte a seção "Make SageTex known to TeX" no `Sage installation
   guide <http://doc.sagemath.org/html/en/>`_. O procedimento é bem
   simples; você precisa apenas definir algumas variáveis no seu
   sistema ou copiar um arquivo para um diretório onde o TeX poderá
   encontrá-lo.

   A documentação para usar o SageTex está disponível em
   ``$SAGE_ROOT/local/share/texmf/tex/latex/sagetex/``, onde
   ``$SAGE_ROOT`` refere-se ao diretório onde você instalou o Sage
   -- por exemplo, ``/opt/sage-4.2.1``.

Formas de usar o Sage
=====================

Você pode usar o Sage de diversas formas.


-  **Interface gráfica Notebook:** veja a seção sobre o Notebook em
   :ref:`section-notebook`,

-  **Linha de comando interativa:** veja
   :ref:`chapter-interactive_shell`,

-  **Programas:** escrevendo programas interpretados e compilados em
   Sage (veja :ref:`section-loadattach` e :ref:`section-compile`), e

-  **Scripts:** escrevendo scripts em Python que usam a biblioteca do
   Sage (veja :ref:`section-standalone`).


Objetivos do Sage a longo prazo
===============================

-  **Útil**: O público alvo do Sage são estudantes de matemática
   (desde o ensino médio até a pós-graduação), professores, e
   pesquisadores em matemática. O objetivo é fornecer um software que
   possa ser usado para explorar e experimentar construções matemáticas
   em álgebra, geometria, teoria de números, cálculo, computação
   numérica, etc. O Sage torna mais fácil a experimentação com objetos
   matemáticos de forma interativa.

-  **Eficiente:** Ser rápido. O Sage usa software bastante otimizado
   como o GMP, PARI, GAP, e NTL, e portanto é muito rápido em certas
   operações.

-  **Gratuito e de código aberto:** O código fonte deve ser amplamente
   disponível e legível, de modo que os usuários possam entender o que
   o software realmente faz e possam facilmente estendê-lo. Da mesma
   forma que matemáticos ganham entendimento sobre um teorema lendo
   cuidadosamente a sua demonstração, as pessoas que fazem cálculos
   deveriam poder entender como os cálculos são feitos lendo o código
   fonte e seus comentários. Se você usar o Sage para fazer cálculos em
   um artigo que seja publicado, você pode ter certeza que os leitores
   sempre terão livre acesso ao Sage e seu código fonte, e você tem até
   mesmo permissão para arquivar e redistribuir a versão do Sage que
   você utilizou.

-  **Fácil de compilar:** O Sage deve ser fácil de compilar a partir
   do código fonte para usuários de Linux, OS X e Windows. Isso
   fornece mais flexibilidade para os usuários modificarem o sistema.

-  **Cooperação:** Fornecer uma interface robusta para outros sistemas
   computacionais, incluindo PARI, GAP, Singular, Maxima, KASH, Magma,
   Maple e Mathematica. O Sage foi concebido para unificar e estender
   outros softwares de matemática existentes.

-  **Bem documentado:** Tutorial, guia de programação, manual de
   referência, e how-to, com inúmeros exemplos e discussão sobre
   conceitos matemáticos relacionados.

-  **Estensível:** Ser capaz de definir novos tipos de dados ou
   derivá-los a partir dos tipos de dados existentes, e usar programas
   escritos em diversas outras linguagens.

-  **Fácil de usar:** Deve ser fácil entender quais recursos estão
   disponíveis para um determinado objeto e consultar a documentação e
   o código fonte.
