Types 如何避免在Agda中重复使用(不必要的?)公理?
在Agda中是否有一种以编程方式构造(子)证明的方法? 因为有些证明非常相似,最好把它们简化。。。但我不知道怎么做。例如,考虑下面的代码Types 如何避免在Agda中重复使用(不必要的?)公理?,types,pattern-matching,agda,Types,Pattern Matching,Agda,在Agda中是否有一种以编程方式构造(子)证明的方法? 因为有些证明非常相似,最好把它们简化。。。但我不知道怎么做。例如,考虑下面的代码 {- 首先,我们重新命名为对称性的证明通过查看ope参数的所有可能情况来进行。在Agda中,您通过模式匹配按情况进行推理。对称性的证明通过查看ope参数的所有可能情况来进行。在Agda中,您通过模式匹配按情况进行推理 您可以使用Agda的反射功能以编程方式生成证明 这是一个使用可重用策略解决问题的示例。我把这个问题放在一起讨论,所以我不能保证这是最强大的策略。
{-
首先,我们重新命名为对称性的证明通过查看ope
参数的所有可能情况来进行。在Agda中,您通过模式匹配按情况进行推理。对称性的证明通过查看ope
参数的所有可能情况来进行。在Agda中,您通过模式匹配按情况进行推理 您可以使用Agda的反射功能以编程方式生成证明
这是一个使用可重用策略解决问题的示例。我把这个问题放在一起讨论,所以我不能保证这是最强大的策略。但是,它应该让您了解如何在Agda中解决类似问题
有趣的是,您可以编写如下实现:
proof-of-symmetry-of-operator-ope : symmetry ope
proof-of-symmetry-of-operator-ope = tactic exhaustive-tactic
在Agda中,您可以使用e中的quoteGoal g
将当前目标类型和环境具体化为一个值。g
将绑定到具体化的目标,并将在e
中的范围内。这两个目标都应具有类型术语
您可以使用unquote
将术语
值转换回Agda语法
所有这些都可以使用tractic
关键字捆绑在一起。您可以在变更日志中阅读一些关于tractic
的稍微过时的信息,也可以在wiki上的其他地方阅读。您可以使用Agda的反射功能以编程方式生成证据
这是一个使用可重用策略解决问题的示例。我把这个问题放在一起讨论,所以我不能保证这是最强大的策略。但是,它应该让您了解如何在Agda中解决类似问题
有趣的是,您可以编写如下实现:
proof-of-symmetry-of-operator-ope : symmetry ope
proof-of-symmetry-of-operator-ope = tactic exhaustive-tactic
在Agda中,您可以使用e中的quoteGoal g
将当前目标类型和环境具体化为一个值。g
将绑定到具体化的目标,并将在e
中的范围内。这两个目标都应具有类型术语
您可以使用unquote
将术语
值转换回Agda语法
所有这些都可以使用tractic
关键字捆绑在一起。你可以在变更日志中阅读一些关于tractic
的稍微过时的信息,或者在wiki上的某个地方阅读更多信息。有没有一种方法可以通过编程方式构造这样的子of?使用某种元agda语言?因为bla a B=id的定义enity和Blabla B=idenity的定义看起来非常相似。最好简化它们…但我不知道如何正确地做到这一点。有没有一种方法可以通过编程方式构造这样的子of?使用一些元agda语言?因为Blabla B=idenity的定义和Bla B=idenity的定义看起来非常相似。这是最好简化它们…但我不知道如何正确地做。