HOL 中 THEN 之后 ACCEPT_TAC 的异常
Exception on ACCEPT_TAC after THEN in HOL
我正在尝试通过打包用于证明目标 !(p:bool) (q:bool). (p==>q) ==> p ==> p /\ q
的策略来创建一个名为 "absorptionRule" 的定理。但是,我在 ACCEPT_TAC 上遇到异常。当我一个一个执行每一个策略时,一切正常。
val absorptionRule =
TAC_PROOF(
([],``!(p:bool) (q:bool).(p ==> q) ==> p ==> p /\ q``),
REPEAT STRIP_TAC THEN
ACCEPT_TAC(ASSUME ``p:bool``) THEN
RES_TAC);
THEN
策略将第二种策略应用于 所有 第一种策略产生的子目标(source). But ACCEPT_TAC (ASSUME ``p:bool``)
only applies to the first subgoal. You do not see any problem when you apply the tactics one-by-one because you never try to apply the ACCEPT_TAC
to the second subgoal. The following solution uses THENL
而不是 THEN
。
val g1 = (([], ``!(p:bool) (q:bool). (p ==> q) ==> p ==> p /\ q``) : goal);
val absorptionRule =
TAC_PROOF (g1,
REPEAT STRIP_TAC
THENL [ACCEPT_TAC (ASSUME ``p:bool``), RES_TAC]);
我正在尝试通过打包用于证明目标 !(p:bool) (q:bool). (p==>q) ==> p ==> p /\ q
的策略来创建一个名为 "absorptionRule" 的定理。但是,我在 ACCEPT_TAC 上遇到异常。当我一个一个执行每一个策略时,一切正常。
val absorptionRule =
TAC_PROOF(
([],``!(p:bool) (q:bool).(p ==> q) ==> p ==> p /\ q``),
REPEAT STRIP_TAC THEN
ACCEPT_TAC(ASSUME ``p:bool``) THEN
RES_TAC);
THEN
策略将第二种策略应用于 所有 第一种策略产生的子目标(source). But ACCEPT_TAC (ASSUME ``p:bool``)
only applies to the first subgoal. You do not see any problem when you apply the tactics one-by-one because you never try to apply the ACCEPT_TAC
to the second subgoal. The following solution uses THENL
而不是 THEN
。
val g1 = (([], ``!(p:bool) (q:bool). (p ==> q) ==> p ==> p /\ q``) : goal);
val absorptionRule =
TAC_PROOF (g1,
REPEAT STRIP_TAC
THENL [ACCEPT_TAC (ASSUME ``p:bool``), RES_TAC]);