1 (* Copyright (C) 2002, HELM Team.
3 * This file is part of HELM, an Hypertextual, Electronic
4 * Library of Mathematics, developed at the Computer Science
5 * Department, University of Bologna, Italy.
7 * HELM is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * HELM is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with HELM; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
22 * For details, see the HELM World-Wide-Web page,
23 * http://cs.unibo.it/helm/.
26 exception Impossible of int
27 exception ReferenceToConstant
28 exception ReferenceToVariable
29 exception ReferenceToCurrentProof
30 exception ReferenceToInductiveDefinition
31 exception WrongUriToInductiveDefinition
32 exception RelToHiddenHypothesis
34 exception AlreadySimplified
35 exception WhatAndWithWhatDoNotHaveTheSameLength;;
37 val alpha_equivalence: Cic.term -> Cic.term -> bool
39 (* Replaces "textually" in "where" every term in "what" with the corresponding
40 term in "with_what". The terms in "what" ARE NOT lifted when binders are
41 crossed. The terms in "with_what" ARE NOT lifted when binders are crossed.
42 Every free variable in "where" IS NOT lifted by nnn. *)
44 equality:('a -> Cic.term -> bool) ->
45 what:'a list -> with_what:Cic.term list -> where:Cic.term -> Cic.term
47 (* Replaces in "where" every term in "what" with the corresponding
48 term in "with_what". The terms in "what" ARE lifted when binders are
49 crossed. The terms in "with_what" ARE lifted when binders are crossed.
50 Every free variable in "where" IS NOT lifted by nnn.
51 Thus "replace_lifting_csc 1 ~with_what:[Rel 1; ... ; Rel 1]" is the
52 inverse of subst up to the fact that free variables in "where" are NOT
55 equality:(Cic.term -> Cic.term -> bool) ->
56 what:Cic.term list -> with_what:Cic.term list -> where:Cic.term -> Cic.term
58 (* Replaces in "where" every term in "what" with the corresponding
59 term in "with_what". The terms in "what" ARE NOT lifted when binders are
60 crossed. The terms in "with_what" ARE lifted when binders are crossed.
61 Every free variable in "where" IS lifted by nnn.
62 Thus "replace_lifting_csc 1 ~with_what:[Rel 1; ... ; Rel 1]" is the
63 inverse of subst up to the fact that "what" terms are NOT lifted. *)
64 val replace_lifting_csc :
65 int -> equality:(Cic.term -> Cic.term -> bool) ->
66 what:Cic.term list -> with_what:Cic.term list -> where:Cic.term -> Cic.term
68 (* This is like "replace_lifting_csc 1 ~with_what:[Rel 1; ... ; Rel 1]"
69 up to the fact that the index to start from can be specified *)
70 val replace_with_rel_1_from :
71 equality:(Cic.term -> Cic.term -> bool) ->
72 what:Cic.term list -> int -> Cic.term -> Cic.term
73 val reduce : Cic.context -> Cic.term -> Cic.term
74 val simpl : Cic.context -> Cic.term -> Cic.term
75 val unfold : ?what:Cic.term -> Cic.context -> Cic.term -> Cic.term