课题
写出描述谓词 GrandChild、 GreatGrandparent、 Ancestor、Brother、Sister, Daughter、Son、 FirstCousin、BrotherInLaw、SisterInLaw、Aunt 和 Uncle 的公理。找出隔了 n 代的第 m 代姑表亲的合适定义,并用一阶逻辑写出该定义。现在写出图 2-3 中所示的家族树的基本事实。采用 适当的逻辑推理系统,把你已经写出的所有语句 TELL 系统,并 ASK 系统:谁是 Elizabeth 的 孙辈,Diana 的姐夫/妹夫,Zara 的曾祖父母和 Eugenie 的祖先?
一、定义性质
F(x,y):y是x的父亲;
M(x,y):y是x的母亲;
f(x):x的父亲;
m(x):x的母亲;
二、描述其公理
GrandChild:∀x(f(f(x))∧f(m(x))∧m(f(x))∧m(m(x)))
GreatGrandparent:
……
使用kanren定义基本关系
from kanren import run, var
from kanren import Relation, facts
father = Relation()
mather = Relation()
facts(father, ("Charles", "William"), ("Charles", "Harry"), ("Mark", "Peter"), ("Mark", "Zara")
, ("Andrew", "Beatrice"), ("Andrew", "Eugenie"), ("Edward", "Louise"), ("Edward", "James")
, ("Spencer", "Diana"), ("Spencer", "Charles"), ("Philip", "Anne"), ("Philip", "Andrew")
, ("Philip", "Edward"), ("George", "Elizabeth"), ("George", "Margaret"))
facts(mother, ("Diana", "William"), ("Diana", "Harry"), ("Anne", "Peter"), ("Anne", "Zara")
, ("Sarah", "Beatrice"), ("Sarah", "Eugenie"), ("Sophie", "Louise"), ("Sophie", "James")
, ("Kydd", "Diana"), ("Elizabeth", "Charles"), ("Elizabeth", "Anne"), ("Elizabeth", "Andrew")
, ("Elizabeth", "Edward"), ("Mum", "Elizabeth"), ("Mum", "Margaret"))
创建男女列表
man = ["William", "Harry", "Peter", "James", "Charles",