Coq - 列表上的归纳,其中函数应用于每个元素

时间:2013-12-18 17:44:48

标签: list coq induction

我试图证明将函数f应用于两个列表的每个元素会导致类似rel_list列表,如果它们原始相关的话。我在列表的元素上有一个rel,并且证明了一个引理Lemma1如果两个元素在rel中,则在函数f应用于rel之后它们就在rel_list中两个元素。我在列表和xL :: xL0 :: xlL0 = xL0 :: xlL0上尝试了归纳法,但在基本案例解决后,我最终得到了Variable A:Type. Variable rel: A -> A -> Prop. Variable f: A -> A. Lemma lemma1: forall n m n' m', rel n m -> n' = f n -> m' = f m -> rel n' m'. Proof. ... Qed Inductive rel_list : list A -> list A -> Prop := | rel_list_nil : rel_list nil nil | rel_list_cons: forall x y xl yl, rel x y -> rel_list xl yl -> rel_list (x::xl) (y::yl). Fixpoint f_list (xl: list A) : list A := match xl with | nil => xl | x :: xl' => f x :: (f_list xl') end. Lemma Lemma2: forall lL lR lL' lR', rel_list lL lR -> lL' = f_list lL -> lR' = f_list lR -> rel_list lL' lR'. Proof. intros ? ? ? ? Hsim HmL HmR. 这样的案例或者进入循环。请有人建议我如何关闭证明。 谢谢,

{{1}}

1 个答案:

答案 0 :(得分:2)

通过对rel_list假设进行归纳,可以很容易地显示出来。以下是使用标准库中函数的通用版本:

Require Import Coq.Lists.List.

Section Lists.

Variables A1 A2 B1 B2 : Type.
Variables (RA : A1 -> A2 -> Prop) (RB : B1 -> B2 -> Prop).
Variables (f1 : A1 -> B1) (f2 : A2 -> B2).

Hypothesis parametric : forall a1 a2, RA a1 a2 -> RB (f1 a1) (f2 a2).

Lemma l : forall l1 l2, Forall2 RA l1 l2 ->
                        Forall2 RB (map f1 l1) (map f2 l2).
Proof.
  intros.
  induction H as [|a1 a2 l1 l2 HR H IH]; simpl; constructor; eauto.
Qed.

End Lists.