如何在不违反严格积极性的情况下在Coq中编写以下归纳命题?

时间:2018-02-13 10:14:54

标签: coq

S e := 
| def: (forall e', S e' -> S (App e e')) -> S e

我正在尝试在Coq中编写基于逻辑关系的强规范化证据。

1 个答案:

答案 0 :(得分:1)

您可以在表达式结构上将其写为Fixpoint:

Inductive expr :=
| Var (n:nat)
| Abs (n:nat) (e:expr)
| App (e1 e2: expr).

Fixpoint S (e:expr) : Prop :=
  match e with
  | Var n => True
  | Abs n e => True
  | App e1 e2 => S e2
  end.

请注意,您不能在forall e', S e' -> subst e n e'案例中说Abs之类的内容,因为它不会在子项上递归。相反,您可以对e类型的结构进行说明。我为Gödel的System T(lambda演算以及自然数的递归)做了类似的事情:见https://github.com/tchajed/goedel-t/blob/master/SystemT.v#L538