在寻求帮助以了解我要去哪里(软件基础,​​Binom.v)

时间:2020-06-12 14:37:43

标签: coq

我正在通过Software Foundations工作,有点卡住了。这是参考链接:https://softwarefoundations.cis.upenn.edu/vfa-current/Binom.html

我被卡在此处复制的证明“ abs_perm”上。

Theorem abs_perm: forall p al bl,
  priq p -> Abs p al -> Abs p bl -> Permutation al bl.

这是一个“ 2星”问题,因此应该很容易。事实证明这很困难,这使我认为问题出在我的“ Abs”关系上。我的归纳关系如下:

Inductive priqueue_elems: list tree -> list key -> Prop :=
 | priqueue_elems_base: priqueue_elems [] nil
 | priqueue_elems_next_list: forall l b b' v,
   priqueue_elems l b ->
   Permutation b' (v::b) ->
   priqueue_elems (insert v l) b'

我最终遇到的问题是,我得到了类似“插入x1 l1 =插入x2 l2”的信息(通过证明中的反演),我无法从那里走到任何地方。

在这种情况下插入不是单射的……似乎insert x [] = insert x [Leaf]。

上面的关系使我直接知道我有“ priq l”可用,但是定义了priq使得如果有多个元素,则第一个元素是Leaf……是的。

我认为问题出在我的关系上(这是根据他们的tree_elems建模的),但是我有点“证明块”。我的猜测是我不应该在关系构造中插入,但是尚不清楚先决条件还有什么其他结构。

另一种方法是将其直接放在“列表树”上,但随后看来格式良好可能是个问题。

否则,在插入时我需要某种定理。我尝试了一堆,但无法一起获得证明。

例如,

Lemma equals_inserts_permute: forall l1 l2 p1 p2 v1 v2,
  priqueue_elems l1 p1 ->
  priqueue_elems l2 p2 ->
  insert v1 l1 = insert v2 l2 -> Permutation (v1::p1) (v2::p2)

这将使我能够关联所需的插入物,但是...我也无法破解该证据。

非常感谢您的帮助!

0 个答案:

没有答案
相关问题