2 research outputs found
Sustav za simboliÄko raÄunanje u Haskellu
Cilj diplomskog rada bio je implementirati sustav za simbolicko raÄunanje (CAS) u programskom jeziku Haskell. Iz perspektive CAS-a, ova implementacija ima osnovnu funkcionalnost pojednostavljivanja izraza, te dodatnu funkcionalnost rjeÅ”avanja sustava linearnih jednadžbi. Iskoristili smo Haskellov naÄin definiranja tipova (Algebraic data types) kako bismo jednostavno implementirali osnovni tip T (term). Zbog visoke razine apstrakcije koju Haskell pruža, omoguÄeno nam je lako definiranje funkcija poput tmap ili tFoldMap (analogije Haskell funkcija fmap i foldMap, samo nad termima). Preko takvih funkcija prirodno se mogu opisati korisne funkcije i upiti nad termom. Funkcije poput djelovanja nekom funkcijom na svaki Ävor terma, ili ispitivanja postojanja Ävora tipa Add dvije razine ispod korijena terma. Osim funkcionalnosti vezanih za CAS, kod se sastoji od funkcija koje služe kao definicije za teorijski dio rada. Sva svojstva koja se koriste u definicijama i dokazima teorema, a moguÄe ih je opisati u Haskell kodu, implementirana su unutar koda. Prednost takvog pristupa je uvid u korektnu definiciju pojedinog svojstva. Za to smo iskoristili Haskellov jeziÄni prevoditelj. Na primjer, svojstvo isNormalFor, koje prima term i vraÄa Bool vrijednost, se koristi kao dio definicije nekih drugih, složenijih svojstava. Ako u nekom trenutku odluÄimo promijeniti tip tog svojstva tako da prima dva terma, jeziÄni prevoditelj nam ne dopuÅ”ta da napravimo greÅ”ku prilikom takve izmjene a da pritom korektno ne izmijenimo primjenu tog svojstva na svakom drugom mjestu gdje se ono pojavljuje. Svojstva koja je moguÄe definirati u kodu, su dosta ograniÄena zbog nemoguÄnosti opisa univerzalnog kvantifikatora nad beskonaÄnim skupovima, meÄutim takva mana se ublažava dodavanjem sustava za testiranje (QuickCheck)Goal of this graduate thesis was implementation of computer algebra system (CAS) in Haskell programming language. From CAS point of view, this implementation contains basic functionality for term simplification, and extra functionality for solving systems of linear equations. We used Haskellās way of defining data types (Algebraic data types) so we could simply implement our main data type T (term). Because of high level of abstraction, which Haskell enables, we can define functions like tmap or tFoldMap (analogies of Haskellās fmap and foldMap, but on data type T). With such functions we can naturally describe useful functions and queries on the T data type. Functions like applying some function on each node of a given term, or querying the existence of a Add-type node two levels below the root. Beside the functionality for CAS, code contains functions which serve as definitions for theoretical part of the thesis. All properties which are used in definitions and theorem proofs, and are possible to define in Haskell, are defined in the code. Advantage of such approach is insight in correct property definition. We used Haskellās compiler for such purpose. For example, isNormal property of type T Bool, is used as part of some other, more complex properties. If we decide to change the type of this property to T T Bool, compiler wonāt let us do that unless we accordingly updated all other properties which depend on it. Properties defined in code are quite limited because there is no way to define universal quantification over infinite sets, but we handle this flaw by implementing tests for such properties with QuickCheck
Sustav za simboliÄko raÄunanje u Haskellu
Cilj diplomskog rada bio je implementirati sustav za simbolicko raÄunanje (CAS) u programskom jeziku Haskell. Iz perspektive CAS-a, ova implementacija ima osnovnu funkcionalnost pojednostavljivanja izraza, te dodatnu funkcionalnost rjeÅ”avanja sustava linearnih jednadžbi. Iskoristili smo Haskellov naÄin definiranja tipova (Algebraic data types) kako bismo jednostavno implementirali osnovni tip T (term). Zbog visoke razine apstrakcije koju Haskell pruža, omoguÄeno nam je lako definiranje funkcija poput tmap ili tFoldMap (analogije Haskell funkcija fmap i foldMap, samo nad termima). Preko takvih funkcija prirodno se mogu opisati korisne funkcije i upiti nad termom. Funkcije poput djelovanja nekom funkcijom na svaki Ävor terma, ili ispitivanja postojanja Ävora tipa Add dvije razine ispod korijena terma. Osim funkcionalnosti vezanih za CAS, kod se sastoji od funkcija koje služe kao definicije za teorijski dio rada. Sva svojstva koja se koriste u definicijama i dokazima teorema, a moguÄe ih je opisati u Haskell kodu, implementirana su unutar koda. Prednost takvog pristupa je uvid u korektnu definiciju pojedinog svojstva. Za to smo iskoristili Haskellov jeziÄni prevoditelj. Na primjer, svojstvo isNormalFor, koje prima term i vraÄa Bool vrijednost, se koristi kao dio definicije nekih drugih, složenijih svojstava. Ako u nekom trenutku odluÄimo promijeniti tip tog svojstva tako da prima dva terma, jeziÄni prevoditelj nam ne dopuÅ”ta da napravimo greÅ”ku prilikom takve izmjene a da pritom korektno ne izmijenimo primjenu tog svojstva na svakom drugom mjestu gdje se ono pojavljuje. Svojstva koja je moguÄe definirati u kodu, su dosta ograniÄena zbog nemoguÄnosti opisa univerzalnog kvantifikatora nad beskonaÄnim skupovima, meÄutim takva mana se ublažava dodavanjem sustava za testiranje (QuickCheck)Goal of this graduate thesis was implementation of computer algebra system (CAS) in Haskell programming language. From CAS point of view, this implementation contains basic functionality for term simplification, and extra functionality for solving systems of linear equations. We used Haskellās way of defining data types (Algebraic data types) so we could simply implement our main data type T (term). Because of high level of abstraction, which Haskell enables, we can define functions like tmap or tFoldMap (analogies of Haskellās fmap and foldMap, but on data type T). With such functions we can naturally describe useful functions and queries on the T data type. Functions like applying some function on each node of a given term, or querying the existence of a Add-type node two levels below the root. Beside the functionality for CAS, code contains functions which serve as definitions for theoretical part of the thesis. All properties which are used in definitions and theorem proofs, and are possible to define in Haskell, are defined in the code. Advantage of such approach is insight in correct property definition. We used Haskellās compiler for such purpose. For example, isNormal property of type T Bool, is used as part of some other, more complex properties. If we decide to change the type of this property to T T Bool, compiler wonāt let us do that unless we accordingly updated all other properties which depend on it. Properties defined in code are quite limited because there is no way to define universal quantification over infinite sets, but we handle this flaw by implementing tests for such properties with QuickCheck