ltac

    3

    1答えて

    同じ構造に従ういくつかの証明があります。最初はtrivialで終わることができ、他のすべてはauto with foo_dbで終わることができます。foo_dbは、最初の証明が完了した後にヒントが埋め込まれたヒントデータベースです。私はauto with foo_dbを使用してこれらの証明をすべて解決するLtacプロシージャを作成したいと思います。しかし、そのLtacを実行して私の証明の最初のもの

    0

    2答えて

    この簡単な開発を考えてみましょう。私は2つの些細なデータ型を持っている: Inductive A := | A1 | A2. Inductive B := | B1 : A -> B | B2. は、今私は関係の概念を導入し、データ型AとBに発注定義誘導データ型として表現: Definition relation (X : Type) := X -> X -> Prop. Re

    2

    1答えて

    時には私は、別の空間に投影することによって最もよく行われる証拠を持っています。私は、次の操作を行い、現時点では: Ltac project x y := let z := fresh in remember x as y eqn:z; clear z; clear x. しかし、私は次のエラーを取得する: remember (f x) as y eqn:H; clear H

    1

    1答えて

    バインダーの下で式を一般化する必要があります。例えば、私は私の目標で二つの表現があります。 (fun a b => g a b c) と (fun a b => f (g a b c)) をそして私はg _ _ c一部を一般化したい::行うには 一つの方法は、最初にそれらを書き換えることです (fun a b => (fun x y => g x y c) a b) および第2のもの:

    3

    1答えて

    私はそれに合うようにその名前でhypotesisを得る方法を探しています。 H0 : A /\ B ================== A Coq < mytactic H0. ありがとう:次のように使用される Ltac mytactic h_name := let h := hyp_from_name h_name in match h with | _ /\

    2

    1答えて

    1つまたは3つの引数をとるcoqのLtac戦術を作りたいと思います。私はLibTacticsモジュールでは約ltac_No_argを読みましたが、私はそれを正しく理解している場合、私はと私の戦術を起動する必要があります。非常に便利ではありません Coq < mytactic arg_1 ltac_no_arg ltac_no_arg. 。 このような結果を得る方法はありますか? : Coq <

    1

    2答えて

    私は現在、容易に生成できる用語(この具体例では、tauto)を使用して存在量限定子をインスタンス化する手法を作成しようとしています。私の最初の試み: Ltac mytac := match goal with | |- (exists (_ : ?X), _) => cut X; [ let t := fresh "t" in intro t ; exis

    2

    1答えて

    と言っていいでしょう。clear_multiple H1, H2, H3.のようなことをするために、一度に複数の仮説をクリアするための戦術を持ちたいとします。私は、次のように、ペアを使用していることを実行しようとしました: Ltac clear_multiple arg := match arg with | (?f, ?s) => clear s; clear_multiple f | ?

    6

    2答えて

    Ltacで複雑な戦術を実装すると、失敗すると予想されるLtacコマンドや戦術呼び出しがあります(例えば、repeatを終了する、またはバックトラックを引き起こすなど)。これらの障害は通常、障害レベル0で発生します。 高レベルで発生した障害は、周囲のtryまたはrepeatブロックを「エスケープ」し、予期しない障害を通知するのに役立ちます。 私が紛失しているのは、戦術を実行し、レベル0であっても、失