[Agda] example with insertion to list

Sergei Meshveliani mechvel at botik.ru
Tue Feb 7 20:12:45 CET 2017


On Tue, 2017-02-07 at 14:35 +0100, G. Allais wrote:
> Hi Sergei,
> 
> For your proof to be accepted you need `aux` to reduce. You can
> achieve that by pattern-matching on `es` like so:
> 
> ========================================
> lemma2 e e' es ord-e'es e<e' with compare e e'
> lemma2 e e' []         ord-e'es e<e' | tri< _ _ _ = PE.refl
> lemma2 e e' (e'' ∷ es) ord-e'es e<e' | tri< _ _ _ = PE.refl
> ... | _ = anything
> ========================================


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




More information about the Agda mailing list