2016-03-20 3 views
2

den Begriff der Untergruppen als Prädikate verwenden,Realisierung Ebene polymorphe Subsets innerhalb Aufzeichnungen

ℙ : ∀ {b a} → Set a → Set (a ⊔ suc b) 
ℙ {b} {a} X = X → Set b 

Ich mag würde Strukturen mit einem Prädikat auf Subsets ausgestattet betrachten,

record SetWithAPredicate {a c} : Set {!!} where 
    field 
    S : Set a 
    P : ∀ {b} → ℙ {b} S → Set c 

Dies ist eine schlecht Geformter Aufbau aufgrund der in verwendeten Pegelquantifizierung. Alles funktioniert gut, wenn ich S, P als Parameter für ein Modul verwende, aber ich möchte, dass es sich um Datensätze handelt, damit ich Konstruktionen für sie erstellen und Instanzen davon angeben kann.

Ich habe ein paar andere Dinge versucht, wie z. B. das Verschieben der Ebene b von in die Definition über ein existentielles, aber dann führte das zu metavarable Problem. Ich habe versucht, auch die Art der P ändern,

P : ℙ {a} S → Set c 

aber dann kann ich nicht fragen, mehr für, sagen wir, die leere Menge die Eigenschaft haben:

P-⊥ : P(λ _ → ⊥) 

Dies wird seit Set != Set a nicht gut getippt - - Ich muss zugeben, ich habe versucht, Level.lift hier zu verwenden, habe es aber versäumt. Allgemeiner erlaubt dies auch nicht, um Verschlusseigenschaften auszudrücken, wie P ist unter willkürlichen Gewerkschaften geschlossen --- das ist, was ich wirklich interessiert bin.

Ich verstehe, dass ich Ebene Polymorphie einfach vermeiden kann,

ℙ' : ∀ {a} → Set a → Set (suc zero ⊔ a) 
ℙ' {a} X = X → Set 

aber dann einfache Elemente wie die größte Teilmenge,

ℙ'-⊤ : ∀ {i} {A : Set i} → ℙ' A 
ℙ'-⊤ {i} {A} = λ e → Σ a ∶ A • a ≡ e 
-- Σ_∶_•_ is just syntax for Σ A (λ a → ...) 

nicht einmal typecheck!

Vielleicht habe ich den Begriff der Teilmenge als Prädikat nicht richtig erkannt - jeder Rat wäre willkommen. Vielen Dank!

+0

Was meinen Sie mit "unter Gewerkschaften geschlossen"? Jedes 'P: ℙ A' ist wie eine Untermenge von' A', aber die üblichen Begriffe der Vereinigung wirken auf 'Set'-s, nicht auf Elemente von' A', außer 'A = Set i'. –

+0

Die Vereinigung von Teilmengen kann als Existenz-/Summenart realisiert werden; insbesondere A ∪ B = λ e → A e ⊎ B e –

+0

Aber dann sind 'A' oder' B' nicht unter Vereinigung geschlossen, da ihre Vereinigung noch eine andere Teilmenge/Eigenschaft ist. –

Antwort

6

Sie müssen b heraus heben aus P wie diese

record SetWithAPredicate {a c} b : Set {!!} where 
    field 
    S : Set a 
    P : ℙ {b} S → Set c 

Ja, das ist hässlich und ärgerlich, aber das ist, wie es in Agda getan (an example aus Standardbibliothek: _>>=_ nicht richtig Universum polymorph ist). Lift kann manchmal helfen, aber es schnell gets out of hand.

Vielleicht habe ich den Begriff der Teilmenge als Prädikat in geeigneter Weise nicht realisiert - jeder Rat würde geschätzt werden.

Ihre Definition ist korrekt, aber es gibt eine andere, siehe 4.8.3 in Conor McBride's lecture notes.

+0

Ich bin jetzt der Traurige: '(--- aber dankbar für Ihre Antwort. –