Axioma

Axioma
Tipo de sistema de álgebra computacional
Desarrollador grupo independiente de personas
Escrito en Ceceo
Sistema operativo software multiplataforma
ultima versión
  • agosto de 2014 ( agosto de 2014 ) [1]
Licencia licencia BSD modificada
Sitio web axioma-desarrollador.org
 Archivos multimedia en Wikimedia Commons

Axiom  es un sistema gratuito de álgebra informática de propósito general . Consta de un entorno de interpretación, un compilador y una biblioteca que describe una jerarquía de tipos matemáticamente correcta y fuertemente tipada.

Historia

El desarrollo del sistema comenzó en 1971 por un grupo de investigadores de IBM dirigido por Richard Jencks [2] [3] . El sistema originalmente se llamaba Scratchpad . El proyecto se desarrolló lentamente y se consideró principalmente como una plataforma de investigación para desarrollar nuevas ideas en matemáticas computacionales.

En la década de 1990, el sistema se vendió a Numerical Algorithms Group (NAG), llamado Axiom, y se convirtió en un producto comercial. Pero por varias razones, el sistema no tuvo éxito comercial y se retiró del mercado en octubre de 2001.

La NAG decidió hacer que Axiom fuera software libre y de código abierto bajo una licencia BSD modificada .

En 2007, Axiom tenía dos bifurcaciones de código abierto : OpenAxiom y FriCAS .

El desarrollo del sistema continúa, se lanzan nuevas versiones cada dos meses [4] .

Filosofía del proyecto

La técnica de programación literaria de Knuth se utiliza en todo el código fuente. El proyecto Axiom planea usar tecnologías probadas (como Coq y ACL2 ) para probar la exactitud de los algoritmos.

Características

En Axiom, todos los objetos tienen un tipo. Ejemplos de tipos son estructuras matemáticas (como anillos , campos , polinomios ) así como estructuras de datos de computación (como listas , árboles , tablas hash ).

Una función puede tomar un tipo como argumento y su valor devuelto también puede ser un tipo. Por ejemplo, Fraction es una función que recibe IntegralDomaincomo argumento y devuelve el campo de relación de su argumento. Como otro ejemplo, un anillo de matriz de números reales se puede construir como . Por supuesto, si trabajas en este dominio, se interpreta como la matriz identidad y te permite obtener la matriz inversa si existe. SquareMatrix(4, Fraction Integer)1A^-1A

Algunas operaciones pueden tener el mismo nombre, en cuyo caso los tipos de argumento y resultado se usan para determinar qué operación se aplica, de forma similar a OOP .

El lenguaje de extensión de Axiom se llama SPAD. Toda la base matemática de Axiom está escrita en este lenguaje. El intérprete toma casi el mismo idioma.

SPAD se desarrolló aún más bajo el nombre A# y más tarde Aldor . Este último, además, se puede utilizar como un lenguaje de extensión alternativo. Sin embargo, tenga en cuenta que se distribuye bajo una licencia diferente.

Ejemplos

Caracteres 3j

Cálculo de símbolos 3j y coeficientes de Clebsch-Gordan .

j3Suma ( j1 , j2 , j3 , m1 , m2 , m3 ) = = maxz : = reducir ( min , [ j1+j2-j3 , j1 -m1 , j2+m2 ] ) minz : = max(0 , max ( -( j3-j2+m1) , -( j3-j1-m2) )) minz > maxz = > 0 maxz < 0 = > 0 suma ( ( -1 ) ^( z+j1-j2-m3) / _ ( factorial(z) * factorial(j1+j2-j3-z) * factorial(j1-m1-z) * _ factorial(j2+m2-z) * factorial(j3-j2+m1+z) * factorial(j3-j1-m2+z) ) , _ z = minz . . máxz) j3 ( j1 , j2 , j3 , m1 , m2 , m3 ) == m1 + m2 + m3 ~= 0 = > 0 abs(j1 - j2) > j3 = > 0 j1 + j2 < j3 = > 0 abs(m1) > j1 = > 0 abs(m2) > j2 = > 0 abs(m3) > j3 = > 0 no entero? ( j1+j2+j3 ) = > 0 sqrt ( _ factorial(j1+j2-j3) * factorial(j1-j2+j3) * factorial( - j1+j2+j3) / _ factorial(j1+j2+j3+1) * _ factorial(j1+m1) * factorial(j1-m1) * _ factorial(j2+m2) * factorial(j2-m2) * _ factorial(j3+m3) * factorial(j3-m3) ) * j3Suma ( j1 , j2 , j3 , m1 , m2 , m3) clebschGordan ( j1 , j2 , j , m1 , m2 , m ) = = ( -1 ) ^( j1-j2+m) * sqrt(2*j+1) * j3(j1 , j2 , j , m1 , m2 , -m )

Relatividad general

"Axioma" deriva los símbolos de Christoffel y los tensores de Riemann y Ricci en la solución de Schwarzschild .

x : = vector [ ' t , ' r , '% theta , '% phi ]; tenue : = #x; % nu : = operador ' % nu ; % lambda : = operador '% lambda ; lg : = matriz [ [ exp( % nu r ) , 0 , 0 , 0 ], _ [ 0 , - exp( % lambda r ) , 0 , 0 ], _ [ 0 , 0 , - r^2 , 0 ], _ [ 0 , 0 , 0 , - r^2*sin( % theta) ^ 2 ] _ ]; ug : = inversa lg ; grSetup( métrica , nombres ) == libre x atenuación libre lg gratis gratis _ x : = nombres tenue : = #x lg : = métrico ug : = inversa lg suma(lista ) == reducir (+ , lista ) Christoffel ( k , l , i ) = = ( 1 /2) * sum [ ug(i , m) *( D(lg(k , m) , x(l) ) + D(lg(m , l) , x(k) ) - D(lg(k , l) , x(m) )) para m en 1. . tenue ] Riemann ( k , l , metro , yo ) = = D(Christoffel(k , metro , yo) , x(l) ) - D(Christoffel(k , l , i) , x(m) ) + suma [ Christoffel(n , l , i) * Christoffel(k , m , n ) - Christoffel(n , m , i) * Christoffel(k , l , n ) para n en 1. . tenue ] Ricci ( yo , k ) = = suma [ Riemann(i , l , k , l) para l en 1. . tenue ] curvaturaescalar () == suma [ suma [ ug(i , k) * Ricci(i , k) para i en 1. . dim ] para k en 1. . tenue ] lRiemann ( yo , yo , l , metro ) == 0 _ lRiemann ( yo , k , l , l ) == 0 _ lRiemann ( yo , k , l , metro | yo > k ) == - lRiemann ( k , yo , l , m) lRiemann ( yo , k , l , metro | l > metro ) == - lRiemann ( yo , k , metro , l) lRiemann ( yo , k , l , metro ) = = sum [ lg(i , n ) * Riemann(k , l , m , n ) para n en 1. . tenue ] mostrarChristoffel () == para k en 1. . repetición tenue para l en 1. . k -repetir para i en 1. . repetición tenue si Christoffel(k , l , i) ~= 0 entonces k > l = > infijo de salida ('= , [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ secuencia de comandos( '% Gamma ,[[ l-1 , k-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) k = l => infijo de salida ('= , _ [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) mostrarRicci () == para i en 1. . repetición tenue para k en 1. . si Ricci(i , k) ~= 0 entonces i = k => infijo de salida ('= , [ subíndice ( ' R ,[ i-1 , k-1 ] ) , Ricci(i , k) :: OUTFORM ] ) i > k = > infijo de salida ('= , [ subíndice( ' R ,[ i-1 , k-1 ] ) , _ subíndice( ' R ,[ k-1 , i-1 ] ) , _ Ricci(i , k) :: OUTFORM ] ) mostrarRiemann () == para k en 1. . repetición tenue para l en 1. . repetición tenue para m en 1. . repetición tenue para i en 1. . repetición tenue si Riemann(k , l , m , i) ~= 0 entonces infijo de salida ('= , _ [ script( ' R , [[ k-1 , l-1 , m-1 ], [ i-1 ]] ) , Riemann(k , l , m , i) :: OUTFORM ] ) ( 21 ) -> mostrarChristoffel( ) Función de compilación sum con tipo List Expression Integer -> Expression Integer Función de compilación Christoffel con tipo ( PositiveInteger , PositiveInteger , PositiveInteger) -> Expression Integer Función de compilación showChristoffel with type ( ) -> Void % nu(r) , % e % nu ( r) una % Gama = --------------- 0 , 0 % lambda(r) 2 %e , % nu ( r) 0 0 % Gama = % Gama = ------ - 1 0 0 1 2 _ _ , % lambda ( r) una % Gama = ------------ 1 , 1 2 2 2 1 % Gama = % Gama = - 2 , 1 1 , 2 r 1r_ _ % Gama = - ------------ 2 , 2 % lambda(r) % mi 3 3 1 % Gama = % Gama = - 3 , 1 1 , 3 r 3 3 cos( % theta) % Gama = % Gama = ---------- - 3 , 2 2 , 3 sin( % theta) 2 1 r sen( % theta) % Gama = - -------------- 3 , 3 % lambda(r) % mi 2 % Gamma = - cos ( % theta)sen( % theta) 3 , 3 Tipo : Vacío ( 22 ) -> Ricci(3 , 3 ) Función de compilación Riemann con tipo ( PositiveInteger , PositiveInteger , PositiveInteger , PositiveInteger) -> Expression Integer Función de compilación Ricci con tipo ( PositiveInteger , PositiveInteger) -> Entero de expresión , , % lambda(r) - r%nu ( r) + r%lambda ( r) + 2 %e - 2 ( 22 ) -------------------------------------- - % lambda(r) 2 %e Tipo : Expresión Entero

Galería

Documentación

Axiom es un programa literario . El código fuente está disponible en un conjunto de volúmenes en axiom-developer.org . Estos volúmenes contienen el código fuente actualizado del sistema.

Actualmente están disponibles los siguientes documentos:

Vídeo

Un objetivo importante del proyecto Axiom es proporcionar documentación. En noviembre de 2008, el proyecto anunció el primero de una serie de videos tutoriales, que también están disponibles en axiom-developer.org . El primer video habla sobre fuentes de información sobre Axiom. [5]

Notas

  1. http://www.axiom-developer.org/axiom-website/releasenotes.html
  2. Richard Dimick Jenks . Consultado el 26 de abril de 2009. Archivado desde el original el 17 de julio de 2011.
  3. Axiom Homepage Archivado el 18 de agosto de 2004 en Wayback Machine .
  4. Parches Archivado el 23 de mayo de 2009 en Wayback Machine .
  5. "Fuentes de información del sistema de álgebra informática Axiom" Archivado el 29 de marzo de 2016 en Wayback Machine , jgg899, YouTube , 30 de noviembre de 2008.

Enlaces