rewrite and issue 1692 [Re: [Agda] aggressive with, VFPiA]

Andreas Abel abela at chalmers.se
Thu Jan 28 11:56:18 CET 2016


Dear Aaron,

I think I saw a unicorn last night.  (github has a sense of humor.)

If you add a file name e.g. "everything.aga" which imports all the files 
in your ial development, we could add running agda on "everything" to 
the testsuite, or to a bigger testsuite we run from time to time.

Cheers,
Andreas

On 28.01.2016 02:48, Aaron Stump wrote:
> Dear Andreas,
>
> Many thanks for the quick fix.  I will try the steps you suggested, as
> soon as github is operational again (there is an outage currently).
>
> About the current master: for me, it is no trouble if I have to make
> some changes from time to time with things like pragmas, in order for
> the IAL to continue to check with new Agda versions.  That is what I was
> trying to say in my first email: of course Agda is being actively
> developed and I do not demand that my library always work unchanged with
> it.  Only I am hoping to avoid major changes such as the one with "with"
> that you fixed already now for me (I will confirm tomorrow), which break
> something in a more fundamental way than infix directives and such.  I
>
> So maybe my request should have been, please to keep in mind the
> development branch of the IAL for big changes:
>
> svn co --username=guest --password=guest
> https://svn.divms.uiowa.edu/repos/clc/projects/agda/ial
>
> Of course, I will try to do so, too, but it might take me some time (as
> in this case) to upgrade and discover a problem.  We'll make it work... :-)
>
> Cheers, and thanks again for Agda,
> Aaron
>
> On 01/27/2016 04:45 PM, Andreas Abel wrote:
>> Dear Aaron,
>>
>> you are welcome!  Your agda files should now check again with the
>> current maintenance version (2.4.2.6)
>>
>>   https://github.com/agda/agda/tree/maint-2.4
>>
>> Get it with
>>
>>   git clone https://github.com/agda/agda.git
>>   cd agda
>>   git checkout maint-2.4
>>   make install-bin
>>
>> After that, you can use agda-2.4.2.6 on the command line or in emacs
>>
>>   M-x agda2-set-program version RET 2.4.2.6 RET
>>
>> Please confirm things work again for you.
>>
>> Note that your files do not check on current master (could be released
>> as agda-2.5).  This is due to changes in the operator parser.  Also,
>> some COMPILED pragmas have to be removed.
>>
>> Please evaluate the amount of breakage on master with
>>
>>   git checkout master
>>   make install-bin
>>
>> which gives you a new version of agda (no version appended) which you
>> activate with
>>
>>   M-x agda2-set-program version RET RET
>>
>> (always assuming .cabal/bin is in your PATH).
>>
>> Personally, I oppose the new operator parser, but please form your own
>> opinion.  It will likely be released anyway, so if you can add the
>> necessary fixity declarations before printing of your book, this might
>> be advisable.  Otherwise, try to protest again on this list.
>>
>> Cheers,
>> Andreas
>>
>>
>> On 27.01.2016 21:54, Aaron Stump wrote:
>>> Dear Andreas,
>>>
>>> Thanks for your fast, gracious, and also funny reply.  Sorry I did not
>>> manage to check on this earlier when you called for comments on the new
>>> "with".  I should have done that.  I really appreciate that you agree to
>>> do something to change the funny new behavior of rewrite.  I'll watch
>>> for an update about this once the decision has been reached on the exact
>>> fix.
>>>
>>> Cheers,
>>> Aaron
>>>
>>>
>>>
>>> On 01/27/2016 02:16 PM, Andreas Abel wrote:
>>>> Dear Aaron,
>>>>
>>>> thanks for your message and alerting us of more breakage.  The change
>>>> of `with` was triggered by
>>>>
>>>>   https://github.com/agda/agda/issues/1692
>>>>
>>>> where `rewrite` failed to meet the expectations.  The new with/rewrite
>>>> fails to meet yours and is apparently not backwards compatible.
>>>> However, this unfortunately only surfaced after the merge.  It would
>>>> have been helpful if you had responded to my earlier message
>>>>
>>>>   https://lists.chalmers.se/pipermail/agda/2015/008202.html
>>>>
>>>> where I asked for feedback on the new with.  Moreover, the plans to
>>>> change with/rewrite "have been on display at your local planning
>>>> department in Alpha Centauri for fifty of your Earth years so you’ve
>>>> had plenty of time to lodge any formal complaints and its far too late
>>>> to start making a fuss about it now." :) [D. Adams]
>>>>
>>>> More seriously, you complaint is a reasonable one and something has to
>>>> be done about this.  It seems to be easiest to change the rewrite
>>>> tactic such that
>>>>
>>>>   lemma f a p rewrite p = p
>>>>
>>>> behaves like
>>>>
>>>>   data Protect {a} {A : Set a} : A → Set where
>>>>     protect : ∀ x → Protect x
>>>>
>>>>   lemma : ∀ {A : Set} (f : A → A) (a : A) (p : f a ≡ a) → f (f a) ≡ a
>>>>   lemma f a p with protect p | f a | p
>>>>   ... | _ | _ | refl = p
>>>>
>>>> which works around the more aggressive with with the just invented
>>>> Protect Pattern (TM) (C) Andreas Abel, Gothenburg University, 2016.
>>>>
>>>> This change would unfix issue 1692 but hopefully fix both your book
>>>> and Wolfram Kahl's code.
>>>>
>>>> Comments, anyone?
>>>>
>>>> Cheers,
>>>> Andreas
>>>>
>>>> On 27.01.2016 19:52, Aaron Stump wrote:
>>>>> Dear Agda developers,
>>>>>
>>>>> Starting in Agda version 2.4.2.5, the abstraction performed by "with"
>>>>> has (as the CHANGELOG tells us) become more aggressive.  I am sure you
>>>>> have good reasons for this change, but are you aware that you have
>>>>> made
>>>>> it impossible to rewrite with the same assumption twice? Consider this
>>>>> self-contained example:
>>>>>
>>>>> module test where
>>>>>
>>>>> data _≡_ {ℓ} {A : Set ℓ} (x : A) : A → Set ℓ where
>>>>>    refl : x ≡ x
>>>>>
>>>>> {-# BUILTIN EQUALITY _≡_ #-}
>>>>> {-# BUILTIN REFL refl #-}
>>>>>
>>>>> lemma : ∀ {A : Set}(f : A → A)(a : A) → f a ≡ a → f (f a) ≡ a
>>>>> lemma f a p rewrite p = p
>>>>>
>>>>> With previous versions of Agda, this would be fine.  But starting with
>>>>> 2.4.2.5, this does not type check.  If we put a hole on the right-hand
>>>>> side of the sole equation for lemma, we will see this goal:
>>>>>
>>>>> Goal: f a ≡ a
>>>>> ————————————————————————————————————————————————————————————
>>>>> p  : a ≡ a
>>>>>
>>>>> The "rewrite p" directive has actually been applied to rewrite the
>>>>> type
>>>>> of p itself, rendering it trivial and hence useless.  This is a real
>>>>> problem.  I have maybe 25 places in the Iowa Agda Library that have
>>>>> been
>>>>> broken by this.  I don't mind fixing them, but I think this is a major
>>>>> flaw in the new way "with" works.  One should be able to reuse
>>>>> assumptions.  For the particular example above, I actually am
>>>>> struggling
>>>>> to find any workaround.  How would you prove this?  Maybe inspect on
>>>>> steroids is supposed to be used?  For what I have done, usually
>>>>> inspect
>>>>> has been enough.  But being able to apply an assumption twice with
>>>>> rewrite seems pretty fundamental.  This is not linear logic!
>>>>>
>>>>> There is a second issue I want to raise.  As you know (since Jesper
>>>>> and
>>>>> Ulf wrote me very helpful and quite detailed reviews), I am bringing
>>>>> out, with ACM Books, a textbook called "Verified Functional
>>>>> Programming
>>>>> in Agda" (VFPiA) this year.  The book is in the very last stages of
>>>>> proofs.  In the book, I refer readers to Agda 2.4.2.2 and IAL release
>>>>> 1.2:
>>>>>
>>>>> svn co --username=guest --password=guest
>>>>> https://svn.divms.uiowa.edu/repos/clc/projects/agda/ial-releases/1.2
>>>>>
>>>>> So, certainly the book is usable.  But this release does not check
>>>>> with
>>>>> Agda 2.4.2.5.  Furthermore, some of what I say in the book is
>>>>> invalidated by the fact that we cannot rewrite twice with the same
>>>>> assumption.
>>>>>
>>>>> Of course, whether the book is successful or not is not your
>>>>> responsibility, though by reviewing it for me, Ulf and Jesper have
>>>>> made
>>>>> some investment in its success.  But if you want to take advantage
>>>>> of my
>>>>> efforts here to help spread Agda to new users, it would be really a
>>>>> good
>>>>> idea if releases of Agda were compatible with IAL version 1.2. I do
>>>>> not
>>>>> do anything very exotic.  If there are changes to compiler pragmas,
>>>>> that
>>>>> is fine.  And of course, I hardly expect you to limit yourself to back
>>>>> compatibility with my library. But if you could at least consider
>>>>> whether changes you make are breaking this library (and hence, to some
>>>>> extent, breaking VFPiA), I would appreciate it, and I hope it would
>>>>> help
>>>>> the broader Agda community.
>>>>>
>>>>> Best wishes,
>>>>> Aaron
>>>>> _______________________________________________
>>>>> Agda mailing list
>>>>> Agda at lists.chalmers.se
>>>>> https://lists.chalmers.se/mailman/listinfo/agda
>>>>
>>>>
>>>
>>
>

-- 
Andreas Abel  <><      Du bist der geliebte Mensch.

Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden

andreas.abel at gu.se
http://www2.tcs.ifi.lmu.de/~abel/


More information about the Agda mailing list