El lenguaje de las matemáticas | Matemáticas y sus fronteras

En una entrada anterior, citábamos el famoso párrafo de Galileo Galilei en Il Saggiatore, en la que se preguntaba en que lenguaje estaba escrito el universo, y decía: “… Egli è scritto in lingua matematica, e i caratteri son triangoli, cerchi, ed altre figure geometriche, …” Estatua de Galileo Galilei en Florencia Galileo nos dice cuáles son las “letras” que debemos usar para describir el mundo. Y estos caracteres han ido construyéndose a lo largo de siglos, más bien, milenios. Algunos eruditos sostienen que es la necesidad de contar haciendo marcas en las vasijas de barro lo que condujo al nacimiento de la escritura. En cualquier caso, los símbolos se fueron creando. Pensemos por ejemplo en hueso de Ishango, que pudo ser tallado para establecer un sistema de numeración hace 20.000 años. Los símbolos para representar los números fueron diferentes para las muchas culturas: símbolos cuneiformes para los babilonios, jeroglíficos para los egipcios, los números romanos, y la aparición del

Origen: El lenguaje de las matemáticas | Matemáticas y sus fronteras

Lenguaje de Programación para Matemática | J

El lenguaje de programación J, diseñado por Kenneth Iverson y Roger Hui en los ’90, es una síntesis de los lenguajes de programación APL (diseñado también por Iverson) y los lenguajes funcionales FP y FL creados por John Backus (famoso por FORTRAN, ALGOL y BNF).

Para eliminar el problema generado por el uso de un juego de caracteres especiales en APL, J sólo requiere el juego de caracteres básicos ASCII. Se usan tanto el punto como los dos puntos para extender el significado del juego de caracteres disponible.

Dado que se trata de un lenguaje de programación de array, J es muy conciso y potente, y es útil para crear programas en los campos de las matemáticas y de la estadística, especialmente cuando involucran operaciones con matrices.

De la misma manera que los lenguajes FP/FL, J soporta Programación a nivel de funciones (también conocida como programación funcional de alto orden), gracias a sus características de programación tácita (nótese que la programación a nivel de funciones no es lo mismo que programación funcional).

A diferencia de muchos lenguajes que soportan la programación orientada a objetos, el flexible esquema de espacio de nombres jerárquico del lenguaje J (donde cada nombre existe en un ámbito particular) puede ser usado con efectividad como un marco de trabajo para realizar programación orientada a objetos basada tanto en clases, como en instancias.

J es un lenguaje de programación no von Neumanniano, que sin embargo permite que el programador use el estilo de programación von Neumann a conveniencia

¿Por qué J?

J es particularmente fuerte en el análisis matemático, estadístico y lógico de los datos. Es una herramienta poderosa en la construcción de nuevas y mejores soluciones a viejos problemas y aún mejor en encontrar soluciones donde el problema no está bien entendido.

Los sistemas J tienen:

  • Un entorno de desarrollo integrado
  • Bibliotecas estándar, utilidades y paquetes
    Consola, navegador y terminales frontales Qt
  • Interfaces con otros lenguajes de programación y aplicaciones
  • Gráficos integrados
  • Archivos de memoria asignados para aplicaciones de datos de alto rendimiento
  • Jd

“Si usted está interesado en programar soluciones a desafiantes problemas de procesamiento de datos, entonces el tiempo que invierte en aprender J será bien gastado”.

Fuente:

https://es.wikipedia.org/wiki/J_%28lenguaje_de_programaci%C3%B3n%29

http://www.jsoftware.com/

 

Lenguaje de Programación para Matemática | Python

Python es un lenguaje de programación poderoso y fácil de aprender. Cuenta con estructuras de datos eficientes y de alto nivel y un enfoque simple pero efectivo a la programación orientada a objetos. La elegante sintaxis de Python y su tipado dinámico, junto con su naturaleza interpretada, hacen de éste un lenguaje ideal para scripting y desarrollo rápido de aplicaciones en diversas áreas y sobre la mayoría de las plataformas.

