問題タブ [apply-script]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
isabelle - より具体的なレンマを取得する標準的な方法
補題があり、たとえばmylem: foo ?a = bar ?a
が 2 回出現するゴールにそれを適用する必要があるとしますが、これらの位置の 1 つだけです。複雑な式になる可能性のある, ...をすべて書き出す必要なく、それを行う 2 つの方法を知っています。foo
baz (foo (f p q)) (foo (g r s))
p
q
- 適切な数 (ここでは 0 または 1) のコマンド
apply (subst mylem)
が続きます。back
- を使用します。
apply (subst mylem[where a = 'foo x y', standard])
ここで、x
およびy
はバインドされていない名前です。
ここでの使用はsubst
デモンストレーションのためだけです。私は本当に補題を変更したいと思っています。たとえば、rule
この方法で曖昧さをなくしたい複数の可能な一致がある場合に使用します。
どちらのアプローチも、私には悪いスタイルに見えます。それを達成するためのより良い方法はありますか?
isabelle - Isabelle: 「induct」または「induct_tac」メソッドの使用
単純な帰納的に定義された集合について補題があるとしましょう:
(「⋀x y」ビットが残ることは私にとって重要です。補題は、長い適用チェーンの途中で私の証明の状態を実際に述べているからです。)
この補題の証明を開始するのに問題があります。ルール誘導で進めたいと思います。
最初の試み
書いてみた
しかし、それはうまくいきません:induct
メソッドは失敗します。x
次のように、y
明示的に修正してからメソッドを呼び出すことで、これを回避できることがわかりましinduct
た。
ただし、実際には適用チェーンの途中なので、構造化された証明ブロックには入りたくありません。
2 回目の試行
代わりにメソッドを使用してみましinduct_tac
たが、残念ながら、ルールを希望どおりにinduct_tac
適用できません。foo.induct
入力すると
最初のサブゴールは
qux x []
これは私が望むものではありません:の代わりに欲しかったのですqux x y
。このinduct
方法はこれを正しく行いましたが、上記で説明した他の問題がありました。