[Agda] example with insertion to list
Andrea Vezzosi
sanzhiyan at gmail.com
Sat Feb 11 13:44:48 CET 2017
Here's the issue
https://github.com/agda/agda/issues/2455
On Fri, Feb 10, 2017 at 6:37 PM, Andrea Vezzosi <sanzhiyan at gmail.com> wrote:
> 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