Axiom

Axiom
Tyyppi tietokonealgebrajärjestelmä
Kehittäjä itsenäinen ryhmä ihmisiä
Sisään kirjoitettu Lisp
Käyttöjärjestelmä monikäyttöinen ohjelmisto
uusin versio
Lisenssi muokattu BSD-lisenssi
Verkkosivusto axiom-developer.org
 Mediatiedostot Wikimedia Commonsissa

Axiom  on ilmainen yleiskäyttöinen tietokonealgebrajärjestelmä . Se koostuu tulkkiympäristöstä, kääntäjästä ja kirjastosta, joka kuvaa vahvasti kirjoitettua, matemaattisesti oikeaa tyyppihierarkiaa.

Historia

Järjestelmäkehityksen aloitti vuonna 1971 Richard Jencksin johtama IBM -tutkijoiden ryhmä [2] [3] . Järjestelmän nimi oli alun perin Scratchpad . Projekti kehittyi hitaasti ja se nähtiin lähinnä tutkimusalustana uusien laskennallisen matematiikan ideoiden kehittämiselle.

1990-luvulla järjestelmä myytiin Numerical Algorithms Groupille (NAG), jonka nimi oli Axiom, ja siitä tuli kaupallinen tuote. Mutta useista syistä järjestelmä ei menestynyt kaupallisesti, ja se poistettiin markkinoilta lokakuussa 2001.

NAG päätti tehdä Axiomista ilmaisen ohjelmiston ja avoimen lähdekoodin muokatun BSD-lisenssin alaisena .

Vuonna 2007 Axiomilla oli kaksi avoimen lähdekoodin haarukkaa : OpenAxiom ja FriCAS .

Järjestelmän kehitys jatkuu, uusia versioita julkaistaan ​​kahden kuukauden välein [4] .

Projektin filosofia

Knuthin kirjallista ohjelmointitekniikkaa käytetään koko lähdekoodissa. Axiom-projekti aikoo käyttää hyväksi havaittuja teknologioita (kuten Coq ja ACL2 ) todistaakseen algoritmien oikeellisuuden.

Ominaisuudet

Axiomissa kaikilla objekteilla on tyyppi. Esimerkkejä tyypeistä ovat matemaattiset rakenteet (kuten renkaat , kentät , polynomit ) sekä laskennan tietorakenteet (kuten listat , puut , hash-taulukot ).

Funktio voi ottaa tyypin argumenttina, ja sen palautusarvo voi myös olla tyyppi. Esimerkiksi Fraction on funktio, joka vastaanottaa IntegralDomainargumenttina ja palauttaa argumenttinsa suhdekentän . Toisena esimerkkinä reaalilukumatriisirengas voidaan rakentaa muodossa . Tietenkin, jos työskentelet tällä alalla, se tulkitaan identiteettimatriisiksi ja antaa sinun saada käänteisen matriisin, jos se on olemassa. SquareMatrix(4, Fraction Integer)1A^-1A

Joillakin operaatioilla voi olla sama nimi, jolloin argumentti- ja tulostyyppejä käytetään määrittämään, mitä operaatiota käytetään, kuten OOP .

Axiomin laajennuskieli on nimeltään SPAD. Axiomin koko matemaattinen perusta on kirjoitettu tällä kielellä. Tulkki käyttää melkein samaa kieltä.

SPADia kehitettiin edelleen nimellä A# ja myöhemmin nimellä Aldor . Jälkimmäistä voidaan lisäksi käyttää vaihtoehtoisena laajennuskielenä. Huomaa kuitenkin, että sitä jaetaan eri lisenssillä.

Esimerkkejä

3j merkkiä

3j - symbolien ja Clebsch-Gordan-kertoimien laskeminen .

