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/src/codex.lattices/quadrivalent_Lattice.ml.html
Source file quadrivalent_Lattice.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(**************************************************************************) (* This file is part of the Codex semantics library. *) (* *) (* Copyright (C) 2013-2025 *) (* CEA (Commissariat à l'énergie atomique et aux énergies *) (* alternatives) *) (* *) (* you can redistribute it and/or modify it under the terms of the GNU *) (* Lesser General Public License as published by the Free Software *) (* Foundation, version 2.1. *) (* *) (* It is distributed in the hope that it will be useful, *) (* but WITHOUT ANY WARRANTY; without even the implied warranty of *) (* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *) (* GNU Lesser General Public License for more details. *) (* *) (* See the GNU Lesser General Public License version 2.1 *) (* for more details (enclosed in the file LICENSE). *) (* *) (**************************************************************************) (* Standard abstraction for booleans; powerset of {true;false} *) (* TODO: Should become Quadrivalent_Lattice. And should go into lattice? *) type boolean = Boolean_standard.Quadrivalent.t = | Bottom | True | False | Top module BooleanDT = (struct type t = boolean let pretty fmt t = let string = match t with | Bottom -> "{}" | True -> "{true}" | False -> "{false}" | Top -> "{true;false}" in Format.fprintf fmt "%s" string let _equal = (==) let compare (a:boolean) (b:boolean) = Stdlib.compare a b let hash = function | Bottom -> 0 | True -> 1 | False -> 2 | Top -> 3 end) module Boolean_Lattice = struct include BooleanDT let bottom () = Bottom let boolean_bottom = bottom () let is_bottom x = (x = Bottom) let top () = Top let singleton = function | true -> True | false -> False let truth_value x = x let of_bools ~may_be_false ~may_be_true = match (may_be_false,may_be_true) with | (false,false) -> Bottom | (false,true) -> True | (true,false) -> False | (true,true) -> Top (* Conversion to a couple (may_be_false,may_be_true) *) let to_bools = function | Bottom -> (false,false) | True -> (false,true) | False -> (true,false) | Top -> (true,true) let join a b = match (a,b) with | Bottom, x | x, Bottom -> x | False,False -> False | True, True -> True | True, False | False, True -> Top | Top, _ | _, Top -> Top let includes a b = match a,b with | Top,_ -> true | _, Bottom -> true | True,True | False,False -> true | _ -> false let widen ~previous b = join previous b let includes_or_widen ~previous b = if includes previous b then (true,b) else (false,join previous b) let inter a b = match (a,b) with | Bottom, _ | _, Bottom -> Bottom | Top, x | x, Top -> x | True, False | False, True -> Bottom | True, True -> True | False, False -> False ;; end let to_quadrivalent x = x include Boolean_Lattice let equal = (==)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>