190 likes | 202 Views
Explore the powerful features of CVC4 for SyGuS comp 2017, offering cutting-edge techniques for synthesis and refutation using SMT solving. Benefit from optimizations and improvements in grammar construction, I/O example handling, and more.
E N D
CVC4 for Sygus Comp 2017 • CVC4 is an SMT solver • Fourth generation of Cooperating Validity Checker (CVC, CVC Lite, CVC3, CVC4) • Supports many theories: • Linear arithmetic, bitvectors, UF, datatypes, arrays, sets, strings, … • Supports quantified formulas • Two approaches for refutation-based synthesis in SMT [Reynolds et al CAV 15] • Counterexample-Guided Instantiation (CEGQI) for single invocation properties • Techniques Enumerative Syntax-guided synthesis (SyGuS) in DPLL(T) …and (limited) hybrid approaches that combine the two
Refutation-Based Synthesis in SMT R f.x.P(f,x) + NegatedSynthesis Conjecture (+ syntactic restrictions R)
Refutation-Based Synthesis in SMT R f.x.P(f,x) + SMT Solver SMT Solver or Counterexample Guided -Instantiation Enumerative SyGuS unsat unsat f = lx.t1 f = lx.t2
CVC4 for Sygus Comp 2017 Enumerative SyGuS Enumerative SyGuS Enumerative SyGuS With Syntactic Restrictions + I/O Symmetry Breaking CEGQI + reconstruction CEGQI (trivially) Hybrid approaches Enumerative SyGuS (using default restrictions) Counterexample Guided -Instantiation Without Syntactic Restrictions Other Second-Order Synthesis Conjectures Input/OutputExamples Partially Single Invocation Conjectures Single Invocation Conjectures
CVC4 for Sygus Comp 2017 GENERAL PBE With Syntactic Restrictions CLIA . INV Without Syntactic Restrictions Other Second-Order Synthesis Conjectures Input/OutputExamples Partially Single Invocation Conjectures Single Invocation Conjectures
What’s new this Year • For enumerative SyGuS approach (all tracks): • Key optimizations for the q.f. datatypes procedure to reduce #terms • Improvements to symmetry breaking for search space pruning • For INV track: • Custom grammar construction • E.g. include constants occurring in conjecture into grammar • Improved use of templates • For PBE track: • New approaches to I/O example conjectures inspired by[Alur et al TACAS2017] • Decision tree learning for ite-solutions for PBE Bit-Vectors • Sequencing algorithm for concat-solutions for PBE Strings
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt)
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) Enumerate x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) …
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,…)
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,…)
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,substr(x,0,1),…)
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,substr(x,0,1),substr(x,1,1),…)
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) …no enumerated value is prefix! x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,substr(x,0,1),substr(x,1,1),…)
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) Backtrack x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,…)
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,x,…)
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,x,”_”,…)
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,x,”_”,substr(x,0,1))
PBE Strings Algorithm R: f.x. x=“Alice” f(x)=“Dr_Alice_A” x=“Bob” f(x)=“Dr_Bob_B” x=“Carl” f(x)=“Dr_Carl_C” x=“David” f(x)=“Dr_David_D” fStr:=x|“_”|“Dr”|++(fStr,fStr) substr(fStr,fInt,fInt) fInt:=0 | 1 | +(fInt,fInt) f=lx.++(“Dr”,“_”,x,”_”,substr(x,0,1)) Return