123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133(******************************************************************************)(* This file is part of Waterproof-lib. *)(* *)(* Waterproof-lib is free software: you can redistribute it and/or modify *)(* it under the terms of the GNU General Public License as published by *)(* the Free Software Foundation, either version 3 of the License, or *)(* (at your option) any later version. *)(* *)(* Waterproof-lib is distributed in the hope that it will be useful, *)(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *)(* GNU General Public License for more details. *)(* *)(* You should have received a copy of the GNU General Public License *)(* along with Waterproof-lib. If not, see <https://www.gnu.org/licenses/>. *)(* *)(******************************************************************************)openHintsopenExceptions(**
Interface to load and unload usual hint databases such as reals, integers, classical logic, ...
*)typehint_dataset={name:string;(** Dataset name *)main_databases:hint_db_namelist;(** Databases that will be called to solve a goal *)decidability_databases:hint_db_namelist;(** Databases that can be called to solve a goal with decidability properties *)shorten_databases:hint_db_namelist;(** Databases that will be called to solve a goal faster than [positive_databases] *)}(**
Type referencing all database lists that a {! hint_dataset} should contain
*)typedatabase_type=Main|Decidability|Shorten(**
Converts a string to a {! database_type}
*)letdatabase_type_of_string(database_type:string):database_type=matchdatabase_typewith|"Main"->Main|"Decidability"->Decidability|"Shorten"->Shorten|_->throw(NonExistingDataset"")(* TODO *)(**
Returns the name of the given [dataset]
*)letname(dataset:hint_dataset):string=dataset.name(**
Returns the list of databases for the given {! database_type}
*)letget_databases(dataset:hint_dataset)(databases:database_type):hint_db_namelist=matchdatabaseswith|Main->dataset.main_databases|Decidability->dataset.decidability_databases|Shorten->dataset.shorten_databases(**
Create a new empty dataset with a given name
*)letnew_dataset(name:string):hint_dataset={name;main_databases=[];decidability_databases=[];shorten_databases=[]}(**
Sets the databases of the given type for the given dataset
*)letset_databases(dataset:hint_dataset)(database_type:database_type)(databases:stringlist):hint_dataset=matchdatabase_typewith|Main->{datasetwithmain_databases=databases}|Decidability->{datasetwithdecidability_databases=databases}|Shorten->{datasetwithshorten_databases=databases}letempty:hint_dataset={name="Empty";main_databases:hint_db_namelist=["nocore"];decidability_databases:hint_db_namelist=["nocore"];shorten_databases:hint_db_namelist=["nocore"];}letcore:hint_dataset={name="Core";main_databases:hint_db_namelist=["core"];decidability_databases:hint_db_namelist=["nocore"];shorten_databases:hint_db_namelist=["core"];}letalgebra:hint_dataset={name="Algebra";main_databases:hint_db_namelist=["wp_core";"arith";"zarith";"wp_algebra";"wp_integers";"wp_negation_int"];decidability_databases:hint_db_namelist=["nocore";"wp_decidability_classical";"wp_decidability_nat"];shorten_databases:hint_db_namelist=["wp_core";"wp_negation_int"];}letintegers:hint_dataset={name="Integers";main_databases:hint_db_namelist=["arith";"zarith";"wp_core";"wp_integers";"wp_negation_int"];decidability_databases:hint_db_namelist=["nocore";"wp_decidability_nat"];shorten_databases:hint_db_namelist=["wp_core";"wp_negation_int"];}letreals_and_integers:hint_dataset={name="RealsAndIntegers";main_databases:hint_db_namelist=["arith";"zarith";"real";"wp_core";"wp_definitions";"wp_integers";"wp_reals";"wp_negation_reals"];decidability_databases:hint_db_namelist=["nocore";"wp_decidability_nat";"wp_decidability_integers";"wp_decidability_reals";"wp_decidability_classical";"wp_decidability_constructive"];shorten_databases:hint_db_namelist=["wp_core";"wp_definitions";"wp_negation_reals"];}letsets:hint_dataset={name="Sets";main_databases:hint_db_namelist=["arith";"zarith";"wp_core";"wp_integers";"wp_negation_int";"wp_sets"];decidability_databases:hint_db_namelist=["nocore";"wp_decidability_nat"];shorten_databases:hint_db_namelist=["wp_core";"wp_negation_int";"wp_sets"];}letintuition:hint_dataset={name="Intuition";main_databases:hint_db_namelist=["wp_intuition"];decidability_databases:hint_db_namelist=[];shorten_databases:hint_db_namelist=["wp_intuition"];}letclassical_epsilon:hint_dataset={name="ClassicalEpsilon";main_databases:hint_db_namelist=[];decidability_databases:hint_db_namelist=["nocore";"wp_decidability_epsilon"];shorten_databases:hint_db_namelist=[];}