[CakeML] char literals

Ramana Kumar Ramana.Kumar at cl.cam.ac.uk
Tue Aug 25 04:07:02 UTC 2015


Character literals are just an addition to the REPL parser. All the rest
described below was, I believe, already available.

The REPL supports Char.ord and Char.chr, e.g.:

Char.chr 107;
val it:<char> = #"k"

(The full library available can be gleaned from
https://github.com/CakeML/cakeml/blob/master/semantics/initialProgram.lem)

Also, the translator supports characters, e.g.,:

> val upchr_def = ml_translatorLib.mlDefine`upchr n = CHR (n + (ORD #"A"))`;

WARNING: upchr has a precondition.

|- DeclAssum NONE scratch_decls_2 env tys ∧
   PRECONDITION (upchr_side v1) ⇒
   Eval env (Var (Short "upchr")) ((Eq NUM v1 --> CHAR) upchr)

val upchr_def =
   |- ∀n. upchr n = CHR (n + ORD #"A"):
   thm

In case you're interested, the side condition is:

|- ∀v1. upchr_side v1 ⇔ v1 + 65 < 256

and the code AST:

   Fun "v1"
     (App Chr
        [App (Opn Plus) [Var (Short "v1"); App Ord [Lit (Char #"A")]]])





On 25 August 2015 at 09:46, Konrad Slind <konrad.slind at gmail.com> wrote:

> Would that mean that the translator understands characters (Char.ord and
> Char.chr
> in particular)?
>
> Konrad.
>
>
> On Mon, Aug 24, 2015 at 6:30 PM, Ramana Kumar <Ramana.Kumar at cl.cam.ac.uk>
> wrote:
>
>> The version 1 beta of CakeML (available for download from
>> https://cakeml.org) now also supports character literals (thanks to
>> Michael for implementing them, and Yong Kiam for fixing proofs).
>>
>> _______________________________________________
>> Users mailing list
>> Users at cakeml.org
>> https://lists.cakeml.org/listinfo/users
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cakeml.org/pipermail/users/attachments/20150825/ae45a284/attachment.html>


More information about the Users mailing list