[Agda] Semigroup.Carrier in 2.3.2
Serge D. Mechveliani
mechvel at botik.ru
Mon Dec 31 18:09:00 CET 2012
Thank you very much.
I shall try, and see.
Agda looks good.
Regards,
------
Sergei
On Mon, Dec 31, 2012 at 08:17:14AM +0100, Andreas Abel wrote:
> Agda 2.3.2 has the new feature of sections (anonymous modules) you
> could make use of. It allows you to write the type signatures
> without painful lets.
>
> In your case:
>
> module _ {c l : Level}{H : Semigroup c l} where
> open Semigroup {{...}}
>
> -- Power x to a positive degree e. The binary method.
> powerToPositive : (x : Carrier) (e : ???) -> e > 0 -> Carrier
> powerToPositive x e e>0 = pow e e e>0
> where
> pow : (cnt : ???) (e : ???) -> e > 0 -> Carrier
> -- cnt is the counter used in termination proof
>
> Instance search succeeds in this case, but if you are want to open
> Semigroup locally only anyway, you could also directly write
>
> open Semigroup H
>
> which is both clearer for the reader and for Agda. ;-)
>
> Cheers,
> Andreas
>
> On 30.12.12 5:14 PM, Serge D. Mechveliani wrote:
> >On Tue, Dec 25, 2012 at 09:26:00AM +0100, Andreas Abel wrote:
> >>Instance search is experimental, so it is likely not all things work
> >>the same.
> >>
> >>Could you please attach a test case I can try directly without have
> >>to do imports, renaming etc.?
> >
> >
> >See the attachment to this letter: Main.agda.zip.
> >
> >The first variant there works under Agda-2.3.0.1
> >but not under Agda-2.3.2.
> >
> >The second variant is commented out,
> >it "fixes" the code for 2.3.2 by making the argument explicit.
> >
> >Which Agda version is more correct at this point?
> >
> >Regards,
> >
> >------
> >Sergei
> >
> >
> >>On 23.12.12 12:09 PM, Serge D. Mechveliani wrote:
> >>>People,
> >>>this program is accepted in by Agda-2.3.0.1
> >>>and rejected by Agda-2.3.2 :
> >>>
> >>>---------------------------------------------------------------
> >>>powerToPositive : {c l : Level} -> {H : Semigroup c l} ->
> >>> let C = Semigroup.Carrier H in C -> (e : Nat) -> e > 0 -> C
> >>>--
> >>>-- Power x to a positive degree e. The binary method.
> >>>
> >>>powerToPositive x e e>0 = pow e e e>0
> >>> where
> >>> open Semigroup {{...}}
> >>> pow : Nat -> (e : Nat) -> e > 0 -> Carrier
> >>> -- cnt is the counter used in termination proof
> >>>
> >>> pow 0 _ _ = x
> >>> pow _ 0 ()
> >>> pow _ (suc 0) _ = x
> >>> pow (suc cnt) (suc (suc e)) _ =
> >>> (if even? e then p * p else (p * p) * x)
> >>> where
> >>> half = suc $ quot2 e
> >>> p = pow cnt half $ positiveHalf? e
> >>>---------------------------------------------------------------
> >>>
> >[..]
> >
>
> --
> Andreas Abel <>< Du bist der geliebte Mensch.
>
> Theoretical Computer Science, University of Munich
> Oettingenstr. 67, D-80538 Munich, GERMANY
>
> andreas.abel at ifi.lmu.de
> http://www2.tcs.ifi.lmu.de/~abel/
>
More information about the Agda
mailing list