module Cc_literal:Literal representation for Congruence Closure.sig
..end
module Variable:Id.Generator
type
literal =
| |
Equality of |
| |
Disequality of |
val invalid_literal : literal
val is_valid_literal : literal -> bool
val equal : literal -> literal -> bool
equal l m
literals l
and m
equal (understands that
equality and disequality are commutative)?
Cc_literal.is_valid_literal
l
Cc_literal.is_valid_literal
m
val negation : literal -> literal
negation l
is the nation of l
.
Cc_literal.is_valid_literal
l
Cc_literal.is_valid_literal
l
not (
Cc_literal.equal
l negation l)
type
lemma =
| |
RoK of |
(* | RoK(a,i,x) is the lemma ai = x , generated when a = Kx | *) |
| |
Row1 of |
(* | Row1(b,i,x) is the lemma bi = x , generated when b =
Uaix for some a | *) |
| |
Row2 of |
(* | Row2(a,b,i,j) is the lemma i!=j => aj = bj , generated when
b=Uaix for some x | *) |
| |
Ext of |
(* | Ext(a,b) is the lemma a!=b => \exists k.ak != bk . | *) |
module Variable_map:Index.Map
with type key = Variable.t
module Variable_hash:Hashtbl.S
with type key = Variable.t
module Variable_map2:Index.Map2
with type key0 = Variable.t and type key1 = Variable.t
module Variable_set:Index.Set
with type elt = Variable.t