Questo è un grande momento di utilizzare la modalità interattiva Agda s'. È come un gioco. Puoi anche farlo manualmente ma è più lavoro. Ecco quello che ho fatto:
f : {A B : Set} -> ((((A -> B) -> A) -> A) -> B) -> B
f x = ?
Goal: B
x : (((A -> B) -> A) -> A) -> B
In sostanza l'unica mossa che abbiamo è di applicare x
, quindi cerchiamo di provare che.
f : {A B : Set} -> ((((A -> B) -> A) -> A) -> B) -> B
f x = x ?
Goal: ((A -> B) -> A) -> A
x : (((A -> B) -> A) -> A) -> B
Ora il nostro obiettivo è un tipo di funzione, quindi proviamo un lambda.
f : {A B : Set} -> ((((A -> B) -> A) -> A) -> B) -> B
f x = x (\y -> ?)
Goal: A
x : (((A -> B) -> A) -> A) -> B
y : (A -> B) -> A
abbiamo bisogno di un A
, e y
può dare a noi se mettiamo a disposizione con l'argomento giusto. Non sono sicuro di cosa si tratta ancora, ma y
è la nostra migliore scommessa:
f : {A B : Set} -> ((((A -> B) -> A) -> A) -> B) -> B
f x = x (\y -> y ?)
Goal: A -> B
x : (((A -> B) -> A) -> A) -> B
y : (A -> B) -> A
Il nostro obiettivo è un tipo di funzione in modo usiamo un lambda.
f : {A B : Set} -> ((((A -> B) -> A) -> A) -> B) -> B
f x = x (\y -> y (\z -> ?))
Goal: B
x : (((A -> B) -> A) -> A) -> B
y : (A -> B) -> A
z : A
Ora abbiamo bisogno di un B
, e l'unica cosa che ci può dare una B
è x
, quindi proviamo di nuovo.
f : {A B : Set} -> ((((A -> B) -> A) -> A) -> B) -> B
f x = x (\y -> y (\z -> x ?))
Goal: ((A -> B) -> A) -> A
x : (((A -> B) -> A) -> A) -> B
y : (A -> B) -> A
z : A
Ora il nostro obiettivo è un tipo di funzione che restituisce A
, ma abbiamo z
che è un A
quindi non c'è bisogno di utilizzare l'argomento. Lo ignoreremo e restituiremo z
.
f : {A B : Set} -> ((((A -> B) -> A) -> A) -> B) -> B
f x = x (\y -> y (\z -> x (\_ -> z)))
E ci si va!
Questo è un problema complesso. Il calcolo sequenziale intuizionista LJ e i suoi risultati correlati giocano ruoli chiave nella sua soluzione "standard". Lo strumento Djinn è un'implementazione "famosa" di una ricerca di prove in questo sistema (approssimativamente), e l'isomorfismo di Curry-Howard permette di presentare queste dimostrazioni come termini lambda. – chi
Inoltre, non esiste una cosa come "convertire" una formula in un'espressione lambda.Ciò equivarrebbe a "convertire" i teoremi nelle loro dimostrazioni, che è una sciocchezza - i teoremi ammettono molte prove distinte, in generale. Nella migliore delle ipotesi, puoi eseguire la ricerca di prove, dove cerchi una di queste prove. – chi
Grazie per i chiarimenti. Sono davvero contento di tante informazioni utili in breve tempo. –