]> matita.cs.unibo.it Git - helm.git/blob - helm/ocaml/paramodulation/inference.mli
upgraded code to work with non-default equalities
[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   | ProofSymBlock of Cic.term list * proof
23   | SubProof of Cic.term * int * proof
24
25 type environment = Cic.metasenv * Cic.context * CicUniv.universe_graph
26
27
28 exception MatchingFailure
29
30 val matching:
31   Cic.metasenv -> Cic.context -> Cic.term -> Cic.term ->
32   CicUniv.universe_graph ->
33   Cic.substitution * Cic.metasenv * CicUniv.universe_graph
34
35 val unification:
36   Cic.metasenv -> Cic.context -> Cic.term -> Cic.term ->
37   CicUniv.universe_graph ->
38   Cic.substitution * Cic.metasenv * CicUniv.universe_graph
39
40     
41 (**
42    Performs the beta expansion of the term "where" w.r.t. "what",
43    i.e. returns the list of all the terms t s.t. "(t what) = where".
44 *)
45 val beta_expand:
46   ?metas_ok:bool -> ?match_only:bool -> Cic.term -> Cic.term -> Cic.term ->
47   Cic.context -> Cic.metasenv -> CicUniv.universe_graph ->
48   (Cic.term * Cic.substitution * Cic.metasenv * CicUniv.universe_graph) list
49
50     
51 (**
52    scans the context to find all Declarations "left = right"; returns a
53    list of tuples (proof, (type, left, right), newmetas). Uses
54    PrimitiveTactics.new_metasenv_for_apply to replace bound variables with
55    fresh metas...
56 *)
57 val find_equalities:
58   Cic.context -> ProofEngineTypes.proof -> int list * 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: Cic.term -> Cic.term -> equality
68
69 val term_is_equality: Cic.term -> bool
70
71 (**
72    superposition_left env target source
73    returns a list of new clauses inferred with a left superposition step
74    the negative equation "target" and the positive equation "source"
75 *)
76 (* val superposition_left: environment -> equality -> equality -> equality list *)
77
78 (**
79    superposition_right newmeta env target source
80    returns a list of new clauses inferred with a right superposition step
81    the positive equations "target" and "source"
82    "newmeta" is the first free meta index, i.e. the first number above the
83    highest meta index: its updated value is also returned
84 *)
85 (* val superposition_right: *)
86 (*   int -> environment -> equality -> equality -> int * equality list *)
87
88 (* val demodulation: int -> environment -> equality -> equality -> int * equality *)
89
90 val meta_convertibility: Cic.term -> Cic.term -> bool
91   
92 val meta_convertibility_eq: equality -> equality -> bool
93
94 val is_identity: environment -> equality -> bool
95
96 val string_of_equality: ?env:environment -> equality -> string
97
98 (* val subsumption: environment -> equality -> equality -> bool *)
99
100 val metas_of_term: Cic.term -> int list
101
102 val fix_metas: int -> equality -> int * equality
103
104 val extract_differing_subterms:
105   Cic.term -> Cic.term -> (Cic.term * Cic.term) option
106
107 val build_proof_term: proof (* equality *) -> Cic.term
108
109 val find_library_equalities:
110   HMysql.dbd -> Cic.context -> ProofEngineTypes.status -> int ->
111   UriManager.UriSet.t * equality list * int
112
113 val find_library_theorems:
114   HMysql.dbd -> environment -> ProofEngineTypes.status -> UriManager.UriSet.t ->
115   (Cic.term * Cic.term * Cic.metasenv) list
116
117 val find_context_hypotheses:
118   environment -> int list -> (Cic.term * Cic.term * Cic.metasenv) list
119
120 val string_of_proof: proof -> string