[Agda] example with insertion to list

Andrea Vezzosi sanzhiyan at gmail.com
Fri Feb 10 18:37:20 CET 2017


You can get the version with the inequality proof to accept the
PE.refl proof by not using "se" in the type of aux.

There's an analysis that tries to figure out whether aux depends on
the extra arguments it gets by being defined inside extMon+, and the
use of "se" is fooling the analysis here.

This should be reported as a bug, but I will try to shrink the test case first.

Best,
Andrea

On Wed, Feb 8, 2017 at 10:12 PM, Sergei Meshveliani <mechvel at botik.ru> wrote:
> On Wed, 2017-02-08 at 14:56 +0100, G. Allais wrote:
>> You're right! If we hoist the definition of `aux` out of the where
>> clause then the PE.refl proof without pattern-matching goes through.
>> It's very strange.
>> [..]
>
>
> Please, see a simplified version  Debug-feb8-2017.agda  attached.
> It avoids adding the inequality proof.
> And there Agda type-checks the proof for lemma2 that does not match
> against the list:
>
> --------------------------------------------------------------------
> lemma2 : ∀ e e' es → (ord-e'es : DecrOrdered (e' ∷ es)) → e < e' →
>                 let
>                   f = pol′ (e' ∷ es) ord-e'es
>
>                   ord-es : DecrOrdered es
>                   ord-es = tailOrdered ord-e'es
>
>                   f' = pol′ es ord-es
>                 in
>                 Pol.exps (mon+ e f) ≡ e' ∷ (Pol.exps (mon+ e f'))
>
> lemma2 e e' es ord-e'es e<e'  with compare e e'
> ...
>     | tri< _    _ _ = PE.refl
> ... | tri≈ e≮e' _ _ = ⊥-elim (e≮e' e<e')
> ... | tri> e≮e' _ _ = ⊥-elim (e≮e' e<e')
> --------------------------------------------------------------------
>
> I do not understand why does not it type-check
> Debug-feb4-2017.agda  similarly.
>
>
>
>> > Guillaume, thank you very much for the fix.
>> >
>> > Indeed,  aux  has [] among its patterns.
>> > Further, the goal of  lemma2  is about  (mon+ e f),  which calls for
>> > (aux (e' ∷ es) ...),
>> > so that the argument for  aux  is given as non-empty.
>> > And I have an impression that the goal lhs
>> >
>> >   Pol.exps (mon+ e f)
>> >
>> > is converted by normalization to
>> >
>> >   Pol.exps (mon+ e (pol′ (e' ∷ es) ord-e'es)),
>> >
>> > I thought that, hence, the pattern of [] is not needed in  lemma2.
>> > And further normalization must give the goal rhs
>> >
>> >   e' ∷ (Pol.exps (mon+ e f')).
>> >
>> > Your program is type-checked.
>> > And I do not understand, so far, why the initial program is not
>> > type-checked.
>> > With such intuition, I shall probably have further difficulties in
>> > composing proofs.
>> > Either I need to fix intuition, or Agda needs to fix normalization.
>> >
>> > Regards,
>> >
>> > ------
>> > Sergei
>> >
>> >>
>> >> On 07/02/17 14:21, Sergei Meshveliani wrote:
>> >>> On Tue, 2017-02-07 at 15:20 +0300, Sergei Meshveliani wrote:
>> >>>> Please,
>> >>>>
>> >>>> can anybody fix the proof for  lemma2  in the attached code
>> >>>> (about 140 lines) ?
>> >>>>
>> >>>> It is about a certain insertion of a natural into a decreasingly ordered
>> >>>> list of naturals. Such a list is called  Pol.
>> >>>> Insertion of  e  into  es  is according to _>_, and it is without
>> >>>> copying, that is when  es  contains any  e' ≡ e,  the result is  es.
>> >>>>
>> >>>> Insertion is called  mon+.
>> >>>> lemma1 and lemma2  are certain two very simple statements about
>> >>>> insertion of  e  into  (e' ∷ es)  for  e < e'.
>> >>>>
>> >>>> lemma1  is for the case of  es = [].  And it is proved trivially.
>> >>>>
>> >>>> And a similar proof for  lemma2  is not type-checked (in Agda 2.5.2).
>> >>>> Moreover, I do not find any proof to satisfy Agda.
>> >>>>
>> >>>> Maybe, this is a bug in Agda?
>> >>>
>> >>>
>> >>> In this code, the  Max  structure and inequality are brought there to
>> >>> mon+ and extMon+  in order to prove termination.
>> >>> This complicates  mon+,  and proof search for its properties.
>> >>>
>> >>> mon+  can be greatly simplified by introducing `insert' for insertion of
>> >>> e  into  es  without providing a proof in recursion,
>> >>> and then, by adding a proof for
>> >>>                       DecrOrdered es -> DecrOrdered (insert e es).
>> >>>
>> >>> I hope, there  lemma2  will be easier to prove.
>> >>>
>> >>> Still:  what can be a proof for Agda for the original implementation of
>> >>> mon+ ?
>> >>>
>> >>> Regards,
>> >>>
>> >>> ------
>> >>> Sergei
>> >>>
>> >>> _______________________________________________
>> >>> Agda mailing list
>> >>> Agda at lists.chalmers.se
>> >>> https://lists.chalmers.se/mailman/listinfo/agda
>> >>>
>> >>
>> >> _______________________________________________
>> >> Agda mailing list
>> >> Agda at lists.chalmers.se
>> >> https://lists.chalmers.se/mailman/listinfo/agda
>> >
>> >
>>
>
>
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda
>


More information about the Agda mailing list