Qed.LogicSourcetype 'a operator = {invertible : bool;associative : bool;commutative : bool;idempotent : bool;neutral : 'a element;absorbant : 'a element;}Algebraic properties for user operators.
type 'a category = | Functionlogic function
*)| Constructorf xs = g ys iff f=g && xi=yi
| Injectionf xs = f ys iff xi=yi
| Operator of 'a operatorAlgebraic properties for functions.
Quantifiers and Binders
type ('f, 'a, 'd, 'x, 'b, 'e) term_repr = | True| False| Kint of Z.t| Kreal of Q.t| Times of Z.t * 'emult: k1 * e2
*)| Add of 'e listadd: e11 + ... + e1n
*)| Mul of 'e listmult: e11 * ... * e1n
*)| Div of 'e * 'e| Mod of 'e * 'e| Eq of 'e * 'e| Neq of 'e * 'e| Leq of 'e * 'e| Lt of 'e * 'e| Aget of 'e * 'eaccess: array1idx2
| Aset of 'e * 'e * 'eupdate: array1idx2 -> elem3
| Acst of ('f, 'a) datatype * 'econstant array type -> value
| Rget of 'e * 'f| Rdef of ('f * 'e) list| And of 'e listand: e11 && ... && e1n
*)| Or of 'e listor: e11 || ... || e1n
*)| Not of 'e| Imply of 'e list * 'eimply: (e11 && ... && e1n) ==> e2
*)| If of 'e * 'e * 'eite: if c1 then e2 else e3
*)| Fun of 'd * 'e listComplete call (no partial app.)
*)| Fvar of 'x| Bvar of int * ('f, 'a) datatype| Apply of 'e * 'e listHigh-Order application (Cf. binder)
*)| Bind of binder * ('f, 'a) datatype * 'brepresentation of terms. type arguments are the following: