[Agda] Bezonas helpon !

Sergei Meshveliani mechvel at botik.ru
Thu Aug 17 20:02:44 CEST 2017


On Thu, 2017-08-17 at 12:18 +0200, Serge Leblanc wrote:

> [..]
> Andreas, unfortunately I really don't understand your explanation of
> the /length/ of the list!


Concerning using  (length xs)  in addition to  xs : List C:

as to me, I sometimes I use  (length xs)  as a counter that helps to
prove termination for some functions on  List C.
For example, Agda did not see termination in my merge sorting. So I use
the counter (cnt): 

--------------------------------------------------------------------
sort : (xs : List C) → SortRes xs
sort xs =
        aux xs (length xs) (≤n-refl PE.refl)
  where
  aux : (xs : List C) → (cnt : ℕ) → length xs ≤n cnt → SortRes xs

  -- The counter  cnt  is used for termination proof.

  aux []       _ _ = sortRes [] nil (=ms-refl {∅})
  aux (x ∷ []) _ _ = sortRes (x ∷ []) (single x)
                                        (=ms-refl {singleMS (x , 1)})

  aux (_ ∷ _ ∷ zs) 0 2+|zs|≤0 =  ⊥-elim $ ≤→≯ 2+|zs|≤0 2+|zs|>0
                                 where
                                 2+|zs|>0 : 2 + (length zs) >n 0
                                 2+|zs|>0 = suc>0

  aux (x ∷ y ∷ zs) (suc cnt) |x:y:zs|≤scnt =
    let
      (sortRes lList ord-lList toMS-ls=ms=toMS-lList) =
                                                   aux ls cnt |ls|≤cnt
      ...
      ...
    in
    sortRes ys ord-ys <x:y:zs>=ms=<ys>
--------------------------------------------------------------------

The counter steps from  (suc cnt)  to  cnt,  and it always holds
(length currentList) ≤ (length currentList).
This helps Agda to see termination.

For some reason (unknown to me) Agda easier sees termination when the
argument is built by the  suc  constructor rather than _∷_. 

------
Sergei

 
> > 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 
> > > > > 
> > > > > ------------------------------------------------------------------------ 
> > > > >         gpg --search-keys 0x67B17A3F 
> > > > >         Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631
> > > > > 67B1 7A3F 
> > > > 
> > > >         --         Serge Leblanc 
> > > > 
> > > > ------------------------------------------------------------------------ 
> > > >         gpg --search-keys 0x67B17A3F 
> > > >         Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631
> > > > 67B1 7A3F 
> > > > 
> > > >         _______________________________________________ 
> > > >         Agda mailing list 
> > > >         Agda at lists.chalmers.se <mailto:Agda at lists.chalmers.se> 
> > > >         https://lists.chalmers.se/mailman/listinfo/agda 
> > > >         <https://lists.chalmers.se/mailman/listinfo/agda> 
> > > > 
> > > > 
> > > > 
> > > >     _______________________________________________ 
> > > >     Agda mailing list 
> > > >     Agda at lists.chalmers.se <mailto:Agda at lists.chalmers.se> 
> > > >     https://lists.chalmers.se/mailman/listinfo/agda 
> > > >     <https://lists.chalmers.se/mailman/listinfo/agda> 
> > > > 
> > > > 
> > > 
> > > -- 
> > > Serge Leblanc 
> > > ------------------------------------------------------------------------ 
> > > gpg --search-keys 0x67B17A3F 
> > > Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F 
> > > 
> > > 
> > > _______________________________________________ 
> > > Agda mailing list 
> > > Agda at lists.chalmers.se 
> > > https://lists.chalmers.se/mailman/listinfo/agda 
> > > 
> > 
> > 
> 
> -- 
> Serge Leblanc 
> ______________________________________________________________________
> gpg --search-keys 0x67B17A3F 
> Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda




More information about the Agda mailing list