[Agda] Using Agda in proving computer system correct

Nils Anders Danielsson nad at cse.gu.se
Mon Aug 5 15:28:17 CEST 2019


On 03/08/2019 23.11, Roman wrote:
> It was the case that you could type check things in almost no time,
> then open some module (without using anything from it) and wait for
> two minutes for type checking to finish.

If you have some example where Agda exhibits terrible performance,
please report it on the bug tracker.

> People have reported that their projects required a dozen or two of
> GBs of RAM.

I have written on the order of 100 000 lines of Agda code, and I think I
can typecheck all of it (excluding pieces that have bit-rotted) using
less than 3 GB of RAM.

> Even something as simple as printing a natural number had terrible
> performance (I think it even was exponential?) for many years (which
> has been fixed rather recently).

This was a library issue, rather than a more fundamental problem, right?
(Not that libraries aren't important.)

> Again, I don't know whether the situation has been improved in recent
> years.

There have been lots of improvements over the years, but things can be
improved further.

> Does Agda still implement call-by-name reduction strategy (as opposed
> to call-by-need)?

Here's the abstract of a talk Ulf Norell gave at AIM XXVII:

   "Since the olden days, Agda has been using a substitution-based
   call-by-name evaluation strategy with all the associated problems. In
   this talk I will describe my efforts to bring Agda into the late
   1980's: introducing the Agda Abstract Machine. The abstract machine is
   an environment-based call-by-need machine, solving both the
   substitution problem and the call-by-name issue. Some interesting
   challenges are introduced by the fact that we evaluate open terms, and
   are constrained by the existing term representation of Agda."

However, call-by-name has not been removed entirely.

-- 
/NAD


More information about the Agda mailing list