gpt4 book ai didi

coq - 功能定义和归纳定义之间的平等

转载 作者:行者123 更新时间:2023-12-01 12:16:33 24 4
gpt4 key购买 nike

我对命题 P 有一个归纳定义(或 repeats l )列表包含重复元素,以及它的否定的函数定义 Q (或 no_repeats l )。

我想证明 P <-> ~ Q~ P <-> Q .我已经能够展示四个含义中的三个,但是 ~ Q -> P似乎有所不同,因为我无法从 ~Q 中提取数据.

Require Import List.
Variable A : Type.

Inductive repeats : list A -> Prop := (* repeats *)
repeats_hd l x : In x l -> repeats (x::l)
| repeats_tl l x : repeats l -> repeats (x::l).

Fixpoint no_repeats (l: list A): Prop :=
match l with nil => True | a::l' => ~ In a l' /\ no_repeats l' end.

Lemma not_no_repeats_repeats: forall l, (~ no_repeats l) -> repeats l.
induction l; simpl. tauto. intros.

在对 l 进行归纳后, 第二种情况是

  IHl : ~ no_repeats l -> repeats l
H : ~ (~ In a l /\ no_repeats l)
============================
repeats (a :: l)

是否有可能推导出In a l \/ ~ no_repeats l (这就足够了)?

最佳答案

你的陈述意味着 A 上的相等性支持消除双重否定:

Require Import List.
Import ListNotations.

Variable A : Type.

Inductive repeats : list A -> Prop := (* repeats *)
repeats_hd l x : In x l -> repeats (x::l)
| repeats_tl l x : repeats l -> repeats (x::l).

Fixpoint no_repeats (l: list A): Prop :=
match l with nil => True | a::l' => ~ In a l' /\ no_repeats l' end.

Hypothesis not_no_repeats_repeats: forall l, (~ no_repeats l) -> repeats l.

Lemma eq_nn_elim (a b : A) : ~ a <> b -> a = b.
Proof.
intros H.
assert (H' : ~ no_repeats [a; b]).
{ simpl. intuition. }
apply not_no_repeats_repeats in H'.
inversion H'; subst.
{ subst. simpl in *. intuition; tauto. }
inversion H1; simpl in *; subst; intuition.
inversion H2.
Qed.

并非每种类型都支持 eq_nn_elim,这意味着您只能通过在 A 上放置额外的假设来证明 not_no_repeats_repeats。假设 A 具有可判定的相等性就足够了;即:

Hypothesis eq_dec a b : a = b \/ a <> b.

关于coq - 功能定义和归纳定义之间的平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47699961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com