Download presentation
Presentation is loading. Please wait.
1
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
2
Refutation-Based Synthesis in SMT
f.x.P(f,x) + Negated Synthesis Conjecture (+ syntactic restrictions R)
3
Refutation-Based Synthesis in SMT
f.x.P(f,x) + SMT Solver SMT Solver or Counterexample Guided -Instantiation Enumerative SyGuS unsat unsat f = lx.t1 f = lx.t2
4
CVC4 for Sygus Comp 2017 Enumerative Enumerative SyGuS 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 Input/Output Examples Single Invocation Conjectures Partially Single Invocation Conjectures Other Second-Order Synthesis Conjectures
5
Input/Output Examples
CVC4 for Sygus Comp 2017 GENERAL PBE With Syntactic Restrictions CLIA INV Without Syntactic Restrictions Input/Output Examples Partially Single Invocation Conjectures Other Second-Order Synthesis Conjectures Single Invocation Conjectures
6
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
7
PBE Strings Algorithm R:
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) 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”
8
PBE Strings Algorithm R:
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) Enumerate 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” x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) …
9
PBE Strings Algorithm R:
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) 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” x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match
10
PBE Strings Algorithm R: f=lx.++(“Dr”,…)
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) 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” x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,…)
11
PBE Strings Algorithm R: f=lx.++(“Dr”,“_”,…)
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) 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” x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,…)
12
PBE Strings Algorithm R: f=lx.++(“Dr”,“_”,substr(x,0,1),…)
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) 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” 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),…)
13
PBE Strings Algorithm R:
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) 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” 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),…)
14
PBE Strings Algorithm R:
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) …no enumerated value is prefix! 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” 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),…)
15
PBE Strings Algorithm R: f=lx.++(“Dr”,“_”,…)
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) Backtrack 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” x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,…)
16
PBE Strings Algorithm R: f=lx.++(“Dr”,“_”,x,…)
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) 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” x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,x,…)
17
PBE Strings Algorithm R: f=lx.++(“Dr”,“_”,x,”_”,…)
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) 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” x “_” “Dr” substr(x,0,1) substr(x,1,1) substr(x,0,2) substr(“Dr”,0,1) … Match f=lx.++(“Dr”,“_”,x,”_”,…)
18
PBE Strings Algorithm R: f=lx.++(“Dr”,“_”,x,”_”,substr(x,0,1))
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) 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” 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))
19
PBE Strings Algorithm R: f=lx.++(“Dr”,“_”,x,”_”,substr(x,0,1))
fStr := x | “_” | “Dr”| ++(fStr,fStr) substr(fStr,fInt,fInt) fInt := 0 | 1 | +(fInt,fInt) 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” f=lx.++(“Dr”,“_”,x,”_”,substr(x,0,1)) Return
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.