Coq 为什么'Hint Resolve X'失败,'let:X'在哪里工作?

Coq 为什么'Hint Resolve X'失败,'let:X'在哪里工作?,coq,Coq,这是一个关于自我参照句的逻辑谜题,我正试图在Coq中实现自动化。目标是证明P1。我也在使用软件基金会的libtractics库 Require Import List. Import ListNotations. Require Import LibTactics. Inductive symbol : Type := | P | Q | P' | Q'. Definition sentence : Type := list symbol. Variable true : sentenc

这是一个关于自我参照句的逻辑谜题,我正试图在Coq中实现自动化。目标是证明P1。我也在使用软件基金会的libtractics库

Require Import List.
Import ListNotations.
Require Import LibTactics. 

Inductive symbol : Type := | P | Q | P' | Q'.

Definition sentence : Type := list symbol.

Variable true : sentence -> Prop.

Variable provable : sentence -> Prop.

Hypothesis HQ'1 : forall (X : sentence), true (Q' :: X) -> ~ provable (X ++ X).
Hint Resolve HQ'1.

Hypothesis HQ'2 : forall (X : sentence), ~ provable (X ++ X) -> true (Q' :: X).
Hint Resolve HQ'2.

Hypothesis HC : forall (X : sentence), provable X -> true X.
Hint Resolve HC.

Theorem P1 : 
true [Q';Q'] /\ ~ provable [Q';Q'].
以下解决方案可行,但似乎过长:

Theorem P1 : 
true [Q';Q'] /\ ~ provable [Q';Q'].
lets : HQ'1. lets : HQ'2. lets : HC.  
jauto. Qed.
据我所知,通过let:X将X添加到上下文中只是使引理X可用于auto的一种方法。由于我已经将HQ'1、HQ'2和HC添加到具有提示解析的提示数据库中,因此上述解决方案中的所有let都是冗余的,并且以下各项也应该可以工作:

Theorem P1 : 
true [Q';Q'] /\ ~ provable [Q';Q'].
jauto. Qed.
但事实并非如此。这两者有什么区别?Coq在上下文和提示数据库中对假设的处理是否不同