我试图使用有充分根据的不动点来定义递归谓词,在用重写时有义务显示。说,大多数这样的义务都可以通过直接的证据自动化来免除,但不幸的是,对于我的谓词来说似乎并非如此。
我将问题简化为以下引理(来自Proper (pointwise_relation A eq ==> eq) (@all A))。它可以在没有的Coq中证明吗?
Lemma ext_fa:
forall (A : Type) (f g : A -> Prop),
(forall x, f x = g x) ->
(forall x, f x) = (forall x, g x).
它可以用谓词或函
假设我有以下类型:
Inductive foo : Type -> Type :=
| A : forall X, Empty_set -> foo X
| B : foo unit.
我能证明以下几点吗:
Lemma obv : forall x : foo unit, x = B.
没有公理?dependent destruction策略很容易解决这个问题,但这引入了axiom JMeq_eq。我找到了的文章,但它似乎不适用于这种情况,因为Type没有UIP。
我试图证明一个命题P对A类型的每个元素都有效。不幸的是,我只知道如何证明给定的P的a:A,如果我能够获得所有a'小于a的P证明。
这应该可以通过包含A所有元素的列表中的归纳来证明,从A中最小的元素开始,然后增量地证明P对所有其他元素都有效,但我就是不能让它工作。
从形式上讲,问题如下:
Parameter A : Type.
Parameter lt : A -> A -> Prop.
Notation "a < b" := (lt a b).
Parameter P : A -> Prop.
Parameter lma : forall a,
我在试着证明Z3是一个团体。
Class Group G : Type :=
{
e : G;
mult : G -> G -> G;
inv : G -> G;
left_id : forall x:G, mult e x = x;
left_inv : forall x:G, mult (inv x) x = e;
assoc : forall x y z:G,
mult x (mult y z) = mult (mult x y) z
}.
Record Z_3 : Type := Z3
{
n :&
在Coq标准库中,有一个名为comparison的枚举类型,它有三个元素Eq,Lt,Gt。这用于在ZArith中定义小于或小于等于的操作符:m < n定义为m ?= n = Lt,m <= n定义为m ?= n <> Gt。借助Hedberg定理(标准库中的UIP_dec),我可以证明<是证明-无关的,但是当涉及到<=时,我遇到了一些问题,因为它是负面定义的。我觉得这特别令人讨厌,因为如果<=是用国际海事组织的更自然的方式(m ?= n = Lt \/ m ?= n = Eq)来定义的,那么我就可以证明证据--无关紧要。
上下文:--我正在使用一些以前
我试图使用以下定理
Theorem nat_rect_1_2: forall (P:nat->Type), (P O -> P 1
-> (forall n:nat, P n -> P (S n) -> P (S (S n))) -> forall n:nat, P n ).
Print nat_rect.
exact (fun (P : nat -> Type) (f0 : P 0) (f1 : P 1)
(ff : forall n : nat, P n -> P(S n) -> P (S(S n))) =>
fix