1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
(************************************************************************) (* * The Coq Proof Assistant / The Coq Development Team *) (* v * INRIA, CNRS and contributors - Copyright 1999-2019 *) (* <O___,, * (see CREDITS file for the list of authors) *) (* \VV/ **************************************************************) (* // * This file is distributed under the terms of the *) (* * GNU Lesser General Public License Version 2.1 *) (* * (see LICENSE file for the text of the license) *) (************************************************************************) open Names (** Locus : positions in hypotheses and goals *) type 'a or_var = | ArgArg of 'a | ArgVar of lident (** {6 Occurrences} *) type 'a occurrences_gen = | AllOccurrences | AtLeastOneOccurrence | AllOccurrencesBut of 'a list (** non-empty *) | NoOccurrences | OnlyOccurrences of 'a list (** non-empty *) type occurrences_expr = (int or_var) occurrences_gen type 'a with_occurrences = occurrences_expr * 'a type occurrences = int occurrences_gen (** {6 Locations} Selecting the occurrences in body (if any), in type, or in both *) type hyp_location_flag = InHyp | InHypTypeOnly | InHypValueOnly (** {6 Abstract clauses expressions} A [clause_expr] (and its instance [clause]) denotes occurrences and hypotheses in a goal in an abstract way; in particular, it can refer to the set of all hypotheses independently of the effective contents of the current goal Concerning the field [onhyps]: - [None] means *on every hypothesis* - [Some l] means on hypothesis belonging to l *) type 'a hyp_location_expr = 'a with_occurrences * hyp_location_flag type 'id clause_expr = { onhyps : 'id hyp_location_expr list option; concl_occs : occurrences_expr } type clause = Id.t clause_expr (** {6 Concrete view of occurrence clauses} *) (** [clause_atom] refers either to an hypothesis location (i.e. an hypothesis with occurrences and a position, in body if any, in type or in both) or to some occurrences of the conclusion *) type clause_atom = | OnHyp of Id.t * occurrences_expr * hyp_location_flag | OnConcl of occurrences_expr (** A [concrete_clause] is an effective collection of occurrences in the hypotheses and the conclusion *) type concrete_clause = clause_atom list (** {6 A weaker form of clause with no mention of occurrences} *) (** A [hyp_location] is an hypothesis together with a location *) type hyp_location = Id.t * hyp_location_flag (** A [goal_location] is either an hypothesis (together with a location) or the conclusion (represented by None) *) type goal_location = hyp_location option (** {6 Simple clauses, without occurrences nor location} *) (** A [simple_clause] is a set of hypotheses, possibly extended with the conclusion (conclusion is represented by None) *) type simple_clause = Id.t option list (** {6 A notion of occurrences allowing to express "all occurrences convertible to the first which matches"} *) type 'a or_like_first = AtOccs of 'a | LikeFirst