module Focus:sig
..end
type 'a
t = {
|
term : |
|||
|
coeff : |
(* |
Never 0
| *) |
|
rest : |
val get : 'a Monome.monome -> int -> 'a t
Invalid_argument
if the index is invalidval focus_term : 'a Monome.monome -> Monome.term -> 'a t option
val focus_term_exn : 'a Monome.monome -> Monome.term -> 'a t
val to_monome : 'a t -> 'a Monome.monome
val coeff : 'a t -> 'a
val term : 'a t -> Monome.term
val rest : 'a t -> 'a Monome.monome
val sum : 'a t -> 'a Monome.monome -> 'a t
val difference : 'a t -> 'a Monome.monome -> 'a t
val uminus : 'a t -> 'a t
val product : 'a t -> 'a -> 'a t
Invalid_argument
if the number is 0val map : ?term:(Monome.term -> Monome.term) ->
?coeff:('a -> 'a) ->
?rest:('a Monome.monome -> 'a Monome.monome) ->
'a t -> 'a t
val scale : Z.t t ->
Z.t t -> Z.t t * Z.t t
val is_max : ord:Libzipperposition.Ordering.t -> 'a t -> bool
val fold_m : pos:Libzipperposition.Position.t ->
'a Monome.monome ->
'b -> ('b -> 'a t -> Libzipperposition.Position.t -> 'b) -> 'b
val apply_subst : renaming:Libzipperposition.Substs.Renaming.t ->
Libzipperposition.Substs.t ->
'a t Libzipperposition.Scoped.t -> 'a t
rest
because some of them may become equal to the focused term.val apply_subst_no_renaming : Libzipperposition.Substs.t ->
'a t Libzipperposition.Scoped.t -> 'a t
f(x)* + 2a
and f(y)* + f(z) + b
(where focused terms are starred)
will yield both
(1,1,x=y)
and (1,2,x=y=z)
since f(z)
becomes focused too.
Again, arith constants are not unifiable with unshielded variables.
val unify_ff : ?subst:Libzipperposition.Substs.t ->
'a t Libzipperposition.Scoped.t ->
'a t Libzipperposition.Scoped.t ->
('a t * 'a t * Libzipperposition.Substs.t)
Sequence.t
val unify_mm : ?subst:Libzipperposition.Substs.t ->
'a Monome.monome Libzipperposition.Scoped.t ->
'a Monome.monome Libzipperposition.Scoped.t ->
('a t * 'a t * Libzipperposition.Substs.t)
Sequence.t
m1
and m2
. For each such unifier we
return the versions of m1
and m2
where the unified terms
are focused.val unify_self : ?subst:Libzipperposition.Substs.t ->
'a t Libzipperposition.Scoped.t ->
('a t * Libzipperposition.Substs.t) Sequence.t
2f(x)+a, {x=y}
for the monome f(x)+f(y)+a
where f(x)
is focused.val unify_self_monome : ?subst:Libzipperposition.Substs.t ->
'a Monome.monome Libzipperposition.Scoped.t ->
('a t * Libzipperposition.Substs.t) Sequence.t
val pp : 'a t CCFormat.printer