[Agda] type check with large constant

Ulf Norell ulf.norell at gmail.com
Mon Feb 12 08:18:36 CET 2018


I haven't looked at what the type checker is doing in detail that makes
test2 so extremely slow, but note that built-in arithmetic does not kick in
for open terms. In your example `(a + n) ∸ a` contains a free variable `n`,
if the type checker has to evaluate it (which I suspect it does for test2,
but not test1) it will use the non-built-in recursive definitions for `_+_`
and `_∸_`.

I would advise abstracting over `a` whenever you can.

/ Ulf

On Sat, Feb 10, 2018 at 2:45 PM, Sergei Meshveliani <mechvel at botik.ru>
wrote:

> Dear all,
>
> I need to type-check a program that uses a certain large global constant
> a.
> And the function  test2  below is type-checked much longer than  test1,
> It takes too long.
> This is  Agda 2.5.3.
>
> Can people, please, explain the effect?
>
> --------------------------------------------------------------
> open import Function using (_∘_; _$_)
> open import Relation.Binary.PropositionalEquality using (_≡_; cong)
> open import Data.Nat            using (ℕ; suc; _+_; _∸_)
> open import Data.Nat.Properties using (+-comm)
>
> a : ℕ
> a = 12345
>
> test1 :  ∀ n → (a + n) ∸ a ≡ (n + a) ∸ a
> test1 n =  cong (_∸ a) (+-comm a n)
>
> test2 :  ∀ n → suc ((a + n) ∸ a) ≡ suc ((n + a) ∸ a)
> test2 n =  cong (suc ∘ (_∸ a)) (+-comm a n)
>
>            -- cong suc (test1 n)
> ---------------------------------------------------------------
>
> The interactive type-checker highlights the expression
>                      cong (suc ∘ (_∸ a)) (+-comm a n)
>
> and hangs for a long time.
>
> Also  test2  type-checks fast if it is implemented as
> cong suc (test1 n).
>
> I can type-check the whole program with, say,  a = 7.
> But for a good run-time performance `a' needs to be large
> (and it relies on that the run-time arithmetic is built-in).
>
> Thanks,
>
> ------
> Sergei
>
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.chalmers.se/pipermail/agda/attachments/20180212/cb050aad/attachment.html>


More information about the Agda mailing list