Я пытаюсь доказать следующую теорему после формализации лямбда-исчисления с индексами Дебройна и заменой в Coq.
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 — это одноступенчатая бета-редукция лямбда-исчисления, а beta_reduction — его рефлексивное, транзитивное закрытие)
beta_1reduction
, чтобы сделать ваш код stackoverflow.com/help/minimal-reproducible-example - person larsr   schedule 02.04.2021