kdrag.theories.real.arb
Module Attributes
| 
 | This is probably the purest form of the information that arb offers. | 
Functions
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | Use numerical evaluation to confirm ball of lhs is completely below ball of rhs | 
| 
 | Get overapproximating arb from midpoint and radius. | 
| 
 | |
| 
 | Get the bounds of a z3 expression. | 
| 
 | |
| 
 | |
| 
 | |
| 
 | This axiom schema is fishy, in that even if arb is implement correctly, this check does not assure the equality of the left and right hand side. | 
| 
 | Interpret a z3 expression into an arb calculation. | 
| 
 | |
| 
 | This is probably the purest form of the information that arb offers. | 
| Get midpoint and radius as z3 values. | |
| Get exact arb as z3 value | 
- kdrag.theories.real.arb.arb_bnd(arbf, z3f)
- >>> kd.prove(real.cos(0) == 1, by=[cos_bnd(arb(0))]) |= cos(0) == 1 
- kdrag.theories.real.arb.arb_ge(lhs, rhs)
- kdrag.theories.real.arb.arb_gt(lhs, rhs)
- kdrag.theories.real.arb.arb_le_ax(lhs0: ArithRef, rhs: ArithRef) Proof
- >>> arb_le_ax(3.14, real.pi) |= 157/50 <= pi >>> arb_le_ax(1,1) |= 1 <= 1 - Parameters:
- lhs0 (ArithRef) 
- rhs (ArithRef) 
 
- Return type:
 
- kdrag.theories.real.arb.arb_lt_ax(lhs: ArithRef, rhs: ArithRef) Proof
- Use numerical evaluation to confirm ball of lhs is completely below ball of rhs - >>> arb_lt_ax(3.14, real.pi) |= 157/50 < pi - Parameters:
- lhs (ArithRef) 
- rhs (ArithRef) 
 
- Return type:
 
- kdrag.theories.real.arb.arb_over_of_mid_rad(mid: ArithRef, rad: ArithRef) arb
- Get overapproximating arb from midpoint and radius. - >>> arb_over_of_mid_rad(1, 0) 1.00000000000000 >>> arb_over_of_mid_rad(1, 0.0005) [1.000 +/- 5.01e-4] - Parameters:
- mid (ArithRef) 
- rad (ArithRef) 
 
- Return type:
- arb 
 
- kdrag.theories.real.arb.bounds(e: ArithRef) tuple[ArithRef, ArithRef]
- Get the bounds of a z3 expression. >>> bounds(1) (1, 1) >>> bounds(smt.RealVal(1) + smt.RealVal(2)) (3, 3) - Parameters:
- e (ArithRef) 
- Return type:
- tuple[ArithRef, ArithRef] 
 
- kdrag.theories.real.arb.flint_eq_ax_unsafe(lhs, rhs)
- This axiom schema is fishy, in that even if arb is implement correctly, this check does not assure the equality of the left and right hand side. but it is better than nothing. - >>> flint_eq_ax_unsafe(real.pi, 4*real.atan(1)) |= pi == 4*atan(1) >>> flint_eq_ax_unsafe(smt.RealVal(0), real.sin(0)) |= 0 == sin(0) >>> flint_eq_ax_unsafe(real.sin(3*real.pi/2), -1) |= sin((3*pi)/2) == -1 
- kdrag.theories.real.arb.interp_flint(e: ArithRef, env) arb
- Interpret a z3 expression into an arb calculation. - >>> interp_flint(real.pi, {}) [3.14159265358979 +/- 3.34e-15] - Parameters:
- e (ArithRef) 
- Return type:
- arb 
 
- kdrag.theories.real.arb.sin_bnd(x: object) Proof
- >>> sin_bnd(arb(0)) |= ForAll(x, Implies(And(0 - 0 <= x, x <= 0 + 0), And(0 - 0 <= sin(x), sin(x) <= 0 + 0))) >>> kd.prove(real.sin(0) <= 2, by=[sin_bnd(arb(0,0.1))(smt.RealVal(0))]) |= sin(0) <= 2 >>> kd.prove(real.sin(3.14) <= 0.02, by=[sin_bnd(arb(3.14, 0.01))]) |= sin(157/50) <= 1/50 - Parameters:
- x (object) 
- Return type:
 
- kdrag.theories.real.arb.tan_bnd(x: object) Proof
- This is probably the purest form of the information that arb offers. In principle, larger scale rules can be derived from this. - Parameters:
- x (object) 
- Return type:
 
- kdrag.theories.real.arb.z3_mid_rad_of_arb(x: arb) tuple[ArithRef, ArithRef]
- Get midpoint and radius as z3 values. - >>> z3_mid_rad_of_arb(arb(1)) (1, 0) >>> z3_mid_rad_of_arb(arb(1) + arb(2)) (3, 0) - Parameters:
- x (arb) 
- Return type:
- tuple[ArithRef, ArithRef] 
 
- kdrag.theories.real.arb.z3_of_exact_arb(x: arb) ArithRef
- Get exact arb as z3 value - >>> z3_of_exact_arb(arb(1)) 1 >>> z3_of_exact_arb(arb(1) + arb(2)) 3 >>> z3_of_exact_arb(arb(2**1000)) 2**1000 - Parameters:
- x (arb) 
- Return type:
- ArithRef