El intérprete de Python y la extensa biblioteca estándar están a libre disposición en forma binaria y de código fuente para las principales plataformas desde el sitio web de Python, y puede distribuirse libremente. El mismo sitio contiene también distribuciones y enlaces de muchos módulos libres de Python de terceros, programas y herramientas, y documentación adicional.

El intérprete de Python puede extenderse fácilmente con nuevas funcionalidades y tipos de datos implementados en C o C++ (u otros lenguajes accesibles desde C). Python también puede usarse como un lenguaje de extensiones para aplicaciones personalizables.

Filosofía

Los usuarios de Python se refieren a menudo a la Filosofía Python que es bastante análoga a la filosofía de Unix. El código que sigue los principios de Python de legibilidad y transparencia se dice que es “pythonico”. Contrariamente, el código opaco u ofuscado es bautizado como “no pythonico” (“unpythonic” en inglés). Estos principios fueron famosamente descritos por el desarrollador de Python Tim Peters en El Zen de Python

  • Bello es mejor que feo.
  • Explícito es mejor que implícito.
  • Simple es mejor que complejo.
  • Complejo es mejor que complicado.
  • Plano es mejor que anidado.
  • Disperso es mejor que denso.
  • La legibilidad cuenta.
  • Los casos especiales no son tan especiales como para quebrantar las reglas.
  • Lo práctico gana a lo puro.
  • Los errores nunca deberían dejarse pasar silenciosamente.
  • A menos que hayan sido silenciados explícitamente.
  • Frente a la ambigüedad, rechaza la tentación de adivinar.
  • Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo.
  • Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.15
  • Ahora es mejor que nunca.
    Aunque nunca es a menudo mejor que ya mismo.
  • Si la implementación es difícil de explicar, es una mala idea.
  • Si la implementación es fácil de explicar, puede que sea una buena idea.
  • Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!

Tim Peters, El Zen de Python

Fuente:

http://docs.python.org.ar

https://es.wikipedia.org/wiki/Python#Filosof.C3.ADa

 

Lenguaje de Programación para Matemática | Julia

Introducción:

Julia es un lenguaje de programación conocido en el ámbito científico por su vasta librería de funciones matemáticas, a la vez es un lenguaje de alto nivel y de alta perfomance.

El lenguaje fue creado por Stefan Karpinski, estudiante graduado de la Universidad de California, que estaba involucrado en una herramienta simulación de redes que requería el uso de varios lenguajes de programación diferentes. Curiosamente, ninguno de los lenguajes usados podía hacer toda la tarea, todo el proceso. Por ello, Karpinski, junto con su compañero de universidad Viral Shah y Jeff Bezanson del MIT, decidieron resolverlo diseñando un nuevo lenguaje que fuera compatible con prácticamente cualquier tarea. La meta de Karpinski y su equipo es construir un lenguaje único que haga todo bien.

La librería de funciones matemáticas, en gran parte están escrita en Julia, pero también se integra con librerías maduras, las mejoras librerías de C y las librerías de Fortran para álgebra lineal, la generación de números aleatorios, procesamiento de señales y procesamiento de cadenas.

Características

Entre las características de este lenguaje podemos nombrar:

  • Posibilidad de definir el comportamiento de una función con una combinación de tipos de argumentos y sistema dinámico de tipos: tipos para documentar, optimizar y ejecutar rutinas
  • Buen desempeño, el cual se aproxima (estadísticamente) a lenguajes como C
  • Macros como en LISP y otras funcionalidades de metaprogramación
  • Comunicación con otros lenguajes y plataformas. Se pueden llamar funciones de Python usando el paquete PyCall y se puede llamadar a funciones de C directamente. No se necesita nada más
  • Dado que fue diseñado para computación distribuida y en paralelo, contiene una poderosas Shell que puede manejar otros procesos
  • Generación automática de código especializado, eficiente, de acuerdo al tipo de argumentos
  • Conversiones elegante y extensibles para tipos numéricos y otros tipos. Además soporte para Unicode
  • Licencia MIT : libre y de código abierto

Sitio Web: http://julialang.org/

Fuente:

https://www.genbetadev.com/paradigmas-de-programacion/julia-un-lenguaje-del-futuro

Lenguaje de Programación para Matemática | Idris

Vista General

Idris es un lenguaje de programación funcional Puro de uso general con tipos dependientes.  Los tipos dependientes  se declaran con losvalores, lo que significa que algunos aspectos del comportamiento de un programa se pueden especificar con precisión en el tipo. Se compila, con la Evaluación perezosa . Sus características están influenciadas por Haskell y ML, e incluyen:

  • Tipos dependientes completos con coincidencia de patrones dependientes
  • Interfaz de función extranjera simple (a C)
  • El compilador permite la edición interactiva: el compilador le ayuda a escribir código usando los tipos.
  • cláusulas WHERE, regla WITH , simples expresiones con CASE, búsqueda de patrones cn LET y los enlaces de lambda
  • Registros dependientes con proyección y actualización
  • Interfaces (similares a clases de tipo en Haskell)
  • Resolución de sobrecarga basada en el tipo
  • DO notación entre paréntesis y las expresiones idiomáticas
  • Sintaxis significativa de sangría
  • Sintaxis extensible
  • Universos acumulativos
  • Comprobación de la totalidad
  • Entorno interactivoañ estilo HUGS

El lenguaje soporta un intetactivo comprobador de Teoremas comparable a Coq , incluyendo tácticas, mientras que este se enfoca en la programación de propósito general que en la prueba teoremas.

Lenguaje de Programación para Matemática | Haskell

¿Qué es Haskell?

Haskell es un lenguaje de programación estandarizado multi-propósito puramente funcional con semánticas no estrictas y fuerte tipificación estática. Su nombre se debe al lógico estadounidense Haskell Curry. En Haskell, “una función es un ciudadano de primera clase” del lenguaje de programación. Como lenguaje de programación funcional, el constructor de controles primario es la función. El lenguaje tiene sus orígenes en las observaciones de Haskell Curry y sus descendientes intelectuales.

Programación funcional

La programación funcional es un paradigma de programación declarativa basado en el uso de funciones matemáticas.

Características de Haskell

Lenguaje funcional de orden superior fuertemente tipificado.

  • Clasifica los entes de un programa en:
    • objetos (constantes y funciones) y
    • tipos: cada objeto debe tener un tipo.
  • Dispone de objetos y tipos predefinidos.
  • Permite diversas declaraciones de objetos (monomorfos y polimorfos):
    • funciones constructoras y
    • funciones definidas.
  • Permite diversas declaraciones de tipos (monomorfos y polimorfos):
    • tipos sinónimos y
    • tipos algebraicos„
  • Aplica:
    • un sistema de inferencia de tipos basado en el sistema de Hindley-Milner,
    • una estrategia de reducción perezosa

Principios de Haskell

  • Completitud sintáctica: Si en una expresión sintácticamente correcta se cambia una subexpresión por otra expresión correcta del mismo nivel (y tipo) la expresión resultante es igualmente correcta.
  • Completitud semántica: A todos los entes de cada nivel se les puede dar el mismo tratamiento:
    • pueden recibir nombre, y
    • pueden figurar en expresiones.
  • Estos principios dan lugar a una sintaxis sin “casos especiales” de la que se deriva la posibilidad de utilizar:
    • funciones de orden superior
    • y funciones currificadas

Fuentes:

https://es.wikipedia.org/wiki/Haskell

http://www.lcc.uma.es/~jmmb/declarativa/ApuntesPF2004/ProgFunII.pdf

Lenguaje de Programación para Matemática | SWI-Prolog

Programación Lógica

La Programación Lógica es un paradigma de computación que consiste de un enfoque declarativo para escribir programas para el computador. PROLOG es un lenguaje de computación basada en ese paradigma.  Los programas lógicos pueden ser entendidos y estudiados a partir de dos conceptos: verdad y deducción lógica. En programación lógica, uno puede preguntarse si un axioma de un programa es verdad bajo alguna interpretación de los símbolos del programa y si ciertas declaraciones lógicas son consecuencia del programa. Esas preguntas pueden ser respondidas independientemente de cualquier mecanismo de ejecución concreto.

