package codex
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
The Codex library for building static analysers based on abstract interpretation
Install
dune-project
Dependency
Authors
Maintainers
Sources
1.0-rc4.tar.gz
md5=bc7266a140c6886add673ede90e335d3
sha512=8da42c0ff2c1098c5f9cb2b5b43b306faf7ac93b8f5ae00c176918cee761f249ff45b29309f31a05bbcf6312304f86a0d5a000eb3f1094d3d3c2b9b4c7f5c386
doc/codex.terms/Terms/Relations/LinearTwoVarEquality/index.html
Module Relations.LinearTwoVarEqualitySource
Source
type (_, _) t = private | Identity : ('a, 'a) t| Linear_Equality : {size : Units.In_bits.t;f1 : Z.t;f2 : Z.t;offset : Z.t;
} -> (Operator.Function_symbol.bitvector, Operator.Function_symbol.bitvector) t(*Linear_Equality{f1; f2; offset}represents the relationf1*x + f2*y = offset. For instance{f1=1; f2=-2; offset=8}representsx - 2y = 8orx = 2y+8Bothf1andf2should be non-zero. The upside of storing it this way instead ofx = q*y + ris that it avoids having to use rational numbers.Invariants:
f1 > 0gcd f1 f2 offset = 1- We never have
f1 = -f2andoffset = 0. That case is represented byIdentity.
Source
val make :
size:Units.In_bits.t ->
f1:Z.t ->
f2:Z.t ->
Z.t ->
(Operator.Function_symbol.bitvector, Operator.Function_symbol.bitvector) tSmart constructor, normalizes terms to respect invariants
Destructors for easy access
include Union_Find.Parameters.GENERIC_GROUP with type ('a, 'b) t := ('a, 'b) t
include Union_Find.Parameters.GENERIC_MONOID with type ('a, 'b) t := ('a, 'b) t
Pretty printer for relations
Source
val pretty_with_terms :
(Format.formatter -> 'tl -> unit) ->
'tl ->
(Format.formatter -> 'tr -> unit) ->
'tr ->
Format.formatter ->
('a, 'b) t ->
unitpretty_with_terms pp_x x pp_y y rel pretty-prints the relation rel between terms x and y (respectively printed with pp_x and pp_y).
For placeholder variables, use pretty
Monoid composition, written using the functional convention compose f g is f \circ g. Should be associative, and compatible with identity:
- For all x,
G.compose x G.identity = G.compose G.identity x = x - For all x y z,
G.compose x (G.compose y z) = G.compose (G.compose x y) z
Source
module Action
(B : Single_value_abstraction.Sig.NUMERIC_ENUM) :
GROUP_ACTION
with type bitvector = B.bitvector
and type integer = B.integer
and type boolean = B.boolean
and type enum = B.enum
and type ('a, 'b) relation = ('a, 'b) t sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>