123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107(*******************************************************************************
* electrod - a model finder for relational first-order linear temporal logic
*
* Copyright (C) 2016-2020 ONERA
* Authors: Julien Brunel (ONERA), David Chemouil (ONERA)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
* License-Filename: LICENSE.md
******************************************************************************)openContainerstyperaw_goal=(Raw_ident.t,Raw_ident.t)Gen_goal.ttyperaw_block=(Raw_ident.t,Raw_ident.t)Gen_goal.blocktyperaw_problem={file:stringoption;raw_univ:raw_urelementslist;raw_decls:raw_declarationlist(** does not contain 'univ' *);raw_goal:raw_goal;raw_invar:raw_block(** may be empty *);raw_inst:raw_assignmentlist(** may be empty *);raw_syms:raw_symmetrylist(** may be empty *)}andraw_urelements=|UIntvlofraw_interval|UPlainofRaw_ident.tandraw_declaration=|DConstofRaw_ident.t*intoption*raw_scope|DVarofRaw_ident.t*intoption*raw_scope*raw_scopeoptionandraw_multiplicity=[`Lone|`One]optionandraw_scope=|SExactofraw_bound|SInexactofraw_bound*raw_multiplicity*raw_boundandraw_bound=|BUniv|BRefofRaw_ident.t(** reference to a previously-defined {i set} *)|BProdofraw_bound*raw_multiplicity*raw_bound|BUnionofraw_bound*raw_bound|BEltsofraw_elementlistandraw_element=|EIntvlofraw_interval(** 1-tuples *)|ETupleofraw_tuple(** A n-tuple (incl. n = 1). inv: nonempty list *)andraw_tuple=Raw_ident.tlistandraw_interval=Raw_ident.t*Raw_ident.tandraw_assignment=Raw_ident.t*raw_tuplelistandraw_symmetry=(Raw_ident.t*raw_tuple)list*(Raw_ident.t*raw_tuple)listtyperaw_paragraph=|ParGoalofraw_goal|ParInstofraw_assignmentlist|ParSymofraw_symmetrylist|ParInvofraw_blockletintervalid1id2=(id1,id2)letetupleats=assert(not@@List.is_emptyats);ETupleatsleteintvlintvl=EIntvlintvlletbuniv=BUnivletbrefname=BRefnameletbprodmultb1b2=BProd(mult,b1,b2)letbunionb1b2=BUnion(b1,b2)letbeltselts=BEltseltsletsexactb=SExactbletsinexactb1multb2=SInexact(b1,mult,b2)letdconstatomarityscope=DConst(atom,arity,scope)letdvaratomarityscopefby=DVar(atom,arity,scope,fby)letuintvlintvl=UIntvlintvlletuplainatom=UPlainatomletproblemfileraw_univraw_declsraw_goalraw_invarraw_instraw_syms={file;raw_univ;raw_decls;raw_goal;raw_invar;raw_inst;raw_syms}letdecl_id=functionDConst(id,_,_)|DVar(id,_,_,_)->id