[CakeML-dev] translating i2w

Magnus Myreen magnus.myreen at gmail.com
Thu Dec 1 22:30:39 UTC 2016


I'll look into adding i2w support to the translator. -- Magnus

On 2 December 2016 at 07:39, Yong Kiam <tanyongkiam at gmail.com> wrote:

> You can force the i2w to go through using this if changing the parser to
> use n2w is not possible:
>
> val elit_rw = Q.prove(`
>   (i < 0 ⇒ -n2w (Num (-i)) = -n2w (Num (ABS i))) ∧
>   (¬(i < 0) ⇒ n2w (Num i) = n2w (Num (ABS i)))`,
>   rw[]
>   >-
>     (simp[Once (GSYM integerTheory.INT_ABS_NEG)]>>
>     `0 ≤ (-i)` by intLib.COOPER_TAC>>
>     metis_tac[integerTheory.INT_ABS_EQ_ID])
>   >>
>     `0 ≤ i` by intLib.COOPER_TAC>>
>     fs[GSYM integerTheory.INT_ABS_EQ_ID]);
>
> val _ = translate (def_of_const ``ptree_Eliteral`` |> SIMP_RULE
> std_ss[integer_wordTheory.i2w_def,elit_rw,word_2comp_def] |> CONV_RULE
> wordsLib.WORD_EVAL_CONV)
>
> The i2w becomes something like this:
>
> (if i < 0 then
>   n2w
>     (18446744073709551616 −
>      if
>        Num (ABS i) < 18446744073709551616
>      then
>        Num (ABS i)
>      else
>        Num (ABS i) MOD 18446744073709551616)
> else n2w (Num (ABS i)))
>
> (there are special rewrites for Num(ABS i) in the translator)
>
> On Thu, Dec 1, 2016 at 11:55 AM, Yong Kiam <tanyongkiam at gmail.com> wrote:
>
>> Changing it to use n2w should work. I don't think I have ran into i2w in
>> translation before though.
>>
>> Presumably, this is at a fixed word width so you will want to simplify
>> word_2comp away.
>>
>> BTW, are you fixing / have you fixed lexerProg? I could do it.
>>
>> It's probably failing because of ARBs in toNum and num_from_hex_string,
>> see: https://github.com/CakeML/cakeml/commit/4347e06c12533161d931
>> 1e761e4dbcdb1bd93810
>>
>> On Thu, Dec 1, 2016 at 6:34 AM, Ramana Kumar <Ramana.Kumar at cl.cam.ac.uk>
>> wrote:
>>
>>> I don't think you should translate i2w - can you make your code use
>>> n2w instead? The translator should be able to handle n2w.
>>> (I say this because looking at the translator's hol2deep function I
>>> see it has a case for n2w but not for i2w.)
>>>
>>> On 1 December 2016 at 21:44,  <Michael.Norrish at data61.csiro.au> wrote:
>>> > I’m breaking the build on my branch because the parser wants to turn
>>> word token integers into word64 values.  I used the i2w constant to do
>>> this, but the translator isn’t happy with word_2comp, which is used in this
>>> definition. Is there something obvious I should do to fix this?
>>> >
>>> > Or can I use n2w instead by altering the Word token constructor to
>>> take a num instead of an int?
>>> >
>>> > Michael
>>> >
>>> > _______________________________________________
>>> > Developers mailing list
>>> > Developers at cakeml.org
>>> > https://lists.cakeml.org/listinfo/developers
>>>
>>> _______________________________________________
>>> Developers mailing list
>>> Developers at cakeml.org
>>> https://lists.cakeml.org/listinfo/developers
>>>
>>
>>
>
> _______________________________________________
> Developers mailing list
> Developers at cakeml.org
> https://lists.cakeml.org/listinfo/developers
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.cakeml.org/pipermail/developers/attachments/20161202/6740ef71/attachment.html>


More information about the Developers mailing list