is it possible to increase the likeliness of an observed fact(predicate)

28 views
Skip to first unread message

TzahiJ

unread,
Jun 3, 2019, 6:34:56 AM6/3/19
to PSL Users

 Hi All,

This post is a continuation on a previous post “How to use the @Min[] operator”. I write the new post because I fear there is a serious limitation on practical use of PSL. I hope you will prove me wrong.

Predicates in a rule body may only be combined with  “AND” (&) operations. PSL uses “Łukasiewicz logic”, so the result is MAX(Pred1 + Pred2 -1,0), so it will be less-equal than both predicates.

Let’s take an example:

My predicates are observed_fact/1 and inferred_fact/1. Inferred_fact should strengthen the belief that the observed fact is true.

Intuitively, I would put the following rules:

10: observed_fact(A) & inferred_fact(A) -> conclusive_inference(A)

10: observed_fact(A)  -> conclusive_inference(A)

10: inferred_fact(A) -> conclusive_inference(A)

This will guarantee that conclusive_inference(A) is not less than both observed and inferred predicates. But I do not understand how to model increased belief in an observation by an inferred fact.

A rule of the form: “observed_fact(A) OR inferred_fact(A) -> conclusive_inference(A)” would be great, because it adds Pred1 and Pred2. But PSL does not allow OR in a rule body.

Hope I am totally wrong 😊

Thanks, Tzahi

 

 

 

Eriq Augustine

unread,
Jun 3, 2019, 2:45:37 PM6/3/19
to PSL Users
Hey Tzahi,

First, I want to make sure we are on the same page about some PSL semantic things:

#1
When processing a rule, the first thing PSL does is convert the rule to disjunctive normal form (DNF).
So your first rule: observed_fact(A) & inferred_fact(A) -> conclusive_inference(A)
Becomes: !observed_fact(A) || !inferred_fact(A) || conclusive_inference(A)
I always like to write out the DNF, because it highlights that a predicate being in the head or body of the implication does not actually matter.
All open predicates in a rule get inferred equally.

#2
Observed values cannot change.

(
Notation note:
Throughout this answer, I will be referring to ground atoms of a predicate just using the predicates name.
So instead of saying "a ground atom of the conclusive_inference predicate", I will just be saying "conclusive_inference".
In this case where all your rules only have one instance of each predicate, it will be more convenient.
)

#2 should directly address one of your questions:
But I do not understand how to model increased belief in an observation by an inferred fact.
The answer is that you can't.
But this is not novel to PSL, in most/all logical systems, there is the concept of an observed/fixed value.
The opposite of this rule (an observation influencing an inferred value) is fairly natural in PSL (highlighted in #1).

But PSL does not allow OR in a rule body.
You are correct that PSL does not allow disjunctions in the body, or conjunctions in the head.
This ensures that PSL rules can always be safely converted to DNF.

However, you can still represent the intuition that expressed by your conceptual rule:
observed_fact(A) OR inferred_fact(A) -> conclusive_inference(A)
The intuition provided by this rule is: "conclusive_inference should be influenced by observed_fact and/or inferred_fact".
(Note that I used "and/or" to represent a logical OR as opposed to a logical XOR (since English is ambiguous there).)

We can represent this intuition as two rules (as you have already done above):
observed_fact(A) -> conclusive_inference(A)
inferred_fact(A) -> conclusive_inference(A)

We can see the intuition come out if we convert them to DNF:
!observed_fact(A) || conclusive_inference(A)
!inferred_fact(A) || conclusive_inference(A)

In the case where observed_fact/inferred_fact has a high truth value, we will get something like:
!observed_fact(A) || conclusive_inference(A)
!(1.0) || conclusive_inference(A)
0.0 || conclusive_inference(A)
conclusive_inference(A)
Therefore, PSL will want to raise the value of conclusive_inference to satisfy the ground rule.

In the case where observed_fact/inferred_fact has a low truth value, we will get something like:
!observed_fact(A) || conclusive_inference(A)
!(0.0) || conclusive_inference(A)
1.0 || conclusive_inference(A)
1.0

Therefore, PSL will not care about the value of conclusive_inference.
This is one reason we include a negative prior, to pull the value of conclusive_inference down in cases like this.

So this means that if we include both those rules (and a negative prior),
PSL will want to lower the value of conclusive_inference if observed_fact/inferred_fact is low,
and PSL will want to increase the value of conclusive_inference if observed_fact/inferred_fact is high.

-eriq

--
You received this message because you are subscribed to the Google Groups "PSL Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to psl-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/psl-users/f01e99d0-adb8-463f-a38e-d6c056a352ad%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

TzahiJ

unread,
Jun 3, 2019, 4:46:14 PM6/3/19
to PSL Users
Hi Eriq,
Thanks for the reply, will take me some time to understand it.

one comment - when I write that " Inferred_fact should strengthen the belief that the observed fact is true.", I do not mean to change the value of an observed fact, but that "conclusive_inference" reflects that stronger belief. so if observed_fact(a) value was 0.7 and inferred_fact(a) value was 0.4, than I would expect conclusive_inference(a) to be more than 0.7.
but the ground rule " observed_fact(a) & inferred_fact(a) ->conclusive_inference(a)^2" willl result with conclusive_inference(a)= 0.1
Tzahi

Eriq Augustine

unread,
Jun 3, 2019, 5:47:10 PM6/3/19
to PSL Users
observed_fact(A) & inferred_fact(A) -> conclusive_inference(A)
!observed_fact(A) || !inferred_fact(A) || conclusive_inference(A)
!(0.7) || !inferred_fact(A) || conclusive_inference(A)
0.3 || !inferred_fact(A) || conclusive_inference(A)
0.3 || min(1, !inferred_fact(A) + conclusive_inference(A))

So this is fully satisfied when:
min(1, !inferred_fact(A) + conclusive_inference(A)) >= 0.7
So the rule will be fully satisfied as long as this inequality stands:
!inferred_fact(A) + conclusive_inference(A) >= 0.7
1.0 - inferred_fact(A) + conclusive_inference(A) >= 0.7
1.0 - inferred_fact(A) + conclusive_inference(A) >= 0.7
0.3 + conclusive_inference(A) >= inferred_fact(A)

Note that it does not explicitly say that conclusive_inference(a)= 0.1.
There is a wide range of possible assignments.

-eriq

--
You received this message because you are subscribed to the Google Groups "PSL Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to psl-users+...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages