[Agda] Bezonas helpon !
Andreas Abel
abela at chalmers.se
Fri Aug 18 13:15:57 CEST 2017
Dear Serge,
> foldr″ c (n ∷ (x ∷ xs)) = c x (foldr″ c (n ∷ xs))
For the structural ordering (<), Agda sees that
(n :: xs) < (n :: (x :: xs)) iff xs < (x :: xs)
The latter holds since xs is a subterm of x :: xs.
> foldl″ c (n ∷ (x ∷ xs)) = foldl″ c (c n x ∷ xs)
This does not work since c n x is not a subterm of n or x.
> foldr‴ c (n ∷ (x ∷ xs)) = c x (foldr‴ c (*id* n ∷ xs))
Since Agda does not reduce call arguments during structural comparison,
this fails, as
id n is not the same as n
(syntactically).
> Andreas,unfortunately I really don't understand your explanation of the
> /length/ of the list!
My explanation was probably wrong.
On 17.08.2017 12:18, Serge Leblanc wrote:
> Sinceran dankon Andreas.
>
> I don't understand that the following function (foldr″) is well accepted
> while foldl″ is not?
> Mi ne komprenas kial la sekva funkcio (foldr″) trafas kvankam la
> funkciofoldl″ maltrafas?
>
> foldr″ : ∀ {a} {A : Set a} → (A → A → A) → List⁺ A → A
> foldr″ c (n ∷ []) = n
> foldr″ c (n ∷ (x ∷ xs)) = c x (foldr″ c (n ∷ xs))
>
> foldl″ : ∀ {a} {A : Set a} → (A → A → A) → List⁺ A → A
> foldl″ c (n ∷ []) = n
> foldl″ c (n ∷ (x ∷ xs)) = foldl″ c (c n x ∷ xs)
>
> Termination checking failed for the following functions: foldl″
>
> I also remarked that Agda rejects that:
> Mi ankaŭ remarkis ke agda malakceptas tion:
>
> foldr‴ : ∀ {a} {A : Set a} → (A → A → A) → List⁺ A → A
> foldr‴ c (n ∷ []) = n
> foldr‴ c (n ∷ (x ∷ xs)) = c x (foldr‴ c (*id* n ∷ xs))
> where
> open import Function using (id)
>
> Termination checking failed for the following functions:foldr‴
>
> Andreas,unfortunately I really don't understand your explanation of the
> /length/ of the list!
> Andreas, bedaûrinde mi vere ne komprenis vian klarigon pri la grandeco
> de la listo!
>
>
> On 2017-08-16 22:54, Andreas Abel wrote:
>> The function is structurally recursive on the /length/ of the list,
>> not on the list itself. You can expose the length by
>>
>> 1. using vectors instead of lists, or
>> 2. using sized lists (sized types).
>>
>> Alternatively, you can just define an auxiliary function first which
>> takes the first element of List+ as separate argument. Then the
>> recursion on the list goes through.
>>
>> Best,
>> Andreas
>>
>> On 16.08.2017 22:23, Serge Leblanc wrote:
>>> Thank you for your help.
>>>
>>> Why Agda refuses the following structurally decreasing function?
>>>
>>> foldl″ : ∀ {a} {A : Set a} → (A → A → A) → List⁺ A → A
>>> foldl″ c (n ∷ []) = n
>>> foldl″ c (n ∷ (x ∷ xs)) = foldl″ c (c n x ∷ xs)
>>>
>>> /home/serge/agda/Maximal.agda:47,1-49,50 Termination checking failed
>>> for the following functions: foldl″ Problematic calls: foldl″ c (c n
>>> x ∷ xs) (at /home/serge/agda/Maximal.agda:49,27-33)
>>>
>>> On 2017-08-14 20:55, Ulf Norell wrote:
>>>> The fact that foldr₁ is using a private recursive helper function
>>>> will likely make it impossible to prove your theorem.
>>>>
>>>> / Ulf
>>>>
>>>> On Mon, Aug 14, 2017 at 6:47 PM, Jesper Cockx <Jesper at sikanda.be
>>>> <mailto:Jesper at sikanda.be>> wrote:
>>>>
>>>> Maybe you can explain what approaches you have already tried and
>>>> why you got stuck? I think people would be more inclined to help
>>>> that way.
>>>>
>>>> To get you started on proof1, here's a hint: since you are proving
>>>> something about the functions foldr₁ and _⊔_, you can take a look
>>>> at their definitions and follow the same structure for your proof.
>>>> For example, since foldr₁ is defined in terms of the helper
>>>> function foldr, you probably also need to define a helper lemma
>>>> that proves a similar statement about foldr.
>>>>
>>>> Best regards,
>>>> Jesper
>>>>
>>>> 2017-08-14 18:33 GMT+02:00 Serge Leblanc <33dbqnxpy7if at gmail.com
>>>> <mailto:33dbqnxpy7if at gmail.com>>:
>>>>
>>>> Saluton, neniu bonvolas helpi min?
>>>>
>>>> Hi, nobody wants to help me?
>>>>
>>>>
>>>> On 2017-08-06 18:23, Serge Leblanc wrote:
>>>>> Dear All,
>>>>> I need help to finish these lemmas.
>>>>> They have the same meaning, I am right?
>>>>> All helpers are welcome!
>>>>>
>>>>> Estimata ĉiuj,
>>>>> Mi bezonas helpon por daŭrigi ci-tiuj pruvojn!
>>>>> Ĉu ili havas je la saman signifon! Ĉu mi pravas?
>>>>> Ĉiuj helpantoj estas bonvenaj!
>>>>>
>>>>> Sincere.
>>>>> -- Serge Leblanc
--
Andreas Abel <>< Du bist der geliebte Mensch.
Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden
andreas.abel at gu.se
http://www.cse.chalmers.se/~abela/
More information about the Agda
mailing list