mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-29 18:52:29 +00:00 
			
		
		
		
	* Added covariance to arithmetic operations * Added distillSort * Update JavaGenericExample.java Co-authored-by: Alexander Kreuzer <alexander.kreuzer@sap.com> Co-authored-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									ee614c2e46
								
							
						
					
					
						commit
						dc5fa89de3
					
				
					 3 changed files with 73 additions and 12 deletions
				
			
		|  | @ -829,6 +829,37 @@ class JavaGenericExample | |||
|         } catch (Z3Exception ignored) | ||||
|         { | ||||
|         } | ||||
| 
 | ||||
|         // Coercing type change in Z3 | ||||
|         Expr<IntSort> integerDivision = ctx.mkDiv(ctx.mkInt(1), ctx.mkInt(2)); | ||||
|         System.out.printf("%s -> %s%n", integerDivision, integerDivision.simplify()); // (div 1 2) -> 0 | ||||
| 
 | ||||
|         Expr<RealSort> realDivision = ctx.mkDiv(ctx.mkReal(1), ctx.mkReal(2)); | ||||
|         System.out.printf("%s -> %s%n", realDivision, realDivision.simplify()); // (/ 1.0 2.0) -> 1/2 | ||||
| 
 | ||||
|         Expr<ArithSort> mixedDivision1 = ctx.mkDiv(ctx.mkReal(1), ctx.mkInt(2)); | ||||
|         Expr<ArithSort> tmp = mixedDivision1; | ||||
|         // the return type is a Expr<ArithSort> here but since we know it is a | ||||
|         // real view it as such. | ||||
|         Expr<RealSort> mixedDivision2 = mixedDivision1.distillSort(RealSort.class); | ||||
|         System.out.printf("%s -> %s%n", mixedDivision2, mixedDivision2.simplify()); // (/ 1.0 (to_real 2)) -> 1/2 | ||||
| 
 | ||||
|         // empty distillSort | ||||
|         mixedDivision1.distillSort(ArithSort.class); | ||||
| 
 | ||||
|         try { | ||||
|             mixedDivision1.distillSort(IntSort.class); | ||||
|             throw new TestFailedException(); // unreachable | ||||
|         } catch (Z3Exception exception) { | ||||
|             System.out.println(exception); // com.microsoft.z3.Z3Exception: Cannot cast expression of sort | ||||
|                                            // com.microsoft.z3.RealSort to com.microsoft.z3.IntSort. | ||||
|         } | ||||
|          | ||||
|         Expr<BoolSort> eq1 = ctx.mkEq(realDivision, integerDivision); | ||||
|         System.out.printf("%s -> %s%n", eq1, eq1.simplify()); // (= (/ 1.0 2.0) (to_real (div 1 2))) -> false | ||||
| 
 | ||||
|         Expr<BoolSort> eq2 = ctx.mkEq(realDivision, mixedDivision2); | ||||
|         System.out.printf("%s -> %s%n", eq2, eq2.simplify()); // (= (/ 1.0 2.0) (/ 1.0 (to_real 2))) -> true | ||||
|     } | ||||
| 
 | ||||
|     // / Shows how to use Solver(logic) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue