[Agda] Agda for CA
Serge D. Mechveliani
mechvel at botik.ru
Sun Jul 15 19:58:58 CEST 2012
People,
I investigate the possibility to write computer algebra using a
language with dependent types which parameter values may be evaluated
at run time.
And it is desirable for this language to be possibly close to Haskell.
I have looked into the Agda tutorial, and have the following beginner
questions.
1. Is Agda evaluation lazy?
2. Is Adga going to join (multiparametric) type classes?
2.1. They say that type classes can be easily modelled in Adga by
dependent records, or/and may be, by implicit arguments.
Is this so?
If yes, how would it look the Agda program corresponding to the
Haskell program
---------------------------------------------------------------------
class Eq a where (==) :: a -> a -> Bool
instance Eq Bool where True == True = true
True == _ = false
False == True = false
False == _ = true
instance Eq a => Eq [a] where [] == [] = true
[] == _ = false
(_: _) == [] = false
(x: xs) == (y: ys) == x == y && xs == ys
f :: [Bool] -> Bool
f xs = xs == [True, False, True]
---------------------------------------------------------------------
(a contrived example, not tried to compile)
?
3. Here are the two examples of dependent type usage in computer algebra.
3.1.
The domain Matrix R n m is represented by a list of n rows,
each row being a list of m elements of a type R, n, m > 0.
For R belonging to the class CommutativeRing,
Matrix R n m must have the instance of MultipicativeSemigroup
(by `*') iff n == m.
And m, n are often computed at run time.
3.2. The domain D = RtPolynomial vars, length vars > 0.
is polynomials with Rational coefficients in the variable list vars.
In many methods, the list vars is computed at run time.
Depending on (length vars), different instance set needs to be defined
for D. For example, D is Euclidean iff (length vars) == 1.
Please, copy the response to mechvel at botik.ru
Thanks,
------
Sergei
mechvel at botik.ru
More information about the Agda
mailing list