• 3.7 量词范围歧义

    3.7 量词范围歧义

    当我们给一个句子的形式化表示 个量词时,会发生什么?

    1. >>> v2 = """
    2. ... bruce => b
    3. ... elspeth => e
    4. ... julia => j
    5. ... matthew => m
    6. ... person => {b, e, j, m}
    7. ... admire => {(j, b), (b, b), (m, e), (e, m)}
    8. ... """
    9. >>> val2 = nltk.Valuation.fromstring(v2)

    admire 关系可以使用(28)所示的映射图进行可视化。

    1. >>> dom2 = val2.domain
    2. >>> m2 = nltk.Model(dom2, val2)
    3. >>> g2 = nltk.Assignment(dom2)
    4. >>> fmla4 = read_expr('(person(x) -> exists y.(person(y) & admire(x, y)))')
    5. >>> m2.satisfiers(fmla4, 'x', g2)
    6. {'e', 'b', 'm', 'j'}

    这表明fmla4包含域中每一个个体。相反,思考下面的公式fmla5;没有满足y的值。

    1. >>> fmla5 = read_expr('(person(y) & all x.(person(x) -> admire(x, y)))')
    2. >>> m2.satisfiers(fmla5, 'y', g2)
    3. set()

    也就是说,没有大家都钦佩的人。看看另一个开放的公式fmla6,我们可以验证有一个人,即 Bruce,它被 Julia 和 Bruce 都钦佩。

    1. >>> fmla6 = read_expr('(person(y) & all x.((x = bruce | x = julia) -> admire(x, y)))')
    2. >>> m2.satisfiers(fmla6, 'y', g2)
    3. {'b'}

    注意

    轮到你来:基于m2设计一个新的模型,使(27a)在你的模型中为假;同样的,设计一个新的模型使(27b)为真。