Press "Enter" to skip to content

GOTO 2015 • Fun with the Lambda Calculus • Corey Haines


okay, abbiamo molto da fare quindi
cerchiamo di ottenere attraverso di essa così la maggior parte delle persone hanno
sentito parlare come il calcolo lambda come
molte persone hanno sentito parlare di lambda
calcolo quante persone hanno mai
effettivamente fatto qualsiasi cosa e una sola persona
fantastico un paio di persone sì Tom ha fatto
un po ‘di esso, quindi non sono molto
entrerò come i dettagli di lambda
calcolo e tutto ciò che porta a
numeri di chiesa e li trovo un po ‘
pretenzioso , conosci la lista di fantasia
roba di manipolazione come quella ma il
il codice è davvero bello quando tutto ciò che hai è
un lambda quando tutto ciò che hai è una funzione
e tu non hai nient’altro
abbiamo sentito la maggior parte delle persone
ma poche persone hanno davvero apprezzato
effettivamente entrato e fatto qualsiasi cosa con
o effettivamente visto perché e molto
volte se vedi persone che parlano
è come se costruissi qui
liste e hanno appena messo fuori il
codice quindi cosa mi piace di quello che pensavo
sarebbe divertente fare un po ‘ di programmazione
con un paio costringe il principale
il vincolo è che tutto ciò che abbiamo è un
lambda e in effetti ne ha solo uno
input singolo e output singolo così tanto
dei tempi che codifica puoi imparare molto
se li metti davvero pazzi
vincoli su quello che stai facendo così io
ho pensato che divertimento ha fatto una conferenza sulla programmazione
e stare in piedi qui e in realtà vivere
roba del codice con te l’altra cosa è
stiamo andando che faremo oggi
questi 50 minuti ci costruiremo
quelli che sono chiamati i numeri naturali
qualcuno ha sentito parlare dei numeri che sono
molto utile che faremo loro lo fanno con
qualcosa chiamato assioma di piano nessuno
sentito parlare di assiomi di pianoforte impressionante
così il pianoforte era un 19 ° secolo
matematico italiano giuseppe piano
ha reso questi assiomi come una sorta di a
affermazione sui numeri naturali 0 1
2 tutti quelli che non abbiamo intenzione di andare
in un sacco del tipo di matematica
formalismo al riguardo, ma lo faremo
tipo di passare attraverso a partire da solo a
lambda e ti mostrerò cosa sembra
piace
e stiamo andando a finire con la
numeri naturali divertente esercizio di codifica
tutti sono felici quindi cosa voglio fare
voglio guardare attraverso il piano
assiomi e sono sicuro che tutti voi li avete
nei tuoi appunti squilli come faccio io
in modo che il pianoforte assiomi c’è otto
il primo è piuttosto ovvio
quello che zero è la nostra rete è naturale
numero è come l’inizio
punto i prossimi quattro sono assiomi di uguaglianza
parlano della qualità che questo richiederà
ritorna alla scuola elementare numero quattro
ogni numero xx è uguale a x questo è
reflexive X per tutto xey se x
uguale a y allora y uguale a quello che è
simmetrico per tutti i numeri xy e z se x
è uguale a yey è uguale a Z, quindi X è uguale a Z
quello è transitivo per tutti a e B
questo è importante se B è un
numero naturale e uguale a B allora a è
anche un numero naturale sembra questo
tipo di strano che è necessario
avere un assioma sull’essere chiusi sotto
uguaglianza ma questo è essenziale perché
non significa che se ne hai due
le cose che stai dicendo sono uguali
di loro non è come una mucca o un altro
cosa è un numero naturale che puoi tutti
sai se due cose sono uguali sono
entrambi i numeri naturali sono i prossimi tre
su quello che si chiama un successore
funzione che andremo a costruire
sarà fantastico per ogni numero in
s di in è un numero quindi siamo chiusi
sotto successione credo o successore
per tutti i numeri m e n questo è
M importante è in se e solo se il
il successore di M è uguale al successore del sesso
di n questo è effettivamente uguale a zero
zero uno uguale a due è uguale a due
ma abbiamo intenzione di usare questo per grandi
il vantaggio numero otto dice che per
ogni numero in oh per il se trovi
il successore di n uguale a zero che è
falso così zero è una specie di partenza
punto e useremo effettivamente questo
sorprendentemente c’è un nono assioma che
riguarda l’ induzione che è il modo di
dicendo che oh è vero per zero e
uno ed è vero per tutto così è
vero per tutto quello che sto per saltare
e agita molto le braccia così bene
breve a parte su come userò
Ruby la maggior parte della gente lo penserebbe
come Haskell sarebbe una grande cosa per
questo e sarebbe, ma lo useremo
Ruby perché perché siamo perché bene
Ruby così una lambda e Ruby vengono scritti
in questo modo ottenere l’ identificatore non lo fai
ho bisogno di sapere se non conosci Ruby
va bene perché la maggior parte delle volte
quando ho finito con questo nessuno ha
in realtà ho riconosciuto che ho scritto
Ruby otteniamo un identificatore in questo caso
la funzione di identità
la piccola cosa a punta di coltello e poi
una X che è il tuo parametro, siamo solo
I lambda di Ruby Ruby possono essere multipli
parametri ma ci stiamo solo permettendo
hanno uno e quello che c’è dentro di esso è tua
valore di ritorno in questo caso questo è il
funzione di identità
puoi effettivamente chiamare il parametro Ruby o
Lambda Ruby in due modi diversi
puoi usare questa meravigliosa parentesi con punti
sintassi sembra una chiamata al metodo o
puoi usare questa parentesi che sembra
come accedere a un array e non sembra
come dovrebbe effettivamente eseguire il
lambda, ma se lo gestisci e sì
in realtà è il mio normale prompt che esegue
quindi, ovviamente, useremo il
staffa pazzo uno perché perché non il
l’altro ne ha in realtà uno in più
personaggio e non mi piace scriverlo
tanto iniziamo da tutti
fantastico, abbiamo bisogno di un buon punto di partenza e a
buon punto di partenza come ho imparato l’ultima volta
volta che ho visto, credo che sia il suono
della musica è che è all’inizio
così zero di numero naturale che è un
ottimo punto di partenza quindi iniziamo con
così scriverò davvero
qualcosa che è zero zero
sembra piuttosto semplice
cosa da scrivere, ma il problema è di
Naturalmente io non so nulla di questo
Non ne so nulla è zero
funzione di cui non so nulla
quella affermazione zero che non abbiamo
qualsiasi informazione e anche assiomi
riguardano affermazioni di fatto, non lo sono
quasi come avere un pezzo di codice
così veramente il
assioma è più qualcosa di simile che ho
può affermare che c’è uno zero
c’è qualcosa quindi ora ho questo
altre funzioni, naturalmente , non lo faccio
sapere nulla di che o
e sto solo inventando cose mentre vado
così facciamo un passo indietro e parliamo
su affermare così il comportamento che vogliamo
dall’asserzione è asserzione è qualcosa
che voglio usare per capire se a
la dichiarazione è valida whoops che non era oh
se una dichiarazione è valida ora cosa fa
Significa che non lo so ancora, ma lo so
che se è valido lo voglio stampare
fuori qualcosa come un tè e se lo è
invalido volevo stampare qualcosa
come una F quindi deve dire al
differenza tra queste due cose e
Compro altre due funzioni
e altre due affermazioni chiamate true e
falso
quindi la mia affermazione funziona se la passo vera
Mi aspetterei che produca un tè giusto
e se è falso, lo avrò
emettere una F questa è solo una dichiarazione I
può inventare tutto ciò che voglio perché
non ho niente con cui lavorare così
abbiamo queste due nuove funzioni ora
vero e falso, ricorda che tutto è a
funziona in questo modo ora ho un
un po ‘più di informazioni che posso parlare
su asserire ora così ciò che è vero e
falso quindi ho queste due dichiarazioni
quindi ho intenzione di fare un po ‘di
logica circolare qui perché è così
sempre un ottimo modo per prendere decisioni così
vero è la cosa che se lo passo a
asserisco che vedo un tè giusto e falso
la cosa che se passassi per affermare I
vedo una F fantastica che posso inventare
le cose che voglio dire se dirò
la definizione di affermare il comportamento I
aspettarsi è che se lo passo un vero vedo
un tè e se lo passo falso vedo un
F sembra una specie di circolare ma il
unico modo per parlare davvero di cose dentro
per capire le cose è come si comportano
insieme perché se ti attieni a certi
filosofie niente
esiste realmente nella realtà eccetto come
loro interagiscono con altre cose che sono
tipo di come vivo, quindi lo faremo
così che cosa posso sapere di affermare ora
quello che so è che lo spazio accetta
qualcosa e accetta qualcosa
chiamato un booleano che sto per fare
questo termine fino non so se hai mai
sentito parlare di questo me lo farò fare
significa vero o falso ma non lo sappiamo
cosa asserire in realtà deve fare così noi
capito un po ‘su questo
ha bisogno di un booleano se si guarda all’asserzione
e tu guardi la definizione in questo
Una sorta di logica circolare è che ha
fare tre cose che deve capire
se passo in modo vero o falso ha
per capire cosa fare in modo da stampare un T o
stampa una F e deve anche eseguirla
quella funzione quindi deve capire
quali sono i casi che scelgono quale
caso e poi eseguire quel caso che è
tre cose e ovviamente è così
troppe cose per una funzione di fare
conoscerai uno dei principi fondamentali
del lambda calcolo e lambda in
generale è questo concetto chiamato il
Principio di responsabilità unica per lo più
perché hai solo una linea in
lì e quindi non puoi fare molto così cosa
faremo è dare un’occhiata all’assert
e quello che sappiamo è che è necessario
o mette un T o voglio la funzione
di mette un F così asserire che il suo lavoro è quello di
effettivamente fare una di queste due cose così
abbiamo già detto che quello di boolean è così
sono veri e falsi questi incapsulano il
idea di due cose diverse va bene
li abbiamo proprio lì, così
sembra ragionevole trattarli
gestire un meccanismo di scelta reale in modo che il nostro
zar booleano le cose che siamo
effettivamente intenzione di usare per fare la scelta
ma abbiamo bisogno di un altro costrutto noi
abbiamo tre cose da fare che abbiamo un
responsabilità per affermare che abbiamo un
responsabilità per il nostro booleano z ‘ noi
avere una terza cosa e ho intenzione di tirare
solo una parola fuori dal dizionario e
Io vado a chiamare quel
So che è un po ‘pazzo
quindi cosa fare se il lavoro è fare in realtà
eseguire l’ultima cosa quindi è una specie di
un coordinatore tra il mio metodo di asserzione
e la stessa booleana che sto facendo
questo su e ha due lettere così è
va bene una delle cose che voglio essere
in grado di dirlo a riguardo, quindi voglio averlo
dare un pò di definizione e a
piccoli esempi di esso quindi se lo do a
vero e gli do qualcosa che dice
mi hai dato la verità e poi la do
qualcosa che conosci una seconda cosa
mi mette un falso e io in realtà
scrivi che allora dovrei vederti
mi ha dato una verità e tu mi hai dato un falso
questo è quello che mi piacerebbe che accadesse
Mi piacerebbe la dichiarazione if
in realtà esegue questo coordina
tra il booleano e questi due
le opzioni per gli stickler là fuori sono
tipo di rompere l’unica regola lambda
qui sto usando alcune cose di Ruby da fare
mette e c’è una stringa lì ma
questo è per convenienza che devono sopportare
io un po ‘qui, altrimenti lo faremo
finiscono per girare tutto il giorno generando
numeri e lettere e stringhe e
liste e tutto ciò e io non lo so davvero
sentire come farlo oggi
quindi diamo un’occhiata a questo ora che cos’è
se cosa posso dire se da quando ho
ho scritto questi esempi per quello che posso dire
è che se è una funzione che quando
dato true esegue la prima funzione
che ho dato e se lo do falso esso
esegue la seconda funzione che è sorta
della definizione è quello che voglio
questo costrutto da sapere perché falso
eseguire il secondo
funzione così voglio che questo dica il primo
tempo mi hai dato una vera seconda volta
mi hai dato un falso così fantastico così con
questo posso iniziare a definire un po ‘
se posso iniziare a capirne qualcuno
cose a riguardo
quindi cosa sappiamo che sappiamo che se prende
un diritto booleano che è la prima cosa
restituisce una funzione che richiede
qualcos’altro perché ricorda solo noi
accetta un parametro per funzione che è
questa seconda cosa è il vero caso e poi
ci vuole un caso falso come quello ma io
non so esattamente cosa è ciò che va qui
So che voglio che il comportamento sia se
boolean è true esegue vero caso se
false false case quindi so che è così
tipo di ciò che la funzionalità che
Voglio così una cosa che saremo
implementando un paio di funzioni
che tecnicamente ne prende più di uno
parametro ma a causa del nostro vincolo
è solo un parametro che dobbiamo fare questo
un po ‘come un pazzo rientrato di passaggio
altre funzioni e cose del genere mi
piacerebbe scrivere in questo modo per ordinare di
evidenzia che in realtà è un tre
funzione dei parametri ma perché sono stupido
e metto un limite su me stesso che non posso
fallo bene, quindi aiuta anche con alcuni
roba di indentazione quindi continuiamo a muoverci
su così la dichiarazione if è responsabile
per l’esecuzione abbiamo deciso che il
boolean era responsabile della scelta
Sarebbe bello se potessimo
fai questo ora quello che dice è hey
booleano perché non scegli tra
questi due e poi qualunque cosa ritorni
Devo eseguire devo passare
l’identità perché ricorda che abbiamo
funzioni a parametro singolo, quindi non posso
basta chiamare la funzione che devo darglielo
qualcosa e l’identità è il più vicino
cosa che devo a me non importa come è
solo la sua identità che lo ha identificato
non importa davvero nulla esiste così
okay , ora ne abbiamo un po ‘
vero e falso
ora abbiamo determinato alcuni dei
comportamenti o un comportamento principale che noi
bisogno che sia vero
ci vuole un primo parametro e ci vuole
un secondo parametro perché è quello che
z booleano’ fare e che cosa fa esso
restituiscimi il primo che mi restituisce
il vero caso falso d’ altra parte
fammi solo afferrare quel falso che mi ritorna
la seconda quindi adesso questa affermazione
lavoro passo a questi casi veri nel
caso di caduta se boolean sembra essere vero
mi restituirà il primo
eseguirlo alla grande e vediamo se è così
corre e abbastanza sicuro abbiamo il nostro piccolo
esempio qui funziona così ora abbiamo un if
dichiarazione che abbiamo fatto che abbiamo ideato per
questa pazza idea chiamata boolean z ‘ così noi
può andare avanti per affermare ora così ovviamente
la nostra affermazione è piuttosto semplice perché noi
avere tutto ciò di cui avevamo bisogno, se il mio
boolean è vero, quindi stampa quello
altrimenti lì, quindi, lo controllo
è il tipo di un modo standard per guidarlo
ora posso aspettarmi la mia iniziale
cose che volevo affermare vere e
asserisci falso per stampare T e F e sicuro
abbastanza lo fanno ora ho un asserzione
metodo e, naturalmente, tutti lo sanno
che non puoi codificare se non ne hai uno
asserire metodo perché come lo sai
funziona così ora abbiamo i nostri test
quadro che è davvero tutto ciò di cui hai bisogno
e possiamo tornare così abbiamo fatto molto
di lavoro qui solo per ottenere una sorta di base
cosa e c’è questa cosa strana a
senti il ​​motivo per cui devi metterlo
avvolgere questo in un lambda e io non posso solo
dì se boolean mette T è perché Ruby è
un linguaggio di valutazione desideroso
il che significa che Ruby valuta ogni
argomento della funzione prima di chiamare il
funzione e quindi se non avessi questo
lambda come quello che proverebbe in realtà
per eseguire ciò mette T e le mette F
e poi entrerebbe nelle funzioni
e avresti finito con zero
eccezione di riferimento che è sorta di
eccezione generale che accade sempre in
Ruby okay
quindi abbiamo la nostra asserzione che salterò
solo leggermente in anticipo, perché se lo hai
asserire che è sempre bello avere un
smentire che fa solo questo l’altro
lato useremo questa confutazione successiva
dice solo che il booleano dovrebbe essere falso
c’è un altro discorso che sto mettendo
insieme dove effettivamente costruiamo
logica booleana in mano e non e tutto
quella roba ma non sono questa volta così ora
abbiamo affermato che possiamo tornare a questo
cosa una ricerca così ora siamo di nuovo
in realtà facendo qualcosa di interessante se
proviamo a eseguire questo ovviamente otteniamo
la costante non inizializzata è 0 perché io
non l’ho definito ma definendo
asserire che ora ho un po ‘di
le informazioni su sono 0 so che è 0
deve prendere un parametro e deve
restituire un booleano perché sto affermando
su di esso e ho deciso che asserire
prende un booleano così sto solo andando
ritorna vero perché è sempre il
la cosa più facile da fare non lo sappiamo
nulla su 0 o il parametro
che entra sappiamo che è un
funzione perché tutto è una funzione
quindi dal momento che non ne so nulla
Sto solo inventando qualcosa e
dargli il mio stand-in per hmm va bene così ora
stiamo passando così abbiamo ottenuto la nostra T così abbiamo fatto
ora ho uno 0 e abbiamo un modo
per determinare se qualcosa è o meno
0 molto bello, giusto
è molto lavoro quindi ecco il nostro
ricompensa sì, c’è il mio gatto Zack, va bene così
ora gli assiomi del piano hanno una parte in merito
l’uguaglianza di tutto ciò che abbiamo adesso è zero
abbiamo soddisfatto l’ assioma degli assiomi che siamo
inizierò a parlare di uguaglianza
l’assioma due qui afferma che per ogni
il numero xx è uguale a x
semplice questo è il simmetrico
proprietà quindi verremo qui
e dire che posso affermare proprio quel numero
è uguale a zero e lo zero è carino
questo è ciò che l’assioma due dice chiaramente i
non so quali numeri siano uguali
vi aiuterà se io in realtà cerco di scrivere
che così i numeri equivalgono bene a cosa sono io
so che è un lambda che prende qualcosa
perché ho l’assioma che mi dice
che sta comparando due cose che conosco
che ci vogliono due parametri quindi sono
prenderà il primo e il secondo
parametro ora tutto ciò che abbiamo nel nostro
il sistema di numerazione è zero e uguale a zero
zero non abbiamo altre cose quindi
cosa dovrebbe questo ritorno so che deve farlo
restituire un booleano bene la cosa più semplice
perché sia ​​restituito è vero perché così com’è
stand
questo è tutto ciò che so e se corro
eccolo che sto ancora passando di nuovo
e la vita è bella così la vita è davvero
semplice è un punto di vista filosofico
è semplice quando tutto ciò che hai è 0 ok
questa è la mia affermazione di fatto sul
mondo quindi facciamolo andiamo avanti
alla costruzione di una sorta di naturale
i numeri che abbiamo iniziato a 0 in realtà
tipo di necessità di spostarsi verso l’alto altrimenti
niente è davvero così interessante
diamo un’occhiata a questi successori
funzioni che conosciamo istintivamente
che la funzione successore è una specie di
come più 1 o è il prossimo numero in
lì ma non possiamo usare la nostra intuizione
tutto questo perché ovviamente lo siamo
usando questi assiomi per costruire il
numero naturale quindi se veniamo giù e
parlare di così per ogni numero nel
il successore di n è un numero che sembra carino
semplice in modo che io possa venire e io
posso dire che iniziamo a costruire questo
funziona così se vengo su e dico
successore
beh, è ​​una funzione che prende un numero
deve restituirmi un numero naturale
perché l’assioma dice che il
successore di n è un numero naturale bene
Ho solo due numeri naturali che io
conoscere zero e il successore di
zero e sembra un po ‘strano per
il successore di zero per restituire il
successore di zero così da non farlo
dirmi qualcos’altro Devo solo
sceglierlo per restituire zero ancora solo tipo
di avere zero ma tutto è felice ora
quindi dal momento che è un numero naturale che possiamo
usa la nostra uguaglianza numerica perché dov’è
è questa cosa per tutti a e B se B è a
numero naturale e sono uguali
numeri naturali quindi posso effettivamente scrivere
che i numeri equivalgono al successore di
zero e il successore di zero come faccio io
sappi che è vero, ci siamo
So che questo è vero perché ho il
assioma che dice se x è uguale a zero
uguale a zero quindi i successori che è
questo zero equivale a zero se e solo se
i successori di zero sono uguali a due
successori di zero quindi posso farlo
dichiara questa audace affermazione audace e io
può eseguire i miei test e sicuramente è così
vero come ho detto un paio di volte la vita è
super facile quando tutto quello che hai è zero così
questo numero di punti uguale restituisce sempre
vero , non ci dà molto
informazioni meravigliose ma ecco il
cosa faremo il nostro grande
la svolta arriva quando guardiamo il
numero di assiomi numero otto assioma incredibile
otto dice che per ogni numero nel
successore di n non è zero
quindi se lo salviamo a zero, lo saremo
falso così che ci dà un po ‘
dichiarazione qui in modo che possiamo dire che possiamo
in realtà confutato
l’idea che il successore di zero sia
zero e possiamo anche smentire se proviamo a
fare numeri uguali al successore di
zero e zero quindi queste due affermazioni
secondo quell’assioma che assomiglia a questo
dovrebbe darmi la verità ma il mio numero
il sistema non funziona quindi questi sei tu
sanno questi sono tipo dello stesso, ma in modo
Facciamo un passo indietro all’inizio
e guardare è zero
questo ha bisogno di differenziare ora tra
zero e il successore di zero o zero
e non zero quindi cosa possiamo voler fare
va bene facciamo qualcosa, facciamolo
in modo che lo zero debba essere una funzione
facciamo in modo che funzioni
ritorna vero che dice sì sono zero
successore poiché è zero possiamo sostituirlo
con ciò che era zero ma
vogliamo solo segnarlo e dire che lo sei
non zero, quindi stiamo prendendo il codice
zero era e diceva semplicemente falso
facciamolo in modo che tu possa vederlo così
i successori restituiscono una funzione di cui abbiamo bisogno
l’effetto è zero qui perché zero è
solo facendo questo, ma ora ogni numero che
abbiamo una funzione che ritorna
se è zero o no quindi possiamo solo
chiamalo e ottieni quello vero o falso indietro
quindi a questo punto possiamo solo è zero può
chiedi zero o no e possiamo vedere
che abbiamo un altro T che era questo
confutazione ma i nostri numeri sono uguali
non funziona quindi prenderemo un
un po ‘di un passo indietro per
fallo funzionare e commentale
e guarda di nuovo
i numeri equivalgono a zero zero questo sta andando
per aiutarci a costruire questi numeri uguali
metodo per un secondo, quindi cosa vogliamo
Diciamo è che se lì se i numeri se
il primo numero è zero, quindi possiamo
effettivamente controllare e vedere se il secondo
il numero è zero assicurati di averlo
così e poi altrimenti possiamo solo
dì che non lo sei , non importa quindi questo
dice se il primo numero è zero allora
solo tornare o meno il secondo
il numero è zero e se sono entrambi zero
allora l’hai capito facendo così aiuta
se davvero realizzo quel secondo nulla
okay, questa non è la soluzione finale
ma è qualcosa che soddisfa ciò
abbiamo finora e soddisfa l’assioma
otto quindi se vengo giù oops e mi libero
di questi che è l’assioma otto che posso
vedere che quelli sono soddisfatti ora così
sappiamo che il successore di zero è
non zero e quindi possiamo prendere il
salto per passare a numeri diversi da zero e
in realtà inizia a parlare di questi a
un po ‘di più esponiamo questo
solo un po ‘per dimostrare che no
l’uguaglianza è una sorta di successore di zero
non uguale a zero ma anche zero non
uguale al successore di zero solo gentile
di girarli attorno all’idea che
successore di zero è uguale a non lo è
uguale a 0 e quindi alla forma simmetrica
dice che 0 non è uguale al
successore di 0 un giorno sono in realtà questo
come successore successore
successori successori tipo di cosa faremo
trattare con quello
okay , parliamo di numeri diversi da zero
quindi se saltiamo qui per un
in secondo luogo sappiamo che lo zero è uguale a zero
giusto e sappiamo che M è uguale a se
e solo se il successore di M è uguale
al successore di questo implica questo
il sesto questo implica questo ragazzo che il
successore di zero deve essere uguale a
il successore di M 0 ma c’è una F
la nostra implementazione non soddisfa questo
e questo ha senso perché se guardi
a quello che stiamo facendo siamo sempre
restituendo false quindi cosa dovremmo fare
su questo bene diamo un’occhiata all’assioma
il numero sette dice oops per tutti
i numeri m e n M è uguale a se e solo
se il successore di M è uguale a un successore
di n questo significa che questo dovrebbe essere vero
dal momento che stiamo lavorando solo con 0 e
non proprio zero adesso possiamo mettere qui quello
se il primo numero non è zero, allora il
anche la seconda non può essere zero, quindi posso
restituire semplicemente false se il secondo è
zero devi aprire e poi sono solo
tornerò vero qui oops
ora siamo di nuovo a tutto ciò che passa
tutto questo è così che questo è in realtà
diventando piuttosto brutto qualcuno può leggere
questo è molto difficile
fino a che posso ma siamo mordaci
del mio solito processo di codifica che è
fallo funzionare e rendilo carino
si spera che si ricordi quella seconda parte
di esso in modo da poter tornare falso qui ma
se lo facciamo, otteniamo quel fallimento
è così vero che dobbiamo tornare veri
farlo in modo Whoo va bene così questo funziona per due
numeri ora abbiamo zero e abbiamo il
successore di zero ma non abbiamo
niente più di così così che cosa questo
tipo di dice che vorrei davvero davvero
amarlo se potessi prendere il successore di
il successore di zero e confrontarlo con
il successore di zero non ce l’ha
chiunque pensi che questo dovrebbe funzionare ora
questo è effettivamente due uguale a uno
soprattutto se metto qualcosa in più lì
ma passa tutti, naturalmente, è
sentito che due è uguale a uno per
valori sufficientemente grandi di uno ma per
noi non possiamo attenerci a ciò che non abbiamo
abbiamo solo una dimensione di uno così siamo
andando ad usare il meraviglioso assioma qui
assioma numero otto per capirlo
tuttavia parliamo di come sia
andando ad aiutarci così per ogni numero in
il successore di n è uguale a zero è
falso quindi non c’è nessun numero di chi
il successore è zero ora ho intenzione di fare a
un po ‘ di matematica qui, quindi tieni duro
I cavalli sto per fare la matematica che sto per fare
utilizzare una logica o un meccanismo di prova chiamato
prova per contraddizione, quindi cammineremo
attraverso di esso rapidamente è il mio modo preferito
di provare le cose, supponiamo che questo sia così
è vero come il nostro numero salva
o il nostro sistema dice così fammi fare un po ‘
un po ‘ di impostare una variabile che sto per
diciamo che M è uguale al successore di 0 n
è uguale a 0 quindi se ripeto questo o
sostituire questo in quello che dice
il successore di M è uguale a
successore di sì, ora se sostituisco
eminenti con le loro definizioni giuste
quello che sto facendo è fare per fare qualcosa da fare
fare per fare o M in questo dice il
successore di M e n sappiamo che il
secondo axiom 8 o axiom 7 se M
equivale a se e solo se il successore
di M è uguale a successore di n quale
Dico che dovrei se i successori lo sono
uguali quindi i numeri sono uguali in modo che
mi dice che posso dire questo M n giusto
sostituendo bene fammi sostituire
questi indietro in oh guarda questo cosa fa
quello dice che dice che il successore di
0 è uguale a 0 che viola l’assioma
numero 8, quindi significa che ho raggiunto
una contraddizione, ho raggiunto qualcosa
falso che significa che è sbagliato che è
sbagliato è sbagliato che è sbagliato
sbagliato è sbagliato
quindi dal presupposto che questo era vero guidato
io in una contraddizione che in realtà ho
il contrario di ciò che era questa supposizione
così tech così miniera questi assiomi insieme a
quello che ho finora mi ha mostrato che io
ho bisogno di mettere una refutazione qui, ma i miei topi
il codice non soddisfa questo perché il mio
il codice sa solo di questo chi tutti
seguito che va bene, diamo un
foto di un gatto
ci sono gli squeek, il suo nome completo è possibile
fai in modo che la storia del piccolo Kerri si accenda
Strug di Corey Haims perché trovo
Kerri Strug per essere uno dei più
figure ispiratrici nel mondo quindi io
volevo nominare il mio gatto dopo di lei così
impressionante ora eccoci qui abbiamo un
in mancanza di test tutto è buono abbiamo
sono rimasti solo pochi minuti, quindi abbiamo bisogno
per costruire quattro pagine di valore
quindi veniamo qui, stiamo andando
commenta questa roba per un secondo oh
e stiamo andando a venire il così abbiamo
abbiamo test per il successore che abbiamo questo
test finale che se passa lo sappiamo
che abbiamo zero uno due che abbiamo sortito
della capacità di dare come successore
del successore di zero non è il
successore di zero, quindi quello che vogliamo veramente
a che fare, però, è in grado di scendere a
questo numero è uguale e non lo è
è tutto uguale uguale a zero
ma in realtà vogliamo essere in grado di chiedere
sono questi due numeri lo stesso da fare
questo abbiamo davvero bisogno di sapere quali sono i
cose che hanno causato il primo e il secondo
prima e seconda sono venute chiamando
successore su qualcosa che dobbiamo trovare
fuori da cosa sia quel qualcosa così che siamo
sta per dirlo noi
vorrei davvero una funzione chiamata
predecessore che è una sorta di inverso
del successore è la cosa che ha causato
il mio successore sarà quello che è così se io
prendi il successore di zero e io prendo
il predecessore di ciò che dovrei ottenere
zero e uno giusto tipo
pazzo solo per catturarlo così
predecessore del successore del
successore di zero è il successore di zero
va bene quindi questi sono il tipo di fumo
test solo per aiutarmi a fare in modo che
Ho un predecessore che funziona una volta
avere il predecessore funzionante quindi posso contare
sui numeri
sette che M è uguale a se e solo se
i successori se ribatto che è il
i successori sono uguali solo se i numeri
sono uguali che dicono che dovrei essere in grado di
vieni qui due numeri uguali e dici
numeri uguali al predecessore del primo
il predecessore del secondo se lo faccio se costruisco
il predecessore posso fare questo e i miei numeri
uguale funzionerà ma non l’ ho ancora fatto
quindi non posso in modo che il nostro obiettivo è quello di
costruisci il predecessore okay , facciamolo
veniamo su e guardiamo a zero il
il successore va bene così questi ci hanno ottenuto
abbastanza lontano questo zero e successore dove
stiamo solo tornando vero e falso ma
non dobbiamo solo segnare se lo è
zero o no ma dobbiamo in qualche modo portare
quando chiamiamo il successore, dobbiamo farlo
portare avanti ciò che il numero è che noi
sono il successore di così abbiamo tipo se io
tipo di pseudocodice
Mi piacerebbe che assomigliasse a qualcosa del genere
conosci una coppia e questo perché a quello
punto posso solo dire che il
il predecessore di un numero M è solo il
la cosa più giusta di M ho solo bisogno di a
coppia bene, certo che non ne abbiamo una coppia
tutto quello che abbiamo è un lambda e un paio di
queste cose l’abbiamo fatto quindi costruiamo
le paia sono davvero rapide per poter scrivere
alcune solo delle prove di fumo che sto per fare
in realtà fare una coppia che è vero e
falso e poi ho intenzione di fare un paio
questo è falso e vero e poi io sono
andando ad affermare che la sinistra o il
posso affermare la prima parte del vero falso
questo perché dovrebbe essere vero e posso
confutare la seconda parte del vero falso e
Posso affermare o in realtà posso confutare
la prima parte del falso vero
quindi in pratica ne sto facendo un paio di vero
falso e falso vero e poi lo sono
scrivere un paio di prove di fumo per dirlo
primo e secondo lavoro, okay, quindi cosa facciamo?
conosco bene queste funzioni, lo so
quella coppia deve prendere un primo in a
secondo a destra non so cosa faccia
con loro so che prima sta andando
prendere un paio non so cosa faccia
con esso ancora e so che è il secondo
andando a prendere un paio e sta andando a
fare qualcosa di simile al primo ma io sono
non sono sicuro di cosa si sente un po ‘
come boolean di nuovo siamo boolean il
vero scelto il primo così mi fa
sentiti un po ‘bene, quindi cosa so
sulla coppia quindi lavoriamo con prima e
secondo perché sono una specie di nostro
comportamenti esteriori di cosa so
coppia, so una cosa è una funzione
il che significa che posso chiamarlo con a
parametro non sarebbe fantastico se io
potrei chiamarlo con una funzione
accetta il primo e il secondo
argomenti nella coppia e non restituisce
vero ma il primo quindi questo è un
tecnica mi piace chiamare programmazione di
pio desiderio che è I Codice come
anche se dico sempre a me stesso non lo farebbe
sarebbe bello se potessi farlo e
in realtà ottenere il primo elemento sì, grazie
tu
secondo non sarebbe bello se potessi farlo
che sarebbe fantastico, quindi come faccio?
quel bene che mi dice che il pagatore ha bisogno
per restituire una funzione
qual è quella funzione chiamata bene io sono
andando a chiamarlo seleziona il valore quindi è a
funzione che prende una funzione e quindi
chiama quella funzione passando prima
e secondo grazie
così quando chiamo la coppia con vero e
falso mi restituisce una funzione che
accetta questo valore funzione I
non ha ancora scritto cred, quindi questi sono
passando a guardarlo
per T è così ora ho delle coppie piuttosto fantasiose
quindi passa il test che mi libererò
di questi perché ovviamente questi sono
basta fumare test e se hai visto Jays
parliamo allora si dovrebbe eliminare tutti i tuoi
prova e noi verremo giù e
in realtà useremo un po ‘
di questo per scrivere alcune cose così 0 quello che io
voglio che zero sia una coppia di veri e
qualcos’altro non importa quello che è
e ogni volta che non mi interessa uso il mio
identità da qualche parte c’è un’identità
scherzo furto in là ma non è ora
così 0 ha semplicemente bisogno di prendere il primo
elemento di quel bene che cosa fa un successore
il successore mi costruisce un paio di falsi e
in questo è come dire che il successore
di n è uguale a false nel successore
del successore di n è uguale a falso
falso in modo che ogni successore lo sappia
non è 0 ora cosa fa il predecessore
prende la seconda parte e la restituisce
perché se si fa il successore di un paio di
falso e nel predecessore prende semplicemente
questo significa che se vengo giù
qui e corro i miei test il mio piccolo fumo
il test per il predecessore funziona così ora
il predecessore funziona, il che significa che posso
torna qui e fai il grande trucco
quale è
prendere se il primo non è zero e il
il secondo non è zero, allora lasciami prendere il
predecessore del primo e del
predecessore del secondo e vedere se
sono uguali perché se sono uno
più no non ne ha bisogno di più secondo
sette se primo e secondo sono uguali
se i loro predecessori sono uguali ora
se vengo e mi libero di tutto
quelli oh guarda che è mio
app di produzione passano tutti
huzzah huzzah quindi cosa significa?
dave-o
significa che mi rimangono cinque minuti
eccezionale
naturalmente non mi aspetterei che Dave lo sapesse
che cosa significa tutto questo?
significa bene questo significa che ho il
capacità di legare ho zero ho un
successore di zero e ho un successore
di un successore di zero che io conosco
diverso quindi quello che ho è che ho
zero ne ho uno e ne ho due e io
lo so e ho dimostrato che non è così
uguale a due e che il mio non lo è
sufficientemente grande quindi con un braccio
agitando l’assioma dell’induzione cosa
abbiamo è abbiamo un numero infinito di
numeri naturali per dimostrarlo e per farlo
qualcosa di veramente divertente da quando abbiamo
un paio di minuti costruiamo due naturali
ciò che fa è prendere un numero in
Ruby e mi dà l’associato
successori successori successore successore
così e poi lo faremo
da naturale che fa un po ‘
diverso prende uno dei miei naturali
e lo restituisce come un numero di Ruby e così
quello che posso fare con questo è dire mette da
naturale a naturale dieci e ne stampa dieci
si si lo inchiodò
ciò che questo fa è che ne ho tre
minuti in modo che possiamo fare possiamo usare questi
numeri ora per fare cose interessanti
come questo se scrivessi una funzione
chiamato x che ha preso un fare questo questo molti
volte e detto che se questo molte volte è
zero quindi basta fare l’ identità che è
niente, naturalmente, altrimenti voglio fare
questo passaggio in voi lo sapete molte volte
e quindi richiamare due volte tranne Take
il predecessore quindi questo è il conto alla rovescia
e se ho scritto correttamente posso dire
mette ciao l’indice e dì fare questo a
numero naturale dieci volte
mi manca una parentesi grazie
questo è quando in realtà sono davvero
codifica dal vivo quindi Oh un proc perché n è
in realtà c’è così da uno sguardo naturale
quello sguardo a quel inchiodato
fantastico, quindi è il mio momento di speranza
è stato divertente questo è stato un divertente codifica uno dei
le cose belle di questo che
esercizio per la casa è scrivere aggiungere e
quando scrivi aggiungi in questo modo come te
alzarsi per aggiungere 100 e un
cento e puoi vedere visibilmente
il tuo processo o rallenta è super divertente
va bene grazie mille
Oh prima di andare c’è il pistacchio oh io
amala e anche tu puoi comprare il mio
libro vi ringrazio molto avere un buon
pomeriggio

Please follow and like us: