证明一个项不等于一个严格更大的项

Show that a term is not equal to a strictly larger term

考虑以下玩具开发:

Require Import Coq.Strings.String.

Inductive SingProp: Set :=
| Var: string -> SingProp
| plus: SingProp -> SingProp -> SingProp
| amp: SingProp -> SingProp -> SingProp.

Goal forall A B, A <> amp A B.
Proof.
  intros A. induction A.
  - intros B H. inversion H.
  - intros B H. inversion H.
  - intros B H. inversion H. apply (IHA1 _ H1).

这真的是确定这一点成立的最直接的方法吗?每次我想做这样的事情都需要进行归纳吗?

对于这种简单的类型,您还可以定义一个 size 函数来计算定义该类型的树的高度。然后 A = amp A B 会减少到

size A = 1 + max (size A) (size B)

你应该可以用 lia 来释放它。