]> matita.cs.unibo.it Git - helm.git/blob - helm/ocaml/paramodulation/inference.mli
New module HMysql (to abstract over Mysql and make profiling easier).
[helm.git] / helm / ocaml / paramodulation / inference.mli
1 type equality =
2     int *                (* weight *)
3     proof * 
4     (Cic.term *          (* type *)
5      Cic.term *          (* left side *)
6      Cic.term *          (* right side *)
7      Utils.comparison) * (* ordering *)  
8     Cic.metasenv *       (* environment for metas *)
9     Cic.term list        (* arguments *)
10
11 and proof =
12   | NoProof
13   | BasicProof of Cic.term
14   | ProofBlock of
15       Cic.substitution * UriManager.uri *
16         (Cic.name * Cic.term) * Cic.term * 
17         (* name, ty, eq_ty, left, right *)
18 (*         (Cic.name * Cic.term * Cic.term * Cic.term * Cic.term) *  *)
19         (Utils.pos * equality) * proof
20   | ProofGoalBlock of proof * proof (* equality *)
21   | ProofSymBlock of Cic.term Cic.explicit_named_substitution * proof
22
23
24 type environment = Cic.metasenv * Cic.context * CicUniv.universe_graph
25
26
27 exception MatchingFailure
28
29 val matching:
30   Cic.metasenv -> Cic.context -> Cic.term -> Cic.term ->
31   CicUniv.universe_graph ->
32   Cic.substitution * Cic.metasenv * CicUniv.universe_graph
33
34 val unification:
35   Cic.metasenv -> Cic.context -> Cic.term -> Cic.term ->
36   CicUniv.universe_graph ->
37   Cic.substitution * Cic.metasenv * CicUniv.universe_graph
38
39     
40 (**
41    Performs the beta expansion of the term "where" w.r.t. "what",
42    i.e. returns the list of all the terms t s.t. "(t what) = where".
43 *)
44 val beta_expand:
45   ?metas_ok:bool -> ?match_only:bool -> Cic.term -> Cic.term -> Cic.term ->
46   Cic.context -> Cic.metasenv -> CicUniv.universe_graph ->
47   (Cic.term * Cic.substitution * Cic.metasenv * CicUniv.universe_graph) list
48
49     
50 (**
51    scans the context to find all Declarations "left = right"; returns a
52    list of tuples (proof, (type, left, right), newmetas). Uses
53    PrimitiveTactics.new_metasenv_for_apply to replace bound variables with
54    fresh metas...
55 *)
56 val find_equalities:
57   ?eq_uri:UriManager.uri -> Cic.context -> ProofEngineTypes.proof ->
58   equality list * int
59
60
61 exception TermIsNotAnEquality;;
62
63 (**
64    raises TermIsNotAnEquality if term is not an equation.
65    The first Cic.term is a proof of the equation
66 *)
67 val equality_of_term: ?eq_uri:UriManager.uri -> Cic.term -> Cic.term ->
68   equality
69
70 val term_is_equality: ?eq_uri:UriManager.uri -> Cic.term -> bool
71
72 (**
73    superposition_left env target source
74    returns a list of new clauses inferred with a left superposition step
75    the negative equation "target" and the positive equation "source"
76 *)
77 (* val superposition_left: environment -> equality -> equality -> equality list *)
78
79 (**
80    superposition_right newmeta env target source
81    returns a list of new clauses inferred with a right superposition step
82    the positive equations "target" and "source"
83    "newmeta" is the first free meta index, i.e. the first number above the
84    highest meta index: its updated value is also returned
85 *)
86 (* val superposition_right: *)
87 (*   int -> environment -> equality -> equality -> int * equality list *)
88
89 (* val demodulation: int -> environment -> equality -> equality -> int * equality *)
90
91 val meta_convertibility: Cic.term -> Cic.term -> bool
92   
93 val meta_convertibility_eq: equality -> equality -> bool
94
95 val is_identity: environment -> equality -> bool
96
97 val string_of_equality: ?env:environment -> equality -> string
98
99 (* val subsumption: environment -> equality -> equality -> bool *)
100
101 val metas_of_term: Cic.term -> int list
102
103 val fix_metas: int -> equality -> int * equality
104
105 val extract_differing_subterms:
106   Cic.term -> Cic.term -> (Cic.term * Cic.term) option
107
108 val build_proof_term: equality -> Cic.term
109
110 val find_library_equalities:
111   dbd:HMysql.dbd -> Cic.context -> ProofEngineTypes.status -> int ->
112   equality list * int