PROLOG

Por otro lado, PROLOG es un lenguaje de programación con un significado operacional preciso que toma prestado sus conceptos básicos de la programación lógica. Los programas PROLOG son instrucciones para ejecutar sobre el computador. Esas instrucciones casi siempre son leídas como instrucciones lógicas y, lo más importante, el resultado de una computación de un programa PROLOG es una consecuencia lógica de los axiomas en éste.

Es ampliamente aceptado que una programación efectiva en PROLOG requiere de una comprensión de la teoría de programación lógica, por lo menos en sus aspectos fundamentales, pero también que esto redunda en un mayor dominio del  procesamiento de la información usando el conmputador.

Entorno de desarrollo Prolog

Prolog es un lenguaje de programación seminterpretado. Su funcionamiento es muy similar a Java. El código fuente se compila a un código de byte el cuál se interpreta en una máquina virtual denominada Warren Abstract Machine (comúnmente denominada WAM).

Por eso, un entorno de desarrollo Prolog se compone de:

Un compilador: Transforma el código fuente en código de byte. A diferencia de Java, no existe un Standard al respecto. Por eso, el código de byte generado por un entorno de desarrollo no tiene por que funcionar en el intérprete de otro entorno.
Un intérprete: Ejecuta el código de byte. Un shell o top-level. Se trata de una utilidad que permite probar los programas, depurarlos, etc. Su funcionamiento es similar a los interfaces de línea de comando de los sistemas operativos.
Una biblioteca de utilidades: Estas bibliotecas son, en general, muy amplias. Muchos entornos incluyen (afortunadamente) unas bibliotecas standard-ISO que permiten funcionalidades básicas como manipular cadenas, entrada/salida, etc.
Generalmente, los entornos de desarrollo ofrecen extensiones al lenguaje como pueden ser la programación con restricciones, concurrente, orientada a objetos, etc.

Elementos en Prolog

Como hemos especificado antes, para construir programas en Prolog necesitamos una serie de elementos. Vamos a especificarlos:

  • Átomos: Es una definición genérica de un objeto del mundo que queremos representar.
  • Predicados: Nos permite especificar características de los objetos de nuestro mundo o las relaciones entre ellos.

SWI-Prolog

SWI-Prolog es una implementación en código abierto (en inglés, open source) del lenguaje de programación Prolog. Su autor principal es Jan Wielemaker. En desarrollo ininterrumpido desde 1987, SWI-Prolog posee un rico conjunto de características, bibliotecas (incluyendo su propia biblioteca para GUI, XPCE), herramientas (incluyendo un IDE) y una documentación extensiva. SWI-Prolog funciona en las plataformas Unix, Windows y Macintosh.

El nombre SWI deriva de Sociaal-Wetenschappelijke Informatica (“Informática de Ciencias Sociales”), el antiguo nombre de un grupo de investigación en la Universidad de Ámsterdam en el que Wielemaker está integrado. El nombre de ese grupo se cambió posteriormente a HCS (Human-Computer Studies)

Web Oficial: www.swi-prolog.org/

Fuente:

http://webdelprofesor.ula.ve/ingenieria/jacinto/logica/manual-prolog/introduccion-prolog.html

https://www.ecured.cu/Prolog_%28Lenguaje_de_programaci%C3%B3n%29

https://es.wikipedia.org/wiki/SWI-Prolog

Lenguaje de Programación para Matemática | Coq / Gallina

Coq (gallo en francés) es un sistema de ayuda para la demostración de teoremas que maneja aserciones matemáticas, verifica mecánicamente las pruebas de aserciones, ayuda a encontrar pruebas para esas aserciones y extrae programas certificados (correctos) a partir de las pruebas constructivas de aserciones que representan su especificación formal. Coq trabaja basándose en la teoría del Cálculo de Construcciones Inductivas, que es una teoría derivada del Cálculo de Construcciones.

