我已经通过归纳证明 no f xs ==> null (filter f xs)
其中: filter p [] = []
filter p (x:xs)
| p x = x : filter p xs
| otherwise = filter p xs
null [] = True; null _ = False
no p [] = True
no p (x
我在阅读Brutal Meta-introduction to Agda。 在一节的“使用with和统一重写”他们提了一个情况下的一种类型的目标从云: (filter p (a ∷ as) | p a) ≡ (filterN p (a ∷ as) | p a)
到 (filter p (a ∷ rs) | r) ≡ (filterN p (a ∷ rs) | r)
添加with子句之后。
我试图证明P对于A类型的每个元素都有效。不幸的是,我只知道如何证明P对于给定的a:A,如果我有权访问P的所有a'小于a的证明。 这应该包含A所有元素,开始在A最小的元素,然后逐渐证明P适用于所有其他元素的列表上可证明的感应,但我不能得到它的工作。 形式上,问题如下: Parameter A : Type.
Parameter lt : A -> A -> Prop.
Notation "a <
有没有什么像simpl的战术Program Fixpoint s? 特别是,如何证明下面的琐碎陈述? Program Fixpoint bla (n:nat) {measure n} :=
match n with
| 0 => 0
| S n' => S (bla n')
end.
Lemma obvious: forall n, bla n = n.
induction n. r
我正在学习Coq并且作为练习我想定义一个类型FnArity (N:nat)来编码所有函数的N参数。那就是: Check FnArity 3 : (forall A B C : Set, A -> B -> C).
应该工作,但 Check FnArity 2 : (forall A B C D : Set, A -> B -> C -> D).
不应该工作。 这是为了教学目的,所以任何相关