[Agda] "with .. postulate"

Andreas Abel andreas.abel at ifi.lmu.de
Tue Mar 5 18:05:21 CET 2013


It seems like the story is the following

The original goal of totalInv-sub is

   justYes? (invMb-sub a') ≡ true

which normalizes to

   justYes?
   (.Where._.invMb-sub upMon extSubDSet .Where._._.extSubsemig
    .Where._._.member-ε a'
    | Monoid.invMb Mon (repr a')) ≡ true

Since you with-abstract over

  invMb (repr a')

which normalizes to

   Monoid.invMb Mon (repr a')

this expression is replaced in your goal by the match

   just (yes (i , iProofs))

so the goal becomes

   justYes?
   (.Where._.invMb-sub upMon extSubDSet .Where._._.extSubsemig
    .Where._._.member-ε a'
    | just (yes (i , iProofs))) ≡ true

which further normalizes to

   justYes?
       (just
        (.Where._.decInv-sub upMon extSubDSet .Where._._.extSubsemig
         .Where._._.member-ε (repr a') (member-repr a') (i , iProofs)
         | (member? ⟨$⟩ i) Data.Bool.≟ true))
       ≡ true

You can see this if you replace the rejected attempt "afterInv" by a ?

But the type of postulate afterInv is

   justYes? (invMb-sub a') ≡ true

which normalizes to

   justYes?
       (.Where._.invMb-sub upMon extSubDSet .Where._._.extSubsemig
        .Where._._.member-ε a'
        | Monoid.invMb Mon (repr a'))
       ≡ true

and this is not convertible with the type of your goal.

How to get out of this?

1. Do not use with in this case, but define your own auxiliary function 
that lets you match on (invMb (repr a')).

Internally, Agda translates every 'with' into an auxiliary function, 
using a heuristic to abstract over the 'with'-expressions in the goal. 
Sometimes the heuristic does not do what you expect, e.g., in your case.

2. Use some tricks that prevent Agda from normalizing so far (which is 
further than you want it).  Ask the list for these tricks, or the people 
in the chat, I have not used them.

Hope this helps.

Cheers,
Andreas

On 05.03.2013 16:18, Serge D. Mechveliani wrote:
> On Sun, Mar 03, 2013 at 08:25:44AM +0100, Andreas Abel wrote:
>> Sorry, I cannot explain this, because I cannot run your example
>> (incomplete). --Andreas
>>
>
>
>      http://botik.ru/pub/local/Mechveliani/agdaNotes/rep.zip
>
> contains the precise  Main.agda  and  readme.agda
> (please, read first  readme.agda).
> I am sorry: the proggram is large.
> I tried to present a small example, but have failed.
> Of course, it can be reduced, say, 10 times, but this would need a
> considerable effort.
> It looks like I am currently stuck in my attempt to write a library.
>
> Thank you in advance for help,
>
> -------
> Sergei
>
>
>
>> On 02.03.13 10:43 AM, Serge D. Mechveliani wrote:
>>> Dear all,
>>> the attachement  t.agda.zip
>>>
>>> contains a small code example where the same declaration of kind
>>>                                          postulate p : <signature>
>>> is taken in   Agda-2.3.2 MAlonzo
>>> as a correct type for  p  or not  -- depending on whether  p  is set
>>> directly after ` = ' or in the last branch for `with'.
>>>
>>> Can you, please, explain this?
>>>
>>>
>>>
>>> _______________________________________________
>>> Agda mailing list
>>> Agda at lists.chalmers.se
>>> https://lists.chalmers.se/mailman/listinfo/agda
>>>
>>
>> --
>> Andreas Abel  <><      Du bist der geliebte Mensch.
>>
>> Theoretical Computer Science, University of Munich
>> Oettingenstr. 67, D-80538 Munich, GERMANY
>>
>> andreas.abel at ifi.lmu.de
>> http://www2.tcs.ifi.lmu.de/~abel/
>> 	
>


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

Theoretical Computer Science, University of Munich
Oettingenstr. 67, D-80538 Munich, GERMANY

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


More information about the Agda mailing list