Coq:从总和中删除所有(嵌套的)括号
假设我有一个像Coq:从总和中删除所有(嵌套的)括号,coq,associativity,Coq,Associativity,假设我有一个像a+(b+(c+d))的和,我想把它转换成a+b+c+d来应用引理 使用Nat.add\u assoc手动执行此操作非常繁琐。有更聪明的方法吗?我会使用的“简单但不好”的方法是用(a+b+c+d)替换(a+(b+(c+d)))到现在为止,欧米茄你可以使用重复战术,它重复一些战术,直到无法再应用: repeat rewrite Nat.add_assoc. 或更简洁的版本: rewrite !Nat.add_assoc. 它的工作原理与使用repeat的变体相同 这种方法的缺点是
a+(b+(c+d))
的和,我想把它转换成a+b+c+d
来应用引理
使用
Nat.add\u assoc
手动执行此操作非常繁琐。有更聪明的方法吗?我会使用的“简单但不好”的方法是用(a+b+c+d)替换(a+(b+(c+d)))到现在为止,欧米茄
你可以使用重复
战术,它重复一些战术,直到无法再应用:
repeat rewrite Nat.add_assoc.
或更简洁的版本:
rewrite !Nat.add_assoc.
它的工作原理与使用repeat
的变体相同
这种方法的缺点是它重写了目标中的所有地方。因此,您可能只想选择公式的某个部分对其进行重写。为什么不好?此外,您还可以使用*自动执行
。如果您看过由omega
创建的输出术语,您就会明白。大多数情况下,它过于复杂,使用重写的一个小证明会小得多。但这是个人意见的问题;)<用欧米茄编码也可以;通过铃声也解决了这个问题。前者需要导入Omega
模块;后者--Arith
@Vinz为什么输出项很重要?ω的问题在于它可能会减慢编译/检查阶段吗?是的,这就是想法。在这种情况下,我认为这并不重要。但在更大的开发中,这可能会显著改变Qed
的执行时间。