coq - Coq:排序列表的子列表也排序?
问题描述
我试图证明,如果一个列表(L1 ++ a :: L2)被“小于或等于”强排序意味着列表(L1 ++ L2)也被排序(因为它只是一个排序列表减去一个元素)。到目前为止我有
Definition sorted := (StronglySorted (λ x y, x ≤ y)).
Lemma sorted_sublist : ∀ (L1 L2 : list Z) (a : Z),
sorted (L1 ++ a :: L2) ⇒ sorted (L1 ++ L2).
Proof.
intros.
induction L1.
- simpl.
simpl in H.
apply StronglySorted_inv in H.
destruct H.
exact H.
- apply StronglySorted_inv in H.
destruct H.
apply IHL1 in H.
apply SSorted_cons.
exact H.
fold (L1 ++ L2).
fold (L1 ++ a :: L2) in H0.
我只剩下 假设和目标了。任何想法如何完成证明?
解决方案
您可以首先非正式地说服自己您有这个假设(以符号为模)
H0 : Forall (fun y : Z => (a0 <= y)%Z) (L1 ++ a :: L2)
暗示目标
Forall (fun y : Z => (a0 <= y)%Z) (L1 ++ L2)
所以你在正确的道路上。上述含义可以通过对 的另一个归纳来证明L1
。
这种方法是合理的,因为StronglySorted
实际上通过双重归纳类似地定义:每个后缀都是强排序的(第一次归纳),并且头部小于其他元素(第一步的每个步骤的第二次归纳)。
推荐阅读
- regex - 使用循环批量查找和替换文件中的文件名
- vb.net - 如何使用 vb.net 中的查询在 MS Access 中更新?
- javascript - 你能用 cos() 使用变量吗
- c# - 为什么c#“&&”运算符会出现“不能应用于'bool'和'int'类型的操作数”的错误
- javascript - CSS 灵活的表头
- python - 清洗数据和过滤系列
- android - Unity Firebase 未在 Android 上初始化
- pytorch - 为什么 skimage.io.imread 警告“损坏的 exif 数据”但 cv2.imread 没有?
- python - Python 类析构函数是否保证在程序结束之前执行?
- android - FaceDetectorOptions.setMinFaceSize() 不起作用