package dolmen

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file ast.ml

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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167

(* This file is free software, part of dolmen. See file "LICENSE" for more information *)

module type Id = sig

  type t
  (** The type of identifiers *)

  type namespace
  (** The type for namespaces. *)

  val term : namespace
  (** Usual namespace, used for temrs, types and propositions. *)

  val decl : namespace
  (** Names used to refer to tptp phrases. These are used
      in declarations and include statement. *)

  val mk : namespace -> string -> t
  (** Make an identifier *)

end

module type Term = sig

  type t
  (** The type of terms. *)

  type id
  (** The type of identifiers *)

  type location
  (** The type of locations attached to terms. *)

  val eq_t      : ?loc:location -> unit -> t
  val neq_t     : ?loc:location -> unit -> t
  val not_t     : ?loc:location -> unit -> t
  val or_t      : ?loc:location -> unit -> t
  val and_t     : ?loc:location -> unit -> t
  val xor_t     : ?loc:location -> unit -> t
  val nor_t     : ?loc:location -> unit -> t
  val nand_t    : ?loc:location -> unit -> t
  val equiv_t   : ?loc:location -> unit -> t
  val implies_t : ?loc:location -> unit -> t
  val implied_t : ?loc:location -> unit -> t
  val pi_t      : ?loc:location -> unit -> t
  val sigma_t   : ?loc:location -> unit -> t
  val data_t    : ?loc:location -> unit -> t
  (** Predefined symbols in tptp. Symbols as standalone terms are necessary
      for parsing tptp's THF. {!implied_t} is reverse implication, and
      {!data_t} is used in tptp's annotations. {!pi_t} and {!sigma_t} are
      the encoding of forall and exists quantifiers as constant in higher-order
      logic. *)

  val colon : ?loc:location -> t -> t -> t
  (** Juxtaposition of terms, usually used for annotating terms with their type. *)

  val var      : ?loc:location -> id -> t
  (** Make a variable (in tptp, variable are syntaxically different from constants). *)

  val const    : ?loc:location -> id -> t
  (** Make a constant. *)

  val distinct : ?loc:location -> id -> t
  (** Make a constant whose name possibly contain special characters
      (All 'distinct' constants name are enclosed in quotes). *)

  val int      : ?loc:location -> string -> t
  val rat      : ?loc:location -> string -> t
  val real     : ?loc:location -> string -> t
  (** Constants that are syntaxically recognised as numbers. *)

  val apply : ?loc:location -> t -> t list -> t
  (** Application. *)

  val ite   : ?loc:location -> t -> t -> t -> t
  (** Conditional, of the form [ite condition then_branch els_branch]. *)

  val union   : ?loc:location -> t -> t -> t
  (** Union of types. *)

  val product : ?loc:location -> t -> t -> t
  (** Product of types, used for function types with more than one argument. *)

  val arrow   : ?loc:location -> t -> t -> t
  (** Function type constructor. *)

  val subtype : ?loc:location -> t -> t -> t
  (** Comparison of type (used in tptp's THF). *)

  val pi     : ?loc:location -> t list -> t -> t
  (** Dependant type constructor, used for polymorphic function types. *)

  val letin  : ?loc:location -> t list -> t -> t
  (** Local binding for terms. *)

  val forall : ?loc:location -> t list -> t -> t
  (** Universal propositional quantification. *)

  val exists : ?loc:location -> t list -> t -> t
  (** Existencial porpositional quantification. *)

  val lambda : ?loc:location -> t list -> t -> t
  (** Function construction. *)

  val choice : ?loc:location -> t list -> t -> t
  (** Indefinite description, also called choice operator. *)

  val description : ?loc:location -> t list -> t -> t
  (** Definite description. *)

  val sequent : ?loc:location -> t list -> t list -> t
  (** Sequents as terms, used as [sequents hyps goals]. *)

end

module type Statement = sig

  type t
  (** The type of statements. *)

  type id
  (** The type of identifiers *)

  type term
  (** The type of terms used in statements. *)

  type location
  (** The type of locations attached to statements. *)

  val annot : ?loc:location -> term -> term list -> term
  (** Terms as annotations for statements. *)

  val include_ : ?loc:location -> string -> id list -> t
  (** Include directive. Given the filename, and a list of
      names to import (an empty list means import everything). *)

  val tpi : ?loc:location -> ?annot:term -> id -> string -> term -> t
  val thf : ?loc:location -> ?annot:term -> id -> string -> term -> t
  val tff : ?loc:location -> ?annot:term -> id -> string -> term -> t
  val fof : ?loc:location -> ?annot:term -> id -> string -> term -> t
  val cnf : ?loc:location -> ?annot:term -> id -> string -> term -> t
  (** TPTP statements, used for instance as [tff ~loc ~annot name role t].
      Instructs the prover to register a new directive with the given name,
      role and term. Current tptp roles are:
      - ["axiom", "hypothesis", "definition", "lemma", "theorem"] acts
        as new assertions/declartions
      - ["assumption", "conjecture"] are proposition that need to be proved,
        and then can be used to prove other propositions. They are equivalent
        to the following sequence of smtlib statements:
        {ul
          {- [push 1]}
          {- [assert (not t)]}
          {- [check_sat]}
          {- [pop 1]}
          {- [assert t]}
        }
      - ["negated_conjecture"] is the same as ["conjecture"], but the given proposition
        is false (i.e its negation is the proposition to prove).
      - ["type"] declares a new symbol and its type
      - ["plain", "unknown", "fi_domain", "fi_functors", "fi_predicates"] are valid
        roles with no specified semantics
      - any other role is an error
  *)

end

OCaml

Innovation. Community. Security.