aboutsummaryrefslogtreecommitdiff
path: root/aed1/n1.lyx
diff options
context:
space:
mode:
authorJuan Marín Noguera <juan.marinn@um.es>2020-02-20 20:21:46 +0100
committerJuan Marín Noguera <juan.marinn@um.es>2020-02-20 20:21:46 +0100
commit1f7f9bcc7660fba0827a62c3068d5c7082f025d7 (patch)
tree401c12eaea057e9eb99579c05703906cfaad156c /aed1/n1.lyx
parentc4c9556bc4a235f413edda917fdc683cd57390f7 (diff)
Otras dos asignaturas
Diffstat (limited to 'aed1/n1.lyx')
-rw-r--r--aed1/n1.lyx1680
1 files changed, 1680 insertions, 0 deletions
diff --git a/aed1/n1.lyx b/aed1/n1.lyx
new file mode 100644
index 0000000..d39e26b
--- /dev/null
+++ b/aed1/n1.lyx
@@ -0,0 +1,1680 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+Una
+\series bold
+abstracción
+\series default
+ consiste en dejar a un lado lo irrelevante y centrarse en lo importante.
+ Distinguimos
+\series bold
+niveles de abstracción
+\series default
+ según el nivel de detalle.
+ El
+\series bold
+diseño mediante abs
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+trac
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+cio
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+nes
+\series default
+ consiste en identificar los subproblemas de cierto problema, especificar
+ cada uno de forma abstracta, resolverlos de forma separada, unir las soluciones
+ y verificar la solución para el problema original.
+ Esto se hace de forma recursiva.
+\end_layout
+
+\begin_layout Standard
+Junto con el concepto de abstracción viene el de
+\series bold
+especificación
+\series default
+ de dicha abstracción.
+\end_layout
+
+\begin_layout Standard
+
+\series bold
+Mecanismos de abstracción
+\series default
+:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Por especificación
+\series default
+: Nos quedamos con la descripción del efecto o resultado, in
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+de
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+pen
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+dien
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+te
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+men
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+te de cómo calcularlo (
+\series bold
+principio de ocultación de la implementación
+\series default
+).
+ Da lugar a la
+\series bold
+encapsulación
+\series default
+, agrupar un conjunto de operaciones o tipos relacionados en un mismo módulo
+ o paquete.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Por parametrización
+\series default
+: El significado de la abstracción no es fijo, sino que depende de parámetros.
+ En la
+\series bold
+parametrización de tipo
+\series default
+, el parámetro es un tipo de datos.
+\end_layout
+
+\begin_layout Section
+Especificaciones informales
+\end_layout
+
+\begin_layout Standard
+Una
+\series bold
+especificación
+\series default
+ es la descripción de una abstracción, bien textualmente mediante el lenguaje
+ natural (especificación
+\series bold
+informal
+\series default
+) o bien con una notación precisa de las propiedades de la abstracción (especifi
+cación
+\series bold
+formal
+\series default
+), mediante una
+\series bold
+notación
+\series default
+.
+ A continuación vemos los tipos de abstracciones y una notación propuesta
+ para su especificación informal.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Funcionales
+\series default
+: Abstraemos un trozo de código en una
+\series bold
+rutina
+\series default
+,
+\series bold
+procedimiento
+\series default
+ o
+\series bold
+función
+\series default
+, al que asignamos un nombre.
+ Su especificación indica los parámetros de entrada, los de salida y el
+ efecto que tendrá su ejecución.
+\begin_inset Newline newline
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="2" columns="1">
+<features tabularvalignment="middle">
+<column alignment="left" valignment="top" width="90text%">
+<row>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Especificación informal
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family sans
+\series bold
+Operación
+\series default
+
+\emph on
+nombre
+\emph default
+
+\family default
+[
+\family sans
+[
+\emph on
+T
+\emph default
+,
+\family default
+...
+\family sans
+:
+\emph on
+TipoDeTipo
+\emph default
+;
+\family default
+...
+\family sans
+]
+\family default
+]
+\family sans
+ (
+\family default
+[
+\family sans
+\series bold
+ent
+\series default
+
+\emph on
+v1
+\emph default
+,
+\family default
+...
+\family sans
+:
+\emph on
+Tipo
+\emph default
+1;
+\emph on
+vn
+\emph default
+,
+\family default
+...
+\family sans
+:
+\emph on
+Tipo2
+\emph default
+;
+\family default
+...[
+\family sans
+;
+\family default
+]]
+\family sans
+
+\family default
+[
+\family sans
+\series bold
+sal
+\series default
+
+\emph on
+tipoResultado
+\family default
+\emph default
+]
+\family sans
+)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\begin_inset space \qquad{}
+\end_inset
+
+
+\series bold
+Require:
+\series default
+
+\emph on
+Opcional, requisitos y restricciones de uso de la operación.
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\begin_inset space \qquad{}
+\end_inset
+
+
+\series bold
+Modifica:
+\series default
+
+\emph on
+Opcional, lista de parámetros de entrada que pueden ser
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\begin_inset space \qquad{}
+\end_inset
+
+
+\begin_inset space \qquad{}
+\end_inset
+
+
+\emph on
+modificados.
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\begin_inset space \qquad{}
+\end_inset
+
+
+\series bold
+Calcula:
+\series default
+
+\emph on
+Descripción del resultado de la operación.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\begin_inset Newline newline
+\end_inset
+
+Donde el
+\family sans
+\emph on
+TipoDeTipo
+\family default
+\emph default
+ suele ser
+\family sans
+tipo
+\family default
+.
+ Tanto en la especificación informal como en el pseudocódigo, los tipos
+ tanto de los parámetros de tipo como los propios de la función pueden depender
+ de parámetros anteriores.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+De datos
+\series default
+: Se abstrae un dominio de valores, junto con operaciones sobre ese dominio
+ con
+\series bold
+ocultación de la implementación
+\series default
+, en un
+\series bold
+tipo abstracto de datos
+\series default
+ (
+\series bold
+TAD
+\series default
+).
+ Un
+\series bold
+tipo contenedor
+\series default
+ es un TAD compuesto por un número arbitrario de valores de otro tipo.
+ Generalmente están
+\series bold
+parametrizados
+\series default
+: dependen de un parámetro que indica el tipo de objetos almacenados.
+\begin_inset Newline newline
+\end_inset
+
+
+\begin_inset Tabular
+<lyxtabular version="3" rows="2" columns="1">
+<features tabularvalignment="middle">
+<column alignment="left" valignment="top" width="90text%">
+<row>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Especificación informal
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family sans
+\series bold
+TAD
+\series default
+
+\emph on
+nombre
+\emph default
+
+\series bold
+es
+\series default
+
+\emph on
+listaDeOperaciones
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\series bold
+Descripción
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\begin_inset space \qquad{}
+\end_inset
+
+
+\emph on
+Descripción del significado, comportamiento y modo de uso del TAD.
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\series bold
+Operaciones
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\begin_inset space \qquad{}
+\end_inset
+
+
+\emph on
+Especificación informal de cada operación de la lista, según el punto anterior.
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\series bold
+Fin
+\series default
+
+\emph on
+nombre
+\emph default
+.
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\begin_inset Newline newline
+\end_inset
+
+Así, un
+\series bold
+tipo de datos
+\series default
+ es un concepto de implementación que debe ajustarse al comportamiento de
+ un TAD, y una
+\series bold
+estructura de datos
+\series default
+ es la disposición en memoria de estos datos.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+De iteradores
+\series default
+: Permiten realizar un recorrido de forma abstracta sobre los elementos
+ de una colección.
+ La especificación informal puede ser:
+\end_layout
+
+\begin_deeper
+\begin_layout Itemize
+Similar a la de una abstracción funcional, cambiando
+\family sans
+\series bold
+Operación
+\family default
+\series default
+ por
+\family sans
+\series bold
+Iterador
+\family default
+\series default
+ y añadiendo un parámetro de entrada de tipo
+\family sans
+Operacion
+\family default
+.
+ La función puede devolver un valor si, por ejemplo, el iterador filtra
+ una colección de valores de un cierto tipo.
+\end_layout
+
+\begin_layout Itemize
+Similar a la de un TAD, cambiando
+\family sans
+\series bold
+TAD
+\family default
+\series default
+ por
+\family sans
+\series bold
+TipoIterador
+\family default
+\series default
+ y añadiendo operaciones como
+\family sans
+Iniciar
+\family default
+,
+\family sans
+Actual
+\family default
+,
+\family sans
+Avanzar
+\family default
+ y
+\family sans
+EsUltimo
+\family default
+.
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+La abstracción en lenguajes de programación generalmente consiste en ofrecer
+ características más próximas al concepto teórico de TAD.
+ Los lenguajes primitivos como Fortran o BASIC ofrecían un conjunto predefinido
+ de tipos elementales, pero no permitían definir nuevos tipos, con lo que
+ el programador debía definir y manejar las variables adecuadas de forma
+ manual.
+ Posteriormente, lenguajes como C y Pascal permiten agrupar un conjunto
+ de variables bajo un mismo nombre, aunque no hay ocultación.
+ Los módulos o paquetes permiten agrupar bajo un mismo nombre una serie
+ de tipos y operaciones relacionados, y en algunos casos como en Modula-2,
+ estos ofrecen ocultación de la implementación: los tipos definidos en un
+ módulo sólo se pueden usar a través de las operaciones de este.
+\end_layout
+
+\begin_layout Standard
+Finalmente, en la programación orientada a objetos surge el concepto de
+ clase, que es al mismo tiempo un tipo definido por el usuario y un módulo
+ donde se encapsulan sus datos y operaciones, y soportan ocultación.
+ Un objeto es una instancia de una clase.
+ El
+\series bold
+principio de acceso uniforme
+\series default
+ consiste en que los atributos y operaciones de una clase están conceptualmente
+ al mismo nivel, y se accede con
+\family typewriter
+\emph on
+objeto
+\emph default
+.
+\emph on
+atributo
+\family default
+\emph default
+ u
+\family typewriter
+\emph on
+objeto
+\emph default
+.
+\emph on
+operación
+\emph default
+(
+\family default
+...
+\family typewriter
+)
+\family default
+.
+ Algunos lenguajes orientados a objetos permiten parametrización de tipo,
+ dando lugar a TAD genéricos o parametrizados.
+\end_layout
+
+\begin_layout Standard
+Una implementación es
+\series bold
+robusta
+\series default
+ si se autoprotege de valores inconsistentes de entrada, bien lanzando una
+ excepción o mediante programación por contrato, en la que el usuario se
+ compromete, de forma comprobable, a no pasar un valor inconsistente según
+ la especificación de la función.
+
+\end_layout
+
+\begin_layout Section
+Especificaciones formales
+\end_layout
+
+\begin_layout Standard
+Una
+\series bold
+especificación formal
+\series default
+ define un TAD u operación de forma precisa, permitiendo la verificación
+ automática y formal de la corrección del programa y el uso de la especificación
+ en distintos ámbitos.
+ Estas especificaciones pueden llegar a ser ejecutables.
+ Distinguimos entre el
+\series bold
+método axiomático
+\series default
+ o
+\series bold
+algebraico
+\series default
+, que establece el significado de las operaciones de forma implícita mediante
+
+\series bold
+axiomas
+\series default
+ que especifican sus relaciones, y el
+\series bold
+método constructivo
+\series default
+ u
+\series bold
+operacional
+\series default
+, en el que cada operación se define por sí misma con significado explícito.
+\end_layout
+
+\begin_layout Standard
+Veremos un método constructivo al que llamaremos método axiomático, y que
+ escribimos en lenguaje Maude, describiendo un TAD del siguiente modo:
+\end_layout
+
+\begin_layout Standard
+\align center
+\begin_inset Tabular
+<lyxtabular version="3" rows="6" columns="2">
+<features tabularvalignment="middle">
+<column alignment="left" valignment="top" width="45text%">
+<column alignment="left" valignment="top" width="45text%">
+<row>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Especificación formal
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+Maude
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family sans
+\series bold
+NOMBRE
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\begin_inset space \qquad{}
+\end_inset
+
+
+\emph on
+NombreTAD
+\family default
+\emph default
+ [
+\family sans
+[
+\emph on
+T1
+\emph default
+,
+\family default
+...
+\family sans
+]
+\family default
+]
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="left" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+\series bold
+fmod
+\series default
+
+\emph on
+NOMBRETAD
+\emph default
+
+\series bold
+is
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family sans
+\series bold
+CONJUNTOS
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\begin_inset space \qquad{}
+\end_inset
+
+
+\emph on
+CONJ
+\emph default
+
+\begin_inset space \qquad{}
+\end_inset
+
+
+\emph on
+Descripción
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+
+\family default
+...
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+protecting
+\emph on
+TADIMPORTADO
+\emph default
+ .
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+sort
+\emph on
+CONJ
+\emph default
+ .
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+subsort
+\emph on
+A
+\emph default
+ <
+\emph on
+B
+\emph default
+ .
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+
+\family default
+...
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family sans
+\series bold
+SINTAXIS
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+
+\family sans
+\emph on
+operación
+\emph default
+:
+\family default
+ [
+\family sans
+\emph on
+conjPar1
+\family default
+\emph default
+
+\begin_inset Formula $\times$
+\end_inset
+
+...]
+\family sans
+
+\begin_inset Formula $\rightarrow$
+\end_inset
+
+
+\emph on
+conjResultado
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+
+\family default
+...
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+op
+\emph on
+operación
+\emph default
+ :
+\family default
+[
+\family typewriter
+\emph on
+conjPar11
+\emph default
+
+\begin_inset Formula $\times$
+\end_inset
+
+ ...
+\family default
+]
+\family typewriter
+ ->
+\emph on
+conjResultado1
+\emph default
+ .
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+ops
+\emph on
+op1
+\emph default
+
+\family default
+...
+
+\family typewriter
+ :
+\family default
+[
+\family typewriter
+\emph on
+conjPar21
+\emph default
+
+\begin_inset Formula $\times$
+\end_inset
+
+ ...
+\family default
+]
+\family typewriter
+ ->
+\emph on
+conjResultado2
+\emph default
+ .
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+
+\family default
+...
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family sans
+\series bold
+SEMÁNTICA
+\end_layout
+
+\begin_layout Plain Layout
+\begin_inset Formula $\forall$
+\end_inset
+
+
+\family sans
+\emph on
+ var1
+\emph default
+,
+\family default
+...
+
+\family sans
+
+\begin_inset Formula $\in$
+\end_inset
+
+
+\emph on
+ CONJ
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\begin_inset space \qquad{}
+\end_inset
+
+
+\emph on
+ExprA
+\emph default
+ =
+\emph on
+ExprB
+\end_layout
+
+\begin_layout Plain Layout
+
+\family sans
+\begin_inset space \qquad{}
+\end_inset
+
+
+\family default
+...
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+var
+\emph on
+v
+\emph default
+ :
+\emph on
+CONJ
+\emph default
+ .
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+vars
+\emph on
+v1
+\emph default
+
+\family default
+...
+
+\family typewriter
+ :
+\emph on
+CONJ
+\emph default
+ .
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+
+\family default
+...
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+eq
+\emph on
+ExprA
+\emph default
+ =
+\emph on
+ExprB
+\emph default
+ .
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \qquad{}
+\end_inset
+
+
+\family default
+...
+\end_layout
+
+\end_inset
+</cell>
+</row>
+<row>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+</cell>
+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
+\begin_inset Text
+
+\begin_layout Plain Layout
+
+\family typewriter
+\series bold
+endfm
+\end_layout
+
+\end_inset
+</cell>
+</row>
+</lyxtabular>
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+El nombre de los conjuntos suele ser de una letra, y debe haber un conjunto
+ asociado al TAD, y si el TAD es genérico, uno para cada parámetro con el
+ mismo nombre dado en la sección anterior (
+\family sans
+\emph on
+T1
+\family default
+\emph default
+, etc.).
+ También, en la especificación se declaran conjuntos asociados a otros TADs
+ pero que se usan en este, mientras que en Maude se usa
+\family typewriter
+protecting
+\family default
+ para importar todos los conjuntos, junto con sus operaciones, de otro TAD.
+ Para tipos finitos en la especificación, si en la
+\family sans
+\emph on
+Descripción
+\family default
+\emph default
+ se añade al final
+\family sans
+{
+\emph on
+valor1
+\emph default
+,
+\family default
+...
+\family sans
+}
+\family default
+, estos valores se pueden usar en la semántica.
+\end_layout
+
+\begin_layout Standard
+Entre las operaciones encontramos
+\series bold
+constructores
+\series default
+, operaciones cuya semántica no se define y que sirven para definir elementos
+ del TAD, y tales que, si es posible, un elemento del TAD debería tener
+ representación única en términos de estos.
+ El resto son de
+\series bold
+modificación
+\series default
+ o de
+\series bold
+consulta
+\series default
+ según si devuelven un elemento del conjunto asociado al TAD o de otro tipo,
+ respectivamente.
+\end_layout
+
+\begin_layout Standard
+Si una operación que normalmente devuelve valores de tipo
+\family sans
+T
+\family default
+ no esta definida para cierta entrada, se crea un conjunto
+\family sans
+M
+\family default
+ de mensajes cuya descripción contiene al final
+\family sans
+{
+\begin_inset Quotes fls
+\end_inset
+
+
+\emph on
+Texto mensaje 1
+\emph default
+
+\begin_inset Quotes frs
+\end_inset
+
+,
+\family default
+...
+\family sans
+}
+\family default
+, y el conjunto resultado de la operación se declara
+\family sans
+T
+\begin_inset Formula $\cup$
+\end_inset
+
+M
+\family default
+, mientras que en Maude se crea un tipo de errores
+\family typewriter
+NoT
+\family default
+ con un constructor sin parámetros para cada tipo de error y se usa
+\family typewriter
+subsort No
+\emph on
+T
+\emph default
+ <
+\emph on
+T
+\family default
+\emph default
+ para indicar que toda operación que toda operación que devuelva un valor
+ de
+\family typewriter
+\emph on
+T
+\family default
+\emph default
+ también puede devolver uno de
+\family typewriter
+No
+\emph on
+T
+\family default
+\emph default
+.
+\end_layout
+
+\begin_layout Standard
+La semántica consiste en una serie de reglas que, dada una expresión, Maude
+ va comprobando de arriba a abajo sucesivamente para ver si parte de la
+ expresión coincide con
+\family sans
+\emph on
+ExprA
+\family default
+\emph default
+ y sustituirla en tan caso por
+\family sans
+\emph on
+ExprB
+\family default
+\emph default
+ hasta que no queden sustituciones por hacer, momento en que la expresión
+ debería estar en términos de constructores.
+ Una expresión tiene sintaxis
+\family typewriter
+\emph on
+op
+\family default
+\emph default
+[
+\family typewriter
+(
+\emph on
+par1
+\emph default
+,
+\family default
+...
+\family typewriter
+)
+\family default
+], donde los parámetros de la operación son a su vez otras expresiones.
+
+\family sans
+\emph on
+ExprB
+\family default
+\emph default
+ o alguna de sus subexpresiones puede ser
+\family sans
+\series bold
+SI
+\series default
+
+\emph on
+condición
+\emph default
+
+\begin_inset Formula $\implies$
+\end_inset
+
+
+\emph on
+valorSiCierto
+\emph default
+ |
+\emph on
+valorSiFalso
+\family default
+\emph default
+, o en Maude,
+\family typewriter
+if
+\emph on
+condición
+\emph default
+ then
+\emph on
+valorSiCierto
+\emph default
+ else
+\emph on
+valorSiFalso
+\emph default
+ fi
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+En Maude, fuera de la definición de un TAD podemos usar
+\family typewriter
+in
+\emph on
+nombre
+\emph default
+ .
+
+\family default
+ para leer todo lo que hay en un fichero llamado
+\family typewriter
+\emph on
+nombre
+\family default
+\emph default
+ o
+\family typewriter
+\emph on
+nombre
+\emph default
+.maude
+\family default
+ o
+\family typewriter
+red
+\emph on
+expr
+\family default
+\emph default
+ para reducir una expresión según la semántica de las operaciones.
+ Un fallo en Maude puede tiene consecuencias impredecibles porque Maude
+ es una mierda.
+\end_layout
+
+\begin_layout Standard
+Si el orden de las reglas no es relevante las llamamos axiomas
+\begin_inset Foot
+status open
+
+\begin_layout Plain Layout
+Cada vez que llamas axiomas a algo que depende del orden muere un matemático
+ y un gatito.
+\end_layout
+
+\end_inset
+
+, y estos deben cumplir las propiedades de
+\series bold
+completitud
+\series default
+ (deben ser suficientes para deducir el significado de cualquier expresión)
+ y
+\series bold
+corrección
+\series default
+; dicho de otra forma, se deben considerar todos los casos al definir cada
+ operación no constructora.
+\end_layout
+
+\begin_layout Section
+Órdenes de ejecución
+\end_layout
+
+\begin_layout Standard
+Medimos el tiempo que tarda en ejecutarse un algoritmo con una función
+\begin_inset Formula $t:\mathbb{N}\rightarrow\mathbb{R}^{\geq0}$
+\end_inset
+
+ para cada uno de los casos mejor, peor y promedio, que toma el tamaño del
+ problema medido de algún modo y devuelve el tiempo que tarda en realizarse
+ en cierta máquina, el número de instrucciones total o el de un tipo de
+ instrucción que sabemos que es la más relevante.
+ En la práctica se usan
+\series bold
+notaciones asintóticas
+\series default
+:
+\end_layout
+
+\begin_layout Itemize
+\begin_inset Formula $f(x)=O(g(x)):\iff\exists x_{0},k>0:\forall x\geq x_{0},|f(x)|\leq k|g(x)|$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Itemize
+\begin_inset Formula $f(x)=\Omega(g(x)):\iff\exists x_{0},k>0:\forall x\geq x_{0},kg(x)\leq f(x)$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+\begin_inset Note Comment
+status open
+
+\begin_layout Itemize
+\begin_inset Formula $f(x)=\Theta(g(x)):\iff f(x)=O(g(x))\land f(x)=\Omega(g(x))$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Itemize
+\begin_inset Formula $f(x)=o(g(x)):\iff\lim_{x\rightarrow+\infty}\frac{f(x)}{g(x)}=0$
+\end_inset
+
+.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Estas definiciones sólo son válidas cuando
+\begin_inset Formula $x$
+\end_inset
+
+ tiende a
+\begin_inset Formula $+\infty$
+\end_inset
+
+.
+\end_layout
+
+\end_body
+\end_document