Agda 执行64位算术的正确方法是什么?

Agda 执行64位算术的正确方法是什么?,agda,Agda,我找到了64位浮点和32位有符号整数操作的原语。我没有找到64位无符号整数操作的原语。如果没有这些,在Agda上处理64位uint算法的正确方法是什么。(正好比我使用的版本高一个版本。) 增加了对内置64位机器字的支持 这些是在Agda.Builtin.Word中定义的,并带有两个与自然数进行转换的基本操作 Word64 : Set primWord64ToNat : Word64 → Nat primWord64FromNat : Nat → Word64 转换为自然数是一个简单的嵌入过

我找到了64位浮点和32位有符号整数操作的原语。我没有找到64位无符号整数操作的原语。如果没有这些,在Agda上处理64位uint算法的正确方法是什么。(正好比我使用的版本高一个版本。)

增加了对内置64位机器字的支持

这些是在Agda.Builtin.Word中定义的,并带有两个与自然数进行转换的基本操作

Word64 : Set
primWord64ToNat   : Word64 → Nat
primWord64FromNat : Nat → Word64
转换为自然数是一个简单的嵌入过程,从自然数转换得到的余数为模2^64。这些定理的证明不是原始的,但可以使用primTrustMe在库中定义

基本算术运算可以在Word64上定义,方法是转换为自然数,形成相应的运算,然后再转换回自然数。编译器将优化这些,以使用64位算术。比如说,

addWord : Word64 → Word64 → Word64
addWord a b = primWord64FromNat (primWord64ToNat a + primWord64ToNat b)

subWord : Word64 → Word64 → Word64
subWord a b = primWord64FromNat (primWord64ToNat a + 18446744073709551616 - primWord64ToNat b)
它们(在GHC后端)编译为Data.Word.Word64上的加减法