Index: doc/API
===================================================================
--- doc/API	(revision b8a6fd2a19f33adeb601768a49ba56838b38714f)
+++ doc/API	(revision 646e57eb457a4e25ff3eb78027c0373b858bdbca)
@@ -647,4 +647,10 @@
       (C:abac_context_load_directory)
 
+   void set_no_partial_proof()
+      (C:abac_context_set_no_partial_proof)
+   void set_want_partial_proof()
+        enable and disable the partial proof on query proof failure 
+      (C:abac_context_set_want_partial_proof)
+
    std::vector<Attribute> query(char *, char *, bool &)
      the string version is for query that is composed by hand with SHA or
@@ -661,5 +667,5 @@
      returns true/false in success
      returns a proof upon success, 
-     partial proof on failure (not implemented yet) 
+             a partial proof on failure by default 
 
    std::vector<Attribute> next_proof(bool &)
Index: doc/ChangeLog
===================================================================
--- doc/ChangeLog	(revision b8a6fd2a19f33adeb601768a49ba56838b38714f)
+++ doc/ChangeLog	(revision 646e57eb457a4e25ff3eb78027c0373b858bdbca)
@@ -1,5 +1,6 @@
 = 0.2.3 =
 
-    2012-XX-YY
+    2012-10-YY
+        * Added default partial proof generation upon fact query failure
         * Added new python attribute and id example tests for the new 
           api calls
Index: doc/partial_proof
===================================================================
--- doc/partial_proof	(revision 646e57eb457a4e25ff3eb78027c0373b858bdbca)
+++ doc/partial_proof	(revision 646e57eb457a4e25ff3eb78027c0373b858bdbca)
@@ -0,0 +1,73 @@
+
+The four Ws of partial proof
+
+Libabac, by default, would attempt to extract a partial proof 
+if the initial fact query can not be proven. If the initial fact
+query is found to be true, no partial proof will be attempted.
+
+A fact query, "Can Coyote buy red rockets from Acme ?", is 
+equivalent to attribute fact, "Acme.buy_rocket(red) <-?- Coyote".
+
+When it is presented to YAP prolog db by libabac, it is translated 
+into "isMember(pAcme,buy_rocket,red):-pCoyote" for asserting.
+
+If the fact query can not be proven, libabac iterates through a 
+sequence of actions in an attempt to discover partial proof 
+related to the initial fact query.
+
+We can break down the fact query into a general form,
+
+   whom.what(whatwith) <-?- who
+
+where 'whom' is the issuer principal, 'who' is the principal,
+'what' is the role attribute and 'whatwith' is the parameter of
+the attribute.
+
+In the example fact query, 'whom' is Acme, 'who' is Coyote,'what'
+is buy_rocket and red is assigned to 'whatwith'. 
+
+In case such a fact can not be proven, one or more W terms are 
+allowed to be uninstantiated and see what can be proven. 
+
+Using the above example, the sequence libabac used to extract
+partial proof is as follows,
+
+case 1: acme.buy_rocket(red) <-?- coyote
+        (Can Coyote buy red rockets from Acme?)
+If no,
+case 2: acme.What(Whatis) <-?- coyote 
+        (What with Whatis can Coyote buy from Acme?)
+If no,
+case 2': acme.What() <-?- coyote 
+        (What can Coyote buy from Acme?)
+If no,
+case 3: acme.buy_rockets(red) <-?- Who
+        (Who can buy red rockets from Acme?)
+If no,
+case 4: Whom.buy_rockets(red) <-?- coyote
+        (From Whom can Coyote buy red rockets from?)
+If no,
+case 5: Whom.What(Whatwith) <-?- coyote
+        (What with Whatwith can coyote do from Whom?)
+
+'whatwith' is in tandem with 'what', if there is no 'whatwith' term, 
+then case 2' is skipped.
+
+Multiple partial proofs can be extracted using next_proof() api 
+call just like for fact proofs. It is possible to force libabac to
+iterate through all the partial proof query cases listed above and
+collect all the possible partial proofs. It is likely that there
+will be duplication of proofs. No filtering will be done from libabac
+side since each individual partial proof query is considered to be
+independent from each other.
+
+Note, the return code of abac_context_query() is such that success 
+is only returned if the fact query is true. Even when there is a
+returning partial proof, the return code will be false.
+
+
+
+
+    
+
+   
