我正在使用Coq的ideslave(a.k.a. XML协议)。通过调用<call val="Goal"><unit/></call>
,典型的反馈看起来像
<value val="good"><option val="some"><goals><list><goal><string>239</string><list><richpp><_><pp>P : <constr.reference>ProgrammingLanguage</constr.reference></pp></_></richpp><richpp><_><pp>iP : <constr.reference>ImperativeProgrammingLanguage</constr.reference> <constr.variable>P</constr.variable></pp></_></richpp><richpp><_><pp>state : <constr.type>Type</constr.type></pp></_></richpp><richpp><_><pp>state_R : <constr.reference>Relation</constr.reference> <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>BSS : <constr.reference>BigStepSemantics</constr.reference> <constr.variable>P</constr.variable> <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>iBSS : <constr.path>Total</constr.path>.<constr.reference>ImpBigStepSemantics</constr.reference> <constr.variable>P</constr.variable> <constr.variable>state</constr.variable> <constr.variable>BSS</constr.variable></pp></_></richpp><richpp><_><pp>b : <constr.reference>bool_expr</constr.reference></pp></_></richpp><richpp><_><pp>c : <constr.reference>cmd</constr.reference></pp></_></richpp><richpp><_><pp>s1 : <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>ms2, ms3 : <constr.reference>MetaState</constr.reference> <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>H : <constr.path>Total</constr.path>.<constr.reference>eval_bool</constr.reference> <constr.variable>s1</constr.variable> <constr.variable>b</constr.variable></pp></_></richpp><richpp><_><pp>H0 : <constr.path>Total</constr.path>.<constr.reference>forward</constr.reference> (<constr.reference>Terminating</constr.reference> <constr.variable>s1</constr.variable>) <constr.variable>ms2</constr.variable></pp></_></richpp><richpp><_><pp>H1 : <constr.reference>lift_relation</constr.reference> (<constr.keyword>fun</constr.keyword> (s : <constr.variable>state</constr.variable>) (ms : <constr.reference>MetaState</constr.reference> <constr.variable>state</constr.variable>) => <constr.reference>access</constr.reference> <constr.variable>s</constr.variable> <constr.variable>c</constr.variable> <constr.variable>ms</constr.variable>)\n <constr.variable>ms2</constr.variable> <constr.variable>ms3</constr.variable></pp></_></richpp><richpp><_><pp>H2 : <constr.variable>ms3</constr.variable><constr.notation> =</constr.notation> <constr.reference>Error</constr.reference><constr.notation> \\/</constr.notation> <constr.variable>ms3</constr.variable><constr.notation> =</constr.notation> <constr.reference>NonTerminating</constr.reference></pp></_></richpp></list><richpp><_><pp><constr.path>Partial</constr.path>.<constr.reference>loop_access_fin</constr.reference>\n (<constr.keyword>fun</constr.keyword> (s : <constr.variable>state</constr.variable>) (ms : <constr.reference>MetaState</constr.reference> <constr.variable>state</constr.variable>) => <constr.reference>access</constr.reference> <constr.variable>s</constr.variable> <constr.variable>c</constr.variable> <constr.variable>ms</constr.variable>)\n (<constr.keyword>fun</constr.keyword> s : <constr.variable>state</constr.variable> => <constr.path>Total</constr.path>.<constr.reference>eval_bool</constr.reference> <constr.variable>s</constr.variable> <constr.variable>b</constr.variable>) <constr.variable>s1</constr.variable> <constr.variable>ms3</constr.variable></pp></_></richpp></goal></list><list><pair><list/><list><goal><string>250</string><list><richpp><_><pp>P : <constr.reference>ProgrammingLanguage</constr.reference></pp></_></richpp><richpp><_><pp>iP : <constr.reference>ImperativeProgrammingLanguage</constr.reference> <constr.variable>P</constr.variable></pp></_></richpp><richpp><_><pp>state : <constr.type>Type</constr.type></pp></_></richpp><richpp><_><pp>state_R : <constr.reference>Relation</constr.reference> <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>BSS : <constr.reference>BigStepSemantics</constr.reference> <constr.variable>P</constr.variable> <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>iBSS : <constr.path>Total</constr.path>.<constr.reference>ImpBigStepSemantics</constr.reference> <constr.variable>P</constr.variable> <constr.variable>state</constr.variable> <constr.variable>BSS</constr.variable></pp></_></richpp><richpp><_><pp>b : <constr.reference>bool_expr</constr.reference></pp></_></richpp><richpp><_><pp>c : <constr.reference>cmd</constr.reference></pp></_></richpp><richpp><_><pp>s1, s2, s3, s4 : <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>ms : <constr.reference>MetaState</constr.reference> <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>H : <constr.path>Total</constr.path>.<constr.reference>eval_bool</constr.reference> <constr.variable>s1</constr.variable> <constr.variable>b</constr.variable></pp></_></richpp><richpp><_><pp>H0 : <constr.variable>s1</constr.variable><constr.notation> <=</constr.notation> <constr.variable>s2</constr.variable></pp></_></richpp><richpp><_><pp>H1 : <constr.reference>access</constr.reference> <constr.variable>s2</constr.variable> <constr.variable>c</constr.variable> (<constr.reference>Terminating</constr.reference> <constr.variable>s3</constr.variable>)</pp></_></richpp><richpp><_><pp>H2 : <constr.variable>s3</constr.variable><constr.notation> <=</constr.notation> <constr.variable>s4</constr.variable></pp></_></richpp><richpp><_><pp>H3 : <constr.path>Total</constr.path>.<constr.reference>loop_access_fin</constr.reference>\n (<constr.keyword>fun</constr.keyword> (s : <constr.variable>state</constr.variable>) (ms : <constr.reference>MetaState</constr.reference> <constr.variable>state</constr.variable>) => <constr.reference>access</constr.reference> <constr.variable>s</constr.variable> <constr.variable>c</constr.variable> <constr.variable>ms</constr.variable>)\n (<constr.keyword>fun</constr.keyword> s : <constr.variable>state</constr.variable> => <constr.path>Total</constr.path>.<constr.reference>eval_bool</constr.reference> <constr.variable>s</constr.variable> <constr.variable>b</constr.variable>) <constr.variable>s4</constr.variable> <constr.variable>ms</constr.variable></pp></_></richpp><richpp><_><pp>IHloop_access_fin : <constr.path>Partial</constr.path>.<constr.reference>loop_access_fin</constr.reference>\n (<constr.keyword>fun</constr.keyword> (s : <constr.variable>state</constr.variable>) (ms : <constr.reference>MetaState</constr.reference> <constr.variable>state</constr.variable>) =>\n <constr.reference>access</constr.reference> <constr.variable>s</constr.variable> <constr.variable>c</constr.variable> <constr.variable>ms</constr.variable>) (<constr.keyword>fun</constr.keyword> s : <constr.variable>state</constr.variable> => <constr.path>Total</constr.path>.<constr.reference>eval_bool</constr.reference> <constr.variable>s</constr.variable> <constr.variable>b</constr.variable>)\n <constr.variable>s4</constr.variable> <constr.variable>ms</constr.variable></pp></_></richpp></list><richpp><_><pp><constr.path>Partial</constr.path>.<constr.reference>loop_access_fin</constr.reference>\n (<constr.keyword>fun</constr.keyword> (s : <constr.variable>state</constr.variable>) (ms0 : <constr.reference>MetaState</constr.reference> <constr.variable>state</constr.variable>) => <constr.reference>access</constr.reference> <constr.variable>s</constr.variable> <constr.variable>c</constr.variable> <constr.variable>ms0</constr.variable>)\n (<constr.keyword>fun</constr.keyword> s : <constr.variable>state</constr.variable> => <constr.path>Total</constr.path>.<constr.reference>eval_bool</constr.reference> <constr.variable>s</constr.variable> <constr.variable>b</constr.variable>) <constr.variable>s1</constr.variable> <constr.variable>ms</constr.variable></pp></_></richpp></goal></list></pair><pair><list/><list><goal><string>212</string><list><richpp><_><pp>P : <constr.reference>ProgrammingLanguage</constr.reference></pp></_></richpp><richpp><_><pp>iP : <constr.reference>ImperativeProgrammingLanguage</constr.reference> <constr.variable>P</constr.variable></pp></_></richpp><richpp><_><pp>state : <constr.type>Type</constr.type></pp></_></richpp><richpp><_><pp>state_R : <constr.reference>Relation</constr.reference> <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>BSS : <constr.reference>BigStepSemantics</constr.reference> <constr.variable>P</constr.variable> <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>iBSS : <constr.path>Total</constr.path>.<constr.reference>ImpBigStepSemantics</constr.reference> <constr.variable>P</constr.variable> <constr.variable>state</constr.variable> <constr.variable>BSS</constr.variable></pp></_></richpp><richpp><_><pp>b : <constr.reference>bool_expr</constr.reference></pp></_></richpp><richpp><_><pp>c : <constr.reference>cmd</constr.reference></pp></_></richpp><richpp><_><pp>s : <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>ms : <constr.reference>MetaState</constr.reference> <constr.variable>state</constr.variable></pp></_></richpp><richpp><_><pp>H : <constr.reference>access</constr.reference> <constr.variable>s</constr.variable> (<constr.reference>Swhile</constr.reference> <constr.variable>b</constr.variable> <constr.variable>c</constr.variable>) <constr.variable>ms</constr.variable></pp></_></richpp><richpp><_><pp>H0 : <constr.path>Total</constr.path>.<constr.reference>loop_access_inf</constr.reference>\n (<constr.keyword>fun</constr.keyword> (s : <constr.variable>state</constr.variable>) (ms : <constr.reference>MetaState</constr.reference> <constr.variable>state</constr.variable>) => <constr.reference>access</constr.reference> <constr.variable>s</constr.variable> <constr.variable>c</constr.variable> <constr.variable>ms</constr.variable>)\n (<constr.keyword>fun</constr.keyword> s : <constr.variable>state</constr.variable> => <constr.path>Total</constr.path>.<constr.reference>eval_bool</constr.reference> <constr.variable>s</constr.variable> <constr.variable>b</constr.variable>) <constr.variable>s</constr.variable></pp></_></richpp><richpp><_><pp>H1 : <constr.variable>ms</constr.variable><constr.notation> =</constr.notation> <constr.reference>NonTerminating</constr.reference></pp></_></richpp></list><richpp><_><pp><constr.path>Partial</constr.path>.<constr.reference>loop_access_fin</constr.reference>\n (<constr.keyword>fun</constr.keyword> (s0 : <constr.variable>state</constr.variable>) (ms0 : <constr.reference>MetaState</constr.reference> <constr.variable>state</constr.variable>) => <constr.reference>access</constr.reference> <constr.variable>s0</constr.variable> <constr.variable>c</constr.variable> <constr.variable>ms0</constr.variable>)\n (<constr.keyword>fun</constr.keyword> s0 : <constr.variable>state</constr.variable> => <constr.path>Total</constr.path>.<constr.reference>eval_bool</constr.reference> <constr.variable>s0</constr.variable> <constr.variable>b</constr.variable>) <constr.variable>s</constr.variable> <constr.variable>ms</constr.variable><constr.notation> \\/</constr.notation>\n<constr.path>Partial</constr.path>.<constr.reference>loop_access_inf</constr.reference>\n (<constr.keyword>fun</constr.keyword> (s0 : <constr.variable>state</constr.variable>) (ms0 : <constr.reference>MetaState</constr.reference> <constr.variable>state</constr.variable>) => <constr.reference>access</constr.reference> <constr.variable>s0</constr.variable> <constr.variable>c</constr.variable> <constr.variable>ms0</constr.variable>)\n (<constr.keyword>fun</constr.keyword> s0 : <constr.variable>state</constr.variable> => <constr.path>Total</constr.path>.<constr.reference>eval_bool</constr.reference> <constr.variable>s0</constr.variable> <constr.variable>b</constr.variable>) <constr.variable>s</constr.variable><constr.notation> /\\</constr.notation> <constr.variable>ms</constr.variable><constr.notation> =</constr.notation> <constr.reference>NonTerminating</constr.reference></pp></_></richpp></goal></list></pair><pair><list/><list/></pair></list><list/><list/></goals></option></value>
正如您所看到的(如您所知),“目标”标签下有四个列表。 Coq document给了他们四个名字(当前目标,背景目标,搁置目标和被遗弃的目标)。
我的问题:
后三个目标类别是什么:背景目标,搁置目标和被遗弃的目标?我找不到关于“搁置”和“遗弃”目标的文档。
这三者有什么不同?他们的名字很相似。
为什么我们在背景目标(即第二个列表)下有pair
,然后在pair
下再次列出,然后是实际目标?第一个pair
下的背景目标与第二个pair
下的背景目标之间是否存在差异?
感谢您的帮助!
答案 0 :(得分:4)
您看到的证明表示只是核心Proof.t
object的具体化,其中包含有关当前证据的信息。
type 'a pre_goals = {
fg_goals : 'a list;
(** List of the focussed goals *)
bg_goals : ('a list * 'a list) list;
(** Zipper representing the unfocussed background goals *)
shelved_goals : 'a list;
(** List of the goals on the shelf. *)
given_up_goals : 'a list;
(** List of the goals that have been given up *)
}
后三个目标类别是什么:背景目标,搁置目标和被遗弃的目标?我找不到关于&#34; shelved&#34;的文档。和&#34;放弃&#34;目标
后台目标代表的目标不是&#34;焦点&#34;。从8.5开始,Coq就有了一个多目标焦点的概念&#34;这意味着战术可以在一系列目标上运作。这可以构造为堆栈,因此列表列表。关于这对,它用于&#34;非聚焦&#34;,但它可能很快消失,请参阅此Pull Request中的讨论以获取更多信息。
搁置的目标是隐藏在通常的交互式校对环境中的目标。例如,这些是您可能只想通过副作用解决的目标─想到exists x, P x
,您可能希望将x
置于搁置中并直接解决P x
──或其他机制,如类型分辨率。
最后放弃目标是为用户承认的目标,因此被视为公理。