Che cosa c'è di diverso tra Set e Type in Coq? [chiuso]


13

I tipi AFAIU possono essere a i Setcui elementi sono programmi o i propositioncui elementi sono Prove. Quindi in base a questa comprensione:

Inductive prod (X Y: Type) : Set := 
| pair: X -> Y -> prod X Y.

Il seguente codice dovrebbe essere compilato ma non a causa del seguente errore. Se cambio Setcon Typeo l'altro Typecon Setesso si compila bene. Qualcuno può aiutarmi a capire cosa significa il seguente errore? Sto cercando di insegnare a me stesso Coq usando il libro Software Foundations.

Errore:

Error: Large non-propositional inductive types must be in Type.

2
I dimostratori di teoremi sono sempre stati un'area grigia per CS.SE, ma suppongo che questo sia un buon candidato per le mod per migrare su StackOverflow.
— jmite,

Questa domanda ha alcune risposte qui .
— Anton Trunov,

@jmite Dato che questa domanda riguarda il calcolo delle costruzioni con Coq che serve solo come sintassi concreta, penso che sia in tema qui.
— Gilles 'SO- smetti di essere malvagio' il

Risposte:


12

Coq ha 3 tipi "grandi":

  • Propp1,p2:Pp1=p2
  • Set1=2Set
  • Type è un supertipo di entrambi, che consente di scrivere codice una volta che funziona con entrambi

Sono abbastanza sicuro che il tuo errore sia perché stai definendo i Setcui parametri possono essere Type, il che significa che possono essere Prop, il che non è consentito. Se cambi a questo:

Inductive prod (X Y: Set) : Set := 
| pair: X -> Y -> prod X Y. 

il tuo codice dovrebbe funzionare.


3
Coq non ha alcuna irrilevanza di prova a Propmeno che non venga aggiunto come assioma.
— Geoff,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.