https://github.com/EasyCrypt/easycrypt
Revision 36f7f5a29ef730b23ec3b2a96e76e387e90ea0e5 authored by Alley Stoughton on 21 February 2018, 22:32:02 UTC, committed by Pierre-Yves Strub on 26 February 2018, 15:04:53 UTC
The elements of prover [...] have one of the following forms, where s is a string: s (add s to the use-only list) +s (add include s to the include/exclude list) -s (add exclude s to the include/exclude list) The include/exclude list is ordered, so that later instructions can supersede earlier ones. The use-only list was not ordered, but now is. The relative order of the use-only and include/exclude lists is irrelevant, so that, e.g., prover ["Z3" +"Alt-Ergo"] and prover [+"Alt-Ergo" "Z3"] are equivalent. The semantics is that the use-only list is first interpreted (if it's empty, one starts with the current provers as the base), and only then are the instructions of the include/exclude list applied to it, in order. There was already the special use-only instruction "ALL". Now, there is also the use-only instruction "CLEAR", which clears the use-only list, but may be superseded by the use-only instructions that follow. Examples (assuming "Z3" and "Alt-Ergo" are only known provers): prover []. (* a no-op *) prover [+"Z3"] (* adds just "Z3" to whatever current provers are *) prover [-"Z3"] (* removes just "Z3" from whatever current provers are *) prover ["ALL"] (* results in "Z3", "Alt-Ergo" *) prover ["CLEAR"] (* results in nothing *) prover ["CLEAR" +"Z3"] (* results in just "Z3" *) prover [+"Z3" "CLEAR"] (* results in just "Z3" *) prover ["CLEAR" "Z3"] (* result in just "Z3" *) prover ["Z3" "CLEAR"] (* results in nothing *) prover [-"Z3" "ALL"] (* results in "Alt-Ergo" *) prover [+"Z3" "ALL" -"Z3"] (* results in "Alt-Ergo" *) prover [-"Z3" "ALL" +"Z3"] (* results in "Z3", "Alt-Ergo" *)
1 parent 5115c89
Tip revision: 36f7f5a29ef730b23ec3b2a96e76e387e90ea0e5 authored by Alley Stoughton on 21 February 2018, 22:32:02 UTC
Added clean way to clear the list of current provers.
Added clean way to clear the list of current provers.
Tip revision: 36f7f5a
ecUnify.mli
(* --------------------------------------------------------------------
* Copyright (c) - 2012--2016 - IMDEA Software Institute
* Copyright (c) - 2012--2018 - Inria
* Copyright (c) - 2012--2018 - Ecole Polytechnique
*
* Distributed under the terms of the CeCILL-C-V1 license
* -------------------------------------------------------------------- *)
(* -------------------------------------------------------------------- *)
open EcUid
open EcSymbols
open EcPath
open EcTypes
open EcDecl
(* -------------------------------------------------------------------- *)
exception UnificationFailure of [`TyUni of ty * ty | `TcCtt of ty * Sp.t]
exception UninstanciateUni
type unienv
type tvar_inst =
| TVIunamed of ty list
| TVInamed of (EcSymbols.symbol * ty) list
type tvi = tvar_inst option
type uidmap = uid -> ty option
module UniEnv : sig
val create : (EcIdent.t * Sp.t) list option -> unienv
val copy : unienv -> unienv (* constant time *)
val restore : dst:unienv -> src:unienv -> unit (* constant time *)
val fresh : ?tc:EcPath.Sp.t -> ?ty:ty -> unienv -> ty
val getnamed : unienv -> symbol -> EcIdent.t
val repr : unienv -> ty -> ty
val opentvi : unienv -> ty_params -> tvi -> ty EcIdent.Mid.t
val openty : unienv -> ty_params -> tvi -> ty -> ty * ty list
val opentys : unienv -> ty_params -> tvi -> ty list -> ty list * ty list
val closed : unienv -> bool
val close : unienv -> uidmap
val assubst : unienv -> uidmap
val tparams : unienv -> ty_params
end
val unify : EcEnv.env -> unienv -> ty -> ty -> unit
val hastc : EcEnv.env -> unienv -> ty -> Sp.t -> unit
val tfun_expected : unienv -> EcTypes.ty list -> EcTypes.ty
type sbody = ((EcIdent.t * ty) list * expr) Lazy.t
val select_op :
?filter:(operator -> bool) -> tvi -> EcEnv.env -> qsymbol -> unienv
-> dom -> ((EcPath.path * ty list) * ty * unienv * sbody option) list
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...