-2 - 逻辑的边界
(Press ? for help, n and p for next and previous slide)
若 \(\Gamma\) 是一个 wff 集合,那么 \(\Gamma\) 中的一个推导是一个 wff 有穷序列 \(\langle\alpha_1, \ldots,\alpha_n \rangle\),对任意 \(i\leq n\) 有下面三者之一成立:
所以乘法可以写成: \[ \text{MUL}\equiv\lambda m.\lambda n.\lambda f.\lambda x. m\;(n\;f)\;x \] 解释:
在 λ 演算里,所有函数都是匿名的,没有“直接调用自己”的方式,但是递归需要函数能“看到自己”。
递归生成函数:
阶乘(递归函数): \[ \text{FACT}=Y\; F \]
等价模型: General Recursive Functions (Gödel), Lambda Calculus (Church), 算盘机 (胡海星;宋方敏), etc.
一个函数 \(f\)(在某个定义域 \(D\) 上的全函数)是能行可判定的当且仅当存在一个算法,对任意 \(o\in D\) 都可以在有穷步数内计算出 \(f(o)\)
一个性质 \(P\)(在某个论域 \(D\) 上定义)是能行可判定的当且仅当存在一个算法,在有穷步数内可判断任意 \(o\in D\) 满足或不满足性质 \(P\)
% Binary summation
start_binary_add :-
string_chars("1011+11001", TapeChars),
run(right, 0, TapeChars).
start_binary_add(S) :-
string_chars(S, TapeChars),
run(right, 0, TapeChars).
% UTM
run(done, _, Tape) :-
format("*** Machine has halted. Final tape: ~w~n", [Tape]),
!.
run(State, Pos, Tape) :-
read_sym(Tape, Pos, Sym),
transition(State, Sym, NewState, WriteSym, MoveDir),
write_sym(Tape, Pos, WriteSym, TempTape, PosAfterWrite),
move_pos(PosAfterWrite, MoveDir, NextPos),
format("State=~w, Read=~w, Write=~w, Move=~w, NewState=~w, Tape=~w~n",
[State, Sym, WriteSym, MoveDir, NewState, TempTape]),
run(NewState, NextPos, TempTape).
read_sym(Tape, Pos, Sym) :-
Pos >= 0,
length(Tape, Len),
Pos < Len,
nth0(Pos, Tape, Sym), !.
read_sym(_, _, '_').
write_sym(Tape, Pos, Val, NewTape, NewPos) :-
Pos >= 0,
length(Tape, Len),
Pos < Len,
replace_nth0(Tape, Pos, Val, NewTape),
NewPos = Pos, !.
write_sym(Tape, Pos, Val, [Val|Tape], 0) :-
Pos < 0, !.
write_sym(Tape, Pos, Val, NewTape, Pos) :-
Pos >= 0,
length(Tape, Len),
Pos >= Len,
Extra is Pos - Len,
make_blanks(Extra, Blanks),
append(Tape, Blanks, Tmp),
append(Tmp, [Val], NewTape), !.
replace_nth0([_|T], 0, New, [New|T]).
replace_nth0([H|T], I, New, [H|R]) :-
I > 0,
I1 is I - 1,
replace_nth0(T, I1, New, R).
make_blanks(0, []) :- !.
make_blanks(N, ['_' | R]) :-
N > 0,
N1 is N - 1,
make_blanks(N1, R).
move_pos(Pos, left, NewPos) :- NewPos is Pos - 1.
move_pos(Pos, right, NewPos) :- NewPos is Pos + 1.
move_pos(Pos, stay, Pos).
% Instructions
transition(right, '0', right, '0', right).
transition(right, '1', right, '1', right).
transition(right, '+', right, '+', right).
transition(right, '_', read, '_', left).
transition(read, '0', have0, 'c', left).
transition(read, '1', have1, 'c', left).
transition(read, '+', rewrite, '_', left).
transition(have0, '0', have0, '0', left).
transition(have0, '1', have0, '1', left).
transition(have0, '+', add0, '+', left).
transition(have1, '0', have1, '0', left).
transition(have1, '1', have1, '1', left).
transition(have1, '+', add1, '+', left).
transition(add0, '0', back0, 'O', right).
transition(add0, '_', back0, 'O', right).
transition(add0, '1', back0, 'I', right).
transition(add0, 'O', add0, 'O', left).
transition(add0, 'I', add0, 'I', left).
transition(add1, '0', back1, 'I', right).
transition(add1, '_', back1, 'I', right).
transition(add1, '1', carry, 'O', left).
transition(add1, 'O', add1, 'O', left).
transition(add1, 'I', add1, 'I', left).
transition(carry, '0', back1, '1', right).
transition(carry, '_', back1, '1', right).
transition(carry, '1', carry, '0', left).
transition(back0, '0', back0, '0', right).
transition(back0, '1', back0, '1', right).
transition(back0, 'O', back0, 'O', right).
transition(back0, 'I', back0, 'I', right).
transition(back0, '+', back0, '+', right).
transition(back0, 'c', read, '0', left).
transition(back1, '0', back1, '0', right).
transition(back1, '1', back1, '1', right).
transition(back1, 'O', back1, 'O', right).
transition(back1, 'I', back1, 'I', right).
transition(back1, '+', back1, '+', right).
transition(back1, 'c', read, '1', left).
transition(rewrite, 'O', rewrite, '0', left).
transition(rewrite, 'I', rewrite, '1', left).
transition(rewrite, '0', rewrite, '0', left).
transition(rewrite, '1', rewrite, '1', left).
transition(rewrite, '_', done, '_', right).
实质蕴涵(material implication, \(\rightarrow\))的问题: