Domanda

Tl; dr: posso dire: "K-Rule in AGDA consente alle persone di abbinare $ forall aa equiv a $ insieme a $ Reflit $"?

In https://agda.readthedocs.io/en/v2.5.4.1/language/without-k.html#without-k, K-RULE viene introdotto come regola implicita ed è abilitata in modo defativa. Se lo capisco correttamente, significa parametro di tipo $ forall aa equiv a $ può essere abbinato a $ Reflit $. Se disabilitiamo K-Rule, cosa succederà? Che tipo di codici mi impedirà di scrivere? Perché possiamo sempre costruire $ forall a. a equiv a $, anche senza K, possiamo sempre ottenere un'istanza di $ T $ passando $ Reflit $ a qualsiasi funzione con il tipo $ forall aa equiv a destrorrow t $.

Il Doc di Agda mi ha dato un esempio che mostra davvero una circostanza che può funzionare solo con K:

K : {A : Set} {x : A} (P : x ≡ x → Set) →
    P refl → (x≡x : x ≡ x) → P x≡x
K P p refl = p

In questo codice, se riusciamo a pattern match x≡x insieme a refl, P refl può essere banalmente equivalente a P x≡x (ma senza K, non possiamo).

Anche questo significa: "K consente alle persone di abbinare $ forall aa equiv a $ insieme a $ Reflit $"? Non ho trovato la risposta sul doc.

Se disabilitiamo K, il semantico del tipo di uguaglianza di AGDA (CH-ISO) cambierà?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top