[Agda] example with insertion to list
G. Allais
guillaume.allais at ens-lyon.org
Wed Feb 8 14:56:27 CET 2017
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.
================================================================
aux : (e : E) (es0 : List E) → DecrOrdered es0 → (∃ \h → deg' h ≤ suc e
⊔ (hdExp' es0))
aux e [] _ = (monPol e , leq) where
leq : suc e ≤ suc e ⊔ 0
leq = proj₁ (both≤⊔ (suc e) 0)
aux e (e' ∷ es) ord-e'es with compare e e'
... | tri> _ _ e>e' = (pol′ (e ∷ e' ∷ es) ord-ee'se , leq)
where
leq : suc e ≤ suc e ⊔ (suc e')
leq = proj₁ (both≤⊔ (suc e) (suc e'))
postulate ord-ee'se : DecrOrdered (e ∷ e' ∷ es)
... | tri< e<e' _ _ = (pol′ (e' ∷ esG) ord-e'esG , leq)
where
ord-es : DecrOrdered es
ord-es = tailDecrOrdered ord-e'es
esG = Pol.exps (proj₁ (aux e es ord-es))
leq : (suc e') ≤ suc e ⊔ (suc e')
leq = proj₂ (both≤⊔ (suc e) (suc e'))
postulate ord-e'esG : DecrOrdered (e' ∷ esG)
... | tri≈ _ e≡e' _ = (pol′ (e ∷ es) ord-ees , leq)
-- here e is contrived
where
e'es≡ees : e' ∷ es ≡ e ∷ es
e'es≡ees = PE.cong (_∷ es) (PE.sym e≡e')
ord-ees : DecrOrdered (e ∷ es)
ord-ees = PE.subst DecrOrdered e'es≡ees ord-e'es
leq : suc e ≤ suc e ⊔ (suc e')
leq = proj₁ (both≤⊔ (suc e) (suc e'))
extMon+ : (e : E) → (f : Pol) → (∃ \h → deg' h ≤ (suc e) ⊔ (deg' f))
extMon+ e (pol′ es ord) = aux e es ord
================================================================
On 07/02/17 20:12, Sergei Meshveliani wrote:
> 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
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.chalmers.se/pipermail/agda/attachments/20170208/227599d0/attachment.sig>
More information about the Agda
mailing list