S e :=
| def: (forall e', S e' -> S (App e e')) -> S e
我正在尝试在Coq中编写基于逻辑关系的强规范化证据。
答案 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。