something is a person if it is either Adam or Eve, or if it has a mother. We can express this in a single rule as follows:

person(X) :- (X=adam; X=eve; mother(X, Y)).

  • xmunk@sh.itjust.works
    link
    fedilink
    arrow-up
    4
    ·
    6 days ago

    I’ll admit I don’t speak prolog but doesn’t this definition lack a recursive case to ensure that the mother is either Eve or a descendent of Eve? And there should probably be a father case in there as well?

    • sebastiancarlos@lemmy.sdf.orgOP
      link
      fedilink
      arrow-up
      7
      ·
      edit-2
      6 days ago

      Depends on how you want to define your domain knowledge.

      The thing you need to define for sure is the predicate mother/2 (Which has arity 2, or in other words, two arguments). From then on, multiple options are available:

      1. Take mother(X, Y) as an “axiom”, and define mother terms for all elements:
      mother(abel, eve).
      mother(isaac, sarah).
      
      1. Derive mother(X, Y) from female(X) and parent(X, Y) terms.
      mother(X, Y) :- 
        parent(X, Y), 
        female(Y).
      
      1. Smash the institutional gender power structures and define only parent/2 terms instead of mother/2 and father/2.
    • bleistift2@sopuli.xyz
      link
      fedilink
      English
      arrow-up
      4
      ·
      edit-2
      5 days ago

      doesn’t this definition lack a recursive case to ensure that the mother is either Eve or a descendent of Eve

      We don’t see the definition of mother. It might already encode that Y is a person.

      And there should probably be a father case in there as well?

      While every person does also have a father, it’s completely redundant, since being a person can fully be described by [Edit: being having] a mother (or being Adam or Eve).