Ich arbeite an einer Theorie zu produzieren, die Verwendung von Ringen erfordert, so importierte ich die folgenden Theorien: https://www.isa-afp.org/browser_info/devel/AFP/Group-Ring-Module/eine Definition Mit Hilfe ein spezielles Beispiel einer locale in Isabelle
Im Moment habe ich eine Menge X definiert von einem bestimmten Typ, und ich möchte Operationen darauf definieren, um es zu einem Ring zu machen, wie im Gebietsschema "Ring" der importierten Theorie.
Wie definiere ich einen Ring mit Träger X und habe es als eine Instanz des Gebiets "Ring" erkannt?
Die locale „Ring“ wird durch die Erweiterung „CGRUPPE“ erklärt, der wiederum durch die Erweiterung „Gruppe“ erklärt, die in der Theorie ist „Algebra2.thy“:
record 'a Group = "'a carrier" +
top :: "['a, 'a ] ⇒ 'a" (infixl "⋅ı" 70)
iop :: "'a ⇒ 'a" ("ρı _" [81] 80)
one :: "'a" ("ı")
locale Group =
fixes G (structure)
assumes top_closed: "top G ∈ carrier G → carrier G → carrier G"
and tassoc : "⟦a ∈ carrier G; b ∈ carrier G; c ∈ carrier G⟧ ⟹
(a ⋅ b) ⋅ c = a ⋅ (b ⋅ c)"
and iop_closed:"iop G ∈ carrier G → carrier G"
and l_i :"a ∈ carrier G ⟹ (ρ a) ⋅ a = "
and unit_closed: " ∈ carrier G"
and l_unit:"a ∈ carrier G ⟹ ⋅ a = a"
Ein weiteres mögliches Problem, das ich antecipate: Wenn ich mich nicht irre, muss der Träger vom Typ 'a set sein, aber meine Menge X ist vom Typ (' a set \ times 'a) gesetzt. Gibt es eine Problemumgehung?
EDIT: Um die sequenzielle Frage in den Kommentaren besser zu formulieren, hier sind einige Teile von dem, was ich getan habe. ,
definition prestalk :: "'a ⇒('a set × 'a) set" where
"prestalk x = { (U,s). (U ∈ T) ∧ x ∈U ∧ (s ∈ carrier (objectsmap U))}"
definition stalkrel :: "'a ⇒ (('a set × 'a) × ('a set × 'a)) set" where
"stalkrel x = {((U,s), (V,t)). (U,s) ∈ prestalk x ∧ (V,t) ∈ prestalk x ∧ (∃W. W ⊆ U∩V ∧ x∈W ∧
restrictionsmap (V,W) t = restrictionsmap (U,W)) s} "
ich bewiesen dann, dass für jedes x: Alles, was im Rahmen eines Gebietsschema presheaf, das behebt folgt ist (unter anderem):
T :: 'a set set and
objectsmap :: "'a set ⇒ ('a, 'm) Ring_scheme" and
restrictionsmap:: "('a set ×'a set) ⇒ ('a ⇒ 'a)"
Ich stellte dann die folgende stalkrel x ist eine Äquivalenzrelation und definiert:
definition germ:: "'a ⇒ 'a set ⇒ 'a ⇒ ('a set × 'a) set" where
"germ x U s = {(V,t). ((U,s),(V,t)) ∈ stalkrel x}"
definition stalk:: "'a ⇒(('a set × 'a) set) set" where
"stalk x = {w. (∃ U s. w = germ x U s ∧ (U,s) ∈ prestalk x) }"
ich versuche, dass jeder zu zeigen, für x diesen Stiel x ist ein Ring, und der Ring Betrieb ist „bui Aus den Ringoperationen von Ringen objectsmap (U∩V)
, d. h. ich möchte germ x U s + germ x V t
zu germ x (U∩V) (restrictionsmap (U, (U∩V)) s + restrictionsmap (V, (U∩V)) t)
, wobei diese letzte Summe die Summe von Ring objectsmap (U∩V)
ist.
Brilliant, aber ich stieß auf ein dummes Problem beim Versuch zu implementierenwenn Definieren meiner neuen Ring-Operation in Bezug auf eine andere .. Ich dachte, nur mit Steuerblöcken würde den Trick tun, aber es gibt einen inneren Syntaxfehler und fehlschlägt zu analysieren. –
Hier ist, was ich ausprobiert habe: function stalk_pop :: "'a ⇒ [(' a satz × 'a) gesetzt, (' a satz × 'a) eingestellt] ⇒ (' a satz × 'a) setze" wo "stalk_pop x (keim x U s) (keim x V t) = keim x (U∩V) (pop⇘objectsmap (U∩V) ⇙ (restrictionsmap (U, U∩V) s) (restrictionsmap (V, U∩ V) t)) "| "stalk_pop x _ _ = undefined" (um später zu beweisen, ist wohldefiniert, würde ich gerne den Definitionsbefehl verwenden, aber er beschwert sich über die Argumente auf der LHS. Hier Keim ist eine zuvor definierte Konstante und Objectsmap nimmt 'einen Satz zu klingeln). –
Es gibt zu wenig Kontext, um Ihr Problem mit 'stalk_pop' zu beantworten. Wenn 'keim' der Konstruktor eines Datentyps ist, dann probiere das Funktionspaket (Befehl' fun') zum Definieren von 'stalk_pop'. Wenn 'keim' etwas anderes ist (insbesondere wenn es sich um eine nicht-injektive Funktion handelt), wird es Ihnen schwer fallen, mit' stalk_pop' zu arbeiten. Es ist normalerweise besser, die Definition von 'stalk_pop' auf beliebige Argumente zu verallgemeinern und daraus die gegebene Gleichung abzuleiten. –