class 20,21,22,23,24 summary
This commit is contained in:
parent
519e848e4f
commit
a3968c50a3
|
@ -0,0 +1,16 @@
|
||||||
|
Resolution
|
||||||
|
Examples
|
||||||
|
Soundness of resolution rule.
|
||||||
|
|
||||||
|
Res*(F)
|
||||||
|
|
||||||
|
Proposition 1:
|
||||||
|
If \emptyset \in Res*(F) then F is unsatisfiable.
|
||||||
|
Proof : (by contradiction and using soundness of resolution rule)
|
||||||
|
|
||||||
|
Proposition 2:
|
||||||
|
If F is unsatisfiable then \emptyset \in Res*(F)
|
||||||
|
Proof : (by induction on #prop_variables appearing in F
|
||||||
|
Base case : when F has only one variable.
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,38 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include<vector>
|
||||||
|
#include"z3++.h"
|
||||||
|
|
||||||
|
using namespace z3;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
De Morgan's Duality Law: {e not(x and y) <-> (not x) or ( not y) }
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
|
||||||
|
context c;
|
||||||
|
expr x = c.bool_const("x");
|
||||||
|
expr y = c.bool_const("y");
|
||||||
|
expr conjecture = !(x && y) == (!x || !y);
|
||||||
|
|
||||||
|
//create a solver
|
||||||
|
solver s(c);
|
||||||
|
|
||||||
|
//assert the negation of conjecture
|
||||||
|
s.add(!conjecture);
|
||||||
|
|
||||||
|
std::cout << s << "\n";
|
||||||
|
std::cout << s.to_smt2() << "\n";
|
||||||
|
|
||||||
|
//check if the result if unsat
|
||||||
|
switch (s.check()) {
|
||||||
|
case unsat: std::cout << "demorgan is valid\n"; break;
|
||||||
|
case sat: std::cout << "demorgan is not valid\n"; break;
|
||||||
|
case unknown: std::cout <<"unknown\n"; break;
|
||||||
|
}
|
||||||
|
} //end of function
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,47 @@
|
||||||
|
/*++
|
||||||
|
Copyright (c) 2015 Microsoft Corporation
|
||||||
|
--*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include<vector>
|
||||||
|
#include"z3++.h"
|
||||||
|
|
||||||
|
using namespace z3;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void expr_vector_example() {
|
||||||
|
std::cout << "expr_vector example\n";
|
||||||
|
context c;
|
||||||
|
const unsigned N = 10;
|
||||||
|
|
||||||
|
expr_vector x(c);
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < N; i++) {
|
||||||
|
std::stringstream x_name;
|
||||||
|
x_name << "x_" << i;
|
||||||
|
x.push_back(c.int_const(x_name.str().c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
|
solver s(c);
|
||||||
|
for (unsigned i = 0; i < N; i++) {
|
||||||
|
s.add(x[i] >= 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout << s << "\n" << "solving...\n" << s.check() << "\n";
|
||||||
|
model m = s.get_model();
|
||||||
|
std::cout << "solution\n" << m;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
expr_vector_example(); std::cout << "\n";
|
||||||
|
std::cout << "done\n";
|
||||||
|
}
|
||||||
|
catch (exception & ex) {
|
||||||
|
std::cout << "unexpected error: " << ex << "\n";
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include<vector>
|
||||||
|
#include"z3++.h"
|
||||||
|
|
||||||
|
using namespace z3;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
find values of expressions that satisfy the following ineaualities
|
||||||
|
x >= 1
|
||||||
|
y < x +3
|
||||||
|
*/
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
context c;
|
||||||
|
expr x = c.int_const("x");
|
||||||
|
expr y = c.int_const("y");
|
||||||
|
//create a solver
|
||||||
|
solver s(c);
|
||||||
|
//adding the constraints
|
||||||
|
s.add(x >=1);
|
||||||
|
s.add(y < x+3);
|
||||||
|
|
||||||
|
std::cout << s.check() << "\n\n";
|
||||||
|
|
||||||
|
model m = s.get_model();
|
||||||
|
std::cout << m << "\n";
|
||||||
|
|
||||||
|
//traversing the model
|
||||||
|
std::cout << "traversing the model" << "\n";
|
||||||
|
for (unsigned i =0; i < m.size(); i++){
|
||||||
|
func_decl v = m[i];
|
||||||
|
assert(v.arity() ==0);
|
||||||
|
std::cout << v.name()<<"="<<m.get_const_interp(v) << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
// evaluating the expressions in the model.
|
||||||
|
std::cout << "evaluating the expressions in the model" << "\n";
|
||||||
|
std::cout << "x+y+1= "<< m.eval(x+y+1)<<"\n";
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
} //end of function
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
Introduction to FOL
|
||||||
|
|
||||||
|
-- socrates example.
|
||||||
|
Why do we need FOL to deduct that Socrates is mortal.
|
||||||
|
-- Predicates are relating the objects and properties.
|
||||||
|
-- Signature of FOL (constants, functions, relations).
|
||||||
|
-- we need variables, logical symbols and non-logical symbols,
|
||||||
|
also to define wffs.
|
||||||
|
|
||||||
|
|
||||||
|
-- Example of Number Theory and some formulas
|
||||||
|
-- Example of set theory and some examples
|
||||||
|
-- Example of min FOL (with only =).
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
-- Syntax of FOL
|
||||||
|
-- step (1) terms : constant, variabls, or succussive applications to functions.
|
||||||
|
-- examples of terms in number theory, set theory, min FOL
|
||||||
|
|
||||||
|
-- step (2) atomic formulas : Relations over terms, = exists unless
|
||||||
|
specified.
|
||||||
|
-- examples of atomic formulas in number theory, set theory, min FOL
|
||||||
|
-- step (3) wffs : atomic formulas, or formulas constructed from
|
||||||
|
smaller formulas using negation, implication, \forall, \exists.
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
Revision of syntax of FOL.
|
||||||
|
Semantics of FOL
|
||||||
|
Structure.
|
||||||
|
Example of structure of natural numbers
|
||||||
|
EXamples of formulas from number theory
|
||||||
|
|
||||||
|
Assignment functions S: Variables --> \universe
|
||||||
|
|
||||||
|
Extenstion of S to give meaning to terms, atomic formulas and wffs.
|
||||||
|
|
Loading…
Reference in New Issue