- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 Idris 编写一个基本的 monadic 解析器,以适应与 Haskell 的语法和差异。我有基本的工作,但我坚持尝试为解析器创建 VerifiedSemigroup 和 VerifiedMonoid 实例。
不用多说,这里是解析器类型、Semigroup 和 Monoid 实例,以及 VerifiedSemigroup 实例的开始。
data ParserM a = Parser (String -> List (a, String))
parse : ParserM a -> String -> List (a, String)
parse (Parser p) = p
instance Semigroup (ParserM a) where
p <+> q = Parser (\s => parse p s ++ parse q s)
instance Monoid (ParserM a) where
neutral = Parser (const [])
instance VerifiedSemigroup (ParserM a) where
semigroupOpIsAssociative (Parser p) (Parser q) (Parser r) = ?whatGoesHere
intros
之后,具有以下证明者状态:
-Parser.whatGoesHere> intros
---------- Other goals: ----------
{hole3},{hole2},{hole1},{hole0}
---------- Assumptions: ----------
a : Type
p : String -> List (a, String)
q : String -> List (a, String)
r : String -> List (a, String)
---------- Goal: ----------
{hole4} : Parser (\s => p s ++ q s ++ r s) =
Parser (\s => (p s ++ q s) ++ r s)
-Parser.whatGoesHere>
rewrite
连同
appendAssociative
不知何故,
\s
.
最佳答案
简单的答案是你不能。在内涵类型理论中,关于函数的推理相当笨拙。例如,Martin-Löf 的类型理论无法证明:
S x + y = S (x + y)
0 + y = y
x +′ S y = S (x + y)
x +′ 0 = x
_+_ ≡ _+′_ -- ???
ext : ∀ {A : Set} {B : A → Set}
{f g : (x : A) → B x} →
(∀ x → f x ≡ g x) → f ≡ g
<+>-assoc : {A : Set} (p q r : ParserM A) →
(p <+> q) <+> r ≡ p <+> (q <+> r)
<+>-assoc (Parser p) (Parser q) (Parser r) =
cong Parser (ext λ s → ++-assoc (p s) (q s) (r s))
++-assoc
是你对
_++_
的关联性质的证明.我不确定它在战术上会是什么样子,但它会非常相似:为
Parser
应用一致性目标应该是:
(\s => p s ++ q s ++ r s) = (\s => (p s ++ q s) ++ r s)
s : String
和一个目标:
p s ++ q s ++ r s = (p s ++ q s) ++ r s
refl
进行案例分析的函数会做什么?)Monoid
(或
VerifiedSemigroup
在您的情况下)适用于内置相等(在 Idris 中为
=
,在 Agda 中为
≡
),您有一个特殊的幺半群(或半群)具有不同的潜在相等。这通常是通过将幺半群(半群)操作与等式和一堆证明打包在一起来完成的,即(在伪代码中):
= : A → A → Set -- equality
_*_ : A → A → A -- associative binary operation
1 : A -- neutral element
=-refl : x = x
=-trans : x = y → y = z → x = z
=-sym : x = y → y = x
*-cong : x = y → u = v → x * u = y * v -- the operation respects
-- our equality
*-assoc : x * (y * z) = (x * y) * z
1-left : 1 * x = x
1-right : x * 1 = x
-- Parser equality
_≡p_ : {A : Set} (p q : ParserM A) → Set
Parser p ≡p Parser q = ∀ x → p x ≡ q x
关于agda - 当相关类型被 Idris 中的 lambda 抽象时,如何证明 "seemingly obvious"事实?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25175699/
my $str='expire=0'; if ($str =~/expire\s*=\s* (?: 0[1-9]|[1-9][0-9])/){ print " found it "; } 它不
基本上,我尝试使用 strtoull 将十六进制字符串转换为 unsigned long long values。这是简单的代码 #include #include int main () {
#include #include #define SQUARE(x) (x*x) void main() { clrscr(); int i=3,j,k; j=
我正在尝试更改控件的属性,但它看起来好像已“锁定”,但实际上并非如此,因为当我右键单击该控件时,它显示该控件已解锁。 我使用的是 Visual Studio 2005,我从未使用过在提供的图片中似乎被
linux网络启动问题:device does not seem to be present解决办法 在整虚拟机时候经常会遇到虚拟机拷贝,然而拷贝之后网络配置会遇到错误 service netw
我正在主干上创建一个补丁,将它应用到另一个分支时,出现“补丁似乎已过时”错误。我没有在 Google 上找到解决方案。主干刚刚合并到分支。 我在 Windows 7 上使用 64 位 Tortoise
我有下面的 XAML block 'BaseStyles.xaml 引用此内容的表单在设计时有效,但在运行时无效。如果我的表单直接引用 Sh
我有一个带有自定义 TableCellViews 的 TableView,上面有 UILabels 和 UIButtons。当其中一个按钮被粘贴时,我想显示一个描述按钮文本的“工具提示”。 除了当我尝
我有一个像这样的文本文件,我想解析该文本文件中的信息。 #title キミと☆Are You Ready? #artist トライクロニカ #mobile deresimu #easy 0 #norm
我有一个UITableView,用户可以在其中插入新行。发生这种情况时,我想重新加载表中的所有旧行。一种解决方案是在插入发生后立即调用 reloadData,这完全有效,但这意味着我看不到插入动画。
以下 scala 代码无法按预期工作: import scala.util.parsing.combinator.PackratParsers import scala.util.parsing.co
我想在 Ubuntu 14.04 64 位上使用 jTSS,我有版本 1.2 的硬件 TPM。我按照 4.3 http://trustedjava.sourceforge.net/index.php?
有人可以向我解释一下为什么要设置吗激活深度似乎没有效果在下面的代码示例中? 此示例创建“ block ”对象,这些对象都具有一个数字和一个子 block 。 由于 ActivationDepth 设置
请帮我找到这个“段错误:11”。 argv 输入看起来不错。顺便说一句,这是一个就餐哲学家问题。它在一小时前工作,但在 minix 机器上,但现在在 Unix 机器上它无法运行。请帮我解决这个愚蠢的错
我的wireup.xml看起来像 和storage//local.properties为 ### === MongoDB interaction === ### host="
我只想在未设置 javascript 对象时设置值。我的(测试)函数如下所示: var test = function(){ this.value = {}; this.setValu
这是我完成的sql命令,我不明白为什么没有 key (〜1.45秒)和有 key (〜1.15秒)之间的差异这么小: mysql> show create table devis; | devis |
我目前正在用 javascript 搞乱浏览器历史记录,我几乎得到了我想要的。 但是我遇到了一个巨大的错误,让我解释一下情况: 我有一个菜单,当按下菜单项时,会执行以下代码: $("#content"
我正在学习如何将 QT 与 Visual Studio 结合使用。目前,我正在使用 QT 5.8 和 vs 2017。我创建了一个新项目并使用 QT 设计器添加了一些单选按钮。现在,我想执行一些操作,
我正在通过这样做来设置导航栏: Home 请注意我去掉了很多元素,因为这会使这个例子太大。 现在,这是我的 CSS: /* GLOBAL
我是一名优秀的程序员,十分优秀!