Comments (19)
We can inspect the proof scripts suggested by Sledgehammer to identify useful conjectures.
from psl.
I have to work on not only the production of conjectures in work_on_ornode
in Proof_By_Abduction.ML
but also add_or2and_edge
in Seed_Of_And_Node.ML
.
One critical question is what conjectures we should store in the and-node? All-conjectures? Conjectures whose names appear in the SH output?
We should opt for a solution that is consistent with other cases.
from psl.
In the current implementation, we
-1. add and-nodes in https://github.com/data61/PSL/blob/9084e8e5dd270c0d1e3fbdc46823e534c4bbb006/Abduction/Proof_By_Abduction.ML#LL43C37-L43C50
- 2a. add child-ornodes in
PSL/Abduction/Proof_By_Abduction.ML
Line 44 in 9084e8e
- 2b This function also adds edges from the and-node to its child-or-nodes.
PSL/Abduction/Update_Abduction_Graph.ML
Line 220 in 9084e8e
- 3a. add or-to-and edges in
PSL/Abduction/Proof_By_Abduction.ML
Line 47 in 9084e8e
PSL/Abduction/Seed_Of_And_Node.ML
Line 151 in 9084e8e
- 3b. This function also connects the parental or-node to the labelled edge.
PSL/Abduction/Seed_Of_And_Node.ML
Line 152 in 9084e8e
- 3c. This function also connects the labelled edge to the and-node.
PSL/Abduction/Seed_Of_And_Node.ML
Line 152 in 9084e8e
- 3d. cut edges to and-nodes inside
add_or2and_edge
inSeed_Of_And_Node.ML
PSL/Abduction/Seed_Of_And_Node.ML
Line 155 in 9084e8e
Should we also cut edges to the or-nodes that represent conjectures that are not used in SH's output?
from psl.
In the current implementation, we -1. add and-nodes in https://github.com/data61/PSL/blob/9084e8e5dd270c0d1e3fbdc46823e534c4bbb006/Abduction/Proof_By_Abduction.ML#LL43C37-L43C50
2a. add child-ornodes in
PSL/Abduction/Proof_By_Abduction.ML
Line 44 in 9084e8e
2b This function also adds edges from the and-node to its child-or-nodes.
PSL/Abduction/Update_Abduction_Graph.ML
Line 220 in 9084e8e
3a. add or-to-and edges in
PSL/Abduction/Proof_By_Abduction.ML
Line 47 in 9084e8e
PSL/Abduction/Seed_Of_And_Node.ML
Line 151 in 9084e8e
3b. This function also connects the parental or-node to the labelled edge.
PSL/Abduction/Seed_Of_And_Node.ML
Line 152 in 9084e8e
3c. This function also connects the labelled edge to the and-node.
PSL/Abduction/Seed_Of_And_Node.ML
Line 152 in 9084e8e
3d. cut edges to and-nodes inside
add_or2and_edge
inSeed_Of_And_Node.ML
PSL/Abduction/Seed_Of_And_Node.ML
Line 155 in 9084e8e
Should we also cut edges to the or-nodes that represent conjectures that are not used in SH's output?
We simplified this in 962cca6.
from psl.
Problem: we have two problems at once:
- Results of tactic applications (implicit conjecturing) tend to contain multiple sub-goals in one and-node, where all sub-goals have to satisfy heuristics.
- Results of explicit conjecturing tend to consist of one conjecture each, but often we need multiple conjectures to solve the current sub-goal. So, we need to make sets of explicit conjectures, some of which may have already been proved or refuted.
from psl.
The bad thing about the current implementation is that filtering of conjectures is happening in two different locations:
- in
top_down_conjectures
inAll_Top_Down_Conjecturing.ML
, and - n
condition_to_filter_out
inSeed_Of_Or2And_Edge.ML
viafilter_out_bad_seeds_of_or2and_edge
andexpand_ornode
.
from psl.
Are SeLFiE-based filters useful only for explicit conjectures?
Maybe. -> counter example:
Anyways, the application of filtering should happen at the same place where implicit conjecturing also takes place for clarity.
from psl.
But the return type of apply_PSL_to_get_seeds_of_or2and_edges
has to be seeds_of_or2and_edge
because we need the resulting proof states after applying tactics.
This means that we have to apply filtering either
- to conjectures of type
term
withinapply_PSL_to_get_seeds_of_or2and_edges
or - to
terms
insideseeds_of_or2and_edge
after callingapply_PSL_to_get_seeds_of_or2and_edges
.
I guess the latter will make the overall workflow easier to understand.
from psl.
At the same time, I should probably apply filtering functions to terms while constructing seeds not after constructing seeds because we have different treatments for terms for explicit/implicit conjecturing:
- for implicit conjecturing by tactic applications, we often have to check if all terms satisfy conditions, while
- for explicit conjecturing, we have to discard terms that do not satisfy conditions and construct a set of conjectures by collecting terms that passed the conditions.
from psl.
We need decremental conjecturing only for explicit conjecturing.
The algorithm is something like
fun identify_useful_conjectures (conjectures, accumulator) := {
assume conjectures;
try to prove the current goal;
if proved using used_conjectures
then
conjectures := conjectures - used_conjectures;
identify_useful_conjectures (conjectures, used_conjectures @ accumulator)
else
accumulator
}
identify_useful_conjectures (explicit_conjectures, [ ]);
from psl.
identify_useful_conjectures
is difficult to parallelise for each or-node.
But after the first iteration, we should have many or-nodes to handle (in parallel).
from psl.
We need decremental conjecturing only for explicit conjecturing.
The algorithm is something like
fun identify_useful_conjectures (conjectures, accumulator) := { assume conjectures; try to prove the current goal; if proved using used_conjectures then conjectures := conjectures - used_conjectures; identify_useful_conjectures (conjectures, used_conjectures @ accumulator) else accumulator } identify_useful_conjectures (explicit_conjectures, [ ]);
I should not remove all the used conjectures at once like: conjectures := conjectures - used_conjectures;
Instead of that, I should create sets of conjectures
, in each of which one used_conjecture
is removed from the previous conjectures
.
from psl.
Related Issues (20)
- Abduction: parallel filter of conjecturing HOT 1
- Abduction: rename TDC.thy to something else HOT 1
- Abduction: earlier termination of the loop HOT 3
- Abduction: another way to detect bad applications of induction
- Abduction: another filter of bad conjectures (false assumption) HOT 3
- Abduction: improve `mk_free_varaible_of_typ`
- Abduction: something is wrong about adding and-nodes. HOT 6
- Abduction: should we pass around new `Proof.state` that contain proved conjectures? HOT 2
- Abduction: Don't use Unsynchronized.inc for proof_id in Or_Node.ML HOT 2
- Abduction: Seed_Of_And_Node.ML contains functions that belong to somewhere else.
- Abduction: Do not include refuted nodes in an abduction graph. HOT 1
- Abduction: something strange about cut_edge_to_andnode_if_no_parental_ornode_can_be_proved_assmng_subgoals. HOT 8
- Abduction: graph_gg_parent_not_finished_updated HOT 1
- Abduction: lists of completely proved lemmas in Shared State. HOT 2
- Abduction: clear shared states before executing a deep abduction. HOT 1
- Abduction: order the terms in the key for and-nodes. HOT 1
- Abduction: The name Seed_Of_And_Node does not reflect what it is. HOT 1
- Abduction: More SeLFiE assertions to prune bad conjectures.
- Abduction: Shared_State for template-based conjecturing. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from psl.