- From: William Van Woensel <william.vanwoensel@gmail.com>
- Date: Mon, 12 Dec 2022 09:35:57 -0500
- To: Adam Sobieski <adamsobieski@hotmail.com>
- Cc: Doerthe Arndt <doerthe.arndt@tu-dresden.de>, "semantic-web@w3.org" <semantic-web@w3.org>
Hi Adam
See here for some examples on how you can infer new statements based on the contents of a graph:
http://ppr.cs.dal.ca:3002/n3/editor/s/ztVCkf2R
(These are arbitrary examples; if you had something concrete in mind, I can try to write a better example.)
I think the syntactic sugar you propose could be intuitive for this kind of use case (a more imperative style of programming).
W
> On Dec 11, 2022, at 3:37 AM, Adam Sobieski <adamsobieski@hotmail.com> wrote:
>
> Dörthe,
> All,
>
> With respect to syntactic options for probabilistic logic and semantics, I recently created a GitHub discussion thread: https://github.com/w3c-cg/planning/discussions/26#discussioncomment-4369123 . The most recent comment, there, broaches some syntactic options including some discussion that RDF-star is useful for these scenarios.
>
> For instance:
>
> << ex:myPredicate calc:holdsFor ( ex:x ex:y ex:z ) >> calc:probability "0.95"^^xsd:double .
>
> and (see also: https://github.com/w3c/rdf-star/issues/276):
>
> << ex:myPredicate calc:holdsFor ( ex:x ex:y ex:z ) >> calc:probability "0.95"^^xsd:double {| o:accordingTo ex:Alice |} ,
> "0.96"^^xsd:double {| o:accordingTo ex:Bob |} .
>
> Considering these intricate RDF-star examples, above, the @-directive approach, broached earlier, might not have been the best syntactic option for probabilistic logic and semantics...
>
> While the N3 design appears to be migrating from @-directives (https://w3c.github.io/N3/spec/#changes-since-team-submission), brainstorming, here is an idea, expressed using a @-directive syntax (other syntaxes possible), which pertains to iterating over statements in one named graph to process a second graph and to assert content from it.
>
> The following example intends to express, for each statement, ?statement, in a named graph, example:graph1, that we desire to process and to assert the contents of example:graph2.
>
> @foreach(?statement in example:graph1 insert example:graph2)
> {
> example:graph1
> {
> ### this graph is iterated and not added to the deserialized graph or dataset
> example:x1 example:p1 example:y1 .
> example:x2 example:p2 example:y2 .
> example:x3 example:p3 example:y3 .
> }
> example:graph2
> {
> ### the ?statement iterand variable can be utilized throughout this graph.
> ### there could be a path-related notation utilized to obtain the iterands' subjects, predicates, objects, and so forth.
> ### for each iterated statement, this template graph is to be processed and added to the graph or dataset being deserialized.
> }
> }
>
> What do you think of this abstract idea? If such a feature would be useful, is there a better syntax for it?
>
>
> Best regards,
> Adam
> From: Adam Sobieski <adamsobieski@hotmail.com>
> Sent: Thursday, November 24, 2022 10:46 AM
> To: Doerthe Arndt <doerthe.arndt@tu-dresden.de>
> Cc: semantic-web@w3.org <semantic-web@w3.org>
> Subject: Re: Syntactic Options for Probabilistic Semantics
> Dörthe,
> Thank you. I also like the solution you presented which uses a defined and well-known vocabulary.
> Comparing these two options, with a @-directive-based approach underlying storage approaches, implementations, would seemingly be more flexible. With the solution you shared, the underlying storage approach appears to be more rigidly graph-based.
>
> Clarifying, with respect to runtime memory storage approaches, many implementations provide a "Triple" class and an implementation could provide, for probabilistic semantics, a "ProbabilisticTriple" class with a new property or new method: "getProbability()". In theory, such a virtual method could be added to the "Triple" class and implemented there to always return 1.0 (or <1.0, 0.0, 0.0>). "ProbabilisticTriple", extending "Triple", could override this virtual method, e.g., to return varying data.
> With respect to backend implementation approaches, in the case of database storage, certain tables could provide an extra column for probability-related data. Were it not for consideration of neutrosophic logics, we could envision such columns to always simply be scalars.
> With either of the two options, with some new syntax, e.g., @-directive-based, or a well-known vocabulary for probabilistic semantics, software can readily detect when probability-related content appears in data or queries. That is, software could detect when to deserialize to "Graph" and when to deserialize to "ProbabilisticGraph".
>
> These are some initial thoughts about comparing these two options.
>
> Best regards,
> Adam
>
> P.S.: It appears that there is an opportunity to update the Wikipedia article on probabilistic semantics.
>
> From: Doerthe Arndt <doerthe.arndt@tu-dresden.de>
> Sent: Thursday, November 24, 2022 7:53 AM
> To: Adam Sobieski <adamsobieski@hotmail.com>
> Cc: semantic-web@w3.org <semantic-web@w3.org>
> Subject: Re: Syntactic Options for Probabilistic Semantics
> Dear Adam,
>
> I like your idea to express probabilistic semantics with N3, but I would like to clearly understand why you think that we need the @-based directives for it instead of using the language as it is together with a defined vocabulary. The background here is, that in the N3 group we try to avoid keys and special constructs where possible. So, why would you need the special construct?
>
>>
>>
>> Brainstorming, we could, in a manner resembling other @-based directives in N3, express:
>>
>> @p(0.95) . { domain:X domain:r domain:Y . }
>
>
> Instead of writing that, you could also simply add some predicate :probability (of course using a shared vocabulary and not just something made up ad-hoc) and state:
>
>
>> { domain:X domain:r domain:Y . } :probability 0.95.
>
> The advantage of doing so is, that you would even be able to reason with your probabilities without any extra effort. If you have the probability of a person having black hair and the probability of a person being male
>
> {:person a :Male} :probability 0.49.
> {:person :hairColor :black } :probability 0.3.
>
> You could use a rule to calculate the probably of encountering a male with black hair just like:
>
> {
> {?s ?p ?o} :probability ?x.
> {?s ?p2 ?o2} :probability ?y.
> {?s ?p ?o} log:notEqualTo {?s ?p2 ?o2}.
> (?x ?y) math:product ?z.
> ({?s ?p ?o} {?s ?p2 ?o2}) log:conjunction ?c
> }=>{
> ?c :probability ?z
> }.
>
> And get that
>
> {:person :hairColor :black. :person a :Male} :probability 0.147 .
>
> You can also directly try the example here: http://ppr.cs.dal.ca:3002/n3/editor/s/RfwLWp8T
> I would of course expect, that the rules you would actually need for proper probabilistic semantics are far more complicated, but I also think that the built-ins in N3 would allow you to write some exchangeable rules supporting the theory. So, having these nice implementations at hand, I wonder why you would want to ask for extra syntax? You could stay in the syntax as it is and define a vocabulary (ontology, depending how far you go) for the concept of probability which we would then reuse.
>
>>
>> Also, beyond [0, 1] scalars per fuzzy logic, there are multivalued logics, e.g., neutrosophic logics which describe every logical variable x as being described by a triple: x = (t, f, i), where t is the degree of truth, f is the degree of false, and i is the level of indeterminacy. We could express this in a manner resembling:
>> @p(t: 0.95, f: 0.05, i: 0.0) . { domain:X domain:r domain:Y . }
>
>
> Would
>
> { domain:X domain:r domain:Y . } :probability_t 0.95, :probability_f 0.05, probability_i: 0.0.
>
> also do the job? Why would you want to have the special format?
>
>
>>
>> What do you think of these syntactic options for expressing probabilistic semantics in N3-based languages?
>
>
> Before I form an opinion, I really need to understand, why we would need extra syntax here. I am sure, I am missing something, but so far, it looks to me that the proposal rather complicates the language than bringing extra advantages. Maybe an example could help?
>
> Kind regards,
> Dörthe
Received on Monday, 12 December 2022 14:36:22 UTC