【发布时间】:2021-04-02 08:14:39
【问题描述】:
在使用 Debruijn 索引和 Coq 中的替换形式化 lambda 演算之后,我试图证明以下定理。
Theorem atom_equality : forall e : expression , forall x : nat,
(beta_reduction (Var x) e) -> (e = Var x).
这些是表达式和β减少的定义
Inductive expression : Type :=
| Var (n : nat)
| Abstraction (e : expression)
| Application (e1 : expression) (e2 : expression).
.
.
Inductive beta_reduction : expression -> expression -> Prop :=
| beta_1step (x y : expression) : beta_1reduction x y -> beta_reduction x y
| beta_reflexivity (x : expression) : beta_reduction x x
| beta_transitivity (x y z : expression) : beta_reduction x y -> beta_reduction y z -> beta_reduction x z.
我在试图证明这个定理时陷入了一个循环。
Proof.
intro e. induction e.
- intros. inversion H.
应用这些步骤后,这些是我必须使用的假设和子目标
3 subgoals
n, x : nat
H : beta_reduction (Var x) (Var n)
x0, y : expression
H0 : beta_1reduction (Var x) (Var n)
H1 : x0 = Var x
H2 : y = Var n
______________________________________(1/3)
Var n = Var x
______________________________________(2/3)
Var n = Var n
______________________________________(3/3)
Var n = Var x
我可以通过“反转 H0”策略解决第一个子目标,通过“反身”策略解决第二个子目标。但是当我达到第三个子目标时,这就是我剩下的
1 subgoal
n, x : nat
H : beta_reduction (Var x) (Var n)
x0, y, z : expression
H0 : beta_reduction (Var x) y
H1 : beta_reduction y (Var n)
H2 : x0 = Var x
H3 : z = Var n
______________________________________(1/1)
Var n = Var x
这正是我开始的。我必须证明 y 只能取 Var x 的值才能证明 H0。
(beta_1reduction是lambda演算的一步beta归约,beta_reduction是它的自反传递闭包)
【问题讨论】:
-
您是否还可以添加
beta_1reduction的定义以使您的代码成为stackoverflow.com/help/minimal-reproducible-example
标签: coq proof lambda-calculus theorem-proving