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.