- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我(为了好玩?)尝试在 Idris 中完成所有如何证明。我需要的属性之一是整数的全排序。 idris 已经有了data.ZZ提供基于归纳的整数的模块。我需要添加类似于 Nat 的 LTE 的类型。我似乎无法让自己相信我的实现是正确的(或者 LTE 在这方面是正确的)。如何“检查”我正在处理的 LTEZZ
数据类型是否有效?如何检查 (LTE 4 3)
是否无效?
示例代码如下:
%default total
||| Proof the a is <= b
||| a is the smaller number
||| b is the larger number
data LTEZZ : (a : ZZ) -> (b : ZZ) -> Type where
||| Zero is less than any positive
LTEZero : LTEZZ (Pos Z) (Pos right)
||| If both are positive, and n <= m, n+1 <= m+1
LTEPosSucc : LTEZZ (Pos left) (Pos right) -> LTEZZ (Pos (S left)) (Pos (S right))
||| Negative is always less than positive, including zero
LTENegPos : LTEZZ (NegS left) (Pos right)
||| If both are negative and n <= m, n-1 <= m-1
LTENegSucc: LTEZZ (NegS (S left)) (NegS (S right)) -> LTEZZ (NegS left) (NegS right)
Uninhabited (LTEZZ (Pos n) (NegS m)) where
uninhabited LTENegPos impossible
Uninhabited (LTEZZ (Pos (S n)) (Pos Z)) where
uninhabited LTEZero impossible
最佳答案
首先,LTE
将 Nat
转换为全序,如果您关注 this link,您就会看到这一点。 .
但是 LTEZZ
并没有达到预期目的。检查它的方法之一是证明 total order 的属性使用定义。但对于 LTEZZ
来说,您将无法例如证明自反性。
这是修复它的一种方法:
data LTEZZ : (a : ZZ) -> (b : ZZ) -> Type where
||| Zero is less than any positive
LTEZero : LTEZZ (Pos Z) (Pos right)
||| If both are positive, and n <= m, n+1 <= m+1
LTEPosSucc : LTEZZ (Pos left) (Pos right) -> LTEZZ (Pos (S left)) (Pos (S right))
||| Negative is always less than positive, including zero
LTENegPos : LTEZZ (NegS left) (Pos right)
||| -1 is the greatest negative number
LTEMinusOne : LTEZZ (NegS left) (NegS Z)
||| If both are negative and n <= m, then n-1 <= m-1
LTENegSucc: LTEZZ (NegS left) (NegS right) -> LTEZZ (NegS (S left)) (NegS (S right))
我添加了 -1
的情况,并修复了 LTENegSucc
的情况(您希望在每个递归步骤结构上使参数更小,只需就像LTEPosSucc
)。
导入和一些辅助引理:
import Data.ZZ
import Decidable.Order
%default total
||| A helper lemma treating the non-negative integers.
lteLtezzPos : m `LTE` n -> Pos m `LTEZZ` Pos n
lteLtezzPos LTEZero = LTEZero
lteLtezzPos (LTESucc x) = LTEPosSucc (lteLtezzPos x)
||| A helper lemma treating the negative integers.
lteLtezzNegS : m `LTE` n -> NegS n `LTEZZ` NegS m
lteLtezzNegS LTEZero = LTEMinusOne
lteLtezzNegS (LTESucc x) = LTENegSucc (lteLtezzNegS x)
自反性:
||| `LTEZZ` is reflexive.
ltezzRefl : z `LTEZZ` z
ltezzRefl {z = (Pos n)} = lteLtezzPos lteRefl
ltezzRefl {z = (NegS n)} = lteLtezzNegS lteRefl
传递性:
||| `LTEZZ` is transitive.
ltezzTransitive : a `LTEZZ` b -> b `LTEZZ` c -> a `LTEZZ` c
ltezzTransitive LTEZero LTEZero = LTEZero
ltezzTransitive LTEZero (LTEPosSucc _) = LTEZero
ltezzTransitive (LTEPosSucc x) (LTEPosSucc y) = LTEPosSucc (ltezzTransitive x y)
ltezzTransitive LTENegPos LTEZero = LTENegPos
ltezzTransitive LTENegPos (LTEPosSucc x) = LTENegPos
ltezzTransitive LTEMinusOne LTENegPos = LTENegPos
ltezzTransitive LTEMinusOne LTEMinusOne = LTEMinusOne
ltezzTransitive (LTENegSucc x) LTENegPos = LTENegPos
ltezzTransitive (LTENegSucc x) LTEMinusOne = LTEMinusOne
ltezzTransitive (LTENegSucc x) (LTENegSucc y) = LTENegSucc (ltezzTransitive x y)
反对称性:
||| `LTEZZ` is antisymmetric.
ltezzAntisymmetric : a `LTEZZ` b -> b `LTEZZ` a -> a = b
ltezzAntisymmetric LTEZero LTEZero = Refl
ltezzAntisymmetric (LTEPosSucc x) (LTEPosSucc y) =
rewrite (posInjective (ltezzAntisymmetric x y)) in Refl
ltezzAntisymmetric LTEMinusOne LTEMinusOne = Refl
ltezzAntisymmetric (LTENegSucc x) (LTENegSucc y) =
rewrite (negSInjective (ltezzAntisymmetric x y)) in Refl
总数:
||| `LTEZZ` is total.
ltezzTotal : (a : ZZ) -> (b : ZZ) -> Either (LTEZZ a b) (LTEZZ b a)
ltezzTotal (Pos k) (Pos j) with (order {to=LTE} k j)
ltezzTotal (Pos k) (Pos j) | (Left pf) = Left $ lteLtezzPos pf
ltezzTotal (Pos k) (Pos j) | (Right pf) = Right $ lteLtezzPos pf
ltezzTotal (Pos k) (NegS j) = Right LTENegPos
ltezzTotal (NegS k) (Pos j) = Left LTENegPos
ltezzTotal (NegS k) (NegS j) with (order {to=LTE} k j)
ltezzTotal (NegS k) (NegS j) | (Left pf) = Right $ lteLtezzNegS pf
ltezzTotal (NegS k) (NegS j) | (Right pf) = Left $ lteLtezzNegS pf
关于idris - LTE 整数 (ZZ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46066253/
所以我正在研究一个基本的 RSA 解密程序,我试图弄清楚如何在字符串和 ZZ 之间进行转换。我看过以下问题:How can i convert a string into a ZZ number? ,
在 Android KitKat 中,如果我选择“设置”>“语言和输入法”>“语言”,我得到的第一个选择是 [Developer] Accent English。这会将每个罗马字母替换为重音版本。您可
我(为了好玩?)尝试在 Idris 中完成所有如何证明。我需要的属性之一是整数的全排序。 idris 已经有了data.ZZ提供基于归纳的整数的模块。我需要添加类似于 Nat 的 LTE 的类型。我似
我正在使用 NTL library实现 ElGamal 加密/解密算法。我已经知道它可以正常工作了,但是算法希望将消息转换为整数,以便对其进行加密。 因此,如果我输入像 1234 这样的数字,一切正常
我正在使用 NTL 库来实现我的代码,我必须将 ZZ 数字转换为二进制,然后从中取出一个子字符串并将该子字符串转换为十进制。我该怎么做? ZZ N; unsigned char pp[200]; By
当前两个字符等于zz 或ZZ 时,我想删除所有文件。我该怎么做? 最佳答案 从名称以'zz'开头的路径中获取所有对象(包括隐藏的,递归的),过滤掉目录对象并删除项目。 Get-ChildItem -
当我跳转到世界上的任何地方后,无论是在当前文件还是其他文件中,是否可以让 vim 自动运行 zz (重新居中于当前行)? 我希望在搜索、ctrl-o 和 ctrl-i 等操作之后执行此操作...以及除
是否可以使用 PHP 获取从 A 到 ZZ* 的范围? a b c ... aa ... zx zy zz 对我来说这不起作用: range('A', 'ZZ'); 它用于 PHPExcel,当它给出
我正在尝试禁用 ZZ在 vim 中映射,因为我发现自己在尝试使用 >> 时不小心退出了太多 vim (我使用西类牙语键盘)。 我的尝试很明显: nnoremap ZZ 虽然它适用于我的用例,但我发现
我正在使用 NTL 库进行 RSA 密码分析实现。但是我经常遇到一些关于类型不匹配/不兼容的问题。 例如- 我需要RR n^((h-1.0)/(h*k-1.0)) 的类型值,其中 n 是类型 ZZ ,
在 Vim 中,您可以保存所有文件并通过键入 ZZ 退出。我如何创建类似的映射但使用不同的键?一些像 h、j、k 和 l 这样的键似乎是不可能的。是否有任何键可以对 ZZ 进行类似的映射? 最佳答案
问题来了。我需要将一些整数变量转换为 ZZ 类或反之亦然。我怎么能那样做?我试过在整数之前使用 (ZZ) 或在 ZZ 类之前使用 (int) 但都失败了。 最佳答案 您还没有发布任何代码,但我相信您的
我使用 gdb 调试器打印 ZZ 类型变量的值。此数据类型在 Number Theory Library or NTL 中定义.当我使用“print x”找出我的变量的值时,我得到了这样的东西: pr
ZZ可以用c++输出 cout #include std::string zToString(const ZZ &z) { std::stringstream buffer; bu
如果这听起来很业余(对于你们中的许多人来说这将是),我很抱歉,但我很着急,我想我会利用这个社区的聪明才智,而不是试图创造和表达确实如此不行。 我需要在 MySQL 中实现以下目标! 在某个字段中,如果
如何获取列表中从“aa”到“zz”的字符串?我知道这是显而易见的,但不知道解决此类问题的正确习惯用法。只需用具体的例子来展示这个想法,剩下的我会弄清楚。谢谢。 尝试过 (++) ['a'..'z']
我正在 LINQ 中寻找解决方案,但任何方法都有帮助(C#)。 我尝试使用 Sort() 但它不起作用,例如我有一个包含的示例列表 {"a", "b", "f", "aa", "z", "ac", "
我的问题是一个相当复杂的问题。我正在尝试创建一个程序,该程序将从标准输入(控制台)或文件中读取输入,然后检测每个字母和每个字母对的出现次数,输出将转到逗号分隔值 (output.csv) 文件或格式化
我经常发现自己想要滚动 Vim 窗口,这样我所在的行大约是屏幕向下的四分之一——它比 zt 提供了更多的呼吸空间,但显示的代码比 zz 多。当我的光标位于我想阅读的函数的开头时,它也很有帮助,但 zt
这是表格: +----+-----------+------------+----------+ | id | id_sensor | start_time | end_time | +----+--
我是一名优秀的程序员,十分优秀!