Coq:证明conat是有限的还是无限的

时间:2019-04-23 02:44:13

标签: coq theorem-proving coinduction

我有一个conat的定义,它可以表示有限值和无穷大值,从nat的转换,一个无穷大的定义以及一个双仿真关系:

CoInductive conat : Set := O' | S' (n : conat).

Fixpoint toCo (n : nat) : conat := match n with
  | O => O'
  | S n' => S' (toCo n') end.

CoFixpoint inf : conat := S' inf.

CoInductive bisim : conat -> conat -> Prop :=
  | OO : bisim O' O'
  | SS : forall n m : conat, bisim n m -> bisim (S' n) (S' m).

Notation "x == y" := (bisim x y) (at level 70).

我想证明conat是有限的还是无限的(我不能百分百确定这是正确的公式):

(* This is the goal *)
Theorem fin_or_inf : forall n : conat, (exists m : nat, toCo m == n) \/ (n == inf).

到目前为止,我还不能证明这一点,但是我可以证明另一种说法,即如果conat不是有限的,那么它就是无限的(同样,对于公式,并非100%肯定):

(* I have a proof for this *)
Theorem not_fin_then_inf : forall n : conat, ~ (exists m : nat, toCo m == n) -> (n == inf).

我不知道如何从not_fin_then_inffin_or_inf

  1. 我对fin_or_inf的定义正确吗?

  2. 我是否可以使用fin_or_inf来证明not_fin_then_inf

此外,我发现弥合两个定理之间的鸿沟涉及双模拟(或其扩展)的可判定性。我认为可判定性定理可以表示为

Lemma bisim_dec : forall n m : conat, n == m \/ ~ (n == m).
  1. 我可以证明bisim_dec或任何类似的关于双模拟的陈述吗?

编辑

证明“有限或无限”的原始动机是证明coplus的可交换性和可结合性:

CoFixpoint coplus (n m : conat) := match n with
  | O' => m
  | S' n' => S' (coplus n' m)
end.
Notation "x ~+ y" := (coplus x y) (at level 50, left associativity).

Theorem coplus_comm : forall n m, n ~+ m == m ~+ n.
Theorem coplus_assoc : forall n m p, n ~+ m ~+ p == n ~+ (m ~+ p).

无法通过与nat的{​​{1}}相同的方式进行操作,因为它要求+的可传递性和类似于==的引理,这会导致cofix调用无人看守。否则,我必须同时破坏plus_n_Smn,然后我将目标定为m

如果我选择n ~+ S' m == m ~+ S' n的替代定义:

coplus

然后CoFixpoint coplus (n m : conat) := match n, m with | O', O' => O' | O', S' m' => S' m' | S' n', O' => S' n' | S' n', S' m' => S' (S' (coplus n' m')) end. 很简单,但是coplus_comm变得几乎不可能证明。

  1. 我的确可以用coplus_assoc的第一个定义来证明coplus_comm,还是用第二个定义来证明coplus

0 个答案:

没有答案