Tupla

Unha **tupla**, en matemáticas, é unha secuencia *finita* ordenada de obxectos, isto é, unha lista cun número limitado de obxectos (unha secuencia *infinita* denomínase en matemática unha familia).

As tuplas empréganse para describir obxectos matemáticos que teñen estrutura, é dicir, que poden descompoñerse nun certo número de compoñentes. Por exemplo, un grafo dirixido pódese definir como unha tupla de (*V*, *E*), onde *V* é o conxunto de nodos e *E* é o subconxunto de *V* × *V* que denota os vértices do grafo.

## Orixe do concepto
O termo *tupla* xerouse sinxelamente por unha xeneralización da secuencia seguinte: *dupla*, *tripla*, *cuádrupla*, *quíntupla*, ... *n-tupla*. Unha tupla de lonxitude *n* descríbese xeralmente como unha '''*n*-tupla'*. Unha 2-tupla, por exemplo, denomínase un *par* ou *dupla*; unha 3-tupla, unha *tripla* ou *tripleta*. O prefixo *n* pode ser por xeneralización calquera número enteiro positivo; pódese por exemplo denominar un cuaternión mediante a representación dunha 4-tupla, e continuar xerando nomes sucesivamente, tales como unha *óctupla*, pero moitos matemáticos prefiren a denominación rápida e sinxela de escribir "8-tupla", incluso de pronunciarse como "óctupla".

## Definicións formais
As principais propiedades que distinguen unha tupla de, por exemplo, un conxunto, é que: 
# Un obxecto pode conter internamente (por agregación) outros obxectos. 
# Os obxectos aparecen obrigatoriamente representados nunha orde dada.

Cómpre notar que a primeira das características distingue dun conxunto ordenado e a segunda do que se denomina un multiconxunto. Isto pódese formalizar dando a seguinte regra de identidade para dúas *n*-tuplas:

: (*a*1, *a*2, ...,*an*) = (*b*1, *b*2, ..., *bn*) si e só si *a*1 = *b*1, *a*2 = *b*2 e así sucesivamente.

Outra forma de formalizar tuplas é mediante asociación bixectiva entre a definición dunha tupla e unha construción máis primitiva na teoría de conxuntos tal e como pares ordenados. Por exemplo, unha *n*-tupla (con *n*> 2) pódese definir como un par ordenado da súa primeira entrada e (*n*−1)-tupla que conteña o resto das entradas, de tal forma que:

: (*a*1, *a*2, ..., *an*) = (*a*1, (*a*2, ..., *an*))

Empregando a definición máis corrente dentro da teoría de conxuntos para un par ordenado e deixando que o conxunto baleiro represente a tupla baleira, pódese obter un resultado correcto empregando unha definición indutiva:
# A 0-tupla (por exemplo a tupla baleira) represéntase por ∅
# Se *x* é unha *n*-tupla entón *a''*a*, *x* é unha (*n* + 1)-tupla.

Empregando esta definición, a 3-tupla (1,2,2) podería ser:

: 

Existe unha similitude importante aquí coa forma en que se describen obxectos nalgunhas linguaxes informáticas, tales como Lisp nas que xeralmente se emprega un par ordenado, e emprégase esta abstracción para iterar todos os elementos da estrutura da *n*-tupla; para iso procédese da seguinte forma:
# Un símbolo especial, tal e como *NIL* representa a unha lista baleira
# Se *X* é unha lista e *A* é un valor arbitrario, entón o par (*A*, *X*) representa unha lista co *cabezallo* (é dicir, o primeiro elemento) *A* e a *cola* (é dicir, o resto da estrutura) *X*.

## Usos
### Uso nas ciencias de computación
Nas ciencias da computación unha tupla pode ter dous significados distintos. Xeralmente nas linguaxes de programación funcional e noutras linguaxes de programación, unha tupla é un obxecto que ben pode ter datos ou diversos obxectos, de forma similar a unha tupla definida matematicamente. Un obxecto deste tipo coñécese tamén como ***record***.

Unha definición máis formal do anterior parágrafo sería: conxunto de elementos de distinto tipo que se gardan de forma consecutiva en memoria.

Nalgunhas linguaxes e especialmente na teoría de bases de datos, unha tupla defínese como unha función finita que *mapea* (asocia univocamente) os nomes con algúns valores. O seu propósito é o mesmo que se definiu nas matemáticas.

Un pequeno exemplo pode ilustrar isto:
: ( xogador : "Luís", puntuación : 25 )

Neste caso trátase dunha función que mapea o campo "xogador" coa cadea "Luís" e o campo "puntuación" ao número enteiro 25. Débese notar que a orde dos compoñentes non é relevante, e desta forma a mesma tupla pode ser re-escrita como: ( puntuación : 25, xogador : "Luís" ). Nun modelo relacional tal e como se define nas tuplas, adoita representar unha proposición simple, neste caso existe un xogador co nome "Luís" e que posúe unha puntuación de 25.

Nas linguaxes de programación as tuplas adoitan usarse para formaren estruturas de datos. Por exemplo, o seguinte podería ser unha definición dunha estrutura de datos para unha lista enlazada:

: ( value : 16, previous-node : 1174782, next-node : 1174791 )

### Linguaxes de marcado
Adoitan empregarse as tuplas na definición de certos elementos nas linguaxes de marcado, tales como XML. En particular, é moi importante en parte do deseño de taxonomías na linguaxe XBRL para describir informes financeiros.

### Cálculo relacional
As tuplas teñen cabida no estudo teórico das bases de datos, sobre todo no campo do cálculo relacional, xa que proporcionan unha notación básica para formular a definición da relación en termos das relacións da base de datos. No cálculo relacional emprégase un cálculo orientado a tuplas, fronte ao orientado a dominio.

Emprégase frecuentemente na definición a gran nivel das definicións dos pares atributo-valor.

## Véxase tamén
### Bibliografía
* Bourbaki, Nicolas (2006): *Eléments de mathématique. Première partie: Les strurures fondamentales de l’analyse. Livre I. Théorie des ensembles*. Berlin: Springer ISBN 3-540-34034-3. 
* Devlin, Keith (1993): *The Joy of Sets*. Springer Verlag, 2ª ed. ISBN 0-387-94094-4 
* Takeuti, G. & Zaring W. M. (1971): *Introduction to Axiomatic Set Theory*. Springer Verlag. ISBN 978-0-387-90024-7 
* Tourlakis, George J. (2003): *Lectures in Logic and Set Theory. Volume 2: Set theory*. Cambridge University Press. ISBN 978-0-521-75374-6
### Outros artigos
* Produto cartesiano.
### Ligazóns externas
* Encyclopaedia of Mathematics. Springer. *Tuple* .