summaryrefslogtreecommitdiff
path: root/toplevel/classes.mli
blob: f3cb0c582a525f4b8bb6598f0ea379970b7df060 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
(************************************************************************)
(*  v      *   The Coq Proof Assistant  /  The Coq Development Team     *)
(* <O___,, * CNRS-Ecole Polytechnique-INRIA Futurs-Universite Paris Sud *)
(*   \VV/  **************************************************************)
(*    //   *      This file is distributed under the terms of the       *)
(*         *       GNU Lesser General Public License Version 2.1        *)
(************************************************************************)

(*i $Id: classes.mli 11024 2008-05-30 12:41:39Z msozeau $ i*)

(*i*)
open Names
open Decl_kinds
open Term
open Sign
open Evd
open Environ
open Nametab
open Mod_subst
open Topconstr
open Util
open Typeclasses
open Implicit_quantifiers
(*i*)

type binder_list = (identifier located * bool * constr_expr) list
type binder_def_list = (identifier located * identifier located list * constr_expr) list
 
val binders_of_lidents : identifier located list -> local_binder list

val declare_implicit_proj : typeclass -> (identifier * constant) -> 
  Impargs.manual_explicitation list -> bool -> unit
(*
val infer_super_instances : env -> constr list ->
  named_context -> named_context -> types list * identifier list * named_context
*)
val new_class : identifier located ->
  local_binder list ->
  Vernacexpr.sort_expr located option ->
  local_binder list ->
  binder_list -> unit

(* By default, print the free variables that are implicitely generalized. *)

val default_on_free_vars : identifier list -> unit

val fail_on_free_vars : identifier list -> unit

val declare_instance_constant :
  typeclass ->
  int option -> (* priority *)
  bool -> (* globality *)
  Impargs.manual_explicitation list -> (* implicits *)
  ?hook:(Names.constant -> unit) ->
  identifier -> (* name *)
  Term.constr -> (* body *)
  Term.types -> (* type *)
  Names.identifier
    
val new_instance : 
  ?global:bool -> (* Not global by default. *)
  local_binder list ->
  typeclass_constraint ->
  binder_def_list ->
  ?on_free_vars:(identifier list -> unit) ->
  ?tac:Proof_type.tactic  ->
  ?hook:(constant -> unit) ->
  int option ->
  identifier

(* For generation on names based on classes only *)
val id_of_class : typeclass -> identifier
    
val context : ?hook:(Libnames.global_reference -> unit) -> typeclass_context -> unit

val declare_instance : bool -> identifier located -> unit

val mismatched_params : env -> constr_expr list -> named_context -> 'a

val mismatched_props : env -> constr_expr list -> named_context -> 'a

val solve_by_tac :     env ->
    Evd.evar_defs ->
    Evd.evar ->
  evar_info ->
  Proof_type.tactic ->
    Evd.evar_defs * bool

val solve_evars_by_tac :     env ->
    Evd.evar_defs ->
  Proof_type.tactic ->
  Evd.evar_defs

val refine_ref : (open_constr -> Proof_type.tactic) ref

val decompose_named_assum : types -> named_context * types

val push_named_context : named_context -> env -> env

val name_typeclass_binders : Idset.t ->
    Topconstr.local_binder list ->
    Topconstr.local_binder list * Idset.t