README (3240B)
1 A project to generate "open problems" for the data of pibase 2 <https://github.com/pi-base/data>. Pibase contains: 3 4 - properties, that have a name 5 - spaces, that have a partial valuation of properties (i.e., a list of positive 6 and negative properties) 7 - theorems, that say that a conjunction of properties (positive or negative) 8 implies a conjunction of properties (positive or negative) 9 10 An "open problem" is a partial valuation of properties which is minimal under 11 inclusion and satisfies: 12 13 - it is satisfiable, i.e., can be extended to a complete valuations that 14 satisfies the theorems 15 - it is not covered by a known space 16 17 This code generates open problems. Here is how to use it: 18 19 - store the pibase github repository in ~/apps/data 20 21 - run ./get_properties.sh > properties 22 23 The file "properties" will now contain a list of lines of the form: 24 25 "Pxyz human-readable name" 26 27 where Pxyz is the property identifier 28 29 - run ./get_spaces.sh > spaces 30 31 The file "spaces" will now contain a list of lines of the form: 32 33 "Sxyz Qa Qb Qc" 34 35 where Sxyz is the space identifier and each Qx is either of the form Pxyz (a 36 property) or -Pxyz (the negation of a property) 37 38 - run ./get_theorems.sh > theorems 39 40 The file "theorems" will now contain a list of lines of the form: 41 42 Txyz Qa Qb Qc 43 44 Where each theorem with identifier Txyz is rewritten to as many copies as it has 45 consequences (i.e., a b => d e f gets rewritten to a b => d, a b => e, a b => f) 46 and each of these consequences is written as a disjunctive clause, i.e., 47 a b -c => d is written as -a -b c d. 48 49 Hence, the whole file theorems is a Boolean CNF formula. 50 51 - run ./explore.py 52 53 This will first "complete" the properties of the space, generating a file 54 "full_spaces" with lines of the same form as "spaces" that contain all 55 properties that logically follow from the known properties given the theorems. 56 The algorithm is that, for each property p such the space neither has p nor -p, 57 we run a SAT solver on the theorems plus the known properties plus p, and 58 another SAT solver on the theorems plus the known properties plus -p. If the 59 first (resp second) call is unsatisfiable, then -p (resp p) is added. 60 61 IMPORTANT: the file "full_spaces" should be removed whenever the list of 62 properties, spaces, or theorems is changed! 63 64 Next, "explore.py" performs a BFS on the partial valuations of properties (in 65 increasing order) and outputs the open problems. Here is the algorithm: 66 67 - if a partial valuation covers a previously printed open problem, stop 68 exploring this partial valuation 69 (i.e., if "-b c" was reported as an open problem then "a -b c" should not be 70 explored) 71 72 - else, if the partial valuation is unsatisfiable (checked with a SAT solver on 73 the partial valuation plus the theorems), then stop exploring this partial 74 valuation 75 76 - else, if the partial valuation is not covered by any space (remembering that 77 they have been completed), then we have found a minimal open problem: output 78 it and stop exploring 79 80 - otherwise, do not print the partial valuation, but try all possible ways to 81 extend it (by adding a property greater than the greatest property in the 82 valuation, with either positive or negative polarity) and add all such results 83 to the BFS's queue 84