私は、stalk x
の単項演算を定義しようとしています。その典型的な要素の形式はgerm x U s
です。この場合、同じタイプの一般的なものに対して操作を定義する方法はありません。つまり、私が望むものに減らす方法でgerm x U s
を定義する方法はありません。したがって、実際にはケースで定義する必要があるようです。私は、次のIsabelleで再帰を使わない定義
definition stalk_mop2 :: "'a ⇒(('a set × 'a) set ⇒ ('a set × 'a) set) " where
"stalk_mop2 x y = ((λ z . if (∃ U s. y= germ x U s) then
(germ x U (-⇩a ⇘objectsmap U⇙ s)) else undefined) z) " ,
を試みたとU s
はRHS上の余分な変数であることを示すエラーメッセージが表示されました。私は条件文でU
とs
を結合しなかったが、それは明らかに(then
後)U
とs
の次の出現を解釈するように、この構文を使用することにより、イザベルは、if
仮説と、次の用語との間の接続を行わないように思えます自由変数として。
私が本当に欲しいのは、という形式のものと、germ x U s
の何らかの形をとり、germ x U (-⇩a ⇘objectsmap U⇙ s)
を返す関数です。ここでは再帰的なものはありません。
この問題を回避する方法がありますか、または私が欲しいものを定義できるケースで定義するのが良い方法でしょうか?
次のいずれかの方法で、複数の
let
Sを使用することができますが、ためにどうもありがとうございますこれは、まともな方法を見つけようとしばらくの間立ち往生していて、Isaベールは「だから何?」と言うでしょう。あなたが存在すると仮定すれば。 AoCを念頭に置きます。 –let(U、s)=(SOME(U、s)、y = germ x U s)とlet(V、t)=(SOME V、t)。z = germ x V t)、正しい構文は何ですか?どうやら "and"や記号を使うだけではうまくいきませんが、おそらく私があなたの処方で使った構文が始まっていないかもしれません。 –
@JoséSiqueira私は自分の答えを更新しました。 – chris