mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Add virtual translate method to solver_factory base class and all implementations
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									de46fd82cb
								
							
						
					
					
						commit
						b3de9ebaa2
					
				
					 5 changed files with 28 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -527,6 +527,10 @@ public:
 | 
			
		|||
    solver * operator()(ast_manager & m, params_ref const & p, bool proofs_enabled, bool models_enabled, bool unsat_core_enabled, symbol const & logic) override {
 | 
			
		||||
        return mk_smt_solver(m, p, logic);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    solver_factory* translate(ast_manager& m) override {
 | 
			
		||||
        return alloc(smt_solver_factory);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -424,6 +424,12 @@ public:
 | 
			
		|||
                                  (*m_f2)(m, p, proofs_enabled, models_enabled, unsat_core_enabled, logic),
 | 
			
		||||
                                  p);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    solver_factory* translate(ast_manager& m) override {
 | 
			
		||||
        solver_factory* translated_f1 = m_f1->translate(m);
 | 
			
		||||
        solver_factory* translated_f2 = m_f2->translate(m);
 | 
			
		||||
        return alloc(combined_solver_factory, translated_f1, translated_f2);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
solver_factory * mk_combined_solver_factory(solver_factory * f1, solver_factory * f2) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,7 @@ class solver_factory {
 | 
			
		|||
public:
 | 
			
		||||
    virtual ~solver_factory() = default;
 | 
			
		||||
    virtual solver * operator()(ast_manager & m, params_ref const & p, bool proofs_enabled, bool models_enabled, bool unsat_core_enabled, symbol const & logic) = 0;
 | 
			
		||||
    virtual solver_factory* translate(ast_manager& m) = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
solver_factory * mk_smt_strategic_solver_factory(symbol const & logic = symbol::null);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -390,6 +390,11 @@ public:
 | 
			
		|||
    solver * operator()(ast_manager & m, params_ref const & p, bool proofs_enabled, bool models_enabled, bool unsat_core_enabled, symbol const & logic) override {
 | 
			
		||||
        return mk_tactic2solver(m, m_tactic.get(), p, proofs_enabled, models_enabled, unsat_core_enabled, logic);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    solver_factory* translate(ast_manager& m) override {
 | 
			
		||||
        tactic* translated_tactic = m_tactic->translate(m);
 | 
			
		||||
        return alloc(tactic2solver_factory, translated_tactic);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class tactic_factory2solver_factory : public solver_factory {
 | 
			
		||||
| 
						 | 
				
			
			@ -402,6 +407,10 @@ public:
 | 
			
		|||
        tactic * t = (*m_factory)(m, p);
 | 
			
		||||
        return mk_tactic2solver(m, t, p, proofs_enabled, models_enabled, unsat_core_enabled, logic);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    solver_factory* translate(ast_manager& m) override {
 | 
			
		||||
        return alloc(tactic_factory2solver_factory, m_factory);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,6 +60,10 @@ public:
 | 
			
		|||
        auto s = mk_tactic2solver(m, t, p, proofs_enabled, models_enabled, unsat_core_enabled, logic);
 | 
			
		||||
        return s;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    solver_factory* translate(ast_manager& m) override {
 | 
			
		||||
        return alloc(smt_nested_solver_factory);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
tactic * mk_tactic_for_logic(ast_manager & m, params_ref const & p, symbol const & logic) {
 | 
			
		||||
| 
						 | 
				
			
			@ -185,6 +189,10 @@ public:
 | 
			
		|||
                                  mk_solver_for_logic(m, p, l), 
 | 
			
		||||
                                  p);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    solver_factory* translate(ast_manager& m) override {
 | 
			
		||||
        return alloc(smt_strategic_solver_factory, m_logic);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
solver_factory * mk_smt_strategic_solver_factory(symbol const & logic) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue