coq - 表明一个术语不等于一个严格更大的术语
问题描述
考虑以下玩具开发:
Require Import Coq.Strings.String.
Inductive SingProp: Set :=
| Var: string -> SingProp
| plus: SingProp -> SingProp -> SingProp
| amp: SingProp -> SingProp -> SingProp.
Goal forall A B, A <> amp A B.
Proof.
intros A. induction A.
- intros B H. inversion H.
- intros B H. inversion H.
- intros B H. inversion H. apply (IHA1 _ H1).
这真的是确定这是否成立的最直接的方法吗?每次我想做这样的事情时都需要进行归纳吗?
解决方案
对于这种简单的类型,您还可以定义一个size
函数来计算定义该类型的树的高度。然后A = amp A B
会减少到类似的东西
size A = 1 + max (size A) (size B)
你应该能够用lia
.
推荐阅读
- sql - 基于日期的动态案例表达
- phantom-dsl - phantom-dsl 中列名的蛇形案例
- postgresql - PostgreSQL - 搜索包含特殊字符的文本字段
- amazon-web-services - 使用 KMS 的 AmazonFraudDetector 数据加密
- less - 如何将我所有的 less 文件捆绑到一个 style.less 中?有没有更少的捆绑包可以像 scss 捆绑包一样做类似的事情?
- latex - 如何在 pgfplot 中绘制这样的双 y 轴条形图?
- dataframe - Pyspark - 将具有 2 种时间格式的列的时间格式转换为通用时间格式
- php - 如何将 2 个数组组合成 1 个 json_encode 结果?
- javascript - 'option/alt' 键盘字符替换为 ’
- php - 如何从包含引号、冒号和逗号的字符串中获取值 - PHP