Skip to content

Commit 6ead268

Browse files
committed
extend results on ceil 'for free'
This opaquely defines ceil from floor so all results on ceil apply to floor and don't need copied.
1 parent b60d136 commit 6ead268

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

theories/datatypes/Real.ec

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,12 +218,18 @@ instance field with real
218218

219219
(* -------------------------------------------------------------------- *)
220220
op floor : real -> int.
221-
op ceil : real -> int.
221+
222+
op [opaque smt_opaque] ceil (x : real) : int =
223+
-(floor (Self.([-]) x)).
222224

223225
axiom floor_bound (x:real) : x - 1%r < (floor x)%r <= x.
224-
axiom ceil_bound (x:real) : x <= (ceil x)%r < x + 1%r.
225226
axiom from_int_floor n : floor n%r = n.
226-
axiom from_int_ceil n : ceil n%r = n.
227+
228+
lemma ceil_bound (x:real) : x <= (ceil x)%r < x + 1%r.
229+
proof. by rewrite /ceil; smt(floor_bound). qed.
230+
231+
lemma from_int_ceil n : ceil n%r = n.
232+
proof. by rewrite /ceil -fromintN from_int_floor oppzK. qed.
227233

228234
lemma floor_gt x : x - 1%r < (floor x)%r.
229235
proof. by case: (floor_bound x). qed.
@@ -246,6 +252,12 @@ proof. smt(floor_bound). qed.
246252
lemma from_int_floor_addr n x : floor (x + n%r) = floor x + n.
247253
proof. smt(floor_bound). qed.
248254

255+
lemma from_int_ceil_addl n x : ceil (n%r + x) = n + ceil x.
256+
proof. smt(ceil_bound). qed.
257+
258+
lemma from_int_ceil_addr n x : ceil (x + n%r) = ceil x + n.
259+
proof. smt(ceil_bound). qed.
260+
249261
lemma floor_mono (x y : real) : x <= y => floor x <= floor y.
250262
proof. smt(floor_bound). qed.
251263

0 commit comments

Comments
 (0)