Fue desarrollado en Francia, en el proyecto LogiCal, entre el INRIA, la École Polytechnique, la Universidad París XI y el CNRS. Dirigen el desarrollo los investigadores Gilles Dowek y Christine Paulin-Mohring. Coq está escrito en el lenguaje Ocaml.

Coq y Gallina

Coq implementa un programa especifico y un  lenguaje matemática de alto nivel  llamado Gallina que se basa en un lenguaje formal expresiva llama el cálculo de inductivos construcciones que combina en sí tanto una lógica de orden superior y un lenguaje de programación funcional mecanografiado ricamente. A través de una lengua vernácula de comandos, Coq permite:

  • Definir funciones o predicados, que pueden ser evaluados eficientemente;
  • Establecer teoremas matemáticos y especificaciones de software;
  • Desarrollar interactivamente pruebas formales de estos teoremas;
  • Para verificar a máquina estas pruebas mediante un “núcleo” de certificación relativamente pequeño;
  • Para extraer programas certificados a lenguajes como Objective Caml, Haskell o Scheme.
  • Como sistema de desarrollo de la prueba, Coq ofrece métodos interactivos, a prueba de algoritmos de decisión y semi-decisión, y un lenguaje táctica para permitir al usuario definir sus propios métodos de
  • Prueba. La conexión con el sistema de álgebra computacional externa o los probadores de teorema está disponible.

Como plataforma para la formalización de las matemáticas o el desarrollo de programas, Coq proporciona soporte para notaciones de alto nivel, contenido implícito y varios otros tipos de macros útiles.

El paquete Coq

Coq viene con bibliotecas para aritmética eficiente en N, Z y Q, bibliotecas sobre listas, conjuntos finitos y mapas finitos, bibliotecas sobre conjuntos abstractos, relaciones, análisis clásico, etc.

Coq viene con:

  • Una interfaz gráfica de usuario basada en GTK (CoqIde)
  • Herramientas de documentación (coqdoc y coq-tex) y una herramienta de estadísticas (coqwc),
  • Dependencia y generación de herramientas para el makefile Coq (coq_makefile y coqdep),
  • Un verificador independiente de la prueba.

Fuentes:

https://es.wikipedia.org/wiki/Coq

https://coq.inria.fr

 

Guardar

Lenguaje de Programación para Matemática | Lenguaje R

R es un entorno y un lenguaje de programación enfocado en el análisis estadístico de los más utilizados en el campo de la minería de datos que pueden aplicarse a gran variedad de disciplinas.

Este lenguaje forma parte de GNU y se distribuye bajo licencia GNU GLP.

Características  y ventajas de la programación en R

  • El lenguaje de programación R es un proyecto colaborativo y abierto, los desarrolladores pueden descargar el código de forma gratuita y modificarlo para incluir mejoras.
  • Es un lenguaje interpretado, funciona mediante comandos.
  • R proporciona una amplia gama de herramientas estadísticas que incluyen análisis de datos y generación de gráficos.
  • Este lenguaje tiene capacidad de generar gráficos de alta calidad. Estas características lo convierten en una potente herramienta de cálculo.
  • Gracias a este lenguaje de programación los Data Scientists pueden manejar grandes volúmenes de datos.
  • Puede integrarse con distintas bases de datos. Una de las ventajas más importantes de R es que funciona con diferentes tipos de hardware y software (Windows, Unix, Linux…)
  • El lenguaje R ofrece la posibilidad de cargar bibliotecas y paquetes con diversas funcionalidades lo que permite a los usuarios extender su configuración básica.
  • La comunidad en torno a R es muy activa por lo que es sencillo encontrar soluciones rápidamente a los problemas que los usuarios se puedan encontrar.

Sitio web del Proyecto: https://www.r-project.org/

Tomado de: http://blog.datatons.com/2016/04/08/que-es-lenguaje-programacion-r/

Guardar