[Agda] Some problems with K-S basis
G. Allais
guillaume.allais at ens-lyon.org
Mon Jul 24 13:32:32 CEST 2017
> How to bring there typed combinators, typed lambdas, I do not know.
> May be, people can explain.
Dybjer and Coquand have a really nice paper about normalisation
by evaluation for pure typed combinatory logic:
http://www.cse.chalmers.se/~peterd/papers/GlueingTypes93.pdf
On 24/07/17 13:22, Sergei Meshveliani wrote:
> On Mon, 2017-07-24 at 18:32 +1000, v0id_NULL wrote:
>> Dear list,
>> Help me, please. I try to deal with combinatory logic via Agda, but I
>> have some problems with defining of K-combinator. If I define K and S
>> combinators like this
>>
>>
>> K : {a b : _} → {A : Set a} → {B : Set b} → A → B → A
>> K x _ = x
>>
>>
>> S : {a b c : _} → {A : Set a} → {B : Set b} → {C : Set c} → (A → B →
>> C) → (A → B) → A → C
>> S x y z = x z (y z)
>>
>>
>> this leads to that Agda can not solve some constrains in this
>> definition of I-combinator
>>
>>
>> I : {ℓ : _} → {A : Set ℓ} → A → A
>> I = S K K
>>
>
> I am not sure,
> but I suspect that if we represent the combinators as Agda functions of
> types like (A → B → A), (A → B → C) → (A → B) → A → C),
> and such, this will mean that Agda is required to assign correct types
> to the algorithms representing combinators.
> But is this at all possible?
> Can Agda correctly assign a type to the Y combinator, if combinators are
> expressed as the above functions?
>
> Can anybody, please, make it clear?
>
> I see the following safe construct:
>
> -----------------------------------------------------
> open import Function using (case_of_)
> open import Relation.Binary using (Rel)
> open import Data.Maybe using (Maybe; just; nothing)
>
> data KS-term : Set
> where
> K : KS-term
> S : KS-term
> app : KS-term → KS-term → KS-term -- application
>
> I : KS-term -- I combinator
> I = app (app S K) K
>
> step : KS-term → Maybe KS-term -- one step of evaluation
>
> step (app (app K x) _) = just x
> step (app (app (app S x) y) z) = just (app (app x z) (app y z))
> step t = nothing
> -- t is in normal form
> --------------------------------------------------------------------
>
> (I do not recall now, are the K-S things correctly written?).
>
>
> {- this must not terminate, for some arguments:
>
> evaluate : KS-term → KS-term
> evaluate t = case step t of \ { nothing → t
> ; (just u) → evaluate u }
> -}
>
>
>> Generaly, tell me, please, is it good idea to implement something like
>> combinatory logic via Agda?
>>
>
> Also it is possible to express in Agda the equivalence relation _=ks_
> for (s t : KS-term).
> t =ks u when there are given the sequences steps1 and steps2 of steps
> like `step' above, such that applying steps1 to t yields the same term
> as applying steps2 to u. And may be, a step needs to be applied to a
> subterm, not necessarily at top.
>
> In this model, one could develop some prover that would solve
> equivalence of functional programs (in untyped model, though) for easy
> examples, and would fail in complex cases.
>
> How to bring there typed combinators, typed lambdas, I do not know.
> May be, people can explain.
>
> Also, may be, there also exist some Agda libraries for combinatory
> logic?
>
> How to bring there typed combinators, typed lambdas, I do not know.
> May be, people can explain.
>
> Anyway, the main thing here is to formulate clearly for oneself:
> what is the goal of the project.
>
> ------
> Sergei
>
> _______________________________________________
> 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/20170724/e0c4eee9/attachment.sig>
More information about the Agda
mailing list