Types 如何避免在Agda中重复使用(不必要的?)公理?

Types 如何避免在Agda中重复使用(不必要的?)公理?,types,pattern-matching,agda,Types,Pattern Matching,Agda,在Agda中是否有一种以编程方式构造(子)证明的方法? 因为有些证明非常相似,最好把它们简化。。。但我不知道怎么做。例如,考虑下面的代码 {- 首先,我们重新命名为对称性的证明通过查看ope参数的所有可能情况来进行。在Agda中,您通过模式匹配按情况进行推理。对称性的证明通过查看ope参数的所有可能情况来进行。在Agda中,您通过模式匹配按情况进行推理 您可以使用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的定义看起来非常相似。这是最好简化它们…但我不知道如何正确地做。