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.term -> Cic.term -> bool) ->
54 what:Cic.term list -> with_what:Cic.term list -> where:Cic.term -> Cic.term
56 (* Replaces in "where" every term in "what" with the corresponding
57 term in "with_what". The terms in "what" ARE NOT lifted when binders are
58 crossed. The terms in "with_what" ARE lifted when binders are crossed.
59 Every free variable in "where" IS lifted by nnn.
60 Thus "replace_lifting_csc 1 ~with_what:[Rel 1; ... ; Rel 1]" is the
61 inverse of subst up to the fact that "what" terms are NOT lifted. *)
62 val replace_lifting_csc :
63 int -> equality:(Cic.term -> Cic.term -> bool) ->
64 what:Cic.term list -> with_what:Cic.term list -> where:Cic.term -> Cic.term
66 (* This is like "replace_lifting_csc 1 ~with_what:[Rel 1; ... ; Rel 1]"
67 up to the fact that the index to start from can be specified *)
68 val replace_with_rel_1_from :
69 equality:(Cic.term -> Cic.term -> bool) ->
70 what:Cic.term list -> int -> Cic.term -> Cic.term
71 val reduce : Cic.context -> 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