12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152(**************************************************************************)(* 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). *)(* *)(**************************************************************************)moduleB=Sva_quadrivalentmoduleEnum_Lattice=Lattices.BitfieldincludeEnum_Latticetypeboolean=B.booleantypeenum=tmoduleEnum_Forward=structletcaseof~casea=ifis_bottomathenLattices.Quadrivalent.Bottomelseletc=singletoncaseinifZ.equalacthenB.Boolean_Forward.true_elseifincludesacthenB.TopelseB.Boolean_Forward.false_letenum_const~case=singletoncaseendmoduleEnum_Backward=structletcaseof~caseares=matchreswith|B.Top->None|B.Bottom->Some(bottom())|B.True->Some(intera(singletoncase))|B.False->letnotc=Z.lognot@@singletoncaseinSome(Z.logandanotc)end