You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							213 lines
						
					
					
						
							5.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							213 lines
						
					
					
						
							5.2 KiB
						
					
					
				| 
 | |
| %module FormulaClasses | |
| %{ | |
| #include <carl/formula/Formula.h> | |
| #include <carl/formula/Constraint.h> | |
| #include <carl/core/SimpleConstraint.h> | |
| #include "gmpxx.h" | |
| #include <carl/core/RationalFunction.h> | |
| #include <carl/core/Relation.h> | |
| 
 | |
| 
 | |
| typedef mpq_class Rational; | |
| 
 | |
| typedef carl::Monomial::Arg Monomial; | |
| typedef carl::Term<Rational> Term; | |
| typedef carl::MultivariatePolynomial<Rational> Polynomial; | |
| typedef carl::FactorizedPolynomial<Polynomial> FactorizedPolynomial; | |
| typedef carl::RationalFunction<Polynomial> RationalFunction; | |
| typedef carl::RationalFunction<FactorizedPolynomial> FactorizedRationalFunction; | |
| typedef carl::PolynomialFactorizationPair<Polynomial> FactorizationPair; | |
| 
 | |
| typedef carl::Formula<Polynomial> FormulaPoly; | |
| typedef std::vector<FormulaPoly> FormulaVector; | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| %} | |
| 
 | |
| 
 | |
| %include "std_string.i" | |
| %import "variable.i" | |
| %import "polynomial.i" | |
| %import "rationalfunction.i" | |
| %import "factorizedpolynomial.i" | |
| %include "std_vector.i" | |
| %include "std_map.i" | |
| 
 | |
| 
 | |
| typedef carl::MultivariatePolynomial<Rational> Polynomial; | |
| typedef std::vector<FormulaPoly> FormulaVector; | |
| 
 | |
| 
 | |
| 
 | |
| %template(FormulaVector) std::vector<carl::Formula<carl::MultivariatePolynomial<Rational>>>; | |
| 
 | |
| 
 | |
| typedef carl::Formula<Polynomial> FormulaPoly; | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| typedef mpq_class Rational; | |
| 
 | |
