用python写家族树的基本事实

本文探讨了如何使用Python和一阶逻辑来定义家族树中的一系列关系,如GrandChild、GreatGrandparent、Ancestor等,并给出了公理描述。通过kanren逻辑推理系统,解决关于Elizabeth、Diana、Zara和Eugenie的亲属关系查询问题。
摘要由CSDN通过智能技术生成

课题

写出描述谓词 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", 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值