作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在证明检查器 coq 中定义一个域。我该怎么做呢?
我正在尝试做相当于 V in [0,10]
.
我试过做Definition V := forall v in R, 0 <= v /\ v <= 10.
, 但这会导致像 0
这样的常量出现问题不在V
根据 Coq。
最佳答案
一个简单的方法可能是这样的,
Require Import Omega.
Inductive V : Set :=
mkV : forall (v:nat), 0 <= v /\ v <= 10 -> V.
Lemma member0 : V.
Proof. apply (mkV 0). omega. Qed.
Definition inc (v:V) : nat := match v with mkV n _ => n + 1 end.
Lemma inc_bounds : forall v, 0 <= inc v <= 11.
Proof. intros v; destruct v; simpl. omega. Qed.
member0
的类型可能不像您希望的那样提供信息。在这种情况下,您可能需要索引
V
由
nat
对应集合中的每个元素。
Require Import Omega.
Inductive V : nat -> Set :=
mkV : forall (v:nat), 0 <= v /\ v <= 10 -> V v.
Lemma member0 : V 0.
Proof. apply (mkV 0). omega. Qed.
Definition inc {n} (v:V n) : nat := n + 1.
Lemma inc_bounds : forall {n:nat} (v:V n), 0 <= inc v <= 11.
Proof. intros n v. unfold inc. destruct v. omega. Qed.
Reals
合作过之前,但以上可以在
R
上实现也是。
Require Import Reals.
Require Import Fourier.
Open Scope R_scope.
Inductive V : R -> Set :=
mkV : forall (v:R), 0 <= v /\ v <= 10 -> V v.
Lemma member0 : V 0.
Proof. apply (mkV 0). split. right; auto. left; fourier. Qed.
Definition inc {r} (v:V r) : R := r + 1.
Lemma inc_bounds : forall {r:R} (v:V r), 0 <= inc v <= 11.
Proof. intros r v; unfold inc.
destruct v as (r,pf). destruct pf. split; fourier.
Qed.
关于coq - 如何在coq中定义一个有限域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10834168/
我是一名优秀的程序员,十分优秀!