Commit 5e2a954e authored by MARCHE Claude's avatar MARCHE Claude

remove transformation

parent a6391c21
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
== Documentation == == Documentation ==
1 Introduction (done: enlevee) 1 Introduction (done: suppressed)
2 getting started (Claude: done, to be read by others) 2 getting started (Claude: done, to be read by others)
3 Syntax, tutorial (TODO: Andrei) 3 Syntax, tutorial (TODO: Andrei)
4 tutorial for API: 4 tutorial for API:
...@@ -41,11 +41,11 @@ ...@@ -41,11 +41,11 @@
* add "context" options (partially done) * add "context" options (partially done)
** semantics not clear, should be clarified, documented and ** semantics not clear, should be clarified, documented and
implemented accordingly implemented accordingly
* add transf "inline goal" (TODO, not urgent) * add transf "inline goal" (to be done later)
* add button "remove" * add button "remove"
** removing goals: done, but status need update ** removing goals: done
** removing transformation: (TODO: implement) ** removing transformation: done, but subgoals stay in db (not critical)
* add button "replay" (TODO, not urgent) * add button "replay" (to be done later)
** semantics: replay obsolete proofs ** semantics: replay obsolete proofs
== Misc == == Misc ==
...@@ -71,8 +71,12 @@ ...@@ -71,8 +71,12 @@
= Roadmap for second release, as early as possible in 2011 =
* proof replay
** in IDE
** in whybench
** add replay of existing proof in make bench to detect regression
= Roadmap for 2011 = = Roadmap for 2011 =
......
...@@ -216,8 +216,7 @@ the actions of the various menus and buttons of the interface. ...@@ -216,8 +216,7 @@ the actions of the various menus and buttons of the interface.
\item[Replay] replay all obsolete proofs [NOT YET AVAILABLE] \item[Replay] replay all obsolete proofs [NOT YET AVAILABLE]
\item[Remove] Remove a proof attempt or a transformation. \item[Remove] Removes a proof attempt or a transformation.
[Removing transformation NOT YET AVAILABLE]
\end{description} \end{description}
......
...@@ -774,6 +774,11 @@ module Transf = struct ...@@ -774,6 +774,11 @@ module Transf = struct
db_must_done db (fun () -> Sqlite3.step stmt); db_must_done db (fun () -> Sqlite3.step stmt);
Sqlite3.last_insert_rowid db.raw_db) Sqlite3.last_insert_rowid db.raw_db)
let delete db t =
let sql = "DELETE FROM transformations WHERE transf_id=?" in
let stmt = bind db sql [ Sqlite3.Data.INT t ] in
ignore(step_fold db stmt (fun _ -> ()))
let of_goal db g = let of_goal db g =
let sql="SELECT transf_id,transf_id_id FROM transformations \ let sql="SELECT transf_id,transf_id_id FROM transformations \
WHERE transformations.parent_goal=?" WHERE transformations.parent_goal=?"
...@@ -793,6 +798,8 @@ end ...@@ -793,6 +798,8 @@ end
let transformations g = Transf.of_goal (current()) g let transformations g = Transf.of_goal (current()) g
let remove_transformation t = Transf.delete (current()) t
module Theory = struct module Theory = struct
let init db = let init db =
......
...@@ -153,7 +153,8 @@ val add_proof_attempt : goal -> prover_id -> proof_attempt ...@@ -153,7 +153,8 @@ val add_proof_attempt : goal -> prover_id -> proof_attempt
is already there *) is already there *)
val remove_proof_attempt : proof_attempt -> unit val remove_proof_attempt : proof_attempt -> unit
(** removes a proof attempt from the database *)
val set_obsolete : proof_attempt -> unit val set_obsolete : proof_attempt -> unit
(** marks this proof as obsolete *) (** marks this proof as obsolete *)
...@@ -172,7 +173,12 @@ val add_transformation : goal -> transf_id -> transf ...@@ -172,7 +173,12 @@ val add_transformation : goal -> transf_id -> transf
@raise AlreadyExist if a transformation with the same id @raise AlreadyExist if a transformation with the same id
is already there *) is already there *)
(* todo: remove_transformation *) val remove_transformation : transf -> unit
(** Removes a proof attempt from the database. Beware that the
subgoals are not removed by this function, you must remove them
first using [remove_subgoal]. In other words, this function
assumes there are no subgoals left under the transformation, but
it does not protect against that. *)
(** {3 goals} *) (** {3 goals} *)
......
...@@ -276,11 +276,12 @@ module Model = struct ...@@ -276,11 +276,12 @@ module Model = struct
goal_db : Db.goal; goal_db : Db.goal;
mutable proved : bool; mutable proved : bool;
external_proofs: (string, proof_attempt) Hashtbl.t; external_proofs: (string, proof_attempt) Hashtbl.t;
mutable transformations : transf list; transformations : (string, transf) Hashtbl.t;
} }
and transf = and transf =
{ parent_goal : goal; { parent_goal : goal;
mutable transf_proved : bool;
(* (*
transf : Task.task Trans.trans; transf : Task.task Trans.trans;
*) *)
...@@ -558,6 +559,65 @@ module Helpers = struct ...@@ -558,6 +559,65 @@ module Helpers = struct
| true, Unknown -> !image_unknown_obs | true, Unknown -> !image_unknown_obs
| true, HighFailure -> !image_failure_obs | true, HighFailure -> !image_failure_obs
let set_row_status b row =
if b then
begin
goals_view#collapse_row (goals_model#get_path row);
goals_model#set ~row ~column:status_column !image_yes;
if !toggle_hide_proved_goals then
goals_model#set ~row ~column:visible_column false
end
else
begin
goals_model#set ~row ~column:status_column !image_unknown;
if !toggle_hide_proved_goals then
goals_model#set ~row ~column:visible_column true
end
let check_file_verified f =
let b = List.for_all (fun t -> t.verified) f.theories in
if f.file_verified <> b then
begin
f.file_verified <- b;
set_row_status b f.file_row
end
let check_theory_proved t =
let b = List.for_all (fun g -> g.proved) t.goals in
if t.verified <> b then
begin
t.verified <- b;
set_row_status b t.theory_row;
check_file_verified t.theory_parent
end
let rec check_goal_proved g =
let b1 = Hashtbl.fold
(fun _ a acc -> acc || a.status = Success) g.external_proofs false
in
let b = Hashtbl.fold
(fun _ t acc -> acc || t.transf_proved) g.transformations b1
in
if g.proved <> b then
begin
g.proved <- b;
set_row_status b g.goal_row;
match g.parent with
| Theory t -> check_theory_proved t
| Transf t -> check_transf_proved t
end
and check_transf_proved t =
let b = List.for_all (fun g -> g.proved) t.subgoals in
if t.transf_proved <> b then
begin
t.transf_proved <- b;
set_row_status b t.transf_row;
check_goal_proved t.parent_goal
end
(* deprecated *)
let set_file_verified f = let set_file_verified f =
f.file_verified <- true; f.file_verified <- true;
let row = f.file_row in let row = f.file_row in
...@@ -566,6 +626,7 @@ module Helpers = struct ...@@ -566,6 +626,7 @@ module Helpers = struct
if !toggle_hide_proved_goals then if !toggle_hide_proved_goals then
goals_model#set ~row ~column:visible_column false goals_model#set ~row ~column:visible_column false
(* deprecated *)
let set_theory_proved ~propagate t = let set_theory_proved ~propagate t =
t.verified <- true; t.verified <- true;
let row = t.theory_row in let row = t.theory_row in
...@@ -642,14 +703,6 @@ module Helpers = struct ...@@ -642,14 +703,6 @@ module Helpers = struct
set_proof_status ~obsolete a status time; set_proof_status ~obsolete a status time;
a a
let remove_proof_row a =
let (_:bool) = goals_model#remove a.Model.proof_row in
(* let g = a.Model.proof_goal in
remove a from g.Model.external_proofs
and update g.Model.proved
*)
()
let add_goal_row parent name t db_goal = let add_goal_row parent name t db_goal =
let parent_row = match parent with let parent_row = match parent with
...@@ -663,7 +716,7 @@ module Helpers = struct ...@@ -663,7 +716,7 @@ module Helpers = struct
goal_row = row; goal_row = row;
goal_db = db_goal; goal_db = db_goal;
external_proofs = Hashtbl.create 7; external_proofs = Hashtbl.create 7;
transformations = []; transformations = Hashtbl.create 3;
proved = false; proved = false;
} }
in in
...@@ -678,6 +731,7 @@ module Helpers = struct ...@@ -678,6 +731,7 @@ module Helpers = struct
let parent = g.Model.goal_row in let parent = g.Model.goal_row in
let row = goals_model#append ~parent () in let row = goals_model#append ~parent () in
let tr = { Model.parent_goal = g; let tr = { Model.parent_goal = g;
Model.transf_proved = false;
Model.transf_row = row; Model.transf_row = row;
Model.transf_db = db_transf; Model.transf_db = db_transf;
subgoals = []; subgoals = [];
...@@ -1084,19 +1138,20 @@ let rec prover_on_goal q p g = ...@@ -1084,19 +1138,20 @@ let rec prover_on_goal q p g =
g p db_pa Model.Scheduled 0.0) () g p db_pa Model.Scheduled 0.0) ()
in in
redo_external_proof q g a; redo_external_proof q g a;
List.iter Hashtbl.iter
(fun t -> List.iter (prover_on_goal q p) t.Model.subgoals) (fun _ t -> List.iter (prover_on_goal q p) t.Model.subgoals)
g.Model.transformations g.Model.transformations
let rec prover_on_goal_or_children q p g = let rec prover_on_goal_or_children q p g =
if not (g.Model.proved && !context_unproved_goals_only) then if not (g.Model.proved && !context_unproved_goals_only) then
begin begin
match g.Model.transformations with let r = ref true in
| [] -> prover_on_goal q p g Hashtbl.iter
| l -> (fun _ t ->
List.iter (fun t -> r := false;
List.iter (prover_on_goal_or_children q p) List.iter (prover_on_goal_or_children q p)
t.Model.subgoals) l t.Model.subgoals) g.Model.transformations;
if !r then prover_on_goal q p g
end end
let prover_on_selected_goal_or_children q pr row = let prover_on_selected_goal_or_children q pr row =
...@@ -1160,7 +1215,7 @@ let split_goal g = ...@@ -1160,7 +1215,7 @@ let split_goal g =
let goals,_ = List.fold_left (GtkThread.sync fold) ([],1) subgoals let goals,_ = List.fold_left (GtkThread.sync fold) ([],1) subgoals
in in
tr.Model.subgoals <- List.rev goals; tr.Model.subgoals <- List.rev goals;
g.Model.transformations <- tr :: g.Model.transformations) subgoals) Hashtbl.add g.Model.transformations "split" tr) subgoals)
in in
Scheduler.apply_transformation_l ~callback Scheduler.apply_transformation_l ~callback
split_transformation g.Model.task split_transformation g.Model.task
...@@ -1168,12 +1223,13 @@ let split_goal g = ...@@ -1168,12 +1223,13 @@ let split_goal g =
let rec split_goal_or_children g = let rec split_goal_or_children g =
if not g.Model.proved then if not g.Model.proved then
begin begin
match g.Model.transformations with let r = ref true in
| [] -> split_goal g Hashtbl.iter
| l -> (fun _ t ->
List.iter (fun t -> r := false;
List.iter split_goal_or_children List.iter split_goal_or_children
t.Model.subgoals) l t.Model.subgoals) g.Model.transformations;
if !r then split_goal g
end end
let split_selected_goal_or_children row = let split_selected_goal_or_children row =
...@@ -1302,8 +1358,8 @@ let rec collapse_proved_goal g = ...@@ -1302,8 +1358,8 @@ let rec collapse_proved_goal g =
goals_view#collapse_row (goals_model#get_path row); goals_view#collapse_row (goals_model#get_path row);
end end
else else
List.iter Hashtbl.iter
(fun t -> List.iter collapse_proved_goal t.Model.subgoals) (fun _ t -> List.iter collapse_proved_goal t.Model.subgoals)
g.Model.transformations g.Model.transformations
let collapse_verified_theory th = let collapse_verified_theory th =
...@@ -1341,8 +1397,8 @@ let rec hide_proved_in_goal g = ...@@ -1341,8 +1397,8 @@ let rec hide_proved_in_goal g =
goals_model#set ~row ~column:Model.visible_column false goals_model#set ~row ~column:Model.visible_column false
end end
else else
List.iter Hashtbl.iter
(fun t -> List.iter hide_proved_in_goal t.Model.subgoals) (fun _ t -> List.iter hide_proved_in_goal t.Model.subgoals)
g.Model.transformations g.Model.transformations
let hide_proved_in_theory th = let hide_proved_in_theory th =
...@@ -1375,8 +1431,8 @@ let rec show_all_in_goal g = ...@@ -1375,8 +1431,8 @@ let rec show_all_in_goal g =
goals_view#collapse_row (goals_model#get_path row) goals_view#collapse_row (goals_model#get_path row)
else else
goals_view#expand_row (goals_model#get_path row); goals_view#expand_row (goals_model#get_path row);
List.iter Hashtbl.iter
(fun t -> List.iter show_all_in_goal t.Model.subgoals) (fun _ t -> List.iter show_all_in_goal t.Model.subgoals)
g.Model.transformations g.Model.transformations
let show_all_in_theory th = let show_all_in_theory th =
...@@ -1789,7 +1845,19 @@ let () = ...@@ -1789,7 +1845,19 @@ let () =
let remove_proof_attempt a = let remove_proof_attempt a =
Db.remove_proof_attempt a.Model.proof_db; Db.remove_proof_attempt a.Model.proof_db;
Helpers.remove_proof_row a let (_:bool) = goals_model#remove a.Model.proof_row in
let g = a.Model.proof_goal in
Hashtbl.remove g.Model.external_proofs a.Model.prover.prover_id;
Helpers.check_goal_proved g
let remove_transf t =
(* TODO: remove subgoals first !!! *)
Db.remove_transformation t.Model.transf_db;
let (_:bool) = goals_model#remove t.Model.transf_row in
let g = t.Model.parent_goal in
Hashtbl.remove g.Model.transformations "split" (* hack !! *);
Helpers.check_goal_proved g
let confirm_remove_row r = let confirm_remove_row r =
let row = filter_model#get_iter r in let row = filter_model#get_iter r in
...@@ -1805,8 +1873,11 @@ let confirm_remove_row r = ...@@ -1805,8 +1873,11 @@ let confirm_remove_row r =
~callback:(fun () -> remove_proof_attempt a) ~callback:(fun () -> remove_proof_attempt a)
`QUESTION `QUESTION
"Do you really want to remove the selected proof attempt?" "Do you really want to remove the selected proof attempt?"
| Model.Row_transformation _tr -> | Model.Row_transformation tr ->
info_window `INFO "Transformation removal not yet available, sorry" info_window
~callback:(fun () -> remove_transf tr)
`QUESTION
"Do you really want to remove the selected transformation and all its subgoals?"
let confirm_remove_selection () = let confirm_remove_selection () =
match goals_view#selection#get_selected_rows with match goals_view#selection#get_selected_rows with
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment