Cosa significa se disabilitiamo K-Rule in AGDA?
-
05-11-2019 - |
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