イザベル理論ファイルでは、私は次のようなシンプルな1行の戦術を書くことができますが:イザベルのMLレベルで単純な戦術を簡単に書く方法はありますか?
apply (clarsimp simp: split_def split: prod.splits)
私は証明を自動化するMLコードを書き始めるとき、私はML tactic
オブジェクトを生成するために、しかし、見つけます、これらのワンライナーではなく、冗長になる:
clarsimp_tac (Context.proof_map (
Simplifier.map_ss (fold Splitter.add_split @{thms prod.splits})
#> Simplifier.map_ss (fn ss => ss addsimps [@{thm split_def}]))
@{context}) 1
はイザベル/ MLレベルで簡単な1行の戦術を書くための簡単な方法はありますか?
たとえば、context -> tactic
という種類の機能を生成する、アンチクォーテーション:@{tactic "clarsimp simp: split_def split: prod.splits"}
のようなものは理想的な解決策です。
'try0'のコードを調べたいと思うかもしれません。 AFAIK、それはあなたの反駁で提案するものと同様のトリックを行います。 –
@LarsNoschinski: 'try0'は最初は有望でしたが、残念なことにproof-state(' state')オブジェクトを使用して動作しますが、 'tactic'が呼び出される状況ではまだ使用できません。可能なアプローチは、部分的に証明された「thm」を新しい証明状態オブジェクトに注入し、それにメソッドを適用し、結果を抽出することである。残念ながら、これを行うための明白なメカニズムもないようです。 – davidg
いくつかの質問と回答とコメントが広がっていますが、それは少し難しそうです。 'isabelle-users'で普通のメーリングリストの議論を始める方が良いでしょう。 – Makarius