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 (* Replaces "textually" in "where" every term in "what" with the corresponding
38 term in "with_what". The terms in "what" ARE NOT lifted when binders are
39 crossed. The terms in "with_what" ARE NOT lifted when binders are crossed.
40 Every free variable in "where" IS NOT lifted by nnn. *)
42 equality:('a -> Cic.term -> bool) ->
43 what:'a list -> with_what:Cic.term list -> where:Cic.term -> Cic.term
45 (* Replaces in "where" every term in "what" with the corresponding
46 term in "with_what". The terms in "what" ARE lifted when binders are
47 crossed. The terms in "with_what" ARE lifted when binders are crossed.
48 Every free variable in "where" IS NOT lifted by nnn.
49 Thus "replace_lifting_csc 1 ~with_what:[Rel 1; ... ; Rel 1]" is the
50 inverse of subst up to the fact that free variables in "where" are NOT
53 equality:(Cic.context -> Cic.term -> Cic.term -> bool) ->
54 context:Cic.context ->
55 what:Cic.term list -> with_what:Cic.term list -> where:Cic.term -> Cic.term
57 (* Replaces in "where" every term in "what" with the corresponding
58 term in "with_what". The terms in "what" ARE NOT lifted when binders are
59 crossed. The terms in "with_what" ARE lifted when binders are crossed.
60 Every free variable in "where" IS lifted by nnn.
61 Thus "replace_lifting_csc 1 ~with_what:[Rel 1; ... ; Rel 1]" is the
62 inverse of subst up to the fact that "what" terms are NOT lifted. *)
63 val replace_lifting_csc :
64 int -> equality:(Cic.term -> Cic.term -> bool) ->
65 what:Cic.term list -> with_what:Cic.term list -> where:Cic.term -> Cic.term
67 (* This is like "replace_lifting_csc 1 ~with_what:[Rel 1; ... ; Rel 1]"
68 up to the fact that the index to start from can be specified *)
69 val replace_with_rel_1_from :
70 equality:(Cic.term -> Cic.term -> bool) ->
71 what:Cic.term list -> int -> Cic.term -> Cic.term
72 val simpl : Cic.context -> Cic.term -> Cic.term
73 val unfold : ?what:Cic.term -> Cic.context -> Cic.term -> Cic.term