From 8a070f2f98aba0520c9572db0ecd358cb6febf21 Mon Sep 17 00:00:00 2001 From: arnaudgolfouse Date: Fri, 13 Dec 2024 11:28:00 +0100 Subject: [PATCH 1/3] Specify functions in `std::cmp` and `Ord` --- creusot-contracts/src/std/cmp.rs | 39 ++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/creusot-contracts/src/std/cmp.rs b/creusot-contracts/src/std/cmp.rs index 9db3799cc..61cfc8d5e 100644 --- a/creusot-contracts/src/std/cmp.rs +++ b/creusot-contracts/src/std/cmp.rs @@ -56,6 +56,45 @@ extern_spec! { #[ensures(self.deep_model() <= o.deep_model() ==> result == o)] #[ensures(o.deep_model() < self.deep_model() ==> result == self)] fn max(self, o: Self) -> Self; + + #[ensures(result.deep_model() <= self.deep_model())] + #[ensures(result.deep_model() <= o.deep_model())] + #[ensures(result == self || result == o)] + #[ensures(self.deep_model() < o.deep_model() ==> result == self)] + #[ensures(o.deep_model() <= self.deep_model() ==> result == o)] + fn min(self, o: Self) -> Self; + + #[ensures(result.deep_model() >= min.deep_model())] + #[ensures(result.deep_model() <= max.deep_model())] + #[ensures(result == self || result == min || result == max)] + #[ensures(if self.deep_model() > max.deep_model() { + result == max + } else if self.deep_model() < min.deep_model() { + result == min + } else { result == self })] + fn clamp(self, min: Self, max: Self) -> Self; + } + + #[ensures(result.deep_model() >= v1.deep_model())] + #[ensures(result.deep_model() >= v2.deep_model())] + #[ensures(result == v1 || result == v2)] + #[ensures(v1.deep_model() <= v2.deep_model() ==> result == v2)] + #[ensures(v2.deep_model() < v1.deep_model() ==> result == v1)] + fn max(v1: T, v2: T) -> T + where T: Ord + DeepModel, T::DeepModelTy: OrdLogic + { + ::max(v1, v2) + } + + #[ensures(result.deep_model() <= v1.deep_model())] + #[ensures(result.deep_model() <= v2.deep_model())] + #[ensures(result == v1 || result == v2)] + #[ensures(v1.deep_model() < v2.deep_model() ==> result == v1)] + #[ensures(v2.deep_model() <= v1.deep_model() ==> result == v2)] + fn min(v1: T, v2: T) -> T + where T: Ord + DeepModel, T::DeepModelTy: OrdLogic + { + ::min(v1, v2) } } } From f467217f263ac1f5dfc37c4e5cf6a969c1bd8a96 Mon Sep 17 00:00:00 2001 From: arnaudgolfouse Date: Fri, 13 Dec 2024 11:34:45 +0100 Subject: [PATCH 2/3] Update tests --- .../creusot-contracts/creusot-contracts.coma | 481 ++++++++++++++---- .../creusot-contracts/why3session.xml | 10 + .../creusot-contracts/why3shapes.gz | Bin 24505 -> 23838 bytes creusot/tests/should_succeed/bug/387.coma | 2 +- .../syntax/10_mutual_rec_types.coma | 2 +- 5 files changed, 399 insertions(+), 96 deletions(-) diff --git a/creusot/tests/creusot-contracts/creusot-contracts.coma b/creusot/tests/creusot-contracts/creusot-contracts.coma index 95709096a..1671c2a8f 100644 --- a/creusot/tests/creusot-contracts/creusot-contracts.coma +++ b/creusot/tests/creusot-contracts/creusot-contracts.coma @@ -92,11 +92,304 @@ module M_creusot_contracts__stdqy35z1__array__qyi15505960269205342033__produces_ goal vc_produces_trans'0 : ([%#sarray1] produces'0 b bc c) -> ([%#sarray0] produces'0 a ab b) -> ([%#sarray2] produces'0 a (Seq.(++) ab bc) c) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log [#"../../../creusot-contracts/src/std/cmp.rs" 88 4 88 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 87 14 87 64 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 85 4 85 10 +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_max_body [#"../../../creusot-contracts/src/std/cmp.rs" 83 12 84 66] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 83 22 83 24 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 83 29 83 31 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 83 39 83 40 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 78 22 78 60 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 79 22 79 60 + let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 80 22 80 50 + let%span scmp6 = "../../../creusot-contracts/src/std/cmp.rs" 81 22 81 73 + let%span scmp7 = "../../../creusot-contracts/src/std/cmp.rs" 82 22 82 72 + let%span scmp8 = "../../../creusot-contracts/src/std/cmp.rs" 53 26 53 66 + let%span scmp9 = "../../../creusot-contracts/src/std/cmp.rs" 54 26 54 63 + let%span scmp10 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 101 1 + let%span sord11 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 + let%span sord12 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 + let%span sord13 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 + let%span sord14 = "../../../creusot-contracts/src/logic/ord.rs" 62 14 62 64 + let%span sord15 = "../../../creusot-contracts/src/logic/ord.rs" 67 14 67 45 + let%span sord16 = "../../../creusot-contracts/src/logic/ord.rs" 72 15 72 32 + let%span sord17 = "../../../creusot-contracts/src/logic/ord.rs" 73 15 73 32 + let%span sord18 = "../../../creusot-contracts/src/logic/ord.rs" 74 14 74 31 + let%span sord19 = "../../../creusot-contracts/src/logic/ord.rs" 81 15 81 45 + let%span sord20 = "../../../creusot-contracts/src/logic/ord.rs" 82 14 82 47 + let%span sord21 = "../../../creusot-contracts/src/logic/ord.rs" 89 15 89 48 + let%span sord22 = "../../../creusot-contracts/src/logic/ord.rs" 90 14 90 44 + let%span sord23 = "../../../creusot-contracts/src/logic/ord.rs" 95 14 95 59 + + type t_T'0 + + predicate inv'0 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_T'0) + + type t_DeepModelTy'0 + + function deep_model'0 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_T'0) : t_DeepModelTy'0 + + type t_Ordering'0 = + | C_Less'0 + | C_Equal'0 + | C_Greater'0 + + function cmp_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 19 4 19 46] (self : t_DeepModelTy'0) (other : t_DeepModelTy'0) : t_Ordering'0 + + + function eq_cmp'0 [#"../../../creusot-contracts/src/logic/ord.rs" 96 4 96 32] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom eq_cmp'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord23] (x = y) + = (cmp_log'0 x y = C_Equal'0) + + function antisym2'0 [#"../../../creusot-contracts/src/logic/ord.rs" 91 4 91 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym2'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord21] cmp_log'0 x y = C_Greater'0) + -> ([%#sord22] cmp_log'0 y x = C_Less'0) + + function antisym1'0 [#"../../../creusot-contracts/src/logic/ord.rs" 83 4 83 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym1'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord19] cmp_log'0 x y = C_Less'0) + -> ([%#sord20] cmp_log'0 y x = C_Greater'0) + + function trans'0 [#"../../../creusot-contracts/src/logic/ord.rs" 75 4 75 53] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) (z : t_DeepModelTy'0) (o : t_Ordering'0) : () + + + axiom trans'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0, z : t_DeepModelTy'0, o : t_Ordering'0 . ([%#sord16] cmp_log'0 x y + = o) -> ([%#sord17] cmp_log'0 y z = o) -> ([%#sord18] cmp_log'0 x z = o) + + function refl'0 [#"../../../creusot-contracts/src/logic/ord.rs" 68 4 68 21] (x : t_DeepModelTy'0) : () + + axiom refl'0_spec : forall x : t_DeepModelTy'0 . [%#sord15] cmp_log'0 x x = C_Equal'0 + + function gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 57 4 57 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 63 4 63 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_gt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord14] gt_log'0 x y + = (cmp_log'0 x y = C_Greater'0) + + function ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 46 4 46 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 52 4 52 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_ge_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord13] ge_log'0 x y + = (cmp_log'0 x y <> C_Less'0) + + function lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 35 4 35 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 41 4 41 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_lt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord12] lt_log'0 x y + = (cmp_log'0 x y = C_Less'0) + + function le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 24 4 24 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 30 4 30 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_le_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord11] le_log'0 x y + = (cmp_log'0 x y <> C_Greater'0) + + let rec max'0 (self:t_T'0) (other:t_T'0) (return' (ret:t_T'0))= {[@expl:max 'self' type invariant] inv'0 self} + {[@expl:max 'other' type invariant] inv'0 other} + any + [ return' (result:t_T'0)-> {inv'0 result} + {[%#scmp8] ge_log'0 (deep_model'0 result) (deep_model'0 self)} + {[%#scmp9] ge_log'0 (deep_model'0 result) (deep_model'0 other)} + {[%#scmp10] result = self \/ result = other} + {[%#scmp10] le_log'0 (deep_model'0 self) (deep_model'0 other) -> result = other} + {[%#scmp10] lt_log'0 (deep_model'0 other) (deep_model'0 self) -> result = self} + (! return' {result}) ] + + + use prelude.prelude.Intrinsic + + meta "compute_max_steps" 1000000 + + let rec extern_spec_std_cmp_max_body'0 (v1:t_T'0) (v2:t_T'0) (return' (ret:t_T'0))= {[@expl:extern_spec_std_cmp_max_body 'v1' type invariant] [%#scmp0] inv'0 v1} + {[@expl:extern_spec_std_cmp_max_body 'v2' type invariant] [%#scmp1] inv'0 v2} + (! bb0 + [ bb0 = bb1 + | bb1 = bb2 + | bb2 = bb3 + | bb3 = bb4 + | bb4 = bb5 + | bb5 = s0 [ s0 = max'0 {v1} {v2} (fun (_ret':t_T'0) -> [ &_0 <- _ret' ] s1) | s1 = bb6 ] + | bb6 = bb7 + | bb7 = bb8 + | bb8 = return' {_0} ] + ) [ & _0 : t_T'0 = any_l () | & v1 : t_T'0 = v1 | & v2 : t_T'0 = v2 ] + [ return' (result:t_T'0)-> {[@expl:extern_spec_std_cmp_max_body result type invariant] [%#scmp2] inv'0 result} + {[@expl:extern_spec_std_cmp_max_body ensures #0] [%#scmp3] ge_log'0 (deep_model'0 result) (deep_model'0 v1)} + {[@expl:extern_spec_std_cmp_max_body ensures #1] [%#scmp4] ge_log'0 (deep_model'0 result) (deep_model'0 v2)} + {[@expl:extern_spec_std_cmp_max_body ensures #2] [%#scmp5] result = v1 \/ result = v2} + {[@expl:extern_spec_std_cmp_max_body ensures #3] [%#scmp6] le_log'0 (deep_model'0 v1) (deep_model'0 v2) + -> result = v2} + {[@expl:extern_spec_std_cmp_max_body ensures #4] [%#scmp7] lt_log'0 (deep_model'0 v2) (deep_model'0 v1) + -> result = v1} + (! return' {result}) ] + +end +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_min_body [#"../../../creusot-contracts/src/std/cmp.rs" 94 12 95 66] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 94 22 94 24 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 94 29 94 31 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 94 39 94 40 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 89 22 89 60 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 90 22 90 60 + let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 91 22 91 50 + let%span scmp6 = "../../../creusot-contracts/src/std/cmp.rs" 92 22 92 72 + let%span scmp7 = "../../../creusot-contracts/src/std/cmp.rs" 93 22 93 73 + let%span scmp8 = "../../../creusot-contracts/src/std/cmp.rs" 60 26 60 66 + let%span scmp9 = "../../../creusot-contracts/src/std/cmp.rs" 61 26 61 63 + let%span scmp10 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 101 1 + let%span scmp11 = "../../../creusot-contracts/src/std/cmp.rs" 64 26 64 77 + let%span sord12 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 + let%span sord13 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 + let%span sord14 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 + let%span sord15 = "../../../creusot-contracts/src/logic/ord.rs" 62 14 62 64 + let%span sord16 = "../../../creusot-contracts/src/logic/ord.rs" 67 14 67 45 + let%span sord17 = "../../../creusot-contracts/src/logic/ord.rs" 72 15 72 32 + let%span sord18 = "../../../creusot-contracts/src/logic/ord.rs" 73 15 73 32 + let%span sord19 = "../../../creusot-contracts/src/logic/ord.rs" 74 14 74 31 + let%span sord20 = "../../../creusot-contracts/src/logic/ord.rs" 81 15 81 45 + let%span sord21 = "../../../creusot-contracts/src/logic/ord.rs" 82 14 82 47 + let%span sord22 = "../../../creusot-contracts/src/logic/ord.rs" 89 15 89 48 + let%span sord23 = "../../../creusot-contracts/src/logic/ord.rs" 90 14 90 44 + let%span sord24 = "../../../creusot-contracts/src/logic/ord.rs" 95 14 95 59 + + type t_T'0 + + predicate inv'0 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_T'0) + + type t_DeepModelTy'0 + + function deep_model'0 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_T'0) : t_DeepModelTy'0 + + type t_Ordering'0 = + | C_Less'0 + | C_Equal'0 + | C_Greater'0 + + function cmp_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 19 4 19 46] (self : t_DeepModelTy'0) (other : t_DeepModelTy'0) : t_Ordering'0 + + + function eq_cmp'0 [#"../../../creusot-contracts/src/logic/ord.rs" 96 4 96 32] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom eq_cmp'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord24] (x = y) + = (cmp_log'0 x y = C_Equal'0) + + function antisym2'0 [#"../../../creusot-contracts/src/logic/ord.rs" 91 4 91 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym2'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord22] cmp_log'0 x y = C_Greater'0) + -> ([%#sord23] cmp_log'0 y x = C_Less'0) + + function antisym1'0 [#"../../../creusot-contracts/src/logic/ord.rs" 83 4 83 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym1'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord20] cmp_log'0 x y = C_Less'0) + -> ([%#sord21] cmp_log'0 y x = C_Greater'0) + + function trans'0 [#"../../../creusot-contracts/src/logic/ord.rs" 75 4 75 53] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) (z : t_DeepModelTy'0) (o : t_Ordering'0) : () + + + axiom trans'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0, z : t_DeepModelTy'0, o : t_Ordering'0 . ([%#sord17] cmp_log'0 x y + = o) -> ([%#sord18] cmp_log'0 y z = o) -> ([%#sord19] cmp_log'0 x z = o) + + function refl'0 [#"../../../creusot-contracts/src/logic/ord.rs" 68 4 68 21] (x : t_DeepModelTy'0) : () + + axiom refl'0_spec : forall x : t_DeepModelTy'0 . [%#sord16] cmp_log'0 x x = C_Equal'0 + + function gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 57 4 57 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 63 4 63 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_gt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord15] gt_log'0 x y + = (cmp_log'0 x y = C_Greater'0) + + function ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 46 4 46 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 52 4 52 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_ge_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord14] ge_log'0 x y + = (cmp_log'0 x y <> C_Less'0) + + function lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 35 4 35 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 41 4 41 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_lt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord13] lt_log'0 x y + = (cmp_log'0 x y = C_Less'0) + + function le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 24 4 24 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 30 4 30 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_le_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord12] le_log'0 x y + = (cmp_log'0 x y <> C_Greater'0) + + let rec min'0 (self:t_T'0) (other:t_T'0) (return' (ret:t_T'0))= {[@expl:min 'self' type invariant] inv'0 self} + {[@expl:min 'other' type invariant] inv'0 other} + any + [ return' (result:t_T'0)-> {inv'0 result} + {[%#scmp8] le_log'0 (deep_model'0 result) (deep_model'0 self)} + {[%#scmp9] le_log'0 (deep_model'0 result) (deep_model'0 other)} + {[%#scmp10] result = self \/ result = other} + {[%#scmp10] lt_log'0 (deep_model'0 self) (deep_model'0 other) -> result = self} + {[%#scmp11] le_log'0 (deep_model'0 other) (deep_model'0 self) -> result = other} + (! return' {result}) ] + + + use prelude.prelude.Intrinsic + + meta "compute_max_steps" 1000000 + + let rec extern_spec_std_cmp_min_body'0 (v1:t_T'0) (v2:t_T'0) (return' (ret:t_T'0))= {[@expl:extern_spec_std_cmp_min_body 'v1' type invariant] [%#scmp0] inv'0 v1} + {[@expl:extern_spec_std_cmp_min_body 'v2' type invariant] [%#scmp1] inv'0 v2} + (! bb0 + [ bb0 = bb1 + | bb1 = bb2 + | bb2 = bb3 + | bb3 = bb4 + | bb4 = bb5 + | bb5 = s0 [ s0 = min'0 {v1} {v2} (fun (_ret':t_T'0) -> [ &_0 <- _ret' ] s1) | s1 = bb6 ] + | bb6 = bb7 + | bb7 = bb8 + | bb8 = return' {_0} ] + ) [ & _0 : t_T'0 = any_l () | & v1 : t_T'0 = v1 | & v2 : t_T'0 = v2 ] + [ return' (result:t_T'0)-> {[@expl:extern_spec_std_cmp_min_body result type invariant] [%#scmp2] inv'0 result} + {[@expl:extern_spec_std_cmp_min_body ensures #0] [%#scmp3] le_log'0 (deep_model'0 result) (deep_model'0 v1)} + {[@expl:extern_spec_std_cmp_min_body ensures #1] [%#scmp4] le_log'0 (deep_model'0 result) (deep_model'0 v2)} + {[@expl:extern_spec_std_cmp_min_body ensures #2] [%#scmp5] result = v1 \/ result = v2} + {[@expl:extern_spec_std_cmp_min_body ensures #3] [%#scmp6] lt_log'0 (deep_model'0 v1) (deep_model'0 v2) + -> result = v1} + {[@expl:extern_spec_std_cmp_min_body ensures #4] [%#scmp7] le_log'0 (deep_model'0 v2) (deep_model'0 v1) + -> result = v2} + (! return' {result}) ] + +end +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log [#"../../../creusot-contracts/src/std/cmp.rs" 127 4 127 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 126 14 126 64 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 124 4 124 10 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 25 20 25 56 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -172,7 +465,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log axiom cmp_le_log'1_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'1 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -190,16 +483,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log constant y : t_Reverse'0 - function cmp_le_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 88 4 88 35] (x : t_Reverse'0) (y : t_Reverse'0) : () + function cmp_le_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 127 4 127 35] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_cmp_le_log'0 : [%#scmp0] le_log'0 x y = (cmp_log'0 x y <> C_Greater'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log [#"../../../creusot-contracts/src/std/cmp.rs" 93 4 93 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 92 14 92 61 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 90 4 90 10 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log [#"../../../creusot-contracts/src/std/cmp.rs" 132 4 132 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 131 14 131 61 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 129 4 129 10 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 36 20 36 53 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -275,7 +568,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -293,16 +586,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log constant y : t_Reverse'0 - function cmp_lt_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 93 4 93 35] (x : t_Reverse'0) (y : t_Reverse'0) : () + function cmp_lt_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 132 4 132 35] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_cmp_lt_log'0 : [%#scmp0] lt_log'0 x y = (cmp_log'0 x y = C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log [#"../../../creusot-contracts/src/std/cmp.rs" 98 4 98 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 97 14 97 61 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 95 4 95 10 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log [#"../../../creusot-contracts/src/std/cmp.rs" 137 4 137 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 136 14 136 61 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 134 4 134 10 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 47 20 47 53 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -378,7 +671,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -396,16 +689,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log constant y : t_Reverse'0 - function cmp_ge_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 98 4 98 35] (x : t_Reverse'0) (y : t_Reverse'0) : () + function cmp_ge_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 137 4 137 35] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_cmp_ge_log'0 : [%#scmp0] ge_log'0 x y = (cmp_log'0 x y <> C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log [#"../../../creusot-contracts/src/std/cmp.rs" 103 4 103 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 102 14 102 64 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 100 4 100 10 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log [#"../../../creusot-contracts/src/std/cmp.rs" 142 4 142 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 141 14 141 64 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 139 4 139 10 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 58 20 58 56 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -481,7 +774,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -499,15 +792,15 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log constant y : t_Reverse'0 - function cmp_gt_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 103 4 103 35] (x : t_Reverse'0) (y : t_Reverse'0) : () + function cmp_gt_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 142 4 142 35] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_cmp_gt_log'0 : [%#scmp0] gt_log'0 x y = (cmp_log'0 x y = C_Greater'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl [#"../../../creusot-contracts/src/std/cmp.rs" 108 4 108 20] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 107 14 107 45 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 105 4 105 10 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl [#"../../../creusot-contracts/src/std/cmp.rs" 147 4 147 20] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 146 14 146 45 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 144 4 144 10 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -583,7 +876,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl [#"../ axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -594,16 +887,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl [#"../ constant x : t_Reverse'0 - function refl'0 [#"../../../creusot-contracts/src/std/cmp.rs" 108 4 108 20] (x : t_Reverse'0) : () + function refl'0 [#"../../../creusot-contracts/src/std/cmp.rs" 147 4 147 20] (x : t_Reverse'0) : () goal vc_refl'0 : [%#scmp0] cmp_log'0 x x = C_Equal'0 end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans [#"../../../creusot-contracts/src/std/cmp.rs" 115 4 115 52] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 112 15 112 32 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 113 15 113 32 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 114 14 114 31 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 110 4 110 10 - let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans [#"../../../creusot-contracts/src/std/cmp.rs" 154 4 154 52] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 151 15 151 32 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 152 15 152 32 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 153 14 153 31 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 149 4 149 10 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord7 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -679,7 +972,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans [#".. axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord5] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp4] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -696,16 +989,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans [#".. constant o : t_Ordering'0 - function trans'0 [#"../../../creusot-contracts/src/std/cmp.rs" 115 4 115 52] (x : t_Reverse'0) (y : t_Reverse'0) (z : t_Reverse'0) (o : t_Ordering'0) : () + function trans'0 [#"../../../creusot-contracts/src/std/cmp.rs" 154 4 154 52] (x : t_Reverse'0) (y : t_Reverse'0) (z : t_Reverse'0) (o : t_Ordering'0) : () goal vc_trans'0 : ([%#scmp1] cmp_log'0 y z = o) -> ([%#scmp0] cmp_log'0 x y = o) -> ([%#scmp2] cmp_log'0 x z = o) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1 [#"../../../creusot-contracts/src/std/cmp.rs" 121 4 121 33] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 119 15 119 45 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 120 14 120 47 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 4 117 10 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1 [#"../../../creusot-contracts/src/std/cmp.rs" 160 4 160 33] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 158 15 158 45 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 159 14 159 47 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 156 4 156 10 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -781,7 +1074,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1 [# axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -794,16 +1087,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1 [# constant y : t_Reverse'0 - function antisym1'0 [#"../../../creusot-contracts/src/std/cmp.rs" 121 4 121 33] (x : t_Reverse'0) (y : t_Reverse'0) : () + function antisym1'0 [#"../../../creusot-contracts/src/std/cmp.rs" 160 4 160 33] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_antisym1'0 : ([%#scmp0] cmp_log'0 x y = C_Less'0) -> ([%#scmp1] cmp_log'0 y x = C_Greater'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2 [#"../../../creusot-contracts/src/std/cmp.rs" 127 4 127 33] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 125 15 125 48 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 126 14 126 44 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 123 4 123 10 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2 [#"../../../creusot-contracts/src/std/cmp.rs" 166 4 166 33] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 164 15 164 48 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 165 14 165 44 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 162 4 162 10 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -879,7 +1172,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2 [# axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -892,15 +1185,15 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2 [# constant y : t_Reverse'0 - function antisym2'0 [#"../../../creusot-contracts/src/std/cmp.rs" 127 4 127 33] (x : t_Reverse'0) (y : t_Reverse'0) : () + function antisym2'0 [#"../../../creusot-contracts/src/std/cmp.rs" 166 4 166 33] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_antisym2'0 : ([%#scmp0] cmp_log'0 x y = C_Greater'0) -> ([%#scmp1] cmp_log'0 y x = C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp [#"../../../creusot-contracts/src/std/cmp.rs" 132 4 132 31] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 131 14 131 59 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 129 4 129 10 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp [#"../../../creusot-contracts/src/std/cmp.rs" 171 4 171 31] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 170 14 170 59 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 168 4 168 10 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -976,7 +1269,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp [#". axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -989,7 +1282,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp [#". constant y : t_Reverse'0 - function eq_cmp'0 [#"../../../creusot-contracts/src/std/cmp.rs" 132 4 132 31] (x : t_Reverse'0) (y : t_Reverse'0) : () + function eq_cmp'0 [#"../../../creusot-contracts/src/std/cmp.rs" 171 4 171 31] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_eq_cmp'0 : [%#scmp0] (x = y) = (cmp_log'0 x y = C_Equal'0) end @@ -17692,10 +17985,10 @@ module M_creusot_contracts__stdqy35z1__vec__qyi12862303518309667396__produces_re goal refines : [%#svec0] forall self : t_IntoIter'0 . forall result : () . produces'0 self (Seq.empty : Seq.seq t_T'0) self -> produces'0 self (Seq.empty : Seq.seq t_T'0) self end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 93 4 93 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 93 4 93 35 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 132 4 132 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 132 4 132 35 let%span sord1 = "../../../creusot-contracts/src/logic/ord.rs" 36 20 36 53 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -17771,7 +18064,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log_ axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -17788,9 +18081,9 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log_ goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . forall result : () . lt_log'0 x y = (cmp_log'0 x y = C_Less'0) -> lt_log'0 x y = (cmp_log'0 x y = C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1__refines [#"../../../creusot-contracts/src/std/cmp.rs" 121 4 121 33] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 121 4 121 33 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1__refines [#"../../../creusot-contracts/src/std/cmp.rs" 160 4 160 33] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 160 4 160 33 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -17866,7 +18159,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1__r axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord2] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp1] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -17878,9 +18171,9 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1__r goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . cmp_log'0 x y = C_Less'0 -> cmp_log'0 x y = C_Less'0 /\ (forall result : () . cmp_log'0 y x = C_Greater'0 -> cmp_log'0 y x = C_Greater'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp__refines [#"../../../creusot-contracts/src/std/cmp.rs" 132 4 132 31] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 132 4 132 31 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp__refines [#"../../../creusot-contracts/src/std/cmp.rs" 171 4 171 31] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 171 4 171 31 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -17956,7 +18249,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp__ref axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord2] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp1] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -17968,9 +18261,9 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp__ref goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . forall result : () . (x = y) = (cmp_log'0 x y = C_Equal'0) -> (x = y) = (cmp_log'0 x y = C_Equal'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl__refines [#"../../../creusot-contracts/src/std/cmp.rs" 108 4 108 20] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 108 4 108 20 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl__refines [#"../../../creusot-contracts/src/std/cmp.rs" 147 4 147 20] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 147 4 147 20 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18046,7 +18339,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl__refin axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord2] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp1] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18058,9 +18351,9 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl__refin goal refines : [%#scmp0] forall x : t_Reverse'0 . forall result : () . cmp_log'0 x x = C_Equal'0 -> cmp_log'0 x x = C_Equal'0 end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans__refines [#"../../../creusot-contracts/src/std/cmp.rs" 115 4 115 52] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 115 4 115 52 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans__refines [#"../../../creusot-contracts/src/std/cmp.rs" 154 4 154 52] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 154 4 154 52 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18136,7 +18429,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans__refi axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord2] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp1] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18150,9 +18443,9 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans__refi /\ cmp_log'0 x y = o -> cmp_log'0 y z = o /\ cmp_log'0 x y = o /\ (forall result : () . cmp_log'0 x z = o -> cmp_log'0 x z = o) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2__refines [#"../../../creusot-contracts/src/std/cmp.rs" 127 4 127 33] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 127 4 127 33 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2__refines [#"../../../creusot-contracts/src/std/cmp.rs" 166 4 166 33] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 166 4 166 33 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18228,7 +18521,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2__r axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord2] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp1] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18240,10 +18533,10 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2__r goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . cmp_log'0 x y = C_Greater'0 -> cmp_log'0 x y = C_Greater'0 /\ (forall result : () . cmp_log'0 y x = C_Less'0 -> cmp_log'0 y x = C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 88 4 88 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 88 4 88 35 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 127 4 127 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 127 4 127 35 let%span sord1 = "../../../creusot-contracts/src/logic/ord.rs" 25 20 25 56 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18319,7 +18612,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log_ axiom cmp_le_log'1_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'1 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18336,10 +18629,10 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log_ goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . forall result : () . le_log'0 x y = (cmp_log'0 x y <> C_Greater'0) -> le_log'0 x y = (cmp_log'0 x y <> C_Greater'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 98 4 98 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 98 4 98 35 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 137 4 137 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 137 4 137 35 let%span sord1 = "../../../creusot-contracts/src/logic/ord.rs" 47 20 47 53 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18415,7 +18708,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log_ axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18432,10 +18725,10 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log_ goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . forall result : () . ge_log'0 x y = (cmp_log'0 x y <> C_Less'0) -> ge_log'0 x y = (cmp_log'0 x y <> C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 103 4 103 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 103 4 103 35 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 142 4 142 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 142 4 142 35 let%span sord1 = "../../../creusot-contracts/src/logic/ord.rs" 58 20 58 56 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 78 8 82 9 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18511,7 +18804,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log_ axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 77 4 77 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with diff --git a/creusot/tests/creusot-contracts/creusot-contracts/why3session.xml b/creusot/tests/creusot-contracts/creusot-contracts/why3session.xml index e070cf024..35b07896d 100644 --- a/creusot/tests/creusot-contracts/creusot-contracts/why3session.xml +++ b/creusot/tests/creusot-contracts/creusot-contracts/why3session.xml @@ -36,6 +36,16 @@ + + + + + + + + + + diff --git a/creusot/tests/creusot-contracts/creusot-contracts/why3shapes.gz b/creusot/tests/creusot-contracts/creusot-contracts/why3shapes.gz index 5ca92942f814d334cea05c482fc7f82fdd7f5216..9e703dcdbd4cf56b458da4060f14fa069a932931 100644 GIT binary patch literal 23838 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 literal 24505 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 Date: Thu, 19 Dec 2024 16:10:16 +0100 Subject: [PATCH 3/3] Add bodies to extern specs in cmp --- creusot-contracts/src/std/cmp.rs | 45 +- .../creusot-contracts/creusot-contracts.coma | 1552 +++++++++++++++-- .../creusot-contracts/why3session.xml | 120 +- .../creusot-contracts/why3shapes.gz | Bin 23838 -> 24628 bytes creusot/tests/should_succeed/bdd.coma | 2 +- creusot/tests/should_succeed/bug/387.coma | 6 +- .../should_succeed/heapsort_generic.coma | 4 +- creusot/tests/should_succeed/instant.coma | 4 +- creusot/tests/should_succeed/ord_trait.coma | 4 +- .../tests/should_succeed/red_black_tree.coma | 8 +- .../selection_sort_generic.coma | 2 +- .../syntax/10_mutual_rec_types.coma | 6 +- .../tests/should_succeed/vector/02_gnome.coma | 2 +- .../vector/05_binary_search_generic.coma | 4 +- 14 files changed, 1571 insertions(+), 188 deletions(-) diff --git a/creusot-contracts/src/std/cmp.rs b/creusot-contracts/src/std/cmp.rs index 61cfc8d5e..0c568460d 100644 --- a/creusot-contracts/src/std/cmp.rs +++ b/creusot-contracts/src/std/cmp.rs @@ -18,7 +18,9 @@ extern_spec! { fn ne(&self, rhs: &Rhs) -> bool where Self: DeepModel, - Rhs: DeepModel; + Rhs: DeepModel { + !(self == rhs) + } } // TODO: for now, we only support total orders @@ -31,16 +33,36 @@ extern_spec! { fn partial_cmp(&self, rhs: &Rhs) -> Option; #[ensures(result == (self.deep_model() < other.deep_model()))] - fn lt(&self, other: &Rhs) -> bool; + fn lt(&self, other: &Rhs) -> bool { + match self.partial_cmp(other) { + Some(Ordering::Less) => true, + _ => false, + } + } #[ensures(result == (self.deep_model() <= other.deep_model()))] - fn le(&self, other: &Rhs) -> bool; + fn le(&self, other: &Rhs) -> bool { + match self.partial_cmp(other) { + Some(Ordering::Less | Ordering::Equal) => true, + _ => false, + } + } #[ensures(result == (self.deep_model() > other.deep_model()))] - fn gt(&self, other: &Rhs) -> bool; + fn gt(&self, other: &Rhs) -> bool { + match self.partial_cmp(other) { + Some(Ordering::Greater) => true, + _ => false, + } + } #[ensures(result == (self.deep_model() >= other.deep_model()))] - fn ge(&self, other: &Rhs) -> bool; + fn ge(&self, other: &Rhs) -> bool { + match self.partial_cmp(other) { + Some(Ordering::Greater | Ordering::Equal) => true, + _ => false, + } + } } trait Ord @@ -55,15 +77,20 @@ extern_spec! { #[ensures(result == self || result == o)] #[ensures(self.deep_model() <= o.deep_model() ==> result == o)] #[ensures(o.deep_model() < self.deep_model() ==> result == self)] - fn max(self, o: Self) -> Self; + fn max(self, o: Self) -> Self { + if self <= o { o } else { self } + } #[ensures(result.deep_model() <= self.deep_model())] #[ensures(result.deep_model() <= o.deep_model())] #[ensures(result == self || result == o)] #[ensures(self.deep_model() < o.deep_model() ==> result == self)] #[ensures(o.deep_model() <= self.deep_model() ==> result == o)] - fn min(self, o: Self) -> Self; + fn min(self, o: Self) -> Self { + if self < o { self } else { o } + } + #[requires(min.deep_model() <= max.deep_model())] #[ensures(result.deep_model() >= min.deep_model())] #[ensures(result.deep_model() <= max.deep_model())] #[ensures(result == self || result == min || result == max)] @@ -72,7 +99,9 @@ extern_spec! { } else if self.deep_model() < min.deep_model() { result == min } else { result == self })] - fn clamp(self, min: Self, max: Self) -> Self; + fn clamp(self, min: Self, max: Self) -> Self { + if self > max { max } else if self < min { min } else { self } + } } #[ensures(result.deep_model() >= v1.deep_model())] diff --git a/creusot/tests/creusot-contracts/creusot-contracts.coma b/creusot/tests/creusot-contracts/creusot-contracts.coma index 1671c2a8f..cfbca1ad4 100644 --- a/creusot/tests/creusot-contracts/creusot-contracts.coma +++ b/creusot/tests/creusot-contracts/creusot-contracts.coma @@ -92,18 +92,1332 @@ module M_creusot_contracts__stdqy35z1__array__qyi15505960269205342033__produces_ goal vc_produces_trans'0 : ([%#sarray1] produces'0 b bc c) -> ([%#sarray0] produces'0 a ab b) -> ([%#sarray2] produces'0 a (Seq.(++) ab bc) c) end -module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_max_body [#"../../../creusot-contracts/src/std/cmp.rs" 83 12 84 66] - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 83 22 83 24 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 83 29 83 31 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 83 39 83 40 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 78 22 78 60 - let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 79 22 79 60 - let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 80 22 80 50 - let%span scmp6 = "../../../creusot-contracts/src/std/cmp.rs" 81 22 81 73 - let%span scmp7 = "../../../creusot-contracts/src/std/cmp.rs" 82 22 82 72 - let%span scmp8 = "../../../creusot-contracts/src/std/cmp.rs" 53 26 53 66 - let%span scmp9 = "../../../creusot-contracts/src/std/cmp.rs" 54 26 54 63 - let%span scmp10 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 101 1 +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_PartialEq_Rhs_ne_body [#"../../../creusot-contracts/src/std/cmp.rs" 10 31 18 18] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 18 29 18 32 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 17 26 17 75 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 11 26 11 75 + let%span smodel4 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 + let%span sinvariant5 = "../../../creusot-contracts/src/invariant.rs" 24 8 24 18 + + use prelude.prelude.Borrow + + type t_Self_'0 + + predicate inv'4 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + predicate invariant'0 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Self_'0) = + [%#sinvariant5] inv'4 self + + predicate inv'0 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + axiom inv_axiom'0 [@rewrite] : forall x : t_Self_'0 [inv'0 x] . inv'0 x = invariant'0 x + + predicate invariant'2 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Self_'0) = + [%#sinvariant5] inv'0 self + + predicate inv'2 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + axiom inv_axiom'2 [@rewrite] : forall x : t_Self_'0 [inv'2 x] . inv'2 x = invariant'2 x + + type t_Rhs'0 + + predicate inv'5 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Rhs'0) + + predicate invariant'1 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Rhs'0) = + [%#sinvariant5] inv'5 self + + predicate inv'1 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Rhs'0) + + axiom inv_axiom'1 [@rewrite] : forall x : t_Rhs'0 [inv'1 x] . inv'1 x = invariant'1 x + + predicate invariant'3 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Rhs'0) = + [%#sinvariant5] inv'1 self + + predicate inv'3 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Rhs'0) + + axiom inv_axiom'3 [@rewrite] : forall x : t_Rhs'0 [inv'3 x] . inv'3 x = invariant'3 x + + type t_DeepModelTy'0 + + function deep_model'4 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Self_'0) : t_DeepModelTy'0 + + function deep_model'0 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Self_'0) : t_DeepModelTy'0 = + [%#smodel4] deep_model'4 self + + function deep_model'2 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Self_'0) : t_DeepModelTy'0 = + [%#smodel4] deep_model'0 self + + function deep_model'5 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Rhs'0) : t_DeepModelTy'0 + + function deep_model'1 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Rhs'0) : t_DeepModelTy'0 = + [%#smodel4] deep_model'5 self + + function deep_model'3 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Rhs'0) : t_DeepModelTy'0 = + [%#smodel4] deep_model'1 self + + let rec eq'0 (self:t_Self_'0) (other:t_Rhs'0) (return' (ret:bool))= {[@expl:eq 'self' type invariant] inv'2 self} + {[@expl:eq 'other' type invariant] inv'3 other} + any [ return' (result:bool)-> {[%#scmp3] result = (deep_model'2 self = deep_model'3 other)} (! return' {result}) ] + + use prelude.prelude.Intrinsic + + meta "compute_max_steps" 1000000 + + let rec extern_spec_std_cmp_PartialEq_Rhs_ne_body'0 (self_:t_Self_'0) (rhs:t_Rhs'0) (return' (ret:bool))= {[@expl:extern_spec_std_cmp_PartialEq_Rhs_ne_body 'self_' type invariant] [%#scmp0] inv'0 self_} + {[@expl:extern_spec_std_cmp_PartialEq_Rhs_ne_body 'rhs' type invariant] [%#scmp1] inv'1 rhs} + (! bb0 + [ bb0 = s0 [ s0 = eq'0 {self_} {rhs} (fun (_ret':bool) -> [ &_4 <- _ret' ] s1) | s1 = bb1 ] + | bb1 = s0 [ s0 = [ &_0 <- not _4 ] s1 | s1 = return' {_0} ] ] + ) [ & _0 : bool = any_l () | & self_ : t_Self_'0 = self_ | & rhs : t_Rhs'0 = rhs | & _4 : bool = any_l () ] + [ return' (result:bool)-> {[@expl:extern_spec_std_cmp_PartialEq_Rhs_ne_body ensures] [%#scmp2] result + = (deep_model'0 self_ <> deep_model'1 rhs)} + (! return' {result}) ] + +end +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_PartialOrd_Rhs_lt_body [#"../../../creusot-contracts/src/std/cmp.rs" 27 32 36 18] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 39 29 39 34 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 38 48 38 52 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 36 29 36 34 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 35 26 35 76 + let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 32 26 32 91 + let%span smodel6 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 + let%span sord7 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 + let%span sord8 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 + let%span sord9 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 + let%span sord10 = "../../../creusot-contracts/src/logic/ord.rs" 62 14 62 64 + let%span sord11 = "../../../creusot-contracts/src/logic/ord.rs" 67 14 67 45 + let%span sord12 = "../../../creusot-contracts/src/logic/ord.rs" 72 15 72 32 + let%span sord13 = "../../../creusot-contracts/src/logic/ord.rs" 73 15 73 32 + let%span sord14 = "../../../creusot-contracts/src/logic/ord.rs" 74 14 74 31 + let%span sord15 = "../../../creusot-contracts/src/logic/ord.rs" 81 15 81 45 + let%span sord16 = "../../../creusot-contracts/src/logic/ord.rs" 82 14 82 47 + let%span sord17 = "../../../creusot-contracts/src/logic/ord.rs" 89 15 89 48 + let%span sord18 = "../../../creusot-contracts/src/logic/ord.rs" 90 14 90 44 + let%span sord19 = "../../../creusot-contracts/src/logic/ord.rs" 95 14 95 59 + let%span sinvariant20 = "../../../creusot-contracts/src/invariant.rs" 24 8 24 18 + + use prelude.prelude.Borrow + + type t_Self_'0 + + predicate inv'2 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + predicate invariant'0 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Self_'0) = + [%#sinvariant20] inv'2 self + + predicate inv'0 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + axiom inv_axiom'0 [@rewrite] : forall x : t_Self_'0 [inv'0 x] . inv'0 x = invariant'0 x + + type t_Rhs'0 + + predicate inv'3 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Rhs'0) + + predicate invariant'1 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Rhs'0) = + [%#sinvariant20] inv'3 self + + predicate inv'1 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Rhs'0) + + axiom inv_axiom'1 [@rewrite] : forall x : t_Rhs'0 [inv'1 x] . inv'1 x = invariant'1 x + + type t_DeepModelTy'0 + + function deep_model'2 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Self_'0) : t_DeepModelTy'0 + + function deep_model'3 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Rhs'0) : t_DeepModelTy'0 + + type t_Ordering'0 = + | C_Less'0 + | C_Equal'0 + | C_Greater'0 + + function cmp_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 19 4 19 46] (self : t_DeepModelTy'0) (other : t_DeepModelTy'0) : t_Ordering'0 + + + function eq_cmp'0 [#"../../../creusot-contracts/src/logic/ord.rs" 96 4 96 32] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom eq_cmp'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord19] (x = y) + = (cmp_log'0 x y = C_Equal'0) + + function antisym2'0 [#"../../../creusot-contracts/src/logic/ord.rs" 91 4 91 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym2'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord17] cmp_log'0 x y = C_Greater'0) + -> ([%#sord18] cmp_log'0 y x = C_Less'0) + + function antisym1'0 [#"../../../creusot-contracts/src/logic/ord.rs" 83 4 83 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym1'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord15] cmp_log'0 x y = C_Less'0) + -> ([%#sord16] cmp_log'0 y x = C_Greater'0) + + function trans'0 [#"../../../creusot-contracts/src/logic/ord.rs" 75 4 75 53] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) (z : t_DeepModelTy'0) (o : t_Ordering'0) : () + + + axiom trans'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0, z : t_DeepModelTy'0, o : t_Ordering'0 . ([%#sord12] cmp_log'0 x y + = o) -> ([%#sord13] cmp_log'0 y z = o) -> ([%#sord14] cmp_log'0 x z = o) + + function refl'0 [#"../../../creusot-contracts/src/logic/ord.rs" 68 4 68 21] (x : t_DeepModelTy'0) : () + + axiom refl'0_spec : forall x : t_DeepModelTy'0 . [%#sord11] cmp_log'0 x x = C_Equal'0 + + function gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 57 4 57 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 63 4 63 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_gt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord10] gt_log'0 x y + = (cmp_log'0 x y = C_Greater'0) + + function ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 46 4 46 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 52 4 52 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_ge_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord9] ge_log'0 x y + = (cmp_log'0 x y <> C_Less'0) + + function lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 35 4 35 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 41 4 41 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_lt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord8] lt_log'0 x y + = (cmp_log'0 x y = C_Less'0) + + function le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 24 4 24 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 30 4 30 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_le_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord7] le_log'0 x y + = (cmp_log'0 x y <> C_Greater'0) + + type t_Option'0 = + | C_None'0 + | C_Some'0 (t_Ordering'0) + + let rec partial_cmp'0 (self:t_Self_'0) (other:t_Rhs'0) (return' (ret:t_Option'0))= {[@expl:partial_cmp 'self' type invariant] inv'0 self} + {[@expl:partial_cmp 'other' type invariant] inv'1 other} + any + [ return' (result:t_Option'0)-> {[%#scmp5] result = C_Some'0 (cmp_log'0 (deep_model'2 self) (deep_model'3 other))} + (! return' {result}) ] + + + let rec v_Some'0 (input:t_Option'0) (ret (field_0:t_Ordering'0))= any + [ good (field_0:t_Ordering'0)-> {C_Some'0 field_0 = input} (! ret {field_0}) + | bad -> {forall field_0 : t_Ordering'0 [C_Some'0 field_0 : t_Option'0] . C_Some'0 field_0 <> input} + (! {false} + any) ] + + + use prelude.prelude.Intrinsic + + function deep_model'0 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Self_'0) : t_DeepModelTy'0 = + [%#smodel6] deep_model'2 self + + function deep_model'1 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Rhs'0) : t_DeepModelTy'0 = + [%#smodel6] deep_model'3 self + + meta "compute_max_steps" 1000000 + + let rec extern_spec_std_cmp_PartialOrd_Rhs_lt_body'0 (self_:t_Self_'0) (other:t_Rhs'0) (return' (ret:bool))= {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_lt_body 'self_' type invariant] [%#scmp2] inv'0 self_} + {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_lt_body 'other' type invariant] [%#scmp3] inv'1 other} + (! bb0 + [ bb0 = s0 [ s0 = partial_cmp'0 {self_} {other} (fun (_ret':t_Option'0) -> [ &_4 <- _ret' ] s1) | s1 = bb1 ] + | bb1 = any [ br0 -> {_4 = C_None'0 } (! bb8) | br1 (x0:t_Ordering'0)-> {_4 = C_Some'0 x0} (! bb3) ] + | bb8 = bb2 + | bb3 = v_Some'0 {_4} + (fun (r0'0:t_Ordering'0) -> + any + [ br0 -> {r0'0 = C_Less'0 } (! bb4) + | br1 -> {r0'0 = C_Equal'0 } (! bb2) + | br2 -> {r0'0 = C_Greater'0 } (! bb2) ] + ) + | bb2 = s0 [ s0 = [ &_0 <- [%#scmp0] false ] s1 | s1 = bb6 ] + | bb4 = bb5 + | bb5 = s0 [ s0 = [ &_0 <- [%#scmp1] true ] s1 | s1 = bb6 ] + | bb6 = return' {_0} ] + ) + [ & _0 : bool = any_l () | & self_ : t_Self_'0 = self_ | & other : t_Rhs'0 = other | & _4 : t_Option'0 = any_l () ] + + [ return' (result:bool)-> {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_lt_body ensures] [%#scmp4] result + = lt_log'0 (deep_model'0 self_) (deep_model'1 other)} + (! return' {result}) ] + +end +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_PartialOrd_Rhs_le_body [#"../../../creusot-contracts/src/std/cmp.rs" 27 32 44 18] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 47 29 47 34 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 46 66 46 70 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 44 29 44 34 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 43 26 43 77 + let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 32 26 32 91 + let%span smodel6 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 + let%span sord7 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 + let%span sord8 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 + let%span sord9 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 + let%span sord10 = "../../../creusot-contracts/src/logic/ord.rs" 62 14 62 64 + let%span sord11 = "../../../creusot-contracts/src/logic/ord.rs" 67 14 67 45 + let%span sord12 = "../../../creusot-contracts/src/logic/ord.rs" 72 15 72 32 + let%span sord13 = "../../../creusot-contracts/src/logic/ord.rs" 73 15 73 32 + let%span sord14 = "../../../creusot-contracts/src/logic/ord.rs" 74 14 74 31 + let%span sord15 = "../../../creusot-contracts/src/logic/ord.rs" 81 15 81 45 + let%span sord16 = "../../../creusot-contracts/src/logic/ord.rs" 82 14 82 47 + let%span sord17 = "../../../creusot-contracts/src/logic/ord.rs" 89 15 89 48 + let%span sord18 = "../../../creusot-contracts/src/logic/ord.rs" 90 14 90 44 + let%span sord19 = "../../../creusot-contracts/src/logic/ord.rs" 95 14 95 59 + let%span sinvariant20 = "../../../creusot-contracts/src/invariant.rs" 24 8 24 18 + + use prelude.prelude.Borrow + + type t_Self_'0 + + predicate inv'2 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + predicate invariant'0 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Self_'0) = + [%#sinvariant20] inv'2 self + + predicate inv'0 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + axiom inv_axiom'0 [@rewrite] : forall x : t_Self_'0 [inv'0 x] . inv'0 x = invariant'0 x + + type t_Rhs'0 + + predicate inv'3 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Rhs'0) + + predicate invariant'1 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Rhs'0) = + [%#sinvariant20] inv'3 self + + predicate inv'1 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Rhs'0) + + axiom inv_axiom'1 [@rewrite] : forall x : t_Rhs'0 [inv'1 x] . inv'1 x = invariant'1 x + + type t_DeepModelTy'0 + + function deep_model'2 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Self_'0) : t_DeepModelTy'0 + + function deep_model'3 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Rhs'0) : t_DeepModelTy'0 + + type t_Ordering'0 = + | C_Less'0 + | C_Equal'0 + | C_Greater'0 + + function cmp_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 19 4 19 46] (self : t_DeepModelTy'0) (other : t_DeepModelTy'0) : t_Ordering'0 + + + function eq_cmp'0 [#"../../../creusot-contracts/src/logic/ord.rs" 96 4 96 32] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom eq_cmp'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord19] (x = y) + = (cmp_log'0 x y = C_Equal'0) + + function antisym2'0 [#"../../../creusot-contracts/src/logic/ord.rs" 91 4 91 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym2'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord17] cmp_log'0 x y = C_Greater'0) + -> ([%#sord18] cmp_log'0 y x = C_Less'0) + + function antisym1'0 [#"../../../creusot-contracts/src/logic/ord.rs" 83 4 83 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym1'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord15] cmp_log'0 x y = C_Less'0) + -> ([%#sord16] cmp_log'0 y x = C_Greater'0) + + function trans'0 [#"../../../creusot-contracts/src/logic/ord.rs" 75 4 75 53] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) (z : t_DeepModelTy'0) (o : t_Ordering'0) : () + + + axiom trans'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0, z : t_DeepModelTy'0, o : t_Ordering'0 . ([%#sord12] cmp_log'0 x y + = o) -> ([%#sord13] cmp_log'0 y z = o) -> ([%#sord14] cmp_log'0 x z = o) + + function refl'0 [#"../../../creusot-contracts/src/logic/ord.rs" 68 4 68 21] (x : t_DeepModelTy'0) : () + + axiom refl'0_spec : forall x : t_DeepModelTy'0 . [%#sord11] cmp_log'0 x x = C_Equal'0 + + function gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 57 4 57 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 63 4 63 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_gt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord10] gt_log'0 x y + = (cmp_log'0 x y = C_Greater'0) + + function ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 46 4 46 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 52 4 52 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_ge_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord9] ge_log'0 x y + = (cmp_log'0 x y <> C_Less'0) + + function lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 35 4 35 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 41 4 41 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_lt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord8] lt_log'0 x y + = (cmp_log'0 x y = C_Less'0) + + function le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 24 4 24 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 30 4 30 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_le_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord7] le_log'0 x y + = (cmp_log'0 x y <> C_Greater'0) + + type t_Option'0 = + | C_None'0 + | C_Some'0 (t_Ordering'0) + + let rec partial_cmp'0 (self:t_Self_'0) (other:t_Rhs'0) (return' (ret:t_Option'0))= {[@expl:partial_cmp 'self' type invariant] inv'0 self} + {[@expl:partial_cmp 'other' type invariant] inv'1 other} + any + [ return' (result:t_Option'0)-> {[%#scmp5] result = C_Some'0 (cmp_log'0 (deep_model'2 self) (deep_model'3 other))} + (! return' {result}) ] + + + let rec v_Some'0 (input:t_Option'0) (ret (field_0:t_Ordering'0))= any + [ good (field_0:t_Ordering'0)-> {C_Some'0 field_0 = input} (! ret {field_0}) + | bad -> {forall field_0 : t_Ordering'0 [C_Some'0 field_0 : t_Option'0] . C_Some'0 field_0 <> input} + (! {false} + any) ] + + + use prelude.prelude.Intrinsic + + function deep_model'0 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Self_'0) : t_DeepModelTy'0 = + [%#smodel6] deep_model'2 self + + function deep_model'1 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Rhs'0) : t_DeepModelTy'0 = + [%#smodel6] deep_model'3 self + + meta "compute_max_steps" 1000000 + + let rec extern_spec_std_cmp_PartialOrd_Rhs_le_body'0 (self_:t_Self_'0) (other:t_Rhs'0) (return' (ret:bool))= {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_le_body 'self_' type invariant] [%#scmp2] inv'0 self_} + {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_le_body 'other' type invariant] [%#scmp3] inv'1 other} + (! bb0 + [ bb0 = s0 [ s0 = partial_cmp'0 {self_} {other} (fun (_ret':t_Option'0) -> [ &_4 <- _ret' ] s1) | s1 = bb1 ] + | bb1 = any [ br0 -> {_4 = C_None'0 } (! bb8) | br1 (x0:t_Ordering'0)-> {_4 = C_Some'0 x0} (! bb3) ] + | bb8 = bb2 + | bb3 = v_Some'0 {_4} + (fun (r0'0:t_Ordering'0) -> + any + [ br0 -> {r0'0 = C_Less'0 } (! bb4) + | br1 -> {r0'0 = C_Equal'0 } (! bb4) + | br2 -> {r0'0 = C_Greater'0 } (! bb2) ] + ) + | bb2 = s0 [ s0 = [ &_0 <- [%#scmp0] false ] s1 | s1 = bb6 ] + | bb4 = bb5 + | bb5 = s0 [ s0 = [ &_0 <- [%#scmp1] true ] s1 | s1 = bb6 ] + | bb6 = return' {_0} ] + ) + [ & _0 : bool = any_l () | & self_ : t_Self_'0 = self_ | & other : t_Rhs'0 = other | & _4 : t_Option'0 = any_l () ] + + [ return' (result:bool)-> {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_le_body ensures] [%#scmp4] result + = le_log'0 (deep_model'0 self_) (deep_model'1 other)} + (! return' {result}) ] + +end +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_PartialOrd_Rhs_gt_body [#"../../../creusot-contracts/src/std/cmp.rs" 27 32 52 18] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 55 29 55 34 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 54 51 54 55 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 52 29 52 34 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 51 26 51 76 + let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 32 26 32 91 + let%span smodel6 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 + let%span sord7 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 + let%span sord8 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 + let%span sord9 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 + let%span sord10 = "../../../creusot-contracts/src/logic/ord.rs" 62 14 62 64 + let%span sord11 = "../../../creusot-contracts/src/logic/ord.rs" 67 14 67 45 + let%span sord12 = "../../../creusot-contracts/src/logic/ord.rs" 72 15 72 32 + let%span sord13 = "../../../creusot-contracts/src/logic/ord.rs" 73 15 73 32 + let%span sord14 = "../../../creusot-contracts/src/logic/ord.rs" 74 14 74 31 + let%span sord15 = "../../../creusot-contracts/src/logic/ord.rs" 81 15 81 45 + let%span sord16 = "../../../creusot-contracts/src/logic/ord.rs" 82 14 82 47 + let%span sord17 = "../../../creusot-contracts/src/logic/ord.rs" 89 15 89 48 + let%span sord18 = "../../../creusot-contracts/src/logic/ord.rs" 90 14 90 44 + let%span sord19 = "../../../creusot-contracts/src/logic/ord.rs" 95 14 95 59 + let%span sinvariant20 = "../../../creusot-contracts/src/invariant.rs" 24 8 24 18 + + use prelude.prelude.Borrow + + type t_Self_'0 + + predicate inv'2 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + predicate invariant'0 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Self_'0) = + [%#sinvariant20] inv'2 self + + predicate inv'0 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + axiom inv_axiom'0 [@rewrite] : forall x : t_Self_'0 [inv'0 x] . inv'0 x = invariant'0 x + + type t_Rhs'0 + + predicate inv'3 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Rhs'0) + + predicate invariant'1 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Rhs'0) = + [%#sinvariant20] inv'3 self + + predicate inv'1 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Rhs'0) + + axiom inv_axiom'1 [@rewrite] : forall x : t_Rhs'0 [inv'1 x] . inv'1 x = invariant'1 x + + type t_DeepModelTy'0 + + function deep_model'2 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Self_'0) : t_DeepModelTy'0 + + function deep_model'3 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Rhs'0) : t_DeepModelTy'0 + + type t_Ordering'0 = + | C_Less'0 + | C_Equal'0 + | C_Greater'0 + + function cmp_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 19 4 19 46] (self : t_DeepModelTy'0) (other : t_DeepModelTy'0) : t_Ordering'0 + + + function eq_cmp'0 [#"../../../creusot-contracts/src/logic/ord.rs" 96 4 96 32] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom eq_cmp'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord19] (x = y) + = (cmp_log'0 x y = C_Equal'0) + + function antisym2'0 [#"../../../creusot-contracts/src/logic/ord.rs" 91 4 91 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym2'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord17] cmp_log'0 x y = C_Greater'0) + -> ([%#sord18] cmp_log'0 y x = C_Less'0) + + function antisym1'0 [#"../../../creusot-contracts/src/logic/ord.rs" 83 4 83 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym1'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord15] cmp_log'0 x y = C_Less'0) + -> ([%#sord16] cmp_log'0 y x = C_Greater'0) + + function trans'0 [#"../../../creusot-contracts/src/logic/ord.rs" 75 4 75 53] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) (z : t_DeepModelTy'0) (o : t_Ordering'0) : () + + + axiom trans'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0, z : t_DeepModelTy'0, o : t_Ordering'0 . ([%#sord12] cmp_log'0 x y + = o) -> ([%#sord13] cmp_log'0 y z = o) -> ([%#sord14] cmp_log'0 x z = o) + + function refl'0 [#"../../../creusot-contracts/src/logic/ord.rs" 68 4 68 21] (x : t_DeepModelTy'0) : () + + axiom refl'0_spec : forall x : t_DeepModelTy'0 . [%#sord11] cmp_log'0 x x = C_Equal'0 + + function gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 57 4 57 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 63 4 63 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_gt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord10] gt_log'0 x y + = (cmp_log'0 x y = C_Greater'0) + + function ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 46 4 46 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 52 4 52 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_ge_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord9] ge_log'0 x y + = (cmp_log'0 x y <> C_Less'0) + + function lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 35 4 35 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 41 4 41 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_lt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord8] lt_log'0 x y + = (cmp_log'0 x y = C_Less'0) + + function le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 24 4 24 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 30 4 30 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_le_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord7] le_log'0 x y + = (cmp_log'0 x y <> C_Greater'0) + + type t_Option'0 = + | C_None'0 + | C_Some'0 (t_Ordering'0) + + let rec partial_cmp'0 (self:t_Self_'0) (other:t_Rhs'0) (return' (ret:t_Option'0))= {[@expl:partial_cmp 'self' type invariant] inv'0 self} + {[@expl:partial_cmp 'other' type invariant] inv'1 other} + any + [ return' (result:t_Option'0)-> {[%#scmp5] result = C_Some'0 (cmp_log'0 (deep_model'2 self) (deep_model'3 other))} + (! return' {result}) ] + + + let rec v_Some'0 (input:t_Option'0) (ret (field_0:t_Ordering'0))= any + [ good (field_0:t_Ordering'0)-> {C_Some'0 field_0 = input} (! ret {field_0}) + | bad -> {forall field_0 : t_Ordering'0 [C_Some'0 field_0 : t_Option'0] . C_Some'0 field_0 <> input} + (! {false} + any) ] + + + use prelude.prelude.Intrinsic + + function deep_model'0 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Self_'0) : t_DeepModelTy'0 = + [%#smodel6] deep_model'2 self + + function deep_model'1 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Rhs'0) : t_DeepModelTy'0 = + [%#smodel6] deep_model'3 self + + meta "compute_max_steps" 1000000 + + let rec extern_spec_std_cmp_PartialOrd_Rhs_gt_body'0 (self_:t_Self_'0) (other:t_Rhs'0) (return' (ret:bool))= {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_gt_body 'self_' type invariant] [%#scmp2] inv'0 self_} + {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_gt_body 'other' type invariant] [%#scmp3] inv'1 other} + (! bb0 + [ bb0 = s0 [ s0 = partial_cmp'0 {self_} {other} (fun (_ret':t_Option'0) -> [ &_4 <- _ret' ] s1) | s1 = bb1 ] + | bb1 = any [ br0 -> {_4 = C_None'0 } (! bb8) | br1 (x0:t_Ordering'0)-> {_4 = C_Some'0 x0} (! bb3) ] + | bb8 = bb2 + | bb3 = v_Some'0 {_4} + (fun (r0'0:t_Ordering'0) -> + any + [ br0 -> {r0'0 = C_Less'0 } (! bb2) + | br1 -> {r0'0 = C_Equal'0 } (! bb2) + | br2 -> {r0'0 = C_Greater'0 } (! bb4) ] + ) + | bb2 = s0 [ s0 = [ &_0 <- [%#scmp0] false ] s1 | s1 = bb6 ] + | bb4 = bb5 + | bb5 = s0 [ s0 = [ &_0 <- [%#scmp1] true ] s1 | s1 = bb6 ] + | bb6 = return' {_0} ] + ) + [ & _0 : bool = any_l () | & self_ : t_Self_'0 = self_ | & other : t_Rhs'0 = other | & _4 : t_Option'0 = any_l () ] + + [ return' (result:bool)-> {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_gt_body ensures] [%#scmp4] result + = gt_log'0 (deep_model'0 self_) (deep_model'1 other)} + (! return' {result}) ] + +end +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_PartialOrd_Rhs_ge_body [#"../../../creusot-contracts/src/std/cmp.rs" 27 32 60 18] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 63 29 63 34 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 62 69 62 73 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 60 29 60 34 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 59 26 59 77 + let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 32 26 32 91 + let%span smodel6 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 + let%span sord7 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 + let%span sord8 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 + let%span sord9 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 + let%span sord10 = "../../../creusot-contracts/src/logic/ord.rs" 62 14 62 64 + let%span sord11 = "../../../creusot-contracts/src/logic/ord.rs" 67 14 67 45 + let%span sord12 = "../../../creusot-contracts/src/logic/ord.rs" 72 15 72 32 + let%span sord13 = "../../../creusot-contracts/src/logic/ord.rs" 73 15 73 32 + let%span sord14 = "../../../creusot-contracts/src/logic/ord.rs" 74 14 74 31 + let%span sord15 = "../../../creusot-contracts/src/logic/ord.rs" 81 15 81 45 + let%span sord16 = "../../../creusot-contracts/src/logic/ord.rs" 82 14 82 47 + let%span sord17 = "../../../creusot-contracts/src/logic/ord.rs" 89 15 89 48 + let%span sord18 = "../../../creusot-contracts/src/logic/ord.rs" 90 14 90 44 + let%span sord19 = "../../../creusot-contracts/src/logic/ord.rs" 95 14 95 59 + let%span sinvariant20 = "../../../creusot-contracts/src/invariant.rs" 24 8 24 18 + + use prelude.prelude.Borrow + + type t_Self_'0 + + predicate inv'2 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + predicate invariant'0 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Self_'0) = + [%#sinvariant20] inv'2 self + + predicate inv'0 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + axiom inv_axiom'0 [@rewrite] : forall x : t_Self_'0 [inv'0 x] . inv'0 x = invariant'0 x + + type t_Rhs'0 + + predicate inv'3 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Rhs'0) + + predicate invariant'1 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Rhs'0) = + [%#sinvariant20] inv'3 self + + predicate inv'1 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Rhs'0) + + axiom inv_axiom'1 [@rewrite] : forall x : t_Rhs'0 [inv'1 x] . inv'1 x = invariant'1 x + + type t_DeepModelTy'0 + + function deep_model'2 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Self_'0) : t_DeepModelTy'0 + + function deep_model'3 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Rhs'0) : t_DeepModelTy'0 + + type t_Ordering'0 = + | C_Less'0 + | C_Equal'0 + | C_Greater'0 + + function cmp_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 19 4 19 46] (self : t_DeepModelTy'0) (other : t_DeepModelTy'0) : t_Ordering'0 + + + function eq_cmp'0 [#"../../../creusot-contracts/src/logic/ord.rs" 96 4 96 32] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom eq_cmp'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord19] (x = y) + = (cmp_log'0 x y = C_Equal'0) + + function antisym2'0 [#"../../../creusot-contracts/src/logic/ord.rs" 91 4 91 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym2'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord17] cmp_log'0 x y = C_Greater'0) + -> ([%#sord18] cmp_log'0 y x = C_Less'0) + + function antisym1'0 [#"../../../creusot-contracts/src/logic/ord.rs" 83 4 83 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym1'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord15] cmp_log'0 x y = C_Less'0) + -> ([%#sord16] cmp_log'0 y x = C_Greater'0) + + function trans'0 [#"../../../creusot-contracts/src/logic/ord.rs" 75 4 75 53] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) (z : t_DeepModelTy'0) (o : t_Ordering'0) : () + + + axiom trans'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0, z : t_DeepModelTy'0, o : t_Ordering'0 . ([%#sord12] cmp_log'0 x y + = o) -> ([%#sord13] cmp_log'0 y z = o) -> ([%#sord14] cmp_log'0 x z = o) + + function refl'0 [#"../../../creusot-contracts/src/logic/ord.rs" 68 4 68 21] (x : t_DeepModelTy'0) : () + + axiom refl'0_spec : forall x : t_DeepModelTy'0 . [%#sord11] cmp_log'0 x x = C_Equal'0 + + function gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 57 4 57 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 63 4 63 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_gt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord10] gt_log'0 x y + = (cmp_log'0 x y = C_Greater'0) + + function ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 46 4 46 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 52 4 52 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_ge_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord9] ge_log'0 x y + = (cmp_log'0 x y <> C_Less'0) + + function lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 35 4 35 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 41 4 41 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_lt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord8] lt_log'0 x y + = (cmp_log'0 x y = C_Less'0) + + function le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 24 4 24 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 30 4 30 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_le_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord7] le_log'0 x y + = (cmp_log'0 x y <> C_Greater'0) + + type t_Option'0 = + | C_None'0 + | C_Some'0 (t_Ordering'0) + + let rec partial_cmp'0 (self:t_Self_'0) (other:t_Rhs'0) (return' (ret:t_Option'0))= {[@expl:partial_cmp 'self' type invariant] inv'0 self} + {[@expl:partial_cmp 'other' type invariant] inv'1 other} + any + [ return' (result:t_Option'0)-> {[%#scmp5] result = C_Some'0 (cmp_log'0 (deep_model'2 self) (deep_model'3 other))} + (! return' {result}) ] + + + let rec v_Some'0 (input:t_Option'0) (ret (field_0:t_Ordering'0))= any + [ good (field_0:t_Ordering'0)-> {C_Some'0 field_0 = input} (! ret {field_0}) + | bad -> {forall field_0 : t_Ordering'0 [C_Some'0 field_0 : t_Option'0] . C_Some'0 field_0 <> input} + (! {false} + any) ] + + + use prelude.prelude.Intrinsic + + function deep_model'0 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Self_'0) : t_DeepModelTy'0 = + [%#smodel6] deep_model'2 self + + function deep_model'1 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Rhs'0) : t_DeepModelTy'0 = + [%#smodel6] deep_model'3 self + + meta "compute_max_steps" 1000000 + + let rec extern_spec_std_cmp_PartialOrd_Rhs_ge_body'0 (self_:t_Self_'0) (other:t_Rhs'0) (return' (ret:bool))= {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_ge_body 'self_' type invariant] [%#scmp2] inv'0 self_} + {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_ge_body 'other' type invariant] [%#scmp3] inv'1 other} + (! bb0 + [ bb0 = s0 [ s0 = partial_cmp'0 {self_} {other} (fun (_ret':t_Option'0) -> [ &_4 <- _ret' ] s1) | s1 = bb1 ] + | bb1 = any [ br0 -> {_4 = C_None'0 } (! bb8) | br1 (x0:t_Ordering'0)-> {_4 = C_Some'0 x0} (! bb3) ] + | bb8 = bb2 + | bb3 = v_Some'0 {_4} + (fun (r0'0:t_Ordering'0) -> + any + [ br0 -> {r0'0 = C_Less'0 } (! bb2) + | br1 -> {r0'0 = C_Equal'0 } (! bb4) + | br2 -> {r0'0 = C_Greater'0 } (! bb4) ] + ) + | bb2 = s0 [ s0 = [ &_0 <- [%#scmp0] false ] s1 | s1 = bb6 ] + | bb4 = bb5 + | bb5 = s0 [ s0 = [ &_0 <- [%#scmp1] true ] s1 | s1 = bb6 ] + | bb6 = return' {_0} ] + ) + [ & _0 : bool = any_l () | & self_ : t_Self_'0 = self_ | & other : t_Rhs'0 = other | & _4 : t_Option'0 = any_l () ] + + [ return' (result:bool)-> {[@expl:extern_spec_std_cmp_PartialOrd_Rhs_ge_body ensures] [%#scmp4] result + = ge_log'0 (deep_model'0 self_) (deep_model'1 other)} + (! return' {result}) ] + +end +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_Ord_max_body [#"../../../creusot-contracts/src/std/cmp.rs" 68 18 80 18] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 80 29 80 30 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 80 41 80 45 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 75 26 75 66 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 76 26 76 63 + let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 43 26 43 77 + let%span smodel6 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 + let%span sord7 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 + let%span sord8 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 + let%span sord9 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 + let%span sord10 = "../../../creusot-contracts/src/logic/ord.rs" 62 14 62 64 + let%span sord11 = "../../../creusot-contracts/src/logic/ord.rs" 67 14 67 45 + let%span sord12 = "../../../creusot-contracts/src/logic/ord.rs" 72 15 72 32 + let%span sord13 = "../../../creusot-contracts/src/logic/ord.rs" 73 15 73 32 + let%span sord14 = "../../../creusot-contracts/src/logic/ord.rs" 74 14 74 31 + let%span sord15 = "../../../creusot-contracts/src/logic/ord.rs" 81 15 81 45 + let%span sord16 = "../../../creusot-contracts/src/logic/ord.rs" 82 14 82 47 + let%span sord17 = "../../../creusot-contracts/src/logic/ord.rs" 89 15 89 48 + let%span sord18 = "../../../creusot-contracts/src/logic/ord.rs" 90 14 90 44 + let%span sord19 = "../../../creusot-contracts/src/logic/ord.rs" 95 14 95 59 + let%span sinvariant20 = "../../../creusot-contracts/src/invariant.rs" 24 8 24 18 + + use prelude.prelude.Borrow + + type t_Self_'0 + + predicate inv'0 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + predicate invariant'0 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Self_'0) = + [%#sinvariant20] inv'0 self + + predicate inv'1 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + axiom inv_axiom'0 [@rewrite] : forall x : t_Self_'0 [inv'1 x] . inv'1 x = invariant'0 x + + type t_DeepModelTy'0 + + function deep_model'0 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Self_'0) : t_DeepModelTy'0 + + function deep_model'1 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Self_'0) : t_DeepModelTy'0 = + [%#smodel6] deep_model'0 self + + type t_Ordering'0 = + | C_Less'0 + | C_Equal'0 + | C_Greater'0 + + function cmp_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 19 4 19 46] (self : t_DeepModelTy'0) (other : t_DeepModelTy'0) : t_Ordering'0 + + + function eq_cmp'0 [#"../../../creusot-contracts/src/logic/ord.rs" 96 4 96 32] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom eq_cmp'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord19] (x = y) + = (cmp_log'0 x y = C_Equal'0) + + function antisym2'0 [#"../../../creusot-contracts/src/logic/ord.rs" 91 4 91 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym2'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord17] cmp_log'0 x y = C_Greater'0) + -> ([%#sord18] cmp_log'0 y x = C_Less'0) + + function antisym1'0 [#"../../../creusot-contracts/src/logic/ord.rs" 83 4 83 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym1'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord15] cmp_log'0 x y = C_Less'0) + -> ([%#sord16] cmp_log'0 y x = C_Greater'0) + + function trans'0 [#"../../../creusot-contracts/src/logic/ord.rs" 75 4 75 53] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) (z : t_DeepModelTy'0) (o : t_Ordering'0) : () + + + axiom trans'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0, z : t_DeepModelTy'0, o : t_Ordering'0 . ([%#sord12] cmp_log'0 x y + = o) -> ([%#sord13] cmp_log'0 y z = o) -> ([%#sord14] cmp_log'0 x z = o) + + function refl'0 [#"../../../creusot-contracts/src/logic/ord.rs" 68 4 68 21] (x : t_DeepModelTy'0) : () + + axiom refl'0_spec : forall x : t_DeepModelTy'0 . [%#sord11] cmp_log'0 x x = C_Equal'0 + + function gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 57 4 57 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 63 4 63 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_gt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord10] gt_log'0 x y + = (cmp_log'0 x y = C_Greater'0) + + function ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 46 4 46 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 52 4 52 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_ge_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord9] ge_log'0 x y + = (cmp_log'0 x y <> C_Less'0) + + function lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 35 4 35 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 41 4 41 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_lt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord8] lt_log'0 x y + = (cmp_log'0 x y = C_Less'0) + + function le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 24 4 24 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 30 4 30 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_le_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord7] le_log'0 x y + = (cmp_log'0 x y <> C_Greater'0) + + let rec le'0 (self:t_Self_'0) (other:t_Self_'0) (return' (ret:bool))= {[@expl:le 'self' type invariant] inv'1 self} + {[@expl:le 'other' type invariant] inv'1 other} + any + [ return' (result:bool)-> {[%#scmp5] result = le_log'0 (deep_model'1 self) (deep_model'1 other)} + (! return' {result}) ] + + + predicate resolve'0 [#"../../../creusot-contracts/src/resolve.rs" 19 0 19 40] (_1 : t_Self_'0) + + use prelude.prelude.Intrinsic + + meta "compute_max_steps" 1000000 + + let rec extern_spec_std_cmp_Ord_max_body'0 (self_:t_Self_'0) (o:t_Self_'0) (return' (ret:t_Self_'0))= {[@expl:extern_spec_std_cmp_Ord_max_body 'self_' type invariant] [%#scmp0] inv'0 self_} + {[@expl:extern_spec_std_cmp_Ord_max_body 'o' type invariant] [%#scmp1] inv'0 o} + (! bb0 + [ bb0 = bb1 + | bb1 = bb2 + | bb2 = bb3 + | bb3 = bb4 + | bb4 = bb5 + | bb5 = s0 [ s0 = le'0 {self_} {o} (fun (_ret':bool) -> [ &_8 <- _ret' ] s1) | s1 = bb6 ] + | bb6 = any [ br0 -> {_8 = false} (! bb8) | br1 -> {_8} (! bb7) ] + | bb7 = s0 + [ s0 = {[@expl:type invariant] inv'0 self_} s1 | s1 = -{resolve'0 self_}- s2 | s2 = [ &_0 <- o ] s3 | s3 = bb9 ] + + | bb8 = s0 + [ s0 = {[@expl:type invariant] inv'0 o} s1 | s1 = -{resolve'0 o}- s2 | s2 = [ &_0 <- self_ ] s3 | s3 = bb9 ] + + | bb9 = bb10 + | bb10 = bb11 + | bb11 = return' {_0} ] + ) [ & _0 : t_Self_'0 = any_l () | & self_ : t_Self_'0 = self_ | & o : t_Self_'0 = o | & _8 : bool = any_l () ] + [ return' (result:t_Self_'0)-> {[@expl:extern_spec_std_cmp_Ord_max_body result type invariant] [%#scmp2] inv'0 result} + {[@expl:extern_spec_std_cmp_Ord_max_body ensures #0] [%#scmp3] ge_log'0 (deep_model'0 result) (deep_model'0 self_)} + {[@expl:extern_spec_std_cmp_Ord_max_body ensures #1] [%#scmp4] ge_log'0 (deep_model'0 result) (deep_model'0 o)} + {[@expl:extern_spec_std_cmp_Ord_max_body ensures #2] [%#scmp0] result = self_ \/ result = o} + {[@expl:extern_spec_std_cmp_Ord_max_body ensures #3] [%#scmp0] le_log'0 (deep_model'0 self_) (deep_model'0 o) + -> result = o} + {[@expl:extern_spec_std_cmp_Ord_max_body ensures #4] [%#scmp0] lt_log'0 (deep_model'0 o) (deep_model'0 self_) + -> result = self_} + (! return' {result}) ] + +end +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_Ord_min_body [#"../../../creusot-contracts/src/std/cmp.rs" 68 18 89 18] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 89 29 89 30 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 89 41 89 45 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 84 26 84 66 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 85 26 85 63 + let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 88 26 88 77 + let%span scmp6 = "../../../creusot-contracts/src/std/cmp.rs" 35 26 35 76 + let%span smodel7 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 + let%span sord8 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 + let%span sord9 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 + let%span sord10 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 + let%span sord11 = "../../../creusot-contracts/src/logic/ord.rs" 62 14 62 64 + let%span sord12 = "../../../creusot-contracts/src/logic/ord.rs" 67 14 67 45 + let%span sord13 = "../../../creusot-contracts/src/logic/ord.rs" 72 15 72 32 + let%span sord14 = "../../../creusot-contracts/src/logic/ord.rs" 73 15 73 32 + let%span sord15 = "../../../creusot-contracts/src/logic/ord.rs" 74 14 74 31 + let%span sord16 = "../../../creusot-contracts/src/logic/ord.rs" 81 15 81 45 + let%span sord17 = "../../../creusot-contracts/src/logic/ord.rs" 82 14 82 47 + let%span sord18 = "../../../creusot-contracts/src/logic/ord.rs" 89 15 89 48 + let%span sord19 = "../../../creusot-contracts/src/logic/ord.rs" 90 14 90 44 + let%span sord20 = "../../../creusot-contracts/src/logic/ord.rs" 95 14 95 59 + let%span sinvariant21 = "../../../creusot-contracts/src/invariant.rs" 24 8 24 18 + + use prelude.prelude.Borrow + + type t_Self_'0 + + predicate inv'0 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + predicate invariant'0 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Self_'0) = + [%#sinvariant21] inv'0 self + + predicate inv'1 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + axiom inv_axiom'0 [@rewrite] : forall x : t_Self_'0 [inv'1 x] . inv'1 x = invariant'0 x + + type t_DeepModelTy'0 + + function deep_model'0 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Self_'0) : t_DeepModelTy'0 + + function deep_model'1 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Self_'0) : t_DeepModelTy'0 = + [%#smodel7] deep_model'0 self + + type t_Ordering'0 = + | C_Less'0 + | C_Equal'0 + | C_Greater'0 + + function cmp_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 19 4 19 46] (self : t_DeepModelTy'0) (other : t_DeepModelTy'0) : t_Ordering'0 + + + function eq_cmp'0 [#"../../../creusot-contracts/src/logic/ord.rs" 96 4 96 32] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom eq_cmp'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord20] (x = y) + = (cmp_log'0 x y = C_Equal'0) + + function antisym2'0 [#"../../../creusot-contracts/src/logic/ord.rs" 91 4 91 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym2'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord18] cmp_log'0 x y = C_Greater'0) + -> ([%#sord19] cmp_log'0 y x = C_Less'0) + + function antisym1'0 [#"../../../creusot-contracts/src/logic/ord.rs" 83 4 83 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym1'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord16] cmp_log'0 x y = C_Less'0) + -> ([%#sord17] cmp_log'0 y x = C_Greater'0) + + function trans'0 [#"../../../creusot-contracts/src/logic/ord.rs" 75 4 75 53] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) (z : t_DeepModelTy'0) (o : t_Ordering'0) : () + + + axiom trans'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0, z : t_DeepModelTy'0, o : t_Ordering'0 . ([%#sord13] cmp_log'0 x y + = o) -> ([%#sord14] cmp_log'0 y z = o) -> ([%#sord15] cmp_log'0 x z = o) + + function refl'0 [#"../../../creusot-contracts/src/logic/ord.rs" 68 4 68 21] (x : t_DeepModelTy'0) : () + + axiom refl'0_spec : forall x : t_DeepModelTy'0 . [%#sord12] cmp_log'0 x x = C_Equal'0 + + function gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 57 4 57 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 63 4 63 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_gt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord11] gt_log'0 x y + = (cmp_log'0 x y = C_Greater'0) + + function ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 46 4 46 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 52 4 52 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_ge_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord10] ge_log'0 x y + = (cmp_log'0 x y <> C_Less'0) + + function lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 35 4 35 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 41 4 41 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_lt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord9] lt_log'0 x y + = (cmp_log'0 x y = C_Less'0) + + function le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 24 4 24 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 30 4 30 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_le_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord8] le_log'0 x y + = (cmp_log'0 x y <> C_Greater'0) + + let rec lt'0 (self:t_Self_'0) (other:t_Self_'0) (return' (ret:bool))= {[@expl:lt 'self' type invariant] inv'1 self} + {[@expl:lt 'other' type invariant] inv'1 other} + any + [ return' (result:bool)-> {[%#scmp6] result = lt_log'0 (deep_model'1 self) (deep_model'1 other)} + (! return' {result}) ] + + + predicate resolve'0 [#"../../../creusot-contracts/src/resolve.rs" 19 0 19 40] (_1 : t_Self_'0) + + use prelude.prelude.Intrinsic + + meta "compute_max_steps" 1000000 + + let rec extern_spec_std_cmp_Ord_min_body'0 (self_:t_Self_'0) (o:t_Self_'0) (return' (ret:t_Self_'0))= {[@expl:extern_spec_std_cmp_Ord_min_body 'self_' type invariant] [%#scmp0] inv'0 self_} + {[@expl:extern_spec_std_cmp_Ord_min_body 'o' type invariant] [%#scmp1] inv'0 o} + (! bb0 + [ bb0 = bb1 + | bb1 = bb2 + | bb2 = bb3 + | bb3 = bb4 + | bb4 = bb5 + | bb5 = s0 [ s0 = lt'0 {self_} {o} (fun (_ret':bool) -> [ &_8 <- _ret' ] s1) | s1 = bb6 ] + | bb6 = any [ br0 -> {_8 = false} (! bb8) | br1 -> {_8} (! bb7) ] + | bb7 = s0 + [ s0 = {[@expl:type invariant] inv'0 o} s1 | s1 = -{resolve'0 o}- s2 | s2 = [ &_0 <- self_ ] s3 | s3 = bb9 ] + + | bb8 = s0 + [ s0 = {[@expl:type invariant] inv'0 self_} s1 | s1 = -{resolve'0 self_}- s2 | s2 = [ &_0 <- o ] s3 | s3 = bb9 ] + + | bb9 = bb10 + | bb10 = bb11 + | bb11 = return' {_0} ] + ) [ & _0 : t_Self_'0 = any_l () | & self_ : t_Self_'0 = self_ | & o : t_Self_'0 = o | & _8 : bool = any_l () ] + [ return' (result:t_Self_'0)-> {[@expl:extern_spec_std_cmp_Ord_min_body result type invariant] [%#scmp2] inv'0 result} + {[@expl:extern_spec_std_cmp_Ord_min_body ensures #0] [%#scmp3] le_log'0 (deep_model'0 result) (deep_model'0 self_)} + {[@expl:extern_spec_std_cmp_Ord_min_body ensures #1] [%#scmp4] le_log'0 (deep_model'0 result) (deep_model'0 o)} + {[@expl:extern_spec_std_cmp_Ord_min_body ensures #2] [%#scmp0] result = self_ \/ result = o} + {[@expl:extern_spec_std_cmp_Ord_min_body ensures #3] [%#scmp0] lt_log'0 (deep_model'0 self_) (deep_model'0 o) + -> result = self_} + {[@expl:extern_spec_std_cmp_Ord_min_body ensures #4] [%#scmp5] le_log'0 (deep_model'0 o) (deep_model'0 self_) + -> result = o} + (! return' {result}) ] + +end +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_Ord_clamp_body [#"../../../creusot-contracts/src/std/cmp.rs" 68 18 102 18] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 102 31 102 34 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 102 42 102 45 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 93 27 93 63 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 102 56 102 60 + let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 94 26 94 65 + let%span scmp6 = "../../../creusot-contracts/src/std/cmp.rs" 95 26 95 65 + let%span scmp7 = "../../../creusot-contracts/src/std/cmp.rs" 97 16 101 43 + let%span scmp8 = "../../../creusot-contracts/src/std/cmp.rs" 51 26 51 76 + let%span scmp9 = "../../../creusot-contracts/src/std/cmp.rs" 35 26 35 76 + let%span smodel10 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 + let%span sord11 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 + let%span sord12 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 + let%span sord13 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 + let%span sord14 = "../../../creusot-contracts/src/logic/ord.rs" 62 14 62 64 + let%span sord15 = "../../../creusot-contracts/src/logic/ord.rs" 67 14 67 45 + let%span sord16 = "../../../creusot-contracts/src/logic/ord.rs" 72 15 72 32 + let%span sord17 = "../../../creusot-contracts/src/logic/ord.rs" 73 15 73 32 + let%span sord18 = "../../../creusot-contracts/src/logic/ord.rs" 74 14 74 31 + let%span sord19 = "../../../creusot-contracts/src/logic/ord.rs" 81 15 81 45 + let%span sord20 = "../../../creusot-contracts/src/logic/ord.rs" 82 14 82 47 + let%span sord21 = "../../../creusot-contracts/src/logic/ord.rs" 89 15 89 48 + let%span sord22 = "../../../creusot-contracts/src/logic/ord.rs" 90 14 90 44 + let%span sord23 = "../../../creusot-contracts/src/logic/ord.rs" 95 14 95 59 + let%span sinvariant24 = "../../../creusot-contracts/src/invariant.rs" 24 8 24 18 + + use prelude.prelude.Borrow + + type t_Self_'0 + + predicate inv'0 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + predicate invariant'0 [#"../../../creusot-contracts/src/invariant.rs" 23 4 23 30] (self : t_Self_'0) = + [%#sinvariant24] inv'0 self + + predicate inv'1 [#"../../../creusot-contracts/src/invariant.rs" 41 0 41 35] (_1 : t_Self_'0) + + axiom inv_axiom'0 [@rewrite] : forall x : t_Self_'0 [inv'1 x] . inv'1 x = invariant'0 x + + type t_DeepModelTy'0 + + function deep_model'0 [#"../../../creusot-contracts/src/model.rs" 29 4 29 45] (self : t_Self_'0) : t_DeepModelTy'0 + + function deep_model'1 [#"../../../creusot-contracts/src/model.rs" 82 4 82 44] (self : t_Self_'0) : t_DeepModelTy'0 = + [%#smodel10] deep_model'0 self + + type t_Ordering'0 = + | C_Less'0 + | C_Equal'0 + | C_Greater'0 + + function cmp_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 19 4 19 46] (self : t_DeepModelTy'0) (other : t_DeepModelTy'0) : t_Ordering'0 + + + function eq_cmp'0 [#"../../../creusot-contracts/src/logic/ord.rs" 96 4 96 32] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom eq_cmp'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord23] (x = y) + = (cmp_log'0 x y = C_Equal'0) + + function antisym2'0 [#"../../../creusot-contracts/src/logic/ord.rs" 91 4 91 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym2'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord21] cmp_log'0 x y = C_Greater'0) + -> ([%#sord22] cmp_log'0 y x = C_Less'0) + + function antisym1'0 [#"../../../creusot-contracts/src/logic/ord.rs" 83 4 83 34] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom antisym1'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . ([%#sord19] cmp_log'0 x y = C_Less'0) + -> ([%#sord20] cmp_log'0 y x = C_Greater'0) + + function trans'0 [#"../../../creusot-contracts/src/logic/ord.rs" 75 4 75 53] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) (z : t_DeepModelTy'0) (o : t_Ordering'0) : () + + + axiom trans'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0, z : t_DeepModelTy'0, o : t_Ordering'0 . ([%#sord16] cmp_log'0 x y + = o) -> ([%#sord17] cmp_log'0 y z = o) -> ([%#sord18] cmp_log'0 x z = o) + + function refl'0 [#"../../../creusot-contracts/src/logic/ord.rs" 68 4 68 21] (x : t_DeepModelTy'0) : () + + axiom refl'0_spec : forall x : t_DeepModelTy'0 . [%#sord15] cmp_log'0 x x = C_Equal'0 + + function gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 57 4 57 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_gt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 63 4 63 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_gt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord14] gt_log'0 x y + = (cmp_log'0 x y = C_Greater'0) + + function ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 46 4 46 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_ge_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 52 4 52 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_ge_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord13] ge_log'0 x y + = (cmp_log'0 x y <> C_Less'0) + + function lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 35 4 35 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_lt_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 41 4 41 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_lt_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord12] lt_log'0 x y + = (cmp_log'0 x y = C_Less'0) + + function le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 24 4 24 36] (self : t_DeepModelTy'0) (o : t_DeepModelTy'0) : bool + + + function cmp_le_log'0 [#"../../../creusot-contracts/src/logic/ord.rs" 30 4 30 36] (x : t_DeepModelTy'0) (y : t_DeepModelTy'0) : () + + + axiom cmp_le_log'0_spec : forall x : t_DeepModelTy'0, y : t_DeepModelTy'0 . [%#sord11] le_log'0 x y + = (cmp_log'0 x y <> C_Greater'0) + + let rec gt'0 (self:t_Self_'0) (other:t_Self_'0) (return' (ret:bool))= {[@expl:gt 'self' type invariant] inv'1 self} + {[@expl:gt 'other' type invariant] inv'1 other} + any + [ return' (result:bool)-> {[%#scmp8] result = gt_log'0 (deep_model'1 self) (deep_model'1 other)} + (! return' {result}) ] + + + predicate resolve'0 [#"../../../creusot-contracts/src/resolve.rs" 19 0 19 40] (_1 : t_Self_'0) + + let rec lt'0 (self:t_Self_'0) (other:t_Self_'0) (return' (ret:bool))= {[@expl:lt 'self' type invariant] inv'1 self} + {[@expl:lt 'other' type invariant] inv'1 other} + any + [ return' (result:bool)-> {[%#scmp9] result = lt_log'0 (deep_model'1 self) (deep_model'1 other)} + (! return' {result}) ] + + + use prelude.prelude.Intrinsic + + meta "compute_max_steps" 1000000 + + let rec extern_spec_std_cmp_Ord_clamp_body'0 (self_:t_Self_'0) (min:t_Self_'0) (max:t_Self_'0) (return' (ret:t_Self_'0))= {[@expl:extern_spec_std_cmp_Ord_clamp_body 'self_' type invariant] [%#scmp0] inv'0 self_} + {[@expl:extern_spec_std_cmp_Ord_clamp_body 'min' type invariant] [%#scmp1] inv'0 min} + {[@expl:extern_spec_std_cmp_Ord_clamp_body 'max' type invariant] [%#scmp2] inv'0 max} + {[@expl:extern_spec_std_cmp_Ord_clamp_body requires] [%#scmp3] le_log'0 (deep_model'0 min) (deep_model'0 max)} + (! bb0 + [ bb0 = bb1 + | bb1 = bb2 + | bb2 = bb3 + | bb3 = bb4 + | bb4 = bb5 + | bb5 = s0 [ s0 = gt'0 {self_} {max} (fun (_ret':bool) -> [ &_9 <- _ret' ] s1) | s1 = bb6 ] + | bb6 = any [ br0 -> {_9 = false} (! bb8) | br1 -> {_9} (! bb7) ] + | bb7 = s0 + [ s0 = {[@expl:type invariant] inv'0 min} s1 + | s1 = -{resolve'0 min}- s2 + | s2 = {[@expl:type invariant] inv'0 self_} s3 + | s3 = -{resolve'0 self_}- s4 + | s4 = [ &_0 <- max ] s5 + | s5 = bb13 ] + + | bb8 = s0 + [ s0 = {[@expl:type invariant] inv'0 max} s1 + | s1 = -{resolve'0 max}- s2 + | s2 = lt'0 {self_} {min} (fun (_ret':bool) -> [ &_12 <- _ret' ] s3) + | s3 = bb9 ] + + | bb9 = any [ br0 -> {_12 = false} (! bb11) | br1 -> {_12} (! bb10) ] + | bb10 = s0 + [ s0 = {[@expl:type invariant] inv'0 self_} s1 + | s1 = -{resolve'0 self_}- s2 + | s2 = [ &_0 <- min ] s3 + | s3 = bb12 ] + + | bb11 = s0 + [ s0 = {[@expl:type invariant] inv'0 min} s1 | s1 = -{resolve'0 min}- s2 | s2 = [ &_0 <- self_ ] s3 | s3 = bb12 ] + + | bb12 = bb13 + | bb13 = bb14 + | bb14 = bb15 + | bb15 = bb16 + | bb16 = return' {_0} ] + ) + [ & _0 : t_Self_'0 = any_l () + | & self_ : t_Self_'0 = self_ + | & min : t_Self_'0 = min + | & max : t_Self_'0 = max + | & _9 : bool = any_l () + | & _12 : bool = any_l () ] + + [ return' (result:t_Self_'0)-> {[@expl:extern_spec_std_cmp_Ord_clamp_body result type invariant] [%#scmp4] inv'0 result} + {[@expl:extern_spec_std_cmp_Ord_clamp_body ensures #0] [%#scmp5] ge_log'0 (deep_model'0 result) (deep_model'0 min)} + {[@expl:extern_spec_std_cmp_Ord_clamp_body ensures #1] [%#scmp6] le_log'0 (deep_model'0 result) (deep_model'0 max)} + {[@expl:extern_spec_std_cmp_Ord_clamp_body ensures #2] [%#scmp0] result = self_ \/ result = min \/ result = max} + {[@expl:extern_spec_std_cmp_Ord_clamp_body ensures #3] [%#scmp7] if gt_log'0 (deep_model'0 self_) (deep_model'0 max) then + result = max + else + if lt_log'0 (deep_model'0 self_) (deep_model'0 min) then result = min else result = self_ + } + (! return' {result}) ] + +end +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_max_body [#"../../../creusot-contracts/src/std/cmp.rs" 112 12 113 66] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 112 22 112 24 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 112 29 112 31 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 112 39 112 40 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 107 22 107 60 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 108 22 108 60 + let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 109 22 109 50 + let%span scmp6 = "../../../creusot-contracts/src/std/cmp.rs" 110 22 110 73 + let%span scmp7 = "../../../creusot-contracts/src/std/cmp.rs" 111 22 111 72 + let%span scmp8 = "../../../creusot-contracts/src/std/cmp.rs" 75 26 75 66 + let%span scmp9 = "../../../creusot-contracts/src/std/cmp.rs" 76 26 76 63 + let%span scmp10 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 let%span sord11 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord12 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord13 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -238,19 +1552,19 @@ module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_max_body [#"../. (! return' {result}) ] end -module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_min_body [#"../../../creusot-contracts/src/std/cmp.rs" 94 12 95 66] - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 94 22 94 24 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 94 29 94 31 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 94 39 94 40 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 89 22 89 60 - let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 90 22 90 60 - let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 91 22 91 50 - let%span scmp6 = "../../../creusot-contracts/src/std/cmp.rs" 92 22 92 72 - let%span scmp7 = "../../../creusot-contracts/src/std/cmp.rs" 93 22 93 73 - let%span scmp8 = "../../../creusot-contracts/src/std/cmp.rs" 60 26 60 66 - let%span scmp9 = "../../../creusot-contracts/src/std/cmp.rs" 61 26 61 63 - let%span scmp10 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 101 1 - let%span scmp11 = "../../../creusot-contracts/src/std/cmp.rs" 64 26 64 77 +module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_min_body [#"../../../creusot-contracts/src/std/cmp.rs" 123 12 124 66] + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 123 22 123 24 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 123 29 123 31 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 123 39 123 40 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 118 22 118 60 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 119 22 119 60 + let%span scmp5 = "../../../creusot-contracts/src/std/cmp.rs" 120 22 120 50 + let%span scmp6 = "../../../creusot-contracts/src/std/cmp.rs" 121 22 121 72 + let%span scmp7 = "../../../creusot-contracts/src/std/cmp.rs" 122 22 122 73 + let%span scmp8 = "../../../creusot-contracts/src/std/cmp.rs" 84 26 84 66 + let%span scmp9 = "../../../creusot-contracts/src/std/cmp.rs" 85 26 85 63 + let%span scmp10 = "../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 + let%span scmp11 = "../../../creusot-contracts/src/std/cmp.rs" 88 26 88 77 let%span sord12 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord13 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord14 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -385,11 +1699,11 @@ module M_creusot_contracts__stdqy35z1__cmp__extern_spec_std_cmp_min_body [#"../. (! return' {result}) ] end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log [#"../../../creusot-contracts/src/std/cmp.rs" 127 4 127 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 126 14 126 64 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 124 4 124 10 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log [#"../../../creusot-contracts/src/std/cmp.rs" 156 4 156 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 155 14 155 64 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 153 4 153 10 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 25 20 25 56 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -465,7 +1779,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log axiom cmp_le_log'1_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'1 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -483,16 +1797,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log constant y : t_Reverse'0 - function cmp_le_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 127 4 127 35] (x : t_Reverse'0) (y : t_Reverse'0) : () + function cmp_le_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 156 4 156 35] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_cmp_le_log'0 : [%#scmp0] le_log'0 x y = (cmp_log'0 x y <> C_Greater'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log [#"../../../creusot-contracts/src/std/cmp.rs" 132 4 132 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 131 14 131 61 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 129 4 129 10 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log [#"../../../creusot-contracts/src/std/cmp.rs" 161 4 161 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 160 14 160 61 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 158 4 158 10 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 36 20 36 53 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -568,7 +1882,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -586,16 +1900,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log constant y : t_Reverse'0 - function cmp_lt_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 132 4 132 35] (x : t_Reverse'0) (y : t_Reverse'0) : () + function cmp_lt_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 161 4 161 35] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_cmp_lt_log'0 : [%#scmp0] lt_log'0 x y = (cmp_log'0 x y = C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log [#"../../../creusot-contracts/src/std/cmp.rs" 137 4 137 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 136 14 136 61 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 134 4 134 10 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log [#"../../../creusot-contracts/src/std/cmp.rs" 166 4 166 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 165 14 165 61 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 163 4 163 10 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 47 20 47 53 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -671,7 +1985,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -689,16 +2003,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log constant y : t_Reverse'0 - function cmp_ge_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 137 4 137 35] (x : t_Reverse'0) (y : t_Reverse'0) : () + function cmp_ge_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 166 4 166 35] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_cmp_ge_log'0 : [%#scmp0] ge_log'0 x y = (cmp_log'0 x y <> C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log [#"../../../creusot-contracts/src/std/cmp.rs" 142 4 142 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 141 14 141 64 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 139 4 139 10 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log [#"../../../creusot-contracts/src/std/cmp.rs" 171 4 171 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 170 14 170 64 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 168 4 168 10 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 58 20 58 56 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -774,7 +2088,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -792,15 +2106,15 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log constant y : t_Reverse'0 - function cmp_gt_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 142 4 142 35] (x : t_Reverse'0) (y : t_Reverse'0) : () + function cmp_gt_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 171 4 171 35] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_cmp_gt_log'0 : [%#scmp0] gt_log'0 x y = (cmp_log'0 x y = C_Greater'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl [#"../../../creusot-contracts/src/std/cmp.rs" 147 4 147 20] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 146 14 146 45 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 144 4 144 10 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl [#"../../../creusot-contracts/src/std/cmp.rs" 176 4 176 20] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 175 14 175 45 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 173 4 173 10 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -876,7 +2190,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl [#"../ axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -887,16 +2201,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl [#"../ constant x : t_Reverse'0 - function refl'0 [#"../../../creusot-contracts/src/std/cmp.rs" 147 4 147 20] (x : t_Reverse'0) : () + function refl'0 [#"../../../creusot-contracts/src/std/cmp.rs" 176 4 176 20] (x : t_Reverse'0) : () goal vc_refl'0 : [%#scmp0] cmp_log'0 x x = C_Equal'0 end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans [#"../../../creusot-contracts/src/std/cmp.rs" 154 4 154 52] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 151 15 151 32 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 152 15 152 32 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 153 14 153 31 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 149 4 149 10 - let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans [#"../../../creusot-contracts/src/std/cmp.rs" 183 4 183 52] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 180 15 180 32 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 181 15 181 32 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 182 14 182 31 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 178 4 178 10 + let%span scmp4 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord7 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -972,7 +2286,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans [#".. axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord5] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp4] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -989,16 +2303,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans [#".. constant o : t_Ordering'0 - function trans'0 [#"../../../creusot-contracts/src/std/cmp.rs" 154 4 154 52] (x : t_Reverse'0) (y : t_Reverse'0) (z : t_Reverse'0) (o : t_Ordering'0) : () + function trans'0 [#"../../../creusot-contracts/src/std/cmp.rs" 183 4 183 52] (x : t_Reverse'0) (y : t_Reverse'0) (z : t_Reverse'0) (o : t_Ordering'0) : () goal vc_trans'0 : ([%#scmp1] cmp_log'0 y z = o) -> ([%#scmp0] cmp_log'0 x y = o) -> ([%#scmp2] cmp_log'0 x z = o) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1 [#"../../../creusot-contracts/src/std/cmp.rs" 160 4 160 33] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 158 15 158 45 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 159 14 159 47 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 156 4 156 10 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1 [#"../../../creusot-contracts/src/std/cmp.rs" 189 4 189 33] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 187 15 187 45 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 188 14 188 47 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 185 4 185 10 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -1074,7 +2388,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1 [# axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -1087,16 +2401,16 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1 [# constant y : t_Reverse'0 - function antisym1'0 [#"../../../creusot-contracts/src/std/cmp.rs" 160 4 160 33] (x : t_Reverse'0) (y : t_Reverse'0) : () + function antisym1'0 [#"../../../creusot-contracts/src/std/cmp.rs" 189 4 189 33] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_antisym1'0 : ([%#scmp0] cmp_log'0 x y = C_Less'0) -> ([%#scmp1] cmp_log'0 y x = C_Greater'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2 [#"../../../creusot-contracts/src/std/cmp.rs" 166 4 166 33] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 164 15 164 48 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 165 14 165 44 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 162 4 162 10 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2 [#"../../../creusot-contracts/src/std/cmp.rs" 195 4 195 33] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 193 15 193 48 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 194 14 194 44 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 191 4 191 10 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -1172,7 +2486,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2 [# axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord4] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp3] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -1185,15 +2499,15 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2 [# constant y : t_Reverse'0 - function antisym2'0 [#"../../../creusot-contracts/src/std/cmp.rs" 166 4 166 33] (x : t_Reverse'0) (y : t_Reverse'0) : () + function antisym2'0 [#"../../../creusot-contracts/src/std/cmp.rs" 195 4 195 33] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_antisym2'0 : ([%#scmp0] cmp_log'0 x y = C_Greater'0) -> ([%#scmp1] cmp_log'0 y x = C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp [#"../../../creusot-contracts/src/std/cmp.rs" 171 4 171 31] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 170 14 170 59 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 168 4 168 10 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp [#"../../../creusot-contracts/src/std/cmp.rs" 200 4 200 31] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 199 14 199 59 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 197 4 197 10 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -1269,7 +2583,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp [#". axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -1282,7 +2596,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp [#". constant y : t_Reverse'0 - function eq_cmp'0 [#"../../../creusot-contracts/src/std/cmp.rs" 171 4 171 31] (x : t_Reverse'0) (y : t_Reverse'0) : () + function eq_cmp'0 [#"../../../creusot-contracts/src/std/cmp.rs" 200 4 200 31] (x : t_Reverse'0) (y : t_Reverse'0) : () goal vc_eq_cmp'0 : [%#scmp0] (x = y) = (cmp_log'0 x y = C_Equal'0) end @@ -17985,10 +19299,10 @@ module M_creusot_contracts__stdqy35z1__vec__qyi12862303518309667396__produces_re goal refines : [%#svec0] forall self : t_IntoIter'0 . forall result : () . produces'0 self (Seq.empty : Seq.seq t_T'0) self -> produces'0 self (Seq.empty : Seq.seq t_T'0) self end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 132 4 132 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 132 4 132 35 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 161 4 161 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 161 4 161 35 let%span sord1 = "../../../creusot-contracts/src/logic/ord.rs" 36 20 36 53 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18064,7 +19378,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log_ axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18081,9 +19395,9 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_lt_log_ goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . forall result : () . lt_log'0 x y = (cmp_log'0 x y = C_Less'0) -> lt_log'0 x y = (cmp_log'0 x y = C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1__refines [#"../../../creusot-contracts/src/std/cmp.rs" 160 4 160 33] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 160 4 160 33 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1__refines [#"../../../creusot-contracts/src/std/cmp.rs" 189 4 189 33] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 189 4 189 33 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18159,7 +19473,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1__r axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord2] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp1] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18171,9 +19485,9 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym1__r goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . cmp_log'0 x y = C_Less'0 -> cmp_log'0 x y = C_Less'0 /\ (forall result : () . cmp_log'0 y x = C_Greater'0 -> cmp_log'0 y x = C_Greater'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp__refines [#"../../../creusot-contracts/src/std/cmp.rs" 171 4 171 31] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 171 4 171 31 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp__refines [#"../../../creusot-contracts/src/std/cmp.rs" 200 4 200 31] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 200 4 200 31 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18249,7 +19563,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp__ref axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord2] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp1] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18261,9 +19575,9 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__eq_cmp__ref goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . forall result : () . (x = y) = (cmp_log'0 x y = C_Equal'0) -> (x = y) = (cmp_log'0 x y = C_Equal'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl__refines [#"../../../creusot-contracts/src/std/cmp.rs" 147 4 147 20] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 147 4 147 20 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl__refines [#"../../../creusot-contracts/src/std/cmp.rs" 176 4 176 20] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 176 4 176 20 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18339,7 +19653,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl__refin axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord2] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp1] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18351,9 +19665,9 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__refl__refin goal refines : [%#scmp0] forall x : t_Reverse'0 . forall result : () . cmp_log'0 x x = C_Equal'0 -> cmp_log'0 x x = C_Equal'0 end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans__refines [#"../../../creusot-contracts/src/std/cmp.rs" 154 4 154 52] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 154 4 154 52 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans__refines [#"../../../creusot-contracts/src/std/cmp.rs" 183 4 183 52] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 183 4 183 52 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18429,7 +19743,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans__refi axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord2] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp1] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18443,9 +19757,9 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__trans__refi /\ cmp_log'0 x y = o -> cmp_log'0 y z = o /\ cmp_log'0 x y = o /\ (forall result : () . cmp_log'0 x z = o -> cmp_log'0 x z = o) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2__refines [#"../../../creusot-contracts/src/std/cmp.rs" 166 4 166 33] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 166 4 166 33 - let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2__refines [#"../../../creusot-contracts/src/std/cmp.rs" 195 4 195 33] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 195 4 195 33 + let%span scmp1 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord2 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18521,7 +19835,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2__r axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord2] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp1] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18533,10 +19847,10 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__antisym2__r goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . cmp_log'0 x y = C_Greater'0 -> cmp_log'0 x y = C_Greater'0 /\ (forall result : () . cmp_log'0 y x = C_Less'0 -> cmp_log'0 y x = C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 127 4 127 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 127 4 127 35 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 156 4 156 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 156 4 156 35 let%span sord1 = "../../../creusot-contracts/src/logic/ord.rs" 25 20 25 56 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18612,7 +19926,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log_ axiom cmp_le_log'1_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'1 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18629,10 +19943,10 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_le_log_ goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . forall result : () . le_log'0 x y = (cmp_log'0 x y <> C_Greater'0) -> le_log'0 x y = (cmp_log'0 x y <> C_Greater'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 137 4 137 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 137 4 137 35 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 166 4 166 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 166 4 166 35 let%span sord1 = "../../../creusot-contracts/src/logic/ord.rs" 47 20 47 53 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18708,7 +20022,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log_ axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with @@ -18725,10 +20039,10 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_ge_log_ goal refines : [%#scmp0] forall x : t_Reverse'0 . forall y : t_Reverse'0 . forall result : () . ge_log'0 x y = (cmp_log'0 x y <> C_Less'0) -> ge_log'0 x y = (cmp_log'0 x y <> C_Less'0) end -module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 142 4 142 35] (* as logic::ord::OrdLogic> *) - let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 142 4 142 35 +module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log__refines [#"../../../creusot-contracts/src/std/cmp.rs" 171 4 171 35] (* as logic::ord::OrdLogic> *) + let%span scmp0 = "../../../creusot-contracts/src/std/cmp.rs" 171 4 171 35 let%span sord1 = "../../../creusot-contracts/src/logic/ord.rs" 58 20 58 56 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 117 8 121 9 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 146 8 150 9 let%span sord3 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 51 14 51 61 @@ -18804,7 +20118,7 @@ module M_creusot_contracts__stdqy35z1__cmp__qyi16241606109483467814__cmp_gt_log_ axiom cmp_le_log'0_spec : forall x : t_T'0, y : t_T'0 . [%#sord3] le_log'0 x y = (cmp_log'1 x y <> C_Greater'0) - function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 116 4 116 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 + function cmp_log'0 [#"../../../creusot-contracts/src/std/cmp.rs" 145 4 145 41] (self : t_Reverse'0) (o : t_Reverse'0) : t_Ordering'0 = [%#scmp2] match cmp_log'1 self.t_Reverse__0'0 o.t_Reverse__0'0 with diff --git a/creusot/tests/creusot-contracts/creusot-contracts/why3session.xml b/creusot/tests/creusot-contracts/creusot-contracts/why3session.xml index 35b07896d..fe7b06734 100644 --- a/creusot/tests/creusot-contracts/creusot-contracts/why3session.xml +++ b/creusot/tests/creusot-contracts/creusot-contracts/why3session.xml @@ -36,6 +36,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1666,6 +1706,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2029,46 +2109,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/creusot/tests/creusot-contracts/creusot-contracts/why3shapes.gz b/creusot/tests/creusot-contracts/creusot-contracts/why3shapes.gz index 9e703dcdbd4cf56b458da4060f14fa069a932931..8d3a27c7647601061c852334b2cba290e5c5b136 100644 GIT binary patch literal 24628 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 delta 23783 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 diff --git a/creusot/tests/should_succeed/bdd.coma b/creusot/tests/should_succeed/bdd.coma index 8850901ad..0f569f14b 100644 --- a/creusot/tests/should_succeed/bdd.coma +++ b/creusot/tests/should_succeed/bdd.coma @@ -3748,7 +3748,7 @@ module M_bdd__qyi11078426090797403070__and [#"bdd.rs" 533 4 533 72] (* Context<' let%span sbdd9 = "bdd.rs" 66 37 66 40 let%span sbdd10 = "bdd.rs" 66 52 66 65 let%span sbdd11 = "bdd.rs" 61 18 64 9 - let%span scmp12 = "../../../creusot-contracts/src/std/cmp.rs" 50 26 50 85 + let%span scmp12 = "../../../creusot-contracts/src/std/cmp.rs" 72 26 72 85 let%span sbdd13 = "bdd.rs" 471 17 471 21 let%span sbdd14 = "bdd.rs" 464 15 464 40 let%span sbdd15 = "bdd.rs" 465 15 465 40 diff --git a/creusot/tests/should_succeed/bug/387.coma b/creusot/tests/should_succeed/bug/387.coma index 51fc27f39..0042f85e5 100644 --- a/creusot/tests/should_succeed/bug/387.coma +++ b/creusot/tests/should_succeed/bug/387.coma @@ -22,9 +22,9 @@ end module M_387__qyi16446429885017832241__height [#"387.rs" 18 4 18 31] (* Tree *) let%span s3870 = "387.rs" 21 69 21 70 let%span s3871 = "387.rs" 20 26 20 27 - let%span scmp2 = "../../../../creusot-contracts/src/std/cmp.rs" 53 26 53 66 - let%span scmp3 = "../../../../creusot-contracts/src/std/cmp.rs" 54 26 54 63 - let%span scmp4 = "../../../../creusot-contracts/src/std/cmp.rs" 7 0 101 1 + let%span scmp2 = "../../../../creusot-contracts/src/std/cmp.rs" 75 26 75 66 + let%span scmp3 = "../../../../creusot-contracts/src/std/cmp.rs" 76 26 76 63 + let%span scmp4 = "../../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 let%span snum5 = "../../../../creusot-contracts/src/std/num.rs" 21 28 21 33 use prelude.prelude.UInt32 diff --git a/creusot/tests/should_succeed/heapsort_generic.coma b/creusot/tests/should_succeed/heapsort_generic.coma index 82e61416d..224550a74 100644 --- a/creusot/tests/should_succeed/heapsort_generic.coma +++ b/creusot/tests/should_succeed/heapsort_generic.coma @@ -141,8 +141,8 @@ module M_heapsort_generic__sift_down [#"heapsort_generic.rs" 41 0 43 29] let%span sseq28 = "../../../creusot-contracts/src/logic/seq.rs" 316 8 316 41 let%span svec29 = "../../../creusot-contracts/src/std/vec.rs" 162 27 162 46 let%span svec30 = "../../../creusot-contracts/src/std/vec.rs" 163 26 163 54 - let%span scmp31 = "../../../creusot-contracts/src/std/cmp.rs" 33 26 33 76 - let%span scmp32 = "../../../creusot-contracts/src/std/cmp.rs" 36 26 36 77 + let%span scmp31 = "../../../creusot-contracts/src/std/cmp.rs" 35 26 35 76 + let%span scmp32 = "../../../creusot-contracts/src/std/cmp.rs" 43 26 43 77 let%span svec33 = "../../../creusot-contracts/src/std/vec.rs" 175 26 175 42 let%span svec34 = "../../../creusot-contracts/src/std/vec.rs" 176 26 176 48 let%span sslice35 = "../../../creusot-contracts/src/std/slice.rs" 257 19 257 35 diff --git a/creusot/tests/should_succeed/instant.coma b/creusot/tests/should_succeed/instant.coma index 450293ef2..8bf92b98e 100644 --- a/creusot/tests/should_succeed/instant.coma +++ b/creusot/tests/should_succeed/instant.coma @@ -22,7 +22,7 @@ module M_instant__test_instant [#"instant.rs" 7 0 7 21] let%span stime20 = "../../../creusot-contracts/src/std/time.rs" 156 26 156 38 let%span stime21 = "../../../creusot-contracts/src/std/time.rs" 82 26 82 57 let%span stime22 = "../../../creusot-contracts/src/std/time.rs" 159 26 159 38 - let%span scmp23 = "../../../creusot-contracts/src/std/cmp.rs" 42 26 42 77 + let%span scmp23 = "../../../creusot-contracts/src/std/cmp.rs" 59 26 59 77 let%span stime24 = "../../../creusot-contracts/src/std/time.rs" 178 26 178 79 let%span stime25 = "../../../creusot-contracts/src/std/time.rs" 179 26 179 95 let%span soption26 = "../../../creusot-contracts/src/std/option.rs" 31 0 423 1 @@ -35,7 +35,7 @@ module M_instant__test_instant [#"instant.rs" 7 0 7 21] let%span stime33 = "../../../creusot-contracts/src/std/time.rs" 215 18 215 48 let%span stime34 = "../../../creusot-contracts/src/std/time.rs" 216 18 216 46 let%span stime35 = "../../../creusot-contracts/src/std/time.rs" 191 0 226 1 - let%span scmp36 = "../../../creusot-contracts/src/std/cmp.rs" 39 26 39 76 + let%span scmp36 = "../../../creusot-contracts/src/std/cmp.rs" 51 26 51 76 let%span stime37 = "../../../creusot-contracts/src/std/time.rs" 72 0 189 1 let%span soption38 = "../../../creusot-contracts/src/std/option.rs" 36 26 36 51 let%span soption39 = "../../../creusot-contracts/src/std/option.rs" 51 26 51 51 diff --git a/creusot/tests/should_succeed/ord_trait.coma b/creusot/tests/should_succeed/ord_trait.coma index 5b4291dba..305b2a651 100644 --- a/creusot/tests/should_succeed/ord_trait.coma +++ b/creusot/tests/should_succeed/ord_trait.coma @@ -1,7 +1,7 @@ module M_ord_trait__x [#"ord_trait.rs" 5 0 7 29] let%span sord_trait0 = "ord_trait.rs" 5 29 5 30 let%span sord_trait1 = "ord_trait.rs" 4 10 4 24 - let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 36 26 36 77 + let%span scmp2 = "../../../creusot-contracts/src/std/cmp.rs" 43 26 43 77 let%span smodel3 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 let%span sord4 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 @@ -129,7 +129,7 @@ module M_ord_trait__gt_or_le [#"ord_trait.rs" 13 0 15 29] let%span sord_trait0 = "ord_trait.rs" 13 36 13 37 let%span sord_trait1 = "ord_trait.rs" 13 43 13 44 let%span sord_trait2 = "ord_trait.rs" 12 10 12 60 - let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 42 26 42 77 + let%span scmp3 = "../../../creusot-contracts/src/std/cmp.rs" 59 26 59 77 let%span smodel4 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 let%span sord5 = "../../../creusot-contracts/src/logic/ord.rs" 29 14 29 64 let%span sord6 = "../../../creusot-contracts/src/logic/ord.rs" 40 14 40 61 diff --git a/creusot/tests/should_succeed/red_black_tree.coma b/creusot/tests/should_succeed/red_black_tree.coma index 1059f4a6b..4bfe8de61 100644 --- a/creusot/tests/should_succeed/red_black_tree.coma +++ b/creusot/tests/should_succeed/red_black_tree.coma @@ -4410,7 +4410,7 @@ module M_red_black_tree__qyi2476155906044564626__insert_rec [#"red_black_tree.rs let%span sred_black_tree7 = "red_black_tree.rs" 614 14 615 39 let%span sred_black_tree8 = "red_black_tree.rs" 616 14 616 56 let%span sred_black_tree9 = "red_black_tree.rs" 617 14 617 125 - let%span scmp10 = "../../../creusot-contracts/src/std/cmp.rs" 50 26 50 85 + let%span scmp10 = "../../../creusot-contracts/src/std/cmp.rs" 72 26 72 85 let%span sred_black_tree11 = "red_black_tree.rs" 534 20 534 24 let%span sred_black_tree12 = "red_black_tree.rs" 515 15 515 43 let%span sred_black_tree13 = "red_black_tree.rs" 516 15 517 45 @@ -6589,7 +6589,7 @@ module M_red_black_tree__qyi2476155906044564626__delete_rec [#"red_black_tree.rs let%span soption14 = "../../../creusot-contracts/src/std/option.rs" 31 0 423 1 let%span sboxed15 = "../../../creusot-contracts/src/std/boxed.rs" 43 26 43 43 let%span sboxed16 = "../../../creusot-contracts/src/std/boxed.rs" 44 26 44 43 - let%span scmp17 = "../../../creusot-contracts/src/std/cmp.rs" 50 26 50 85 + let%span scmp17 = "../../../creusot-contracts/src/std/cmp.rs" 72 26 72 85 let%span sred_black_tree18 = "red_black_tree.rs" 412 15 412 19 let%span sred_black_tree19 = "red_black_tree.rs" 411 14 411 45 let%span sred_black_tree20 = "red_black_tree.rs" 436 25 436 29 @@ -10638,7 +10638,7 @@ module M_red_black_tree__qyi1501420612169366910__get [#"red_black_tree.rs" 889 4 let%span smodel11 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 let%span sred_black_tree12 = "red_black_tree.rs" 37 12 41 13 let%span sred_black_tree13 = "red_black_tree.rs" 235 12 241 13 - let%span scmp14 = "../../../creusot-contracts/src/std/cmp.rs" 50 26 50 85 + let%span scmp14 = "../../../creusot-contracts/src/std/cmp.rs" 72 26 72 85 let%span smodel15 = "../../../creusot-contracts/src/model.rs" 92 8 92 22 let%span sred_black_tree16 = "red_black_tree.rs" 170 20 170 54 let%span sred_black_tree17 = "red_black_tree.rs" 67 14 68 91 @@ -11081,7 +11081,7 @@ module M_red_black_tree__qyi1501420612169366910__get_mut [#"red_black_tree.rs" 9 let%span smodel25 = "../../../creusot-contracts/src/model.rs" 83 8 83 28 let%span sred_black_tree26 = "red_black_tree.rs" 235 12 241 13 let%span sred_black_tree27 = "red_black_tree.rs" 297 12 303 13 - let%span scmp28 = "../../../creusot-contracts/src/std/cmp.rs" 50 26 50 85 + let%span scmp28 = "../../../creusot-contracts/src/std/cmp.rs" 72 26 72 85 let%span smodel29 = "../../../creusot-contracts/src/model.rs" 110 8 110 22 let%span sred_black_tree30 = "red_black_tree.rs" 761 20 761 27 let%span sred_black_tree31 = "red_black_tree.rs" 170 20 170 54 diff --git a/creusot/tests/should_succeed/selection_sort_generic.coma b/creusot/tests/should_succeed/selection_sort_generic.coma index c56319652..4efd70dba 100644 --- a/creusot/tests/should_succeed/selection_sort_generic.coma +++ b/creusot/tests/should_succeed/selection_sort_generic.coma @@ -31,7 +31,7 @@ module M_selection_sort_generic__selection_sort [#"selection_sort_generic.rs" 30 let%span siter29 = "../../../creusot-contracts/src/std/iter.rs" 103 26 106 17 let%span svec30 = "../../../creusot-contracts/src/std/vec.rs" 162 27 162 46 let%span svec31 = "../../../creusot-contracts/src/std/vec.rs" 163 26 163 54 - let%span scmp32 = "../../../creusot-contracts/src/std/cmp.rs" 33 26 33 76 + let%span scmp32 = "../../../creusot-contracts/src/std/cmp.rs" 35 26 35 76 let%span svec33 = "../../../creusot-contracts/src/std/vec.rs" 175 26 175 42 let%span svec34 = "../../../creusot-contracts/src/std/vec.rs" 176 26 176 48 let%span sslice35 = "../../../creusot-contracts/src/std/slice.rs" 257 19 257 35 diff --git a/creusot/tests/should_succeed/syntax/10_mutual_rec_types.coma b/creusot/tests/should_succeed/syntax/10_mutual_rec_types.coma index e52e5a361..8056679c6 100644 --- a/creusot/tests/should_succeed/syntax/10_mutual_rec_types.coma +++ b/creusot/tests/should_succeed/syntax/10_mutual_rec_types.coma @@ -22,9 +22,9 @@ end module M_10_mutual_rec_types__qyi18211245992252154719__height [#"10_mutual_rec_types.rs" 18 4 18 31] (* Tree *) let%span s10_mutual_rec_types0 = "10_mutual_rec_types.rs" 21 69 21 70 let%span s10_mutual_rec_types1 = "10_mutual_rec_types.rs" 20 26 20 27 - let%span scmp2 = "../../../../creusot-contracts/src/std/cmp.rs" 53 26 53 66 - let%span scmp3 = "../../../../creusot-contracts/src/std/cmp.rs" 54 26 54 63 - let%span scmp4 = "../../../../creusot-contracts/src/std/cmp.rs" 7 0 101 1 + let%span scmp2 = "../../../../creusot-contracts/src/std/cmp.rs" 75 26 75 66 + let%span scmp3 = "../../../../creusot-contracts/src/std/cmp.rs" 76 26 76 63 + let%span scmp4 = "../../../../creusot-contracts/src/std/cmp.rs" 7 0 130 1 let%span snum5 = "../../../../creusot-contracts/src/std/num.rs" 21 28 21 33 use prelude.prelude.UInt32 diff --git a/creusot/tests/should_succeed/vector/02_gnome.coma b/creusot/tests/should_succeed/vector/02_gnome.coma index d40bb2e87..abef160bf 100644 --- a/creusot/tests/should_succeed/vector/02_gnome.coma +++ b/creusot/tests/should_succeed/vector/02_gnome.coma @@ -19,7 +19,7 @@ module M_02_gnome__gnome_sort [#"02_gnome.rs" 22 0 24 29] let%span svec17 = "../../../../creusot-contracts/src/std/vec.rs" 83 26 83 48 let%span svec18 = "../../../../creusot-contracts/src/std/vec.rs" 162 27 162 46 let%span svec19 = "../../../../creusot-contracts/src/std/vec.rs" 163 26 163 54 - let%span scmp20 = "../../../../creusot-contracts/src/std/cmp.rs" 36 26 36 77 + let%span scmp20 = "../../../../creusot-contracts/src/std/cmp.rs" 43 26 43 77 let%span svec21 = "../../../../creusot-contracts/src/std/vec.rs" 175 26 175 42 let%span svec22 = "../../../../creusot-contracts/src/std/vec.rs" 176 26 176 48 let%span sslice23 = "../../../../creusot-contracts/src/std/slice.rs" 257 19 257 35 diff --git a/creusot/tests/should_succeed/vector/05_binary_search_generic.coma b/creusot/tests/should_succeed/vector/05_binary_search_generic.coma index ba29fab68..b91900894 100644 --- a/creusot/tests/should_succeed/vector/05_binary_search_generic.coma +++ b/creusot/tests/should_succeed/vector/05_binary_search_generic.coma @@ -21,8 +21,8 @@ module M_05_binary_search_generic__binary_search [#"05_binary_search_generic.rs" let%span smodel19 = "../../../../creusot-contracts/src/model.rs" 83 8 83 28 let%span svec20 = "../../../../creusot-contracts/src/std/vec.rs" 162 27 162 46 let%span svec21 = "../../../../creusot-contracts/src/std/vec.rs" 163 26 163 54 - let%span scmp22 = "../../../../creusot-contracts/src/std/cmp.rs" 39 26 39 76 - let%span scmp23 = "../../../../creusot-contracts/src/std/cmp.rs" 50 26 50 85 + let%span scmp22 = "../../../../creusot-contracts/src/std/cmp.rs" 51 26 51 76 + let%span scmp23 = "../../../../creusot-contracts/src/std/cmp.rs" 72 26 72 85 let%span s05_binary_search_generic24 = "05_binary_search_generic.rs" 17 4 17 31 let%span svec25 = "../../../../creusot-contracts/src/std/vec.rs" 18 14 18 41 let%span svec26 = "../../../../creusot-contracts/src/std/vec.rs" 29 14 29 47