首页 > 其他分享 >kissat分析01_基本数据结构02_solver

kissat分析01_基本数据结构02_solver

时间:2023-05-03 13:34:08浏览次数:38  
标签:02 assigned 01 solver level redundant lit values

solver在internal.h中定义

下面从使用的角度来了解solver个主要数据成员

  assign.c中几个函数
 
static inline void
kissat_assign (kissat * solver,
#ifdef INLINE_ASSIGN
           value * values, assigned * assigned,
#endif
           unsigned lit,
           bool binary, bool redundant, unsigned level, unsigned reason)
{
  assert (binary || !redundant);
  const unsigned not_lit = NOT (lit);
#ifndef INLINE_ASSIGN
  value *values = solver->values;
  assigned *assigned = solver->assigned;
#endif
  assert (!values[lit]);
  assert (!values[not_lit]);

  values[lit] = 1;
  values[not_lit] = -1;

  assert (solver->unassigned > 0);
  solver->unassigned--;

  const unsigned idx = IDX (lit);
  struct assigned *a = assigned + idx;

  if (level)
    {
      a->level = level;
      a->binary = binary;
      a->redundant = redundant;
      a->reason = reason;
    }
  else
    {
      a->level = 0;
      a->binary = false;
      a->redundant = false;
      a->reason = UNIT;
    }

  if (!solver->probing)
    {
      const bool negated = NEGATED (lit);  //文字是否为负文字,为真表示是负文字,为假表示为正文字
      const value value = BOOL_TO_VALUE (negated);
      SAVED (idx) = value;  //变元的取值 来自于文字取值为真时对应变元的值
    }

  PUSH_STACK (solver->trail, lit);

  if (!level)
    {
      kissat_mark_fixed_literal (solver, lit);
      assert (solver->unflushed < UINT_MAX);
      solver->unflushed++;
    }

  watches *watches = &WATCHES (not_lit);
  if (!watches->size)
    {
      watch *w = BEGIN_WATCHES (*watches);
      __builtin_prefetch (w, 0, 1);
    }
}

 

   
   
   
   
   
   

 

标签:02,assigned,01,solver,level,redundant,lit,values
From: https://www.cnblogs.com/yuweng1689/p/17368971.html

相关文章

  • P4211 [LNOI2014]LCA
    \(\color{purple}\text{P4211[LNOI2014]LCA}\)解题方法可以发现一个结论:两个点到根节点的重合路径的长度即为他们\(LCA\)的深度。所以我们把\([l,r]\)之间的点到根节点路径上各加一,再查询\(z\)到根节点的路径的值之和即为\(\sum_{i=l}^{r}\text{dep}[\text{LCA}(i,z)]\)......
  • 2022CVPR_Toward Fast, Flexible, and Robust Low-Light Image Enhancement(SCI_main)
    1.motivation(1)低光增强不能处理复杂的场景(2)需要耗费大量的计算2.contribution(1)节省计算(2)发明了自监督的SCI模块(SCI的核心是引入额外的网络模块(自校准照明)来辅助训练,而不是用于测试)大佬链接:(11条消息)低照度增强--论文阅读【《TowardFast,Flexible,andRobustLow-Light......
  • STAT3010统计方法
    STAT3010/6075StatisticalMethodsinInsuranceAssignment2 Thisassignmentisworth10%oftheoverallmarkforSTAT3010/6075. Thedeadlineforsubmissionis16.00onThursday4May2023. StandardUniversitypoliciesandprocedureswillbefollowedforla......
  • 20230429 模拟赛(jnxxhzz)
    T1.神奇零食柜略,oj上交要加快读T2.防御工事数据范围:\(1\len,m\le100\)不难想到是网络流(虽然我没想到……)这是一个挺基础的网络流对于每个\(V\),我们将它们连到一个超级源点上在往它的四个方向分别建边最后把所有的\(M\)连到一个汇点上而在建边时注意其实\(E->E\)的边......
  • Win11系统,VS2022编写数据库程序,小体积,绿色单文件,支持密码保护,XP到Win11都能运行
    在WIN11中用VS2022编写小体积的绿色单文件,支持密码保护,XP到WIN11都能运行的数据库程序1.用VC60建立一个Win32工程,VC60建立的工程默认是字节型的。2.用VS2010读取并转换为2010格式,再用VS2022读取,选择SDK和平台都不升级3.把wxsqlite3-4.5.1.zip\wxsqlite3-4.5.1\sqlite3se......
  • VS2022使用ClickOnce发布程序本地安装.net框架
    因为遇到下面的错误,没有在网上搜到详细解决问题的教程,费了一些时间才解决了问题,特此记录一下,也希望能帮助到其他人。 要在“系统必备”对话框中启用“从与我的应用程序相同的位置下载系统必备组件”,必须将“.NET桌面运行时6.0.14(x64)”项的文件“net6desktopruntime_x64\win......
  • 2023.5.1——软件工程日报
    所花时间(包括上课):0h代码量(行):0行博客量(篇):1篇今天,数学建模比赛中。。。我了解到的知识点:数学建模的相关知识......
  • 2023-05-02 量学基础 换挡买点
    1.放量上攻,缩量下跌,阳盖阴买入  1.放量上攻,缩量下跌,阳盖阴买入案例1:李16期答疑课2020年5月2号271.位置:攻守冲防的冲的位置2.压力:上方还有一堆套牢盘,所以无法直接上攻3.当下:(1)高量(2)第二天缩量站上高量(3)第三天首阴,放量阴,压力位(4)之后缩量调整。4.买入:(1)底部阳盖......
  • day63(2023.5.2)
    1.函数 2.对象概述 3.Math对象 4.Date对象 运行结果: 5.DOM概述 ......
  • 每日总结2023-05-02
     对于listView,内部item为这种格式,<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layo......