1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889(******************************************************************************)(* *)(* The Alt-Ergo theorem prover *)(* Copyright (C) 2006-2013 *)(* *)(* Sylvain Conchon *)(* Evelyne Contejean *)(* *)(* Francois Bobot *)(* Mohamed Iguernelala *)(* Stephane Lescuyer *)(* Alain Mebsout *)(* *)(* CNRS - INRIA - Universite Paris Sud *)(* *)(* This file is distributed under the terms of the Apache Software *)(* License version 2.0 *)(* *)(* ------------------------------------------------------------------------ *)(* *)(* Alt-Ergo: The SMT Solver For Software Verification *)(* Copyright (C) 2013-2018 --- OCamlPro SAS *)(* *)(* This file is distributed under the terms of the Apache Software *)(* License version 2.0 *)(* *)(******************************************************************************)openOptionsopenFormattype'aabstract=unitmoduletypeALIEN=sigincludeSig.Xvalembed:rabstract->rvalextract:r->(rabstract)optionendmoduleShostak(X:ALIEN)=structtypet=X.rabstracttyper=X.rletname="Farrays"letis_mine_symb__=falseletfully_interpreted_=assertfalselettype_info_=assertfalseletcolor_=assertfalseletprint__=assertfalseletembed_=assertfalseletis_mine_=assertfalseletcompare__=assertfalseletequal__=assertfalselethash_=assertfalseletleaves_=assertfalseletsubst___=assertfalseletmake_=assertfalseletterm_extract_=None,falseletabstract_selectors__=assertfalseletsolve__=assertfalseletassign_valuer_eq=ifList.exists(fun(t,_)->(Expr.deptht)=1)eqthenNoneelsematchX.term_extractrwith|Some_,true->Some(Expr.fresh_name(X.type_infor),false)|_->assertfalseletchoose_adequate_model__l=letacc=List.fold_left(funacc(s,r)->if(Expr.depths)<>1thenaccelsematchaccwith|Some(s',_)whenExpr.compares's>0->acc|_->Some(s,r))Nonelinmatchaccwith|Some(_,r)->ignore(flush_str_formatter());fprintfstr_formatter"%a"X.printr;(* it's a EUF constant *)r,flush_str_formatter()|_->assertfalseend