簡體   English   中英

如何對序列應用戰術

[英]How to apply do tactic to a sequence

我深入研究test_nostutter_1 exersize,發現了一種無需重復的解決方法:

Example test_nostutter_1: nostutter [3;1;4;1;5;6].
Proof.
  constructor 3.
  (* This will apply the tactics to the 2-nd subgoal *)
  2: {apply eqb_neq. auto. }
  constructor 3.
  2: {apply eqb_neq. auto. }
  constructor 3.
  2: {apply eqb_neq. auto. }
  constructor 3.
  2: {apply eqb_neq. auto. }
  constructor 2.
Qed.

我決定更多地使用它,在coq參考手冊中,我發現有一種戰術可以使戰術多次循環。

do num expr

將expr評估為v,該v必須是戰術值。 將此戰術值v應用了num次。 假設num> 1,在第一次應用v之后,將v至少一次應用於生成的子目標,依此類推。 如果v的應用程序在num個應用程序完成之前失敗,它將失敗。

所以我嘗試了這個:

do 4 constructor 3; 2: {apply eqb_neq. auto. }

但是不幸的是它失敗了。 僅此有效:

do 1 constructor 3.

是否可以使用do使其工作?

回答

該行中有幾個問題

do 4 constructor 3; 2: {apply eqb_neq. auto. }

首先,您不能在鏈運算符后使用2:{} ; 您可以使用的最接近的東西是本地應用程序 tac; [tac1 | tac2] 序列 tac; [tac1 | tac2] tac; [tac1 | tac2] tac; [tac1 | tac2] 由於我們只想在第二個分支上做某事,因此我們可以在此處省略tac1

另外,您不能在戰術內使用句點。 句點標志着一條語句的結尾,但是整個do表達式只是一個語句。 您應該始終使用序列運算符; 鏈接幾種策略。

最后, do n tac; tac do n tac; tac工作方式與(do n tac); tac類似(do n tac); tac (do n tac); tac 您可以在策略表達式中加上括號,例如用do n (tac; tac)更改行為。

所以這應該工作:

do 4 (constructor 3; [ | apply eqb_neq; auto ]).

離題

我們可以通過幾種方式簡化生產線。

  • 可以給auto額外的定理進行自動化。 可以apply eqb_neq; auto解決任何目標apply eqb_neq; auto apply eqb_neq; auto也可以auto using eqb_neqauto using eqb_neq
do 4 (constructor 3; [ | auto using eqb_neq ]).
  • auto策略永遠不會失敗,因此可以在兩個分支上安全地使用它。
do 4 (constructor 3; auto using eqb_neq).
  • repeat直到出現故障或不再有子目標。 重復以下步驟,直到第3個構造函數不再適用。
repeat (constructor 3; auto using eqb_neq).
  • 我們可以讓Coq選擇要應用的構造函數。 這樣可以完成(或幾乎完成)證明。
repeat (constructor; auto using eqb_neq).
  • 我們還可以使用“ Hint Constructors命令通過auto使nostutter構造nostutter自動化。 現在我們可以使整個過程auto (您可以在您的nostutter定義之后放置hint命令,然后可以在任何地方auto它。)
Hint Constructors nostutter.
auto using eqb_neq.
(* if the above fails, the following increases the search depth so it should succeed. *)
auto 6 using eqb_neq.
  • 實際上,定理eqb_neq已經被注冊為auto 這樣我們就可以:
auto 6.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM