证明一个项不等于一个严格更大的项
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
来释放它。
考虑以下玩具开发:
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
来释放它。