Ich versuche, eine unäre Operation auf einem Set stalk x
zu definieren, deren typische Elemente der Form germ x U s
sind. In diesem Fall gibt es keine Möglichkeit, eine Operation auf allgemeine Dinge des gleichen Typs wie germ x U s
in einer Weise zu definieren, die auf das reduziert, was ich will, so dass es so aussieht, als müsste ich wirklich auf eine Definition von Fällen zurückgreifen. Ich habe versucht, die folgendenDefinition ohne Rekursion, durch Fälle, in 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) " ,
und bekam die Fehlermeldung, dass U s
sind zusätzliche Variablen auf der RHS. Es scheint, als würde Isabelle mit dieser Syntax nicht die Verbindung zwischen der if
Hypothese und dem folgenden Begriff herstellen, so dass ich, obwohl ich U
und s
in der Bedingungsanweisung gebunden habe, die nächsten Vorkommen von U
und s
(nach then
) interpretiert. als freie Variablen.
Was ich wirklich will, ist nur eine Funktion, die x
und etwas von der Form germ x U s
nimmt und germ x U (-⇩a ⇘objectsmap U⇙ s)
zurückgibt. Nichts hier ist rekursiv.
Gibt es einen Weg, um dieses Problem zu umgehen, oder vielleicht eine bessere Möglichkeit, Definitionen von Fällen zu machen, die es mir erlauben zu definieren, was ich will?
Vielen Dank verwenden können das war für eine Weile stecken geblieben und versuchte einen vernünftigen Weg zu finden und erkannte Isa nicht belle würde sagen "Na und?" wenn Sie nur Existenz annehmen. Behält das AoC im Hinterkopf. –
Eine dumme Frage: wenn ich zwei Dinge "lassen" möchte, etwas wie let (U, s) = (SOME (U, s). Y = Keim x U s) und sei (V, t) = (SOME (V, t). Z = Keim x V t), was ist die korrekte Syntax? Anscheinend nur mit "und" oder das Symbol funktioniert nicht, aber vielleicht bekomme ich einfach nicht die Syntax, die Sie in Ihrer Formulierung verwendet haben, um damit zu beginnen. –
@ JoséSiqueira Ich habe meine Antwort aktualisiert. – chris