| typedef carl::Monomial::Arg Monomial; | |
| typedef carl::Term<Rational> Term; | |
| typedef carl::FactorizedPolynomial<Polynomial> FactorizedPolynomial; | |
| typedef carl::RationalFunction<Polynomial> RationalFunction; | |
| typedef carl::RationalFunction<FactorizedPolynomial> FactorizedRationalFunction; | |
| typedef carl::PolynomialFactorizationPair<Polynomial> FactorizationPair; | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| /*%typemap(in) std::vector<FormulaPoly> { | |
| 
 | |
| 
 | |
| }*/ | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| namespace carl { | |
| 
 | |
| //typedef typename Polynomial::UnderlyingNumberType<Rational>::type Polynomial::NumberType; | |
| 
 | |
| 
 | |
|     enum FormulaType { | |
|         // Generic | |
|         ITE, EXISTS, FORALL, | |
|          | |
|         // Core Theory | |
|         TRUE, FALSE, | |
|         BOOL, | |
|         NOT, IMPLIES, AND, OR, XOR, | |
|         IFF,  | |
| 
 | |
| 		// Arithmetic Theory | |
| 		CONSTRAINT, | |
| 		 | |
| 		// Bitvector Theory | |
| 		BITVECTOR, | |
| 		 | |
| 		// Uninterpreted Theory | |
| 		UEQ | |
|     }; | |
| 
 | |
| enum Relation { EQ = 0, NEQ = 1, LESS = 2, LEQ = 4, GREATER = 3, GEQ = 5 }; | |
| /* TODO: wrap this toString | |
| inline std::ostream& operator<<(std::ostream& os, const Relation& r) { | |
| 	switch (r) { | |
| 		case Relation::EQ:	os << "="; break; | |
| 		case Relation::NEQ:	os << "<>"; break; | |
| 		case Relation::LESS:	os << "<"; break; | |
| 		case Relation::LEQ:	os << "<="; break; | |
| 		case Relation::GREATER:	os << ">"; break; | |
| 		case Relation::GEQ:	os << ">="; break; | |
| 	} | |
| 	return os; | |
| } */ | |
| 
 | |
| template<typename Pol> class Constraint { | |
| 	    public: | |
| 	        Constraint( bool _valid = true ); | |
|    | |
|             explicit Constraint( carl::Variable::Arg _var, carl::Relation _rel,  const typename Pol::NumberType & _bound = constant_zero<Rational>::get() ); | |
|              | |
|             explicit Constraint( const Pol& _lhs, carl::Relation _rel ); | |
| 		 | |
| 	    unsigned satisfiedBy( const std::map<Variable,Rational>& _assignment ) const; | |
| 
 | |
|             std::string toString( unsigned _unequalSwitch = 0, bool _infix = true, bool _friendlyVarNames = true ) const; | |
| 
 | |
| 	    const Pol& lhs() const; | |
| 
 | |
|             carl::Relation relation() const; | |
| 
 | |
| 	//TODO: boolean connectives | |
| 	 | |
| 
 | |
| 	}; | |
| 
 | |
| template<typename LhsType> class SimpleConstraint { | |
|          public: | |
| 		SimpleConstraint(bool v) : mLhs(v ? 0 : 1), mRelation(carl::Relation::EQ) {} | |
| 		SimpleConstraint(const LhsType& lhs, carl::Relation rel) : mLhs(lhs), mRelation(rel) | |
| 		{} | |
| 	 | |
| 		const LhsType& lhs() const {return mLhs;} | |
| 		const carl::Relation& rel() const {return mRelation;} | |
| 		 | |
| 		%extend { | |
| 			std::string toString() { | |
| 			     std::stringstream ss; | |
|     			     ss << *$self; | |
|     			     return ss.str();	 | |
| 			} | |
| 		} | |
| 
 | |
| }; | |
| 
 | |
| 
 | |
| 
 | |
| //TODO: wrap EvaluationMap, Formulas, and the other types that are missing! | |
| 
 | |
| template<typename Pol> class Formula { | |
| 
 | |
| 
 | |
|     public: | |
|       explicit Formula( carl::Variable::Arg _booleanVar ): | |
|         Formula( carl::FormulaPool<Pol>::getInstance().create( _booleanVar ) ) | |
|       {} | |
| 
 | |
|      explicit Formula( const carl::Constraint<Pol>& _constraint ): | |
|         Formula( carl::FormulaPool<Pol>::getInstance().create( _constraint ) ) | |
|     {} | |
| 
 | |
|     explicit Formula( carl::FormulaType _type, const Formula& _subformula ): | |
|         Formula(carl::FormulaPool<Pol>::getInstance().create(_type, std::move(Formula(_subformula)))) | |
|     {} | |
| 
 | |
|     explicit Formula( carl::FormulaType _type, const std::vector<Formula<Pol>>& _subasts ): | |
|         Formula( carl::FormulaPool<Pol>::getInstance().create( _type, _subasts ) ) | |
|     {} | |
| 
 | |
| //Apparently satisfiedBy is no longer existent | |
|     //unsigned satisfiedBy( const carl::EvaluationMap<typename Pol::NumberType>& _assignment ) const; | |
| 
 | |
|     std::string toString( bool _withActivity = false, unsigned _resolveUnequal = 0, const std::string _init = "", bool _oneline = true, bool _infix = false, bool _friendlyNames = true, bool _withVariableDefinition = false ) const; | |
| 
 | |
|     size_t size() const; | |
| 
 | |
| 
 | |
| 
 | |
|     carl::FormulaType getType() const | |
|     { | |
|         return mpContent->mType; | |
|     } | |
| //TODO: operators and iterator! | |
| 
 | |
| }; | |
| } | |
| 
 | |
| 
 | |
| %include "std_map.i" | |
| 
 | |
| 
 | |
| 
 | |
| %template(FormulaPoly) carl::Formula<Polynomial>; | |
| %template(ConstraintPoly) carl::Constraint<Polynomial>; | |
| %template(SimpleConstraintPoly) carl::SimpleConstraint<Polynomial>; | |
| %template(SimpleConstraintFunc) carl::SimpleConstraint<FactorizedRationalFunction>; | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |