好,接下來我們看一下我們怎麼用First-Order Logic來描述我們上一講提過的Wumpus的世界。 那,譬如說我們可以定義PERCEPT,那這裡面就是我們在 這一個是時間,一個是time,然後time呢那這邊是discreet就是一個流水號, 從1,2,3,4,5一直往下做。那我們可以定義它有action,就是包含了turn right,turn left這些都一樣。 好,那我們可以Interaction with我們的knowledge base的話那我們就是可以透過這個東西的ASKVARS,那這個東西 還是我們定義的東西,那就是你存在 某一個action,讓它的bestAction也是我們定義的predicate, ok那你就是可以這個a然後在第5個時間點的某一個Action拿出來。 好,那substitution我們等一下會提到,就是需要,就其實就是一個BINDIN- G,就是到這個時間點我們 可以要設法把一個變數bind成一個constant,那譬如說在這個例子 所有的a可以action,它如果是個action那它可以bind就是我們上面講這些,這些- forward啊,shoot啊,grab啊,climb啊,或是turn left right 這些東西。那接下來我們要從percept這些地方,我們要定義一個在時間t 時間t的時候我們要感覺到一陣微風,那方法是這個樣子,就是我不管我有沒有在對 於所有的時間, 我不管有沒有感覺到stench或是glitter或是其他的percept,就是這些- 我都不care,所以我把它寫成for all, 這些,那我真正care的是只要這時間點我拿Breeze,那我就把,就是說我在時間t- 我有感覺到Breeze,好,這邊很 重要的一件事就是Breeze在這個地方,我用這個字體寫的時候是一個constant, 那到這邊的時候它是一個predicate,也就說在這個return就是true or false OK,那我定義的方法就是這樣定,就是用這個方法,只要那我從percept就可以把它轉化- 成predicates,那同樣類似的方法是一樣的,我可以定義在時間t的時候 有沒有感覺到金條閃閃發光,就是用把Glitter把一個常數在這邊, 利用這個First-Order Logic 定義把它定義成一個predicator 那當然,這邊就蠻明顯,譬如說我在時間t點,任何時間t點,我只要感覺到 Glitter,閃閃發光的BestAction就是Grab, 那這樣我們就可以定義BestAction是什麼,然後類似的東西都可以,這樣定義出來。
那這個是不管對- 任何一個時間都成立的事情。 好,那接下來我們要設法就是,上一講大家應該有印象,在propositional logic 的時候我們要定義說Pit的旁邊,Pit的旁邊就是會感覺到微風, 那這件事情蠻困難的,就是我如果有一百萬,這一百萬每個都要定義一次。 那所以我們為了等一下方便起見我們先定義一個adjacency的predicate, 就是一個relation,那對任何兩個方塊的話只要s,y,還有a,b這兩個方格 它如果臨近的話,這個就是return一樣,predicates,return一個- true or false 好,那就是if and only if,使用的就是if and only if, 那當然就是這麼回事,就是,s跟a一樣,然後 y是b+-1或者是y跟b一樣,然後x是a+-1,好那加和減這個 這個原則上加減不是First-Order Logic裡面本身的東西, 我們這邊就embedded進一些代數,讓它做簡單的加減。 好。OK,那接下來這樣 這些事做完以後我們就可以定義一些東西,譬如說我們可以定義location。 就是,定義location。也就是說如果,譬如說如果 我們定義一個at,這個東西,就是譬如說我們知道wumpus,這個東西 在任何時間它都在2,2,然後我們 上一講的時候可能沒有講清楚wumpus這個怪物,我們預設上不會動來動去,它一旦 產生這個......這個迷宮一旦一產生就固定在那邊,好,那這個是我們可以定義, 就是wumpus定義在哪裡。 那我們也可以定義說,只要任何時間點,任何時間點只要x在 這個square,那x又在s2這個square,那就imply了s1和s2是equal的, 就你不可以,像這個地方就是有時候你在定義First-Order Logic的時候要小心的地方。 如果少定義了這一條的時候你的inference system就可能inference出不同的東西, 對我們來說好像很直覺嘛,就是你agent就是一個,你不會同時出現在兩點不同的地方, 可是這件事你必須要跟knowledge base講清楚。 好,你沒有加這條限制的話,它可能會導出一些奇怪的結果。好。這個, 這一行就跟大家說明,同一個時間點會出現在一個地方,好,沒有分身這個東西。 好那接下來我們想定義一些,我們剛定義過Breeze,對不對?就是在時間點t,我- 有沒有感覺到微風 那接下來我們想把這個概念推到在square上面,我們想知道在哪個square- 上你感覺到微風 那我們換一個名詞,叫Breezy,好,那意思就說你如果在任何一個時間點, 任何一個square,你只要這個agent呢在這個時間點和這個square上 你感覺到微風,ok,那就代表了,我就定義成在這個square上感覺到微風。 OK,大家可以看一下這個定義,那類似的事情都可以,如果我們知道Pit,那Pit 也是不會動的,所以在任何時間點和任何square,Pit,只要在那個square, 它就一直在那個square,我們在定一個這個東西, 好,那類似的東西我們都可以定,所以我們利用At 我們剛定了At這個location的predicate以後我們就可以定說在- 哪一格感覺到風在動, 洞在哪一格,它wumpus在哪一格,我們都可以把它定出來。好那最後我們終於就可以定說 只要是Pit的旁邊,就會感覺到微風,好這個東西我們可以定了,那針對任何一格 現在我不管我的迷宮是多少格,原本四乘四,就算一百萬乘一百萬也是這一條路就可以搞定 好,就是這一格你會感覺到微風, if and only if 你存在一個r,這個r跟s它們是臨近的,而且Pit在r這個square, 可以嗎?反正就是你Pit在r,然後微風就在s, r跟s它們是,互相是臨近的。好那類似的事情我們還是可以定一些譬如說我們有定過 我們AGENT有一支箭,所以射出來就沒了,那我們也可以這樣定,就是在任何的時間點, HaveArrow是成立的 在t+1這個時間點成立的,那它必須條件就是你在t時間點上 你還有這把箭,而且你在t時間點的時候你沒有做 shoot這個動作,那這樣的話你就保證了在t+1這個時間點你還是繼續有這把箭。 好,大家可以看到我們當然沒有完整的把wumpus世界完整描述但是我們大家剛講到一 些Key point大概已經描述給大家......一半以上 那剩下的大家如果有興趣可以試試看把wumpus world整個世界完整的定義出來,那這樣一旦用First-Order Logic 把wumpus世界整個描述完以後拿接下來你要推導任何事情就可以丟給基本- 的演繹系統。 接下來我們看在First-Order Logic 裡面如何去做inference的事情,那第一個我們先要介紹兩個概念, 一個是UI,這兩個都是instantiation,就是把一個 就是把一個變數,把它具體的結果,就把他bind上一個常數,把它替換成一個常數 的技巧,那一個是針對Universal的quantifier,另外一個是針對assi- stant的quantifier。 好,那這個符號這邊寫的意思就是說你任何一個句子,α是- 某個句子,你如果前面有 for all,對所有的v α,這件事情, 那你都可以,這邊指的substitute,意思是說你可以把v換成g, 那g必須是某一個ground term,也就是某一個constant。 然後把,就是在α裡面把這個句子,把所有的v全部換成某一個ground term,這是OK 這是OK的,因為for all嘛,所以我換成任何一個都可以。 好,那在existance的時候有類似的事情,也就是說如果是存在的時候我可以做任- 何的事,把v換成k,可是在這邊有差別的是k不可以在 knowledge base裡面,我們馬上就會講到為什麼。好我們先看一下這個例子是for all的。 就是如果我們講說任何像這句話,這個句子就說, 任何x,然後只要x是國王,x又是Greedy的,那我們定義他就是一個Evil的,他- 是邪惡的,任何...... 講中文,就是任何貪婪的,國王是邪惡的。 好這可能翻成中文的講法是這個樣子。那這裡面x我可以換任何東西,因為它是對for all全部成立。譬如說我可以換成John,我可以換成John,可以全部換掉。 這是OK,這是我APPLY在上面這個句子APPLY UI的結果, 好那同樣我可以換任何東西,就包含我可以換father of John, 那這邊定義的話father是一個function,它不是一個predicate,就- 是會return的東西是一個object。 好,那這也是OK的,那像這邊的地方如果是existent就是如果我存在, 我用存在的話,就存在Crown(x)然後把OnHead(x, John),那這樣我x可以 換個東西,可是我東西可以把ground下來,換成ground term,但是 這個,因為我們不知道是誰,對不對,我們都存在某一個, 我們不知道是誰的情況下你不可以換已知的人, 就你等於對他來說是換個代號,也就是我們 常常講的,x先生,y小姐,就是你給它一個名稱, 可這個人是誰我現在還是不知道,但是至少我把變數換成一個常數, 而且你這個東西我們等下會講只能換一次。那麼 像這個情況下C1是個constant,我們大寫開頭都是constant 你可以把這個變數換成一個常數,但是這個常數不可以是你knowledge base裡面已知的任何東西,不然你就等於是你知道是誰,其實你不知道, 所以你只能先說它是C1,那C1以後可能是等於John,等於David,等於Mark- ,你以後可能會 演繹出這樣的結果,那這個對這種constant又不在,只能出現unique,就是不能出現- ,之前不能出現在knowledge base裡面, 然後後來這個東西又只能unique,也就是下一次再換另外一個x的時候你不能再換C1 你得換比如說C2這樣,那這個名稱我們叫Skolem constant。 Skolem constant。好那晚一點我們還會提到Skolem function的概念。但是這是EI的部分。 就EI你得用Skolem constant去替換, 那E1的話,我們通常換法是換knowlege base已知的東西,那你換誰都成立。 那這個方法我們叫instantiation,那基本上UI呢你可以任意apply任意多次, 這個KB原在邏輯上是equivalent,不管換多少次, 我們還是說logically equivalent。 那如果是EI的話,基本上你只能APPLY一次,這滿明顯的。 因為你只是存在,你可能如果apply兩次的話,可能是錯的。當我講存在的時候- 不一定保證 是一個了。我們說至少一個,但是我,你也不可能肯定是兩個還是三個, 但你如果apply兩次,兩個不同那是很危險的。好那你基本上可以這個樣子- 做。那你EI,apply一次了以後通常我們就把原來的sentence拿掉, 免得你的系統不小心又再替換一次。typical的就你存在了就替換一次,好,那 這樣換出來的譬如說我們舉下面例子就是我們如果 我們說謀殺案,那存在某一個人他殺了這個victim,那 我們可以把這個x換成我不知道他是誰,那我們換成一個常數叫murderer, 好,但是murderer這個constant不可以出現在原來的KB裡面。 OK,那這樣是可以換,那換掉以後,我們通常就把這個刪掉。就不要了。好, 那嚴格來講,你用UI換的話,它一直都是logically equivalent的,但是如果你 用EI來換的話,嚴格來講你這個KB跟原來的是不同的。 這在邏輯上是不同的。為什麼呢?因為邏輯上我說 至少有一個人,可你現在如果把那一句話換掉你就變成說 我知道就是某一個人, 去做這件事情,可是你跟原句不一樣,因為原句你可能是三個人的,是四個人的,是五個人的- ,都可以成立,跟你把它換constant以後 就變得說你只知道只有那一個人,原來的語句的一些意思 已經失掉了。所以我們不能說他是logically equivalent, 但是它在導出你想要導出的東西上,它的效力是一樣的,就是你用原來的KB可以倒出來的東- 西我現在 我用套用EI以後的KB我是可以導出一樣的東西,我們稱它為inferentially equivalent, 就是你在inference這件事上,它們也是一樣的。