add ch3-1
This commit is contained in:
parent
baf64f0570
commit
0381d636d2
3 changed files with 12 additions and 1 deletions
BIN
TypeTheoryAndFormalProofCh3Sec1.pdf
Normal file
BIN
TypeTheoryAndFormalProofCh3Sec1.pdf
Normal file
Binary file not shown.
|
@ -51,4 +51,15 @@ $arrow.twohead.r_beta lambda x : (\b\o\o\l->\n\a\t) . space x$
|
|||
|
||||
第二個範例,就是關於iteration迭代。
|
||||
|
||||
設有型別$delta$,和函數$F : delta->delta$,定義$D_(delta,F)$是函數,$lambda x : delta . F(F(x))$。所以$D_(delta,F)$是$F$的第二迭代,也標記為$D circle.stroked.small D$。
|
||||
設有型別$sigma$,和函數$F : sigma->sigma$,定義$D_(sigma,F)$是函數,$lambda x : sigma . F(F(x))$。所以$D_(sigma,F)$是$F$的第二迭代,也標記為$D circle.stroked.small D$。我們如何讓$sigma$不是指單一個型別,而是任意型別的代稱呢?我們又可以用什麼方法讓$F$可以是任意函數呢?我們可以用下列表示方式:
|
||||
|
||||
$D equiv lambda alpha : ast . lambda f : alpha->alpha . space lambda x : a f(f x)$,$D$叫做多型polymorphic函數,第一個抽象abstration是二階second-order的。因此這樣:
|
||||
|
||||
$D space \n\a\t arrow.twohead.r_(beta) lambda f : \n\a\t -> \n\a\t space . lambda x : \n\a\t space f(f x)$其中 $lambda x . f(f x)$即$f circle.stroked.small f$
|
||||
|
||||
另外$D space \n\a\t space \s arrow.twohead.r_(beta) lambda s. space s(s x)$這是函數將自然數$x$轉成$s (s x)$,亦即「```function(x){x+2}```」。至於表示函數合成的$x space circle.stroked.small space y$要如何表示?
|
||||
|
||||
我們可以用下列表示方式:
|
||||
$circle.stroked.small equiv lambda alpha:ast. lambda beta : ast. lambda gamma : ast .lambda f : alpha -> beta . lambda g : beta -> gamma . lambda x. g (f x)$
|
||||
|
||||
因此$circle.stroked.small space A space B space C space F space G $可以beta-reduction,轉為$G circle.stroked.small F$,即$lambda x : A . G(F(x))$。
|
Binary file not shown.
Loading…
Reference in a new issue