- From: <jos.deroo@agfa.com>
- Date: Sat, 27 Aug 2005 18:50:24 +0200
- To: sandro@w3.org
- Cc: public-rule-workshop-discuss@w3.org
> How would you use non-mon (MMS/LP) features in the three usage > scenarios in the draft charter? Each scenario includes the merging of > rulesets created without knowledge of what they would be merged with. > I don't see how you can do that safely with a non-monotonic logic. If > a drug-interaction rulebase relies on any kind of non-mon feature, > then it's quite possible to give incorrect results when the pharmacy > merges it with another drug rulebase. > > This doesn't exactly require non-mon to be out of scope, but it seems > to justify a monotonic logic (eg FOL) as the primary deliverable. Hi, Sandro To spend my second last holiday, and seeing you writing Prolog, I did a small test case.. This is a piece of Prolog that I tranformed from an N3 piece triple(m_Ann,m_complication,m_gastroentritis). triple(m_aspirin,m_prescribedFor,m_gastroentritis). triple(m_aspirin,m_excludedFor,b_a1). triple(b_a1,rdf_first,m_ulcer). triple(b_a1,rdf_rest,b_a2). triple(b_a2,rdf_first,m_postSurgery). triple(b_a2,rdf_rest,rdf_nil). triple(XP,m_isPrescribed,XM) :- triple(XP,m_complication,XD), triple(XM,m_prescribedFor,XD), triple(XM,m_excludedFor,XL), triple(XP,m_fineWith,XL). triple(XP,m_fineWith,rdf_nil). triple(XP,m_fineWith,XL) :- triple(XL,rdf_first,XA), \+ triple(XP,m_complication,XA), triple(XL,rdf_rest,XB), triple(XP,m_fineWith,XB). and when I ask ?- triple(m_Ann,m_isPrescribed,X). I get X = m_aspirin this is because of the NAF at \+ triple(XP,m_complication,XA) When I transform that same piece of N3 to FOL, ready for prover9 set(auto). clauses(sos). qname("e:") = iri("http://eulersharp.sourceforge.net/2003/03swap/log-rules#"). qname("q:") = iri("http://www.w3.org/2004/ql#"). qname("rdfs:") = iri("http://www.w3.org/2000/01/rdf-schema#"). qname("log:") = iri("http://www.w3.org/2000/10/swap/log#"). qname("m:") = iri("http://www.agfa.com/w3c/euler/med#"). qname("rdf:") = iri("http://www.w3.org/1999/02/22-rdf-syntax-ns#"). triple(qname("m:Ann"),qname("m:complication"),qname("m:gastroentritis")). triple(qname("m:aspirin"),qname("m:prescribedFor"),qname("m:gastroentritis")). triple(qname("m:aspirin"),qname("m:excludedFor"),skf_e39_0_). triple(skf_e39_0_,qname("rdf:first"),qname("m:ulcer")). triple(skf_e39_0_,qname("rdf:rest"),skf_e47_0_). triple(skf_e47_0_,qname("rdf:first"),qname("m:postSurgery")). triple(skf_e47_0_,qname("rdf:rest"),qname("rdf:nil")). - triple(x,qname("m:complication"),y) | - triple(z,qname("m:prescribedFor"),y) | - triple(z,qname("m:excludedFor"),u) | - triple(x,qname("m:fineWith"),u) | triple(x,qname("m:isPrescribed"),z). triple(x,qname("m:fineWith"),qname("rdf:nil")). - triple(x,qname("rdf:first"),y) | triple(z,qname("m:complication"),y) | - triple(x,qname("rdf:rest"),u) | - triple(z,qname("m:fineWith"),u) | triple(z,qname("m:fineWith"),x). - triple(qname("m:Ann"),qname("m:isPrescribed"),qname("m:aspirin")). I don't get a proof, so no evidence to prescribe Ann an aspirin. It is only when I *explicitly* add - triple(qname("m:Ann"),qname("m:complication"),qname("m:ulcer")). - triple(qname("m:Ann"),qname("m:complication"),qname("m:postSurgery")). that prover9 says THEOREM PROVED of course adding could also mean that it follows from certain specific rules, but again, written explitly. That piece of N3 is experimental, in that it uses what I think are "integrity constraints", but anyhow @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. @prefix e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>. @prefix m: <http://www.agfa.com/w3c/euler/med#>. m:Ann m:complication m:gastroentritis. m:aspirin m:prescribedFor m:gastroentritis. m:aspirin m:excludedFor (m:ulcer m:postSurgery). {?P m:complication ?D. ?M m:prescribedFor ?D. ?M m:excludedFor ?L. ?P m:fineWith ?L} => {?P m:isPrescribed ?M}. {} => {?P m:fineWith rdf:nil}. {?L rdf:first ?A. {?P m:complication ?A} => {}. ?L rdf:rest ?B. ?P m:fineWith ?B} => {?P m:fineWith ?L}. {m:Ann m:isPrescribed m:aspirin} => {e:quod e:erat e:demonstrandum}. and here the same situation as the FOL test i.e. no proof found (using euler) and only after adding {m:Ann m:complication m:ulcer} => {}. {m:Ann m:complication m:postSurgery} => {}. we get {{{m:Ann m:complication m:gastroentritis} e:evidence <file:/euler/med.n3#_5>. {m:aspirin m:prescribedFor m:gastroentritis} e:evidence <file:/euler/med.n3#_9>. {m:aspirin m:excludedFor _:e39_0_} e:evidence <file:/euler/med.n3#_10>. {{_:e39_0_ rdf:first m:ulcer} e:evidence <file:/euler/med.n3#_10>. {{m:Ann m:complication m:ulcer} => {}} e:evidence <file:/euler/med.n3#_6>. {_:e39_0_ rdf:rest _:e47_0_} e:evidence <file:/euler/med.n3#_10>. {{_:e47_0_ rdf:first m:postSurgery} e:evidence <file:/euler/med.n3#_10>. {{m:Ann m:complication m:postSurgery} => {}} e:evidence <file:/euler/med.n3#_7>. {_:e47_0_ rdf:rest ()} e:evidence <file:/euler/med.n3#_10>. {m:Ann m:fineWith ()} e:evidence <file:/euler/med.n3#_19>} e:sequent { {m:Ann m:fineWith _:e47_0_} e:evidence <file:/euler/med.n3#_25>}} e:sequent { {m:Ann m:fineWith _:e39_0_} e:evidence <file:/euler/med.n3#_25>}} e:sequent { {m:Ann m:isPrescribed m:aspirin} e:evidence <file:/euler/med.n3#_16>}} e:sequent { {e:quod e:erat e:demonstrandum} e:evidence <file:/euler/med.n3#_27>}. Michael, I installed flora-2 and it is running well but am not yet doing above test; I think it will be similar like the prolog test, or what do you think? -- Jos De Roo, AGFA http://www.agfa.com/w3c/jdroo/
Received on Saturday, 27 August 2005 16:50:36 UTC