diff --git a/scripts/mk_util.py b/scripts/mk_util.py index 781961259..1fbff9cdb 100644 --- a/scripts/mk_util.py +++ b/scripts/mk_util.py @@ -1830,8 +1830,11 @@ class JavaDLLComponent(Component): if IS_WINDOWS: # On Windows, CL creates a .lib file to link against. out.write('\t$(SLINK) $(SLINK_OUT_FLAG)libz3java$(SO_EXT) $(SLINK_FLAGS) %s$(OBJ_EXT) libz3$(LIB_EXT)\n' % os.path.join('api', 'java', 'Native')) + elif IS_OSX and IS_ARCH_ARM64: + out.write('\t$(SLINK) $(SLINK_OUT_FLAG)libz3java$(SO_EXT) $(SLINK_FLAGS) -arch arm64 %s$(OBJ_EXT) libz3$(SO_EXT)\n' % + os.path.join('api', 'java', 'Native')) else: - out.write('\t$(SLINK) $(SLINK_OUT_FLAG)libz3java$(SO_EXT) $(SLINK_FLAGS) $(SLINK_EXTRA_FLAGS) %s$(OBJ_EXT) libz3$(SO_EXT)\n' % + out.write('\t$(SLINK) $(SLINK_OUT_FLAG)libz3java$(SO_EXT) $(SLINK_FLAGS) %s$(OBJ_EXT) libz3$(SO_EXT)\n' % os.path.join('api', 'java', 'Native')) out.write('%s.jar: libz3java$(SO_EXT) ' % self.package_name) deps = '' diff --git a/src/smt/theory_array.cpp b/src/smt/theory_array.cpp index 9d3e93839..1f842c2ed 100644 --- a/src/smt/theory_array.cpp +++ b/src/smt/theory_array.cpp @@ -91,9 +91,9 @@ namespace smt { d->m_parent_selects.push_back(s); TRACE("array", tout << v << " " << mk_pp(s->get_expr(), m) << " " << mk_pp(get_enode(v)->get_expr(), m) << "\n";); m_trail_stack.push(push_back_trail(d->m_parent_selects)); - for (enode* n : d->m_stores) { + for (enode* n : d->m_stores) instantiate_axiom2a(s, n); - } + if (!m_params.m_array_delay_exp_axiom && d->m_prop_upward) { for (enode* store : d->m_parent_stores) { SASSERT(is_store(store)); diff --git a/src/smt/theory_array_base.cpp b/src/smt/theory_array_base.cpp index 1be88a6de..8d545d3b4 100644 --- a/src/smt/theory_array_base.cpp +++ b/src/smt/theory_array_base.cpp @@ -179,6 +179,12 @@ namespace smt { conseq_expr = ctx.bool_var2expr(conseq.var()); } + if (m.are_distinct(idx1->get_expr(), idx2->get_expr())) { + ctx.mark_as_relevant(conseq); + assert_axiom(conseq); + continue; + } + literal ante = mk_eq(idx1->get_expr(), idx2->get_expr(), true); ctx.mark_as_relevant(ante); // ctx.force_phase(ante);