j3Sum ( j1 , j2 , j3 , m1 , m2 , m3 ) = = maxz : = vähennä ( min , [ j1+j2-j3 , j1-m1 , j2+m2 ] ) minz : = max(0 , max ( -( j3-j2+m1) , -( j3-j1-m2) )) minz > maxz = > 0 maxz < 0 = > 0 summa ( ( -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 . . maxz) 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 ei kokonaisluku? ( j1+j2+j3 ) = > 0 sqrt ( _ factorial(j1+j2-j3) * factorial(j1-j2+j3) * factorial( - j1+j2+j3) / _ tekijä(j1+j2+j3+1) * _ factorial(j1+m1) * factorial(j1-m1) * _ factorial(j2+m2) * factorial(j2-m2) * _ faktoriaali(j3+m3) * faktoriaalinen(j3-m3) ) * j3Sum ( 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 )

Yleinen suhteellisuusteoria

"Aksiooma" johtaa Christoffel-symbolit ja Riemannin ja Ricci - tensorit Schwarzschildin ratkaisussa .

x : = vektori [ ' t , ' r , '% theta , '% phi ]; himmeä : = #x; % nu : = operaattori '% nu ; % lambda : = operaattori '% lambda ; lg : = matriisi [ [ 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 : = käänteinen lg ; grSetup( metriikka , nimet ) == ilmainen x vapaa himmennys ilmainen lg ilmainen ug x : = nimet himmeä : = #x lg : = metrinen ug : = käänteinen lg summa(lista ) == vähentää (+ , lista ) Christoffel ( k , l , i ) = = ( 1 /2) * summa [ ug(i , m) *( D(lg(k , m) , x(l) ) + D(lg(m , l) , x(k) ) - D(lg(k , l) , x(m) )) m in 1. . _ himmeä ] Riemann ( k , l , m , i ) = = D(Christoffel(k , m , i) , x(l) ) - D(Christoffel(k , l , i) , x(m) ) + summa [ Christoffel(n , l , i) * Christoffel(k , m , n ) - Christoffel(n , m , i) * Christoffel(k , l , n ) n : lle 1 :ssä . himmeä ] Ricci ( i , k ) = = summa [ Riemann(i , l , k , l) l :lle 1 : ssä . himmeä ] skalaarikaarevuus () == summa [ summa [ ug(i , k) * Ricci(i , k) minulle 1 : ssä . dim ] k in 1. . _ himmeä ] lRiemann ( i , i , l , m ) == 0_ _ lRiemann ( i , k , l , l ) == 0_ _ lRiemann ( i , k , l , m | i > k ) == - lRiemann ( k , i , l , m ) lRiemann ( i , k , l , m | l > m ) == - lRiemann ( i , k , m , l ) lRiemann ( i , k , l , m ) = = summa [ lg(i , n ) * Riemann(k , l , m , n ) n : lle 1 :ssä . himmeä ] showChristoffel () == k in 1. . _ himmeä toisto minulle 1. . _ _ k - toisto minulle 1 : ssä . himmeä toisto jos Christoffel(k , l , i) ~= 0 niin k > l = > tulosta infix ('= , [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ script( '% Gamma ,[[ l-1 , k-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) k = l => lähtöliite ( '= , _ [ script( '% Gamma ,[[ k-1 , l-1 ],[ i-1 ]] ) , _ Christoffel(k , l , i) :: OUTFORM ] ) näytäRicci () == minulle 1 : ssä . himmeä toisto k in 1. . _ toistan _ jos Ricci(i , k) ~= 0 niin i = k => tulosta infix ('= , [ alaindeksi( ' R ,[ i-1 , k-1 ] ) , Ricci(i , k) :: OUTFORM ] ) i > k = > tulosta infix ('= , [ alaindeksi( ' R ,[ i-1 , k-1 ] ) , _ alaindeksi( ' R ,[ k-1 , i-1 ] ) , _ Ricci(i , k) :: OUTFORM ] ) näytäRiemann () == k in 1. . _ himmeä toisto minulle 1. . _ _ himmeä toisto m in 1. . _ himmeä toisto minulle 1 : ssä . himmeä toisto jos Riemann(k , l , m , i) ~= 0 niin tulosta infix ('= , _ [ script( ' R , [[ k-1 , l-1 , m-1 ], [ i-1 ]] ) , Riemann(k , l , m , i) :: OUTFORM ] ) ( 21 ) -> näytä Christoffel( ) Käännösfunktion summa tyypillä Lista Lauseke Integer - > Lauseke Integer Käännösfunktio Christoffel tyypin kanssa ( PositiveInteger , _ _ PositiveInteger , PositiveInteger) -> Lauseke Kokonaisluku Käännösfunktio showChristoffel tyypillä ( ) -> Void % nu(r ) , % e % nu ( r) yksi % Gamma = --------------- 0 , 0 % lambda(r) 2 %e , % nu ( r) 0 0 % Gamma = % Gamma = ------ - 1 0 0 1 2 _ _ , % lambda ( r) yksi % Gamma = ------------ 1 , 1 2 2 2 1 % Gamma = % Gamma = - 2 , 1 1 , 2 r 1r _ % Gamma = - ------------ 2 , 2 % lambda(r) % e 3 3 1 % Gamma = % Gamma = - 3 , 1 1 , 3 r 3 3 cos ( % theta) % Gamma = % Gamma = ---------- - 3 , 2 2 , 3 sin ( % theta) 2 1 r sin( % theta) % Gamma = - -------------- 3 , 3 % lambda(r) % e 2 % Gamma = - cos ( % theta)sin( % theta) 3 , 3 Tyyppi : Tyhjä ( 22 ) -> Ricci(3 , 3 ) Käännösfunktio Riemann tyypin kanssa ( PositiveInteger , _ PositiveInteger , PositiveInteger , PositiveInteger) -> Lauseke Kokonaisluku Käännösfunktio Ricci , jonka tyyppi ( PositiveInteger , PositiveInteger) -> Lauseke Kokonaisluku , , % lambda(r) - r%nu ( r) + r%lambda ( r) + 2 %e - 2 ( 22 ) --------------------------------------- _ % lambda(r) 2 %e Tyyppi : Lauseke Kokonaisluku

Galleria

Dokumentaatio

Axiom on kirjallinen ohjelma . Lähdekoodi on saatavilla useissa määrissä osoitteessa axiom-developer.org . Nämä taltiot sisältävät järjestelmän ajan tasalla olevan lähdekoodin.

Seuraavat asiakirjat ovat tällä hetkellä saatavilla:

Video

Axiom-projektin tärkeä tavoite on dokumentointi. Marraskuussa 2008 projekti julkisti ensimmäisen opetusvideoiden sarjasta, jotka ovat saatavilla myös osoitteessa axiom-developer.org . Ensimmäinen video puhuu Axiomin tietolähteistä. [5]

Muistiinpanot

  1. http://www.axiom-developer.org/axiom-website/releasenotes.html
  2. Richard Dimick Jenks . Haettu 26. huhtikuuta 2009. Arkistoitu alkuperäisestä 17. heinäkuuta 2011.
  3. Axiomin kotisivu arkistoitu 18. elokuuta 2004 Wayback Machinessa .
  4. Korjaukset arkistoitu 23. toukokuuta 2009 Wayback Machinessa .
  5. "Axiom Computer Algebra System Information Sources" Arkistoitu 29. maaliskuuta 2016 Wayback Machinessa , jgg899, YouTube , 30. marraskuuta 2008.

Linkit