source: doc/partial_proof @ 54758a7

mei_rt2
Last change on this file since 54758a7 was 63477c5, checked in by Mei <mei@…>, 12 years ago

1) getting ready for a freeze

  • Property mode set to 100644
File size: 2.5 KB
RevLine 
[646e57e]1The four Ws of partial proof
2
[63477c5]3libabac, by default, would attempt to extract a partial proof
[646e57e]4if the initial fact query can not be proven. If the initial fact
5query is found to be true, no partial proof will be attempted.
6
7A fact query, "Can Coyote buy red rockets from Acme ?", is
[e3c7769]8equivalent to attribute query fact,
9
10    "Acme.buy_rocket(red) <-?- Coyote".
[646e57e]11
12When it is presented to YAP prolog db by libabac, it is translated
[e3c7769]13into "isMember(pAcme,buy_rocket,red):-pCoyote" for assertion.
[646e57e]14
15If the fact query can not be proven, libabac iterates through a
16sequence of actions in an attempt to discover partial proof
17related to the initial fact query.
18
19We can break down the fact query into a general form,
20
21   whom.what(whatwith) <-?- who
22
23where 'whom' is the issuer principal, 'who' is the principal,
24'what' is the role attribute and 'whatwith' is the parameter of
25the attribute.
26
[e3c7769]27In the example fact query, 'whom' is Acme, 'who' is Coyote,
28'what' is buy_rocket and red is assigned to 'whatwith'.
[646e57e]29
[e3c7769]30In case, where such a fact can not be proven, one or more W
31terms are allowed to be uninstantiated and see what can be
32proven.
[646e57e]33
34Using the above example, the sequence libabac used to extract
35partial proof is as follows,
36
37case 1: acme.buy_rocket(red) <-?- coyote
38        (Can Coyote buy red rockets from Acme?)
39If no,
[63477c5]40case 2: acme.What(Whatwith) <-?- coyote
41        (What with Whatwith can Coyote buy from Acme?)
[646e57e]42If no,
[63477c5]43case 2p: acme.What() <-?- coyote
[646e57e]44        (What can Coyote buy from Acme?)
45If no,
46case 3: acme.buy_rockets(red) <-?- Who
47        (Who can buy red rockets from Acme?)
48If no,
49case 4: Whom.buy_rockets(red) <-?- coyote
50        (From Whom can Coyote buy red rockets from?)
51If no,
52case 5: Whom.What(Whatwith) <-?- coyote
[63477c5]53        (What with Whatwith can Coyote do from Whom?)
[646e57e]54
[e3c7769]55'whatwith' is in tandem with 'what', if there is no 'whatwith'
[63477c5]56term, then case 2p is skipped.
[646e57e]57
58Multiple partial proofs can be extracted using next_proof() api
59call just like for fact proofs. It is possible to force libabac to
60iterate through all the partial proof query cases listed above and
61collect all the possible partial proofs. It is likely that there
62will be duplication of proofs. No filtering will be done from libabac
63side since each individual partial proof query is considered to be
64independent from each other.
65
66Note, the return code of abac_context_query() is such that success
67is only returned if the fact query is true. Even when there is a
68returning partial proof, the return code will be false.
69
70
71
72
73   
74
75   
Note: See TracBrowser for help on using the repository browser.