我怎样才能在不违反严格正性的情况下用Coq写出下面的归纳命题?

我怎样才能在不违反严格正性的情况下用Coq写出下面的归纳命题?,coq,Coq,我试图用Coq编写基于逻辑关系的强规范化证明。您可以将其作为表达式结构上的不动点来编写: S e := | def: (forall e', S e' -> S (App e e')) -> S e 请注意,在Abs案例中,您不能对所有e',S e'->subst e n e'说类似的话,因为它不会在子项上递归。但是,您可以在e类型的结构上递归。我为Gödel的System T(自然数上递归的lambda演算)做过类似的工作:参见。不确定您试图建模的是什么,但解决方案是以不同的方

我试图用Coq编写基于逻辑关系的强规范化证明。

您可以将其作为表达式结构上的不动点来编写:

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

请注意,在
Abs
案例中,您不能对所有e',S e'->subst e n e'说类似
的话,因为它不会在子项上递归。但是,您可以在
e
类型的结构上递归。我为Gödel的System T(自然数上递归的lambda演算)做过类似的工作:参见。

不确定您试图建模的是什么,但解决方案是以不同的方式建模…这与OP的类型如何等效?实际上不是,但我不知道如何终止最初的示例——在我看来,它实际上是毫无根据的,而且在任何情况下,仅使用该构造函数都是空洞的。我本想说明一种可能的解决方案,但这取决于实际的逻辑关系。我似乎模糊地记得归纳定义出现在
Prop
(显然是@abhishek的情况)。不确定它在实践中是否可用。
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.