Skip to content

Commit cb3a190

Browse files
fdupressstrub
authored andcommitted
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 cb3a190

1 file changed

Lines changed: 15 additions & 3 deletions

File